Package: inet.node.ethernet
EtherSwitch
compound moduleModel of an Ethernet switch.
The duplexChannel attributes of the MACs must be set according to the medium connected to the port; if collisions are possible (it's a bus or hub) it must be set to false, otherwise it can be set to true. By default used half duples CSMA/CD mac
Usage diagram
The following diagram shows usage relationships between types. Unresolved types are missing from the diagram.
Parameters
Name | Type | Default value | Description |
---|---|---|---|
numPcapRecorders | int | 0 | |
hasStatus | bool | false | |
hasStp | bool | false | |
csmacdSupport | bool | true |
by default use CSMA/CD --FIXME remove |
fcsMode | string | "declared" | |
spanningTreeProtocol | string | "Stp" | |
numEthInterfaces | int | 0 |
minimum number of ethernet interfaces |
Properties
Name | Value | Description |
---|---|---|
networkNode | ||
labels | node | |
display | i=device/switch |
Gates
Name | Direction | Size | Description |
---|---|---|---|
ethg [ ] | inout | numEthInterfaces |
Unassigned submodule parameters
Name | Type | Default value | Description |
---|---|---|---|
status.initialStatus | string | "UP" |
TODO @signal, @statistic |
l2NodeConfigurator.interfaceTableModule | string | ||
l2NodeConfigurator.l2ConfiguratorModule | string | "l2NetworkConfigurator" |
the absolute path to the L2NetworkConfigurator; use "" if there is no configurator |
interfaceTable.displayAddresses | bool | false |
whether to display IP addresses on links |
pcapRecorder.verbose | bool | false |
whether to log packets on the module output |
pcapRecorder.pcapFile | string | "" |
the PCAP file to be written |
pcapRecorder.pcapLinkType | int | -1 |
the network type header field in the PCAP file, see http://www.tcpdump.org/linktypes.html (1=ethernet, 204=ppp, 105=IEEE 802.11, ...) (-1 means autodetect based on first recordable packet) |
pcapRecorder.snaplen | int | 65535 |
maximum number of bytes to record per packet |
pcapRecorder.dumpBadFrames | bool | true |
enable dump of frames with hasBitError |
pcapRecorder.moduleNamePatterns | string | "wlan[*] eth[*] ppp[*]" |
space-separated list of sibling module names to listen on |
pcapRecorder.sendingSignalNames | string | "packetSentToLower" |
space-separated list of outbound packet signals to subscribe to |
pcapRecorder.receivingSignalNames | string | "packetReceivedFromLower" |
space-separated list of inbound packet signals to subscribe to |
pcapRecorder.dumpProtocols | string | "ethernetmac ppp ieee80211mac" |
space-separated list of protocol names as defined in the Protocol class |
pcapRecorder.packetFilter | string | "*" |
which packets are considered, matches all packets by default |
pcapRecorder.packetDataFilter | string | "*" |
which packets are considered based on the data they contain, matches all packets by default |
pcapRecorder.helpers | string | "" |
usable PcapRecorder::IHelper helpers for accept packettype and store/convert packet as specified linktype currently available: "inet::AckingMacToEthernetPcapRecorderHelper" |
pcapRecorder.alwaysFlush | bool | false |
flush the pcapFile after each write to ensure that all packets are captured in case of a crash |
pcapRecorder.displayStringTextFormat | string | "rec: %n pks" | |
macTable.agingTime | double | ||
macTable.addressTableFile | string | ||
stp.helloTime | double | ||
stp.forwardDelay | double | ||
stp.maxAge | double | ||
stp.bridgePriority | int | ||
stp.visualize | bool |
Source code
// // Model of an Ethernet switch. // // The duplexChannel attributes of the MACs must be set according to the // medium connected to the port; if collisions are possible (it's a bus or hub) // it must be set to false, otherwise it can be set to true. // By default used half duples CSMA/CD mac // // module EtherSwitch { parameters: @networkNode(); @labels(node,ethernet-node); @display("i=device/switch"); int numPcapRecorders = default(0); bool hasStatus = default(false); bool hasStp = default(false); bool csmacdSupport = default(true); // by default use CSMA/CD --FIXME remove string fcsMode @enum("declared","computed") = default("declared"); string spanningTreeProtocol = default("Stp"); int numEthInterfaces = default(0); // minimum number of ethernet interfaces eth[*].encap.typename = "EtherEncapDummy"; eth[*].csmacdSupport = csmacdSupport; eth[*].mac.typename = default(csmacdSupport ? "EtherMac" : "EtherMacFullDuplex"); *.fcsMode = fcsMode; *.interfaceTableModule = default(absPath(".interfaceTable")); *.macTableModule = default(absPath(".macTable")); relayUnit.hasStp = hasStp; encap.registerProtocol = true; gates: inout ethg[numEthInterfaces] @labels(EtherFrame-conn); submodules: status: NodeStatus if hasStatus { @display("p=100,400;is=s"); } l2NodeConfigurator: L2NodeConfigurator if hasStp { @display("p=100,300;is=s"); } interfaceTable: InterfaceTable { @display("p=100,200;is=s"); } pcapRecorder[numPcapRecorders]: PcapRecorder { @display("p=100,500;is=s"); } macTable: <default("MacAddressTable")> like IMacAddressTable { @display("p=100,100;is=s"); } relayUnit: <default(firstAvailable("Ieee8021dRelay","MacRelayUnit"))> like IMacRelayUnit { @display("p=800,300;is=m"); } stp: <spanningTreeProtocol> like ISpanningTree if hasStp { @display("p=474,92"); } up: MessageDispatcher { parameters: @display("p=800,160;b=1200,5"); } down: MessageDispatcher { parameters: @display("p=800,380;b=1200,5"); } eth[sizeof(ethg)]: <default("EthernetInterface")> like IEthernetInterface { parameters: mac.promiscuous = true; @display("p=250,450,row,150;q=txQueue"); } encap: <default("EtherEncap")> like IEtherEncap { @display("p=800,220"); } connections: relayUnit.ifOut --> down.in++; relayUnit.ifIn <-- down.out++; encap.lowerLayerIn <-- relayUnit.upperLayerOut; encap.lowerLayerOut --> relayUnit.upperLayerIn; encap.upperLayerIn <-- up.out++; encap.upperLayerOut --> up.in++; for i=0..sizeof(ethg)-1 { down.out++ --> eth[i].upperLayerIn; down.in++ <-- eth[i].upperLayerOut; eth[i].phys <--> { @display("m=s"); } <--> ethg[i]; } if hasStp { stp.relayIn <-- up.out++; // relayUnit.stpOut; stp.relayOut --> up.in++; // relayUnit.stpIn; } }File: src/inet/node/ethernet/EtherSwitch.ned