#include <communication_layer.hpp>
Inheritance diagram for CommunicationLayer:

Public Types | |
|
typedef boost::shared_ptr< CommunicationLayer > | CommunicationLayerPtr |
| Smart pointer that clients should use. | |
|
typedef boost::shared_ptr< SimulationEndListener > | SimulationEndListenerPtr |
| Smart pointer that clients should use. | |
| Directions_Lower | |
| enum value Directions_Lower. | |
| Directions_Upper | |
| enum value Direction_Upper. | |
| Types_Physical | |
| enum value Types_Physical. | |
| Types_Link | |
| enum value Types_Link. | |
| Types_Network | |
| enum value Types_Network. | |
| Types_Transport | |
| enum value Types_Transport. | |
| Types_Application | |
| enum value Types_Application. | |
| enum | Directions { Directions_Lower, Directions_Upper } |
| Directions enum. More... | |
| enum | Types { Types_Physical, Types_Link, Types_Network, Types_Transport, Types_Application } |
| Types enum. More... | |
Public Member Functions | |
| virtual | ~CommunicationLayer () |
| A destructor. | |
| virtual SimulationEndListenerPtr | thisSimulationEndListener ()=0 |
Gives this pointer as a SimulationEndListener object. | |
| void | insertLowerLayer (CommunicationLayerPtr layerToInsert) |
| Add a layer below this layer. | |
| t_uint | numberOfLayers (Directions direction) const |
| The number of layers available in the given direction. | |
| bool | setDefaultLayer (Directions direction, t_uint newDefaultIdx) |
| Set the layer being used as the default for communication. | |
| t_uint | getDefaultLayer (Directions direction) const |
| Get the index of the layer being used as the default. | |
| void | setLayerDelay (Directions direction, const SimTime &delay) |
| Set the time delay before a sent packet is received by the next layer. | |
| SimTime | getLayerDelay (Directions direction) const |
| Get the time delay before a sent packet is received by the next layer. | |
| bool | sendToQueue (PacketPtr packet) |
| Send a packet to the default lower layer using a queue. | |
| bool | sendToQueue (PacketPtr packet, t_uint lowerLayerIdx) |
| Send a packet to the specified lower layer using a queue. | |
| void | unblockQueue () |
| Unblock this layer's packet queue so that it can resume sending. | |
| void | blockQueue () |
| Block this layer's packet queue so that it can no longer pass packet to lower layers. | |
| bool | getQueueIsBlocked () const |
| Determine whether of not the queue is currently blocked. | |
| void | setMaxQueueLength (t_uint maxQueueLength) |
| Set the maximum packet queue size. | |
| t_uint | getMaxQueueLength () const |
| Get the maximum packet queue size. | |
| bool | sendToLayer (Directions direction, PacketPtr packet) |
| Send a packet to the default next layer. | |
| bool | sendToLayer (Directions direction, PacketPtr packet, t_uint recvingLayerIdx) |
| Send a packet to the specified next layer. | |
| bool | sendToAllLayers (Directions direction, PacketPtr packet) |
| Send a packet to all adjacent layers. | |
| bool | recvFromLayer (Directions direction, PacketPtr packet, CommunicationLayerPtr sendingLayer) |
| Receives a packet from a sending layer. | |
| virtual bool | recvFromLayer (Directions direction, PacketPtr packet, t_uint sendingLayerIdx) |
| Receives a packet from a sending layer. | |
| virtual Types | getLayerType () const =0 |
| Get the layer type for an object. | |
| NodeId | getNodeId () const |
| Get the node ID associated with this object. | |
Protected Member Functions | |
| CommunicationLayer (NodePtr node) | |
| A constructor. | |
| NodePtr | getNode () const |
| Get the node that contains this object. | |
| bool | queueIsFull () const |
| Check if the packet queue is full. | |
| void | blockUpperQueues () |
| Block the queues of each of our upper layers. | |
| void | unblockUpperQueues () |
| Unblock the queue of each upper layer or until the queue fills up. | |
| void | sendFromQueue () |
| Send a packets from the queue while it is not empty and not blocked. | |
| void | setLowerLayerRecvEventPending (bool isPending) |
| Set whether or not their is a packet currently pending for the lower layer. | |
| void | removeLayerData (PacketPtr packet) const |
| Remove the layer specific data from a packet. | |
| CommunicationLayerPtr | getLayer (Directions direction, t_uint sendingLayerIdx) |
| Get a pointer to the specified communication layer object. | |
| void | insertLayer (Directions direction, CommunicationLayerPtr layerToInsert) |
| Add an adjacent layer in the specified direction. | |
Protected Attributes | |
| bool | m_lowerLayerRecvEventPending |
| Determines if a lower layer receive event has been scheduled. | |
Friends | |
| class | Node |
| class | LayerRecvEvent |
This is the superclass for each of the layers in the network stack in a node. A communiation layer follows the OSI model where layers communicate with layers adjacent to it both above and below. Our class supports multiple adjacent layers. This allows, for example, a MAC layer to have multiple interfaces (PHY layers) with which it can communicate or multiple applications to share lower layers.
Definition at line 35 of file communication_layer.hpp.
Directions enum.
Used to specify which direction an operation should operate on.
| Directions_Lower | enum value Directions_Lower. |
| Directions_Upper | enum value Direction_Upper. |
Definition at line 54 of file communication_layer.hpp.
Types enum.
Used to classify the type of a CommunicationLayer object.
Definition at line 63 of file communication_layer.hpp.
| CommunicationLayer::~CommunicationLayer | ( | ) | [virtual] |
A destructor.
A virtual destructor is recommended since the class has virtual functions.
Definition at line 18 of file communication_layer.cpp.
| CommunicationLayer::CommunicationLayer | ( | NodePtr | node | ) | [protected] |
A constructor.
| node | the container of this object. |
Definition at line 9 of file communication_layer.cpp.
| t_uint CommunicationLayer::getDefaultLayer | ( | Directions | direction | ) | const [inline] |
Get the index of the layer being used as the default.
| direction | the direction being queried. |
Definition at line 538 of file communication_layer.hpp.
References Directions_Lower, and Directions_Upper.
Referenced by LinkLayer::channelIsBusy(), sendToLayer(), and sendToQueue().
| CommunicationLayerPtr CommunicationLayer::getLayer | ( | Directions | direction, | |
| t_uint | sendingLayerIdx | |||
| ) | [inline, protected] |
Get a pointer to the specified communication layer object.
| direction | the direction the packet was sent. | |
| sendingLayerIdx | the index of the layer that sent the packet. |
Definition at line 479 of file communication_layer.hpp.
References Directions_Lower, Directions_Upper, and numberOfLayers().
Referenced by LinkLayer::channelIsBusy().
| SimTime CommunicationLayer::getLayerDelay | ( | Directions | direction | ) | const [inline] |
Get the time delay before a sent packet is received by the next layer.
| direction | the direction being queried. |
Definition at line 569 of file communication_layer.hpp.
References Directions_Lower, and Directions_Upper.
Referenced by sendToLayer().
| virtual Types CommunicationLayer::getLayerType | ( | ) | const [pure virtual] |
Get the layer type for an object.
Implemented in ApplicationLayer, LinkLayer, and PhysicalLayer.
Referenced by recvFromLayer(), removeLayerData(), and sendToLayer().
| t_uint CommunicationLayer::getMaxQueueLength | ( | ) | const [inline] |
Get the maximum packet queue size.
Definition at line 474 of file communication_layer.hpp.
| NodeId CommunicationLayer::getNodeId | ( | ) | const |
Get the node ID associated with this object.
Definition at line 191 of file communication_layer.cpp.
References getNode().
Referenced by PhysicalLayer::captureSignal(), WirelessChannel::getRecvdStrength(), recvFromLayer(), PhysicalLayer::recvPendingSignal(), sendToLayer(), and RfidReaderApp::simulationEndHandler().
| bool CommunicationLayer::getQueueIsBlocked | ( | ) | const [inline] |
Determine whether of not the queue is currently blocked.
Definition at line 457 of file communication_layer.hpp.
| void CommunicationLayer::insertLayer | ( | Directions | direction, | |
| CommunicationLayerPtr | layerToInsert | |||
| ) | [inline, protected] |
Add an adjacent layer in the specified direction.
The layer being inserted must be owned by the same node as this object.
| direction | the direction of the action. | |
| layerToInsert | a pointer to the neighboring layer. |
Definition at line 413 of file communication_layer.hpp.
References Directions_Lower, Directions_Upper, getNode(), numberOfLayers(), and setDefaultLayer().
Referenced by insertLowerLayer().
| void CommunicationLayer::insertLowerLayer | ( | CommunicationLayerPtr | layerToInsert | ) | [inline] |
Add a layer below this layer.
This object will be inserted as the upper layer for layerToInsert. The layer being inserted must be owned by the same node as this object.
| layerToInsert | a pointer to the lower layer. |
Definition at line 403 of file communication_layer.hpp.
References Directions_Lower, Directions_Upper, getNode(), and insertLayer().
| t_uint CommunicationLayer::numberOfLayers | ( | Directions | direction | ) | const [inline] |
The number of layers available in the given direction.
| direction | the direction being queried. |
Definition at line 501 of file communication_layer.hpp.
References Directions_Lower, and Directions_Upper.
Referenced by getLayer(), insertLayer(), recvFromLayer(), sendToAllLayers(), sendToLayer(), and setDefaultLayer().
| bool CommunicationLayer::queueIsFull | ( | ) | const [inline, protected] |
Check if the packet queue is full.
Definition at line 462 of file communication_layer.hpp.
Referenced by sendFromQueue(), sendToQueue(), and unblockUpperQueues().
| bool CommunicationLayer::recvFromLayer | ( | Directions | direction, | |
| PacketPtr | packet, | |||
| t_uint | sendingLayerIdx | |||
| ) | [virtual] |
Receives a packet from a sending layer.
This is the function that subclasses should override to receive packets since it specifies the index of the sending layer rather than a pointer.
| direction | the direction the packet was sent. | |
| packet | a pointer to the received packet. | |
| sendingLayerIdx | the index of the layer that sent the packet. |
Reimplemented in ApplicationLayer, LinkLayer, and PhysicalLayer.
Definition at line 166 of file communication_layer.cpp.
References Directions_Lower, Directions_Upper, numberOfLayers(), and sendToLayer().
| bool CommunicationLayer::recvFromLayer | ( | Directions | direction, | |
| PacketPtr | packet, | |||
| CommunicationLayerPtr | sendingLayer | |||
| ) |
Receives a packet from a sending layer.
| direction | the direction the packet was sent. | |
| packet | a pointer to the received packet. | |
| sendingLayer | a pointer to the layer that sent the packet. |
Definition at line 129 of file communication_layer.cpp.
References Directions_Lower, Directions_Upper, getLayerType(), getNodeId(), LogStreamManager::instance(), and numberOfLayers().
| void CommunicationLayer::removeLayerData | ( | PacketPtr | packet | ) | const [protected] |
Remove the layer specific data from a packet.
| packet | a pointer to the packet whose layer data will be removed. |
Definition at line 198 of file communication_layer.cpp.
References Packet::DataTypes_Application, Packet::DataTypes_Link, Packet::DataTypes_Network, Packet::DataTypes_Physical, Packet::DataTypes_Transport, getLayerType(), Types_Application, Types_Link, Types_Network, Types_Physical, and Types_Transport.
Referenced by sendToLayer().
| bool CommunicationLayer::sendToAllLayers | ( | Directions | direction, | |
| PacketPtr | packet | |||
| ) |
Send a packet to all adjacent layers.
| direction | the direction of the action. | |
| packet | a pointer to the packet being sent. |
Definition at line 85 of file communication_layer.cpp.
References numberOfLayers(), and sendToLayer().
| bool CommunicationLayer::sendToLayer | ( | Directions | direction, | |
| PacketPtr | packet, | |||
| t_uint | recvingLayerIdx | |||
| ) |
Send a packet to the specified next layer.
Packets send to upper layers will have their header data removed.
| direction | the direction of the action. | |
| packet | a pointer to the packet being sent. | |
| recvingLayerIdx | the index of the layer to which the packet is being sent. |
Definition at line 96 of file communication_layer.cpp.
References LayerRecvEvent::create(), Directions_Lower, Directions_Upper, getLayerDelay(), getLayerType(), getNodeId(), LogStreamManager::instance(), LogStreamManager::logPktSendItem(), numberOfLayers(), removeLayerData(), and setLowerLayerRecvEventPending().
| bool CommunicationLayer::sendToLayer | ( | Directions | direction, | |
| PacketPtr | packet | |||
| ) |
Send a packet to the default next layer.
Packets send to upper layers will have their header data removed.
| direction | the direction of the action. | |
| packet | a pointer to the packet being sent. |
Definition at line 79 of file communication_layer.cpp.
References getDefaultLayer().
Referenced by recvFromLayer(), LinkLayer::recvFromMacProtocol(), PhysicalLayer::recvPendingSignal(), sendFromQueue(), and sendToAllLayers().
| bool CommunicationLayer::sendToQueue | ( | PacketPtr | packet, | |
| t_uint | lowerLayerIdx | |||
| ) |
Send a packet to the specified lower layer using a queue.
| packet | a pointer to the packet being sent. | |
| lowerLayerIdx | the index of the lower layer to which we are sending. |
Definition at line 59 of file communication_layer.cpp.
References blockUpperQueues(), queueIsFull(), and sendFromQueue().
| bool CommunicationLayer::sendToQueue | ( | PacketPtr | packet | ) |
Send a packet to the default lower layer using a queue.
| packet | a pointer to the packet being sent. |
Definition at line 53 of file communication_layer.cpp.
References Directions_Lower, and getDefaultLayer().
| bool CommunicationLayer::setDefaultLayer | ( | Directions | direction, | |
| t_uint | newDefaultIdx | |||
| ) | [inline] |
Set the layer being used as the default for communication.
| direction | the direction of the action. | |
| newDefaultIdx | the index of the layer to be used as the default. |
Definition at line 517 of file communication_layer.hpp.
References Directions_Lower, Directions_Upper, and numberOfLayers().
Referenced by insertLayer().
| void CommunicationLayer::setLayerDelay | ( | Directions | direction, | |
| const SimTime & | delay | |||
| ) | [inline] |
Set the time delay before a sent packet is received by the next layer.
| direction | the direction of the action. | |
| delay | the time delay. |
Definition at line 554 of file communication_layer.hpp.
References Directions_Lower, and Directions_Upper.
| void CommunicationLayer::setLowerLayerRecvEventPending | ( | bool | isPending | ) | [inline, protected] |
Set whether or not their is a packet currently pending for the lower layer.
For example, if their is a layer delay then this will be pending until the lower layer actually receives the packet.
| isPending | whether of not such an event is pending. |
Definition at line 446 of file communication_layer.hpp.
References m_lowerLayerRecvEventPending, and sendFromQueue().
Referenced by sendToLayer().
| void CommunicationLayer::setMaxQueueLength | ( | t_uint | maxQueueLength | ) | [inline] |
Set the maximum packet queue size.
| maxQueueLength | the maximimum number of packets that the queue can hold. |
Definition at line 468 of file communication_layer.hpp.
Referenced by LinkLayer::LinkLayer(), and PhysicalLayer::PhysicalLayer().
| virtual SimulationEndListenerPtr CommunicationLayer::thisSimulationEndListener | ( | ) | [pure virtual] |
Gives this pointer as a SimulationEndListener object.
This is used to deal with shared_ptr's, this, and inheritance.
this object. Implemented in LinkLayer, RfidReaderApp, RfidReaderPhy, RfidTagApp, and RfidTagPhy.
1.4.7