INET Framework for OMNeT++/OMNEST
inet::NetworkDatagramMultiplexer Class Reference

This class provides network datagram multiplexing based on the the datagram runtime type or on the type of attached control info. More...

#include <NetworkDatagramMultiplexer.h>

Inheritance diagram for inet::NetworkDatagramMultiplexer:

Public Member Functions

 NetworkDatagramMultiplexer ()
 
virtual ~NetworkDatagramMultiplexer ()
 

Protected Member Functions

virtual void handleMessage (cMessage *message) override
 
int getProtocolIndex (cMessage *message)
 

Detailed Description

This class provides network datagram multiplexing based on the the datagram runtime type or on the type of attached control info.

Constructor & Destructor Documentation

inet::NetworkDatagramMultiplexer::NetworkDatagramMultiplexer ( )
inline
33 {}
virtual inet::NetworkDatagramMultiplexer::~NetworkDatagramMultiplexer ( )
inlinevirtual
34 {}

Member Function Documentation

int inet::NetworkDatagramMultiplexer::getProtocolIndex ( cMessage *  message)
protected

Referenced by handleMessage().

53 {
54  cPacket *packet = check_and_cast<cPacket *>(message);
55  cObject *controlInfo = packet->getControlInfo();
56  // TODO: handle the case when some network protocols are disabled
57  if (false)
58  ;
59 #ifdef WITH_IPv4
60  else if (dynamic_cast<IPv4ControlInfo *>(controlInfo) || dynamic_cast<IPv4Datagram *>(message))
61  return 0;
62 #endif // ifdef WITH_IPv4
63 #ifdef WITH_IPv6
64  else if (dynamic_cast<IPv6ControlInfo *>(controlInfo) || dynamic_cast<IPv6Datagram *>(message))
65  return 1;
66 #endif // ifdef WITH_IPv6
67 #ifdef WITH_GENERIC
68  else if (dynamic_cast<GenericNetworkProtocolControlInfo *>(controlInfo) || dynamic_cast<GenericDatagram *>(message))
69  return 2;
70 #endif // ifdef WITH_GENERIC
71  else
72  throw cRuntimeError("Unknown control info/packet: '%s' in '%s'", (controlInfo?controlInfo->getClassName():"<nullptr>"), packet->getClassName());
73 }
void inet::NetworkDatagramMultiplexer::handleMessage ( cMessage *  message)
overrideprotectedvirtual
41 {
42  cGate *arrivalGate = message->getArrivalGate();
43  const char *arrivalGateName = arrivalGate->getBaseName();
44  if (!strcmp(arrivalGateName, "upperIn"))
45  send(message, "lowerOut", getProtocolIndex(message));
46  else if (!strcmp(arrivalGateName, "lowerIn"))
47  send(message, "upperOut");
48  else
49  throw cRuntimeError("Unknown arrival gate");
50 }
int getProtocolIndex(cMessage *message)
Definition: NetworkDatagramMultiplexer.cc:52

The documentation for this class was generated from the following files: