NED File src/inet/node/inet/NodeBase.ned
Name | Type | Description |
---|---|---|
NodeBase | compound module |
Contains the common lower layers (linklayer and networklayer) of Router, StandardHost, WirelessHost etc. |
Source code
// // Copyright (C) 2000 Institut fuer Telematik, Universitaet Karlsruhe // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with this program; if not, see <http://www.gnu.org/licenses/>. // package inet.node.inet; import inet.common.lifecycle.NodeStatus; import inet.common.packet.PcapRecorder; import inet.linklayer.contract.IExternalNic; import inet.linklayer.contract.ITunNic; import inet.linklayer.contract.IWiredNic; import inet.linklayer.contract.IWirelessNic; import inet.linklayer.loopback.LoopbackInterface; import inet.mobility.contract.IMobility; import inet.networklayer.common.InterfaceTable; import inet.networklayer.contract.INetworkLayer; import inet.networklayer.contract.IRoutingTable; import inet.power.contract.IEnergyGenerator; import inet.power.contract.IEnergyManagement; import inet.power.contract.IEnergyStorage; // // Contains the common lower layers (linklayer and networklayer) // of Router, StandardHost, WirelessHost etc. // // NOTE: // - forwarding is turned on by default. // - use this model only as a base type. In simulations use ~Router, // ~StandardHost, ~WirelessHost and ~AdhocHost // module NodeBase like INetworkNode { parameters: @display("bgb=,448"); @networkNode; @labels(node,ethernet-node,wireless-node); bool hasStatus = default(false); int numExtInterfaces = default(0); int numRadios = default(0); // the number of radios in the router. by default no wireless int numPcapRecorders = default(0); // no of PcapRecorders. int numTunInterfaces = default(0); string osgModel = default(""); // 3D model for OSG visualization, no 3D model by default string osgModelColor = default(""); // tint color, no colorization by default string mobilityType = default(numRadios > 0 ? "StationaryMobility" : ""); string networkLayerType = default("IPv4NetworkLayer"); string routingTableType = default("IPv4RoutingTable"); bool forwarding = default(true); bool multicastForwarding = default(false); string energyStorageType = default(""); string energyManagementType = default(""); string energyGeneratorType = default(""); routingTable.forwarding = this.forwarding; routingTable.multicastForwarding = this.multicastForwarding; // for IPv4, IPv6, Generic *.interfaceTableModule = default(absPath(".interfaceTable")); *.routingTableModule = default(routingTableType != "" ? absPath(".routingTable") : ""); *.energySourceModule = default(energyStorageType != "" ? absPath(".energyStorage") : ""); *.mobilityModule = default(mobilityType != "" ? absPath(".mobility") : ""); gates: input radioIn[numRadios] @directIn; inout pppg[] @labels(PPPFrame-conn); inout ethg[] @labels(EtherFrame-conn); submodules: status: NodeStatus if hasStatus { @display("p=50,50"); } energyStorage: <energyStorageType> like IEnergyStorage if energyStorageType != "" { parameters: @display("p=50,100;i=block/plug;is=s"); } energyManagement: <energyManagementType> like IEnergyManagement if energyManagementType != "" { parameters: @display("p=50,125;i=block/plug;is=s"); } energyGenerator: <energyGeneratorType> like IEnergyGenerator if energyGeneratorType != "" { parameters: @display("p=50,150;i=block/plug;is=s"); } // optional mobility module. Required only if wireless cards are present mobility: <mobilityType> like IMobility if mobilityType != "" { parameters: @display("p=53,200"); } // network layer networkLayer: <networkLayerType> like INetworkLayer { parameters: @display("p=329,287;q=queue"); } // routing table routingTable: <routingTableType> like IRoutingTable if routingTableType != "" { parameters: @display("p=53,250;is=s"); } // linklayer interfaceTable: InterfaceTable { parameters: @display("p=53,300;is=s"); } pcapRecorder[numPcapRecorders]: PcapRecorder { @display("p=53,350,r,10"); } lo0: LoopbackInterface { @display("p=78,406"); } wlan[numRadios]: <default("Ieee80211Nic")> like IWirelessNic { parameters: @display("p=216,406,row,60;q=queue"); } eth[sizeof(ethg)]: <default("EthernetInterface")> like IWiredNic { parameters: @display("p=368,406,row,60;q=txQueue"); } ppp[sizeof(pppg)]: <default("PPPInterface")> like IWiredNic { parameters: @display("p=558,406,row,60;q=txQueue"); } ext[numExtInterfaces]: <default("ExtInterface")> like IExternalNic { parameters: @display("p=149,406,row,10;q=txQueue;i=block/ifcard"); } tun[numTunInterfaces]: <default("TunInterface")> like ITunNic { parameters: @display("p=213,406,row,10;q=txQueue;i=block/ifcard"); } connections allowunconnected: // connections to network outside networkLayer.ifOut++ --> lo0.upperLayerIn; lo0.upperLayerOut --> networkLayer.ifIn++; for i=0..sizeof(radioIn)-1 { radioIn[i] --> { @display("m=s"); } --> wlan[i].radioIn; wlan[i].upperLayerOut --> networkLayer.ifIn++; wlan[i].upperLayerIn <-- networkLayer.ifOut++; } for i=0..sizeof(ethg)-1 { ethg[i] <--> { @display("m=s"); } <--> eth[i].phys; eth[i].upperLayerOut --> networkLayer.ifIn++; eth[i].upperLayerIn <-- networkLayer.ifOut++; } for i=0..sizeof(pppg)-1 { pppg[i] <--> { @display("m=s"); } <--> ppp[i].phys; ppp[i].upperLayerOut --> networkLayer.ifIn++; ppp[i].upperLayerIn <-- networkLayer.ifOut++; } for i=0..numExtInterfaces-1 { ext[i].upperLayerOut --> networkLayer.ifIn++; ext[i].upperLayerIn <-- networkLayer.ifOut++; } for i=0..numTunInterfaces-1 { tun[i].upperLayerOut --> networkLayer.ifIn++; tun[i].upperLayerIn <-- networkLayer.ifOut++; } }