1

I want to simulate a VANET based SDN, I successfully integrated SUMO with OMNET using VEINS. Then I imported INET, OpenFlow, an error appear when I add gates to the RSU and connected with OpenFlow switch the below error is appear? How can I fix that and what should I modify to make my VEINS scenario work with SDN?

<!> Gate 'RSUExampleScenario.rsu[0].In' is not connected to a submodule (or internally to another gate of the same module) -- in module (omnetpp::cModule) RSUExampleScenario.rsu[0] (id=7), during network setup
TRAPPING on the exception above, due to a debug-on-errors=true configuration option. Is your debugger ready?
Simulation terminated with exit code: -2147483645
Working directory: D:/omnetpp-5.1/samples/veins/examples/veins
Command line: ../../../../bin/opp_run.exe -m -n .;../../src/veins;../../../openflow;../../../inet/src;../../../inet/examples;../../../inet/tutorials;../../../inet/showcases --image-path=../../images;../../../openflow/images;../../../inet/images -l ../../src/veins -l ../../../inet/src/INET omnetpp.ini
Environment variables:
PATH=;D:/omnetpp-5.1/samples/veins/src;D:/omnetpp-5.1/samples/inet/src;D:\omnetpp-5.1\bin;D:\omnetpp-5.1\tools\win64\usr\bin;D:\omnetpp-5.1\tools\win64\mingw64\bin;D:/omnetpp-5.1/ide/jre/bin/server;D:/omnetpp-5.1/ide/jre/bin;D:/omnetpp-5.1/ide/jre/lib/amd64;.;D:\omnetpp-5.1\bin;D:\omnetpp-5.1\tools\win64\mingw64\bin;D:\omnetpp-5.1\tools\win64\usr\local\bin;D:\omnetpp-5.1\tools\win64\usr\bin;D:\omnetpp-5.1\tools\win64\usr\bin;C:\Windows\System32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\omnetpp-5.1\tools\win64\usr\bin\site_perl;D:\omnetpp-5.1\tools\win64\usr\bin\vendor_perl;D:\omnetpp-5.1\tools\win64\usr\bin\core_perl;D:\omnetpp-5.1;
OMNETPP_ROOT=D:/omnetpp-5.1/
OMNETPP_IMAGE_PATH=D:\omnetpp-5.1\images

here the code for RSU.ned and I just add the In and Out gates.


package org.car2x.veins.nodes;

import org.car2x.veins.base.modules.*;
import org.car2x.veins.modules.nic.Nic80211p;

import inet.node.inet.AdhocHost;
import inet.node.xmipv6.MobileHost6;
import openflow.Flow_Table;
import openflow.nodes.Open_Flow_Controller;
import openflow.nodes.Open_Flow_Switch;

module RSU
{
    parameters:
        string applType; //type of the application layer
        string nicType = default("Nic80211p"); // type of network interface card
    gates:
        input veinsradioIn; // gate for sendDirect
        input In;
        output Out;



    submodules:
        appl: <applType> like org.car2x.veins.base.modules.IBaseApplLayer {
            parameters:
                @display("p=60,50");
        }

        nic: <nicType> like org.car2x.veins.modules.nic.INic80211p {
            parameters:
                @display("p=60,166");
        }

        mobility: BaseMobility {
            parameters:
                @display("p=130,172;i=block/cogwheel");
        }


    connections:
        nic.upperLayerOut --> appl.lowerLayerIn;
        nic.upperLayerIn <-- appl.lowerLayerOut;
        nic.upperControlOut --> appl.lowerControlIn;
        nic.upperControlIn <-- appl.lowerControlOut;

        veinsradioIn --> nic.radioIn;

}   

and here the OpenFlow_switch.ned, Also I just add the In and Out gates.


package openflow.nodes;

import inet.applications.pingapp.PingApp;
import inet.applications.contract.ITCPApp;
//import inet.base.NotificationBoard;
import inet.linklayer.ethernet.EtherMAC;
//import inet.linklayer.ext.ExtInterface;
import inet.linklayer.ppp.PPPInterface;
import inet.networklayer.common.InterfaceTable;
//import inet.networklayer.ipv4.RoutingTable;
//import inet.transport.ITCP;
//import inet.transport.udp.UDP;
//import inet.util.TCPDump;
//import inet.nodes.inet.NetworkLayer;

import inet.transportlayer.contract.ITCP;
import inet.linklayer.ppp.PPPInterface;
import inet.linklayer.ethernet.EthernetInterface;
import inet.linklayer.loopback.LoopbackInterface;
import inet.networklayer.ipv4.*;


import openflow.*;
// OpenFlow switch based on the OF Switch Specification 1.2.
// New implemented modules: FlowTable, Open_Flow_Processing, Buffer, OFA_Switch (Application)
// The OpenFlow switch is basically divided in two parts. The left path, which
//consists of a EtherMAC and a OpenFlowProcessing module, represents the data plane.
//All production trac, coming from different nodes connected
//to the switch, is handled here. The Processing module performs packet lookups in the 
//ow table and executes instructions, if a matching entry is found.
//The right part with the modules EthernetInterface, NetworkLayer, TCP and
//OFASwitch is responsible for the communication with a remote controller via the
//OpenFlow protocol and is called control plane.
module Open_Flow_Switch
{
    parameters:
        //        @node(); 
        @networkNode; //Inet 3.6 changed @node to @networkNode
        @OF_Switch();
        @labels(node,ethernet-node);
        @display("i=device/switch;i2=OpenFlow-Logo-small");
        int numTcpApps = default(0);
        int numUdpApps = default(0);
        int numSctpApps = default(0);
        string tcpAppType = default("n/a");
        string udpAppType = default("n/a");
        string sctpAppType = default("n/a");
        string tcpType = default("TCP");  // tcp implementation (e.g. TCP, TCP_old, TCP_NSC)
        bool forwarding = default(false);
        int namid = default(-1);
        string routingFile = default("");
        int numExtInterfaces = default(0);
        bool sendCompletePacket = default(false);
        double serviceTime @unit("s") = default(0s);

        //DANH added:
        bool hasTcp = default(numTcpApps > 0);
        bool hasUdp = default(numUdpApps > 0);
        bool hasSctp = default(numSctpApps > 0);
        *.interfaceTableModule = default(absPath(".interfaceTable"));
        *.routingTableModule = default(absPath(".routingTable"));
    gates:
        inout gate_controller[] @labels(Controller-conn);
        inout ethg[] @labels(EtherFrame-conn);
        input In;
        output Out;

    submodules:
        //        notificationBoard: NotificationBoard {
        //            parameters:
        //                @display("p=57,54");
        //        }
        interfaceTable: InterfaceTable {
            parameters:
                @display("p=57,134");
        }
        routingTable: IPv4RoutingTable {
            parameters:
                forwarding = forwarding;
                routerId = "";
                routingFile = routingFile;
                @display("p=57,214");
        }
        tcp: <tcpType> like ITCP {
            parameters:
                @display("p=336,159");
        }
        networkLayer: IPv4NetworkLayer {
            parameters:
                proxyARP = false;
                @display("p=336,262;q=queue");
            gates:
                ifIn[sizeof(gate_controller)];
                ifOut[sizeof(gate_controller)];
        }
        eth[sizeof(gate_controller)]: EthernetInterface {
            parameters:
                @display("p=336,390,row,90;q=txQueue");
        }
        flow_Table: Flow_Table {
            @display("p=192,134");
        }
        etherMAC[sizeof(ethg)]: EtherMAC {
            parameters:
                @display("p=137,390");
                doRegisterAtIft = false; // this is to prevent OF-Switch from registering to interface table
        }

        open_Flow_Processing: Open_Flow_Processing {
            @display("p=137,282");
            serviceTime = serviceTime;
            gates:
                ifIn[sizeof(ethg)];
                ifOut[sizeof(ethg)];
        }
        buffer: Buffer {
            @display("p=192,53");
        }
        ofa_switch: OFA_switch {
            @display("p=336,71");
            sendCompletePacket = sendCompletePacket;
        }

    connections allowunconnected:
        tcp.ipOut --> networkLayer.transportIn++ if hasTcp;
        tcp.ipIn <-- networkLayer.transportOut++ if hasTcp;

        for i=0..sizeof(gate_controller)-1 {
            eth[i].phys <--> gate_controller[i];
            eth[i].upperLayerOut --> networkLayer.ifIn[i];
            eth[i].upperLayerIn <-- networkLayer.ifOut[i];
        }

        for i=0..sizeof(ethg)-1 {
            etherMAC[i].phys <--> ethg[i];
            open_Flow_Processing.ifOut[i] --> etherMAC[i].upperLayerIn;
            etherMAC[i].upperLayerOut --> open_Flow_Processing.ifIn[i];

        }
        tcp.appOut++ --> ofa_switch.tcpIn;
        ofa_switch.tcpOut --> tcp.appIn++;
}

here the RSUExampleScenario.ned


import inet.node.ethernet.EtherHost;
import inet.node.inet.AdhocHost;
import inet.node.xmipv6.MobileHost6;
import openflow.nodes.Domain_wController;
import openflow.nodes.OpenFlow_Domain_fixed;
import openflow.nodes.Open_Flow_Controller;
import openflow.nodes.Open_Flow_Switch;
import org.car2x.veins.nodes.RSU;
import org.car2x.veins.nodes.Scenario;



network RSUExampleScenario extends Scenario
{
    @display("bgb=634,315;bgl=2");


    submodules:
        rsu[1]: RSU {
            @display("p=161,117;i=veins/sign/yellowdiamond;is=vs");
        }

        open_Flow_Switch: Open_Flow_Switch {
            @display("p=257,235;b=66,64");
        }
        open_Flow_Controller: Open_Flow_Controller {
            @display("p=427,221;b=85,66");
        }
    connections:


        open_Flow_Switch.ethg++ <--> open_Flow_Controller.ethg++;
        open_Flow_Controller.ethg++ <--> open_Flow_Switch.ethg++;

        rsu[0].Out --> open_Flow_Switch.In;
        open_Flow_Switch.Out --> rsu[0].In;
}

and finally the omnetpp.ini

[General]
cmdenv-express-mode = true
cmdenv-autoflush = true
cmdenv-status-frequency = 1s
**.cmdenv-log-level = info

ned-path = .
image-path = ../../images

network = RSUExampleScenario

##########################################################
#            Simulation parameters                       #
##########################################################
debug-on-errors = true
print-undisposed = true

sim-time-limit = 3000s

**.scalar-recording = true
**.vector-recording = true

**.debug = false
**.coreDebug = false

*.playgroundSizeX = 5500m
*.playgroundSizeY = 5500m
*.playgroundSizeZ = 5500m


##########################################################
# Annotation parameters                                  #
##########################################################
*.annotations.draw = true

##########################################################
# Obstacle parameters                                    #
##########################################################
*.obstacles.debug = false
*.obstacles.obstacles = xmldoc("config.xml", "//AnalogueModel[@type='SimpleObstacleShadowing']/obstacles")

##########################################################
#            TraCIScenarioManager parameters             #
##########################################################
*.manager.updateInterval = 1s
*.manager.host = "localhost"
*.manager.port = 9999
*.manager.autoShutdown = true
*.manager.launchConfig = xmldoc("DammamMap.launchd.xml")

##########################################################
#                       RSU SETTINGS                     #
#                                                        #
#                                                        #
##########################################################
*.rsu[0].mobility.x = 2000
*.rsu[0].mobility.y = 2000
*.rsu[0].mobility.z = 3


*.rsu[*].applType = "TraCIDemoRSU11p"
*.rsu[*].appl.headerLength = 80 bit
*.rsu[*].appl.sendBeacons = false
*.rsu[*].appl.dataOnSch = false
*.rsu[*].appl.beaconInterval = 1s
*.rsu[*].appl.beaconUserPriority = 7
*.rsu[*].appl.dataUserPriority = 5

##########################################################
#            11p specific parameters                     #
#                                                        #
#                    NIC-Settings                        #
##########################################################
*.connectionManager.sendDirect = true
*.connectionManager.maxInterfDist = 2600m
*.connectionManager.drawMaxIntfDist = false

*.**.nic.mac1609_4.useServiceChannel = false

*.**.nic.mac1609_4.txPower = 20mW
*.**.nic.mac1609_4.bitrate = 6Mbps
*.**.nic.phy80211p.sensitivity = -89dBm

*.**.nic.phy80211p.useThermalNoise = true
*.**.nic.phy80211p.thermalNoise = -110dBm

*.**.nic.phy80211p.decider = xmldoc("config.xml")
*.**.nic.phy80211p.analogueModels = xmldoc("config.xml")
*.**.nic.phy80211p.usePropagationDelay = true

*.**.nic.phy80211p.antenna = xmldoc("antenna.xml", "/root/Antenna[@id='monopole']")

##########################################################
#                    WaveAppLayer                        #
##########################################################
*.node[*].applType = "TraCIDemo11p"
*.node[*].appl.headerLength = 80 bit
*.node[*].appl.sendBeacons = false
*.node[*].appl.dataOnSch = false
*.node[*].appl.beaconInterval = 1s

##########################################################
#                      Mobility                          #
##########################################################
*.node[*].veinsmobilityType.debug = true
*.node[*].veinsmobility.x = 0
*.node[*].veinsmobility.y = 0
*.node[*].veinsmobility.z = 1.895
*.node[*0].veinsmobility.accidentCount = 1
*.node[*0].veinsmobility.accidentStart = 75s
*.node[*0].veinsmobility.accidentDuration = 50s


[Config Default]

[Config WithBeaconing]
*.rsu[*].appl.sendBeacons = true
*.node[*].appl.sendBeacons = true

[Config WithChannelSwitching]
*.**.nic.mac1609_4.useServiceChannel = true
*.node[*].appl.dataOnSch = true
*.rsu[*].appl.dataOnSch = true

Any help will be greatly appreciated

Alia
  • 71
  • 9
  • What lines exactly did you change that made the error appear? Is it possible for you to show this using source code? – Christoph Sommer Feb 11 '19 at 22:10
  • Sure, I added the source code. and thanks for your response – Alia Feb 13 '19 at 11:19
  • This is not quite what I asked. Without your help, the only other option is to find the error for you. – Christoph Sommer Feb 17 '19 at 17:14
  • I solved the error by adding allowunconnected to the connections in RSU.ned and RSUExampleScenario.ned now the simulation work nice and the OpenFlow switch and controller communicate with each other, but I don't know what should I edit to make RSU communicate with the openflow_switch. i appreciate your response – Alia Feb 17 '19 at 18:43
  • Good to hear you found an answer! Feel free to add it as an answer to this question. This will allow other people who have the same problem to find the solution easily. – Christoph Sommer Feb 17 '19 at 19:57

1 Answers1

1

I solved the error by adding allowunconnected to the connections in RSU.ned and RSUExampleScenario.ned

I hope this help other people facing the same problem.

Alia
  • 71
  • 9