OMNET++ ROUTING

What is Routing?

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.

Sample Source Code for OMNeT++ Routing:

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
            }
        }
    }
}