Protocol Layer Design Pattern

Intent

Provide a common framework for implementing different layers of a protocol stack.

Also Known As

Motivation

A typical protocol layer interfaces with an upper layer and a lower layer of the protocol. In most designs there is a lot of dependency between different layers of the protocol. This makes the protocol stack implementation rigid and inflexible. Changes in one layer often percolate to other layers. The Protocol Layer Design Pattern addresses these limitations by decoupling the individual protocol layers.

Applicability

Structure

Interface between protocol layers

Different layers of the protocol are structured as shown in the figure on the left hand side. Communication between layers takes place using standard interfaces defined by the Protocol Layer base class. All implementations of the protocol layer inherit from this class. The inheriting layer classes should implement the standard interfaces. The standard interfaces are:

The example on the left hand side shows the structure of a three layer protocol stack. The sequence of actions in the Transmit direction are:

  1. The application invokes the Network layer's Transmit method.
  2. The Network layer performs its actions and invokes the Transmit method for the lower layer.
  3. This invokes the Datalink layers transmit method. The Datalink layer performs the layer specific actions and invokes the lower layer's Transmit method.
  4. The Physical layer's Transmit method is invoked. This layer programs the appropriate hardware device and transmits the message.

The receive processing is similar to the transmit processing described above. Here the Handle Receive method is used to transfer the packet between layers.

Participants

The key actors of this design pattern:

Collaboration

The following diagram shows the relationship and collaboration between various classes needed for the Datalink layer example. 

Protocol Layer

Consequences

Protocol Layer class serves as the foundation for the Protocol Layer design pattern. This class defines the common interface for interactions between different layers of a protocol. This has several advantages:

Implementation

The following scenarios are supported by the Datalink Layer example of the Protocol Layer design pattern:

A packet is received from the upper layer

  1. The upper layer uses its "Lower Layer" pointer to invoke the Transmit method for the lower layer. The "Protocol Packet" to be transmitted is passed to the Transmit method.
  2. This invokes the Datalink Layer's Transmit method.
  3. The Datalink Layer passes the "Protocol Packet" to the "Transmit Protocol Handler" object.
  4. The "Transmit Protocol Handler" processes the "Protocol Packet" and adds the datalink layer header to the packet.
  5. The "Transmit Protocol Handler" uses its parent layer to obtain a pointer to the lower layer.
  6. The "Protocol Packet" is passed to the lower layer by invoking the Transmit method.

A packet is received from the lower layer

  1. The lower layer uses its "Upper Layer" pointer to invoke the "Handle Receive" method for the upper layer. The received "Protocol Packet" is passed to the "Handle Receive" method.
  2. This invokes the Datalink Layer's "Handle Receive" method.
  3. The Datalink Layer passes the "Protocol Packet" to the "Receive Protocol Handler" object.
  4. The "Receive Protocol Handler" object uses the parent layer to obtain a pointer to the upper layer.
  5. The "Protocol Packet" is passed to the higher layer by invoking the "Handle Receive" method.

Sample Code and Usage

The code for the Protocol Layer class and the Datalink Layer example is presented below:

Protocol Layer

Datalink Layer Header File

Datalink Layer Source File

Known Uses

Related Patterns/Principles