Package: inet.linklayer.ethernet
EthernetInterface
compound moduleEthernet network interface. Complements EtherMAC and EtherEncap with an output queue for QoS and RED support.
Usage diagram
The following diagram shows usage relationships between types. Unresolved types are missing from the diagram.
Inheritance diagram
The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.
Parameters
Name | Type | Default value | Description |
---|---|---|---|
interfaceTableModule | string | ||
csmacdSupport | bool | false |
by default CSMA/CD is turned off, so only point-to-point duplex links are supported. |
macType | string | csmacdSupport ? "EtherMAC" : "EtherMACFullDuplex" | |
queueType | string | "" |
DropTailQueue, or a Diffserv queue; set to "" for use of an internal queue |
ingressTCType | string | "" |
a module type implementing ITrafficConditioner for optional traffic conditioning of incoming traffic |
egressTCType | string | "" |
a module type implementing ITrafficConditioner for optional traffic conditioning of outgoing traffic |
encapType | string | "EtherEncap" |
module for encapsulation/decapsulation; use EtherEncapDummy for no encapsulation/decapsulation |
numOutputHooks | int | 0 | |
numInputHooks | int | 0 |
Properties
Name | Value | Description |
---|---|---|
display | i=block/ifcard;bgl=2 |
Gates
Name | Direction | Size | Description |
---|---|---|---|
upperLayerIn | input | ||
upperLayerOut | output | ||
phys | inout |
Unassigned submodule parameters
Name | Type | Default value | Description |
---|---|---|---|
queue.pauseQueue.frameCapacity | int | 100 | |
mac.promiscuous | bool |
if true, all packets are received, otherwise only the ones with matching destination MAC address |
|
mac.address | string |
MAC address as hex string (12 hex digits), or "auto". "auto" values will be replaced by a generated MAC address in init stage 0. |
|
mac.duplexMode | bool |
selects full-duplex (true) or half-duplex (false) operation |
|
mac.mtu | int |
Source code
// // Ethernet network interface. Complements ~EtherMAC and ~EtherEncap // with an output queue for QoS and RED support. // module EthernetInterface like IWiredNic { parameters: string interfaceTableModule; bool csmacdSupport = default(false); // by default CSMA/CD is turned off, so only point-to-point duplex links are supported. string macType = default(csmacdSupport ? "EtherMAC" : "EtherMACFullDuplex"); // ~EtherMAC or ~EtherMACFullDuplex string queueType = default(""); // ~DropTailQueue, or a Diffserv queue; set to "" for use of an internal queue string ingressTCType = default(""); // a module type implementing ~ITrafficConditioner for optional traffic conditioning of incoming traffic string egressTCType = default(""); // a module type implementing ~ITrafficConditioner for optional traffic conditioning of outgoing traffic string encapType = default("EtherEncap"); // module for encapsulation/decapsulation; use ~EtherEncapDummy for no encapsulation/decapsulation int numOutputHooks = default(0); int numInputHooks = default(0); @display("i=block/ifcard;bgl=2"); *.interfaceTableModule = default(absPath(this.interfaceTableModule)); gates: input upperLayerIn; output upperLayerOut; inout phys @labels(EtherFrame); submodules: outputHook[numOutputHooks]: <default("Nop")> like IHook if numOutputHooks>0 { @display("p=80,98"); } inputHook[numInputHooks]: <default("Nop")> like IHook if numInputHooks>0 { @display("p=265,83"); } ingressTC: <ingressTCType> like ITrafficConditioner if ingressTCType != "" { @display("p=292,158"); } egressTC: <egressTCType> like ITrafficConditioner if egressTCType != "" { @display("p=53,158"); } queue: EtherQoSQueue if queueType != "" { parameters: dataQueueType = parent.queueType; @display("p=107,263;q=l2queue"); } mac: <macType> like IEtherMAC { parameters: queueModule = (parent.queueType == "" ? "" : "^.queue"); txQueueLimit = (parent.queueType == "" ? 10000 : 1); // queue sends one packet at a time @display("p=182,321"); } encap: <encapType> like IEtherEncap { parameters: @display("p=182,205"); } connections: mac.upperLayerOut --> encap.lowerLayerIn; mac.phys <--> { @display("m=s"); } <--> phys; if queueType != "" { encap.lowerLayerOut --> queue.in; queue.out --> mac.upperLayerIn; } encap.lowerLayerOut --> mac.upperLayerIn if queueType == ""; // no input hooks, no ingressTC encap.upperLayerOut --> { @display("m=n"); } --> upperLayerOut if numInputHooks == 0 && ingressTCType == ""; // no input hooks, there is ingressTC if numInputHooks == 0 && ingressTCType != "" { encap.upperLayerOut --> ingressTC.in; ingressTC.out --> { @display("m=n"); } --> upperLayerOut; } // there are input hooks if numInputHooks > 0 { inputHook[numInputHooks-1].out --> { @display("m=n"); } --> upperLayerOut; } for i=0..numInputHooks-2 { inputHook[i].out --> inputHook[i+1].in; } // there are input hooks, no ingressTC if numInputHooks > 0 && ingressTCType == "" { encap.upperLayerOut --> inputHook[0].in; } // there are input hooks, there is ingressTC if numInputHooks > 0 && ingressTCType != "" { encap.upperLayerOut --> ingressTC.in; ingressTC.out --> inputHook[0].in; } // chain output hooks for i=0..numOutputHooks-2 { outputHook[i].out --> outputHook[i+1].in; } // no output hooks, no egressTC upperLayerIn --> { @display("m=n"); } --> encap.upperLayerIn if numOutputHooks == 0 && egressTCType == ""; // there are output hooks if numOutputHooks > 0 { upperLayerIn --> { @display("m=n"); } --> outputHook[0].in; } // no output hooks, there is egressTC if numOutputHooks == 0 && egressTCType != "" { upperLayerIn --> { @display("m=n"); } --> egressTC.in; } // there is egressTC if egressTCType != "" { egressTC.out --> encap.upperLayerIn; } // there are output hooks, no egressTC if numOutputHooks > 0 && egressTCType == "" { outputHook[numOutputHooks-1].out --> encap.upperLayerIn; } // there are output hooks, there is egressTC if numOutputHooks > 0 && egressTCType != "" { outputHook[numOutputHooks-1].out --> egressTC.in; } }File: src/inet/linklayer/ethernet/EthernetInterface.ned