4

Question 1: I implemented ospf protocol in Omnet++. According to the topology, r1 can reach two different ways to r3 .I have set the upper path metric to 1 and lower path to 10. However, according to the OSPF protocol, it should not select the lower path, but it always is selecting the lower path then returning the upper path. As you can see from the routing table, there is a problem with the metric values.

Question 2: I need to see routing table at console. I used printRoutingTable() method to print it but it does not work.

Question 3: How can I see linkstate database table to know whole topology?

Here you can see the code

ospfRouting.ned

package inet.examples.ospfRouting;

import inet.networklayer.configurator.ipv4.IPv4NetworkConfigurator;
import inet.networklayer.ipv4.IPv4RoutingTable;
import inet.networklayer.ted.LinkStateRouting;
import inet.node.ethernet.EtherSwitch;
import inet.node.inet.StandardHost;
import inet.node.ospfv2.OSPFRouter;
import inet.common.misc.ThruputMeteringChannel;

network OspfRouting
{
   @display("bgb=831,570");
   types:

     channel C extends ThruputMeteringChannel
     {
        parameters:
            delay = 0.1us;
            datarate = 100Mbps;
            thruputDisplayFormat = "#N";
     }        

submodules:
    R1: OSPFRouter {
        // @networkNode;
        @display("p=171,213");
        gates:
            ethg[3];
    }
    R2: OSPFRouter {
        // @networkNode;
        @display("p=344,105");
        gates:
            ethg[2];
    }
    R3: OSPFRouter {
        //@networkNode;
        @display("p=510,213");
        gates:
            ethg[3];
    }

    R4: OSPFRouter {
        //  @networkNode;
        @display("p=344,327");
        gates:
            ethg[2];
    }
    SW1: EtherSwitch {
        //  @networkNode;
        @display("p=57,212");
    }
    SW2: EtherSwitch {
        //   @networkNode;
        @display("p=678,212");
    }
    H1: StandardHost {
        //  @networkNode;
        @display("p=57,331");
        gates:
            ethg[1];
    }
    H2: StandardHost {
        //  @networkNode;
        @display("p=678,327");
        gates:
            ethg[1];
    }
    configurator: IPv4NetworkConfigurator {
        // @networkNode;
        @display("p=774.89996,143.5");
    }

connections:
{
        R1.ethg[0] <--> C <--> R4.ethg[0];
        R1.ethg[1] <--> C <--> R2.ethg[1];
        R2.ethg[0] <--> C <--> R3.ethg[0];
        R3.ethg[1] <--> C <--> R4.ethg[1];

        R1.ethg[2] <--> C <--> SW1.ethg++;
        R3.ethg[2] <--> C <--> SW2.ethg++;
        SW1.ethg++ <--> C <--> H1.ethg[0];
        SW2.ethg++ <--> C <--> H2.ethg[0];
    }
}

Rconfig.xml

<?xml version = "1.0"?>
<scenario>

<interface hosts = 'R1' names = 'eth0' address = '30.0.0.1' netmask = '255.0.0.0' metric = '1' />
<interface hosts = 'R1' names = 'eth1' address = '10.0.0.1' netmask = '255.0.0.0' metric = '1' />
<interface hosts = 'R1' names = 'eth2' address = '50.0.0.1' netmask = '255.0.0.0' metric = '1' />

<interface hosts = 'R2' names = 'eth0' address = '20.0.0.2' netmask = '255.0.0.0' metric = '1' />
<interface hosts = 'R2' names = 'eth1' address = '10.0.0.2' netmask = '255.0.0.0' metric = '1' />

<interface hosts = 'R3' names = 'eth0' address = '20.0.0.3' netmask = '255.0.0.0' metric = '1' />
<interface hosts = 'R3' names = 'eth1' address = '40.0.0.3' netmask = '255.0.0.0' metric = '1' />
<interface hosts = 'R3' names = 'eth2' address = '60.0.0.3' netmask = '255.0.0.0' metric = '1' />

<interface hosts = 'R4' names = 'eth0' address = '30.0.0.4' netmask = '255.0.0.0' metric = '1' />
<interface hosts = 'R4' names = 'eth1' address = '40.0.0.4' netmask = '255.0.0.0' metric = '1' />

<interface hosts = 'H1' names = 'eth0' address ='50.0.0.10' netmask = '255.0.0.0' metric = '1' />
<interface hosts = 'H2' names = 'eth0' address ='60.0.0.10' netmask = '255.0.0.0' metric = '1' />

<route hosts = 'H1' destination  = '*' netmask = '*' interface = 'eth0'/>
<route hosts = 'H2' destination  = '*' netmask = '*' interface = 'eth0'/>

</scenario>

RASConfig.xml

<?xml version="1.0"?>
<OSPFASConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="OSPF.xsd">

<Area id = "0.0.0.0">
    <AddressRange address = "10.0.0.0"
    mask = "255.0.0.0"
    status = "Advertise" />
</Area>

<Area id = "0.0.0.0">
    <AddressRange address = "20.0.0.0"
    mask = "255.0.0.0"
    status = "Advertise" />
</Area>

<Area id = "0.0.0.0">
    <AddressRange address = "30.0.0.0"
    mask = "255.0.0.0"
    status = "Advertise" />
</Area>

<Area id = "0.0.0.0">
    <AddressRange address = "40.0.0.0"
    mask = "255.0.0.0"
    status = "Advertise" />
</Area>

<Area id = "0.0.0.1">
    <AddressRange address = "50.0.0.0"
    mask = "255.0.0.0"
    status = "Advertise" />
</Area>

<Area id = "0.0.0.2">
    <AddressRange address = "60.0.0.0"
    mask = "255.0.0.0"
    status = "Advertise" />
</Area>

<Router name = "R1" RFC1583Compatible = "true">

     <BroadcastInterface
        ifName= "eth2"
        areaID= "0.0.0.1"
        InterfaceOutputCost = "1"
     />

     <PointToPointInterface
         ifName="eth0"
         areaID = "0.0.0.0"
         InterfaceOutputCost = "1"
      />

      <PointToPointInterface
         ifName="eth1"
         areaID = "0.0.0.0"
         InterfaceOutputCost = "1000"
      /> 

</Router>

<Router name = "R2" RFC1583Compatible = "true">

     <PointToPointInterface
         ifName="eth0"
         areaID = "0.0.0.0"
         InterfaceOutputCost = "1"
      />

      <PointToPointInterface
         ifName="eth1"
         areaID = "0.0.0.0"
         InterfaceOutputCost = "1"
      />

</Router>

<Router name = "R3" RFC1583Compatible = "true">

     <BroadcastInterface
        ifName= "eth2"
        areaID= "0.0.0.2"
        InterfaceOutputCost = "1"
     />

     <PointToPointInterface
         ifName="eth0"
         areaID = "0.0.0.0"
         InterfaceOutputCost = "1"
      />

      <PointToPointInterface
         ifName="eth1"
         areaID = "0.0.0.0"
         InterfaceOutputCost = "1000"
      />

</Router>

 <Router name = "R4" RFC1583Compatible = "true">

     <PointToPointInterface
         ifName="eth0"
         areaID = "0.0.0.0"
         InterfaceOutputCost = "1000"
      />

      <PointToPointInterface
         ifName="eth1"
         areaID = "0.0.0.0"
         InterfaceOutputCost = "1000"
      />

</Router>

</OSPFASConfig>

ospfR.ini

[General]
network = inet.examples.ospfRouting.OspfRouting
**.configurator.config = xmldoc("Rconfig.xml")
**.configurator.addStaticRoutes = false
**.configurator.addDefaultRoutes = false
**.ospf.ospfConfig = xmldoc("RASConfig.xml")
**.numPingApps = 1
**.H1.pingApp[0].destAddr = "H2"
**.pingApp[*].sendInterval = 1000ms
**.arp.cacheTimeout = 1s

IP4RoutingTable.cc

#include <iostream>
#include <fstream>
#include <string>
#include <IPv4RoutingTable.h>
using namespace std;

class IP4RoutingTable : public cSimpleModule
{
  public:
    virtual void  initialize();

};

Define_Module(IP4RoutingTable);


void IP4RoutingTable::initialize()
{
  IPv4RoutingTable:: printRoutingTable () ;
}

enter image description here

melek_3
  • 97
  • 11

1 Answers1

1

An answer to the question 1.
RASConfig.xml does not meet the requirements from OSPF.xsd (XML Schema):

  • key-sequence 0.0.0.0 exists more than once in Area element (only one instance is allowed)
  • it should be interfaceOutputCost, not InterfaceOutputCost
  • interfaceOutputCost has to be smaller than 1000

An answer to the question 2.
The method printRoutingTable() has to be called for an instance of the routing table object. You have probably prepared own simple module called IP4RoutingTable, but neither StandardHost nor OSPFRouter does not contain that module.
To print routing table just add the following line to your omnetpp.ini:

**.configurator.dumpRoutes = true
Jerzy D.
  • 5,417
  • 2
  • 12
  • 16
  • When I add this line, the routing table appears before running the simulation on console. But the table does not appear when you run the project. – melek_3 Dec 13 '16 at 15:44
  • 1
    That's true, the routing table is printed during initialize only. However, you can check the current routing table of any host/router by clicking inside an element, then `ospf` module and `routingTable`. – Jerzy D. Dec 13 '16 at 21:32
  • When I stop the simulation, do I have a chance to see the current routing table to which the console learned remote networks have been added? @JerzyD. – melek_3 Dec 13 '16 at 22:25
  • 1
    @melek_3: Yes, `ospf` module inside router contains the current routing table. – Jerzy D. Dec 13 '16 at 22:32