OMNET++ ROUTING

OMNET++ ROUTING is the process of passing information in a network from source to destination.It is also known for process of choosing path for fowarding packets in a network.

 

Classification of routing algorithms:

  • Link-state versus distance vector.
  • Host-intelligent versus router-intelligent.
  • Static versus adaptive.
  • Flat versus hierarchical.
  • Single path versus multi-path.
  • Intra-domain versus inter-domain.

Sample routing algorithm metrics are:

The below mentioned routing metrics are considered by the routing algorithms in order to find out the shortest path, optimal path etc. There are,

  • Load.
  • Communication cost.
  • Path length.
  • Reliability.
  • Bandwidth.
  • Delay.
Architecture-of-routing
Architecture-of-routing

Advantages of fixed routing:

  • Routing is same for datagram and virtual circuit type of services.
  • Routing is dependent on network topology that us static in nature.
  • Routers are always fixed and hence the routing overhead is minimum.

[button link=”#” type=”icon”]Sample Source Code for OMNeT++ Routing: [/button]

[code lang=”js”]
void NetworkRouting::extractTopology(cTopology& topo, NodeInfoVector& nodeInfo)
{
topo.extractByProperty("node");
nodeInfo.resize(topo.getNumNodes());
for (int i=0; i<topo.getNumNodes(); i++) { cModule *mod = topo.getNode(i)->getModule();
nodeInfo[i].isIPNode = IPvXAddressResolver().findRoutingTableOf(mod)!=NULL && IPvXAddressResolver().findInterfaceTableOf(mod)!=NULL;
if (nodeInfo[i].isIPNode)
{
nodeInfo[i].ift = IPvXAddressResolver().interfaceTableOf(mod);
nodeInfo[i].rt = IPvXAddressResolver().routingTableOf(mod);
nodeInfo[i].ipForwardEnabled = mod->hasPar("IPForward") ? mod->par("IPForward").boolValue() : false;
topo.getNode(i)->setWeight(nodeInfo[i].ipForwardEnabled ? 0.0 : INFINITY); } }}

void NetworkConfigurator::assignAddresses(cTopology& topo, NodeInfoVector& nodeInfo)
{ uint32 networkAddress = IPv4Address(par("networkAddress").stringValue()).getInt();
uint32 netmask = IPv4Address(par("netmask").stringValue()).getInt();
int maxNodes = (~netmask)-1; // 0 and ffff have special meaning and cannot be used

for (int i=0; i<topo.getNumNodes(); i++)
{
// skip bus types
if (!nodeInfo[i].isIPNode)
continue;

uint32 addr = networkAddress | uint32(++numIPNodes);
nodeInfo[i].address.set(addr);

// find interface table and assign address to all (non-loopback) interfaces
IInterfaceTable *ift = nodeInfo[i].ift;
for (int k=0; k<ift->getNumInterfaces(); k++)
{
InterfaceEntry *ie = ift->getInterface(k);
if (!ie->isLoopback())
{
ie->ipv4Data()->setIPAddress(IPv4Address(addr));
ie->ipv4Data()->setNetmask(IPv4Address::ALLONES_ADDRESS); // full address must match for local delivery
}
}
}
}
[/code]