PPP interface. Complements the PPP module with an output queue for QoS and RED support.
The following diagram shows usage relationships between types. Unresolved types are missing from the diagram.
The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.
Name | Type | Default value | Description |
---|---|---|---|
interfaceTableModule | string | ||
queueType | string | "DropTailQueue" |
DropTailQueue, a Diffserv queue, or empty for use 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 |
numOutputHooks | int | 0 | |
numInputHooks | int | 0 |
Name | Value | Description |
---|---|---|
display | i=block/ifcard;bgb=214,249;bgl=53 |
Name | Direction | Size | Description |
---|---|---|---|
upperLayerIn | input | ||
upperLayerOut | output | ||
phys | inout |
Name | Type | Default value | Description |
---|---|---|---|
ppp.interfaceTableModule | string |
The path to the InterfaceTable module |
|
ppp.mtu | int | 4470B |
// // PPP interface. Complements the ~PPP module with an output queue // for QoS and RED support. // module PPPInterface like IWiredNic { parameters: @display("i=block/ifcard;bgb=214,249;bgl=53"); string interfaceTableModule; string queueType = default("DropTailQueue"); // DropTailQueue, a Diffserv queue, or empty for use 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 int numOutputHooks = default(0); int numInputHooks = default(0); *.interfaceTableModule = default(absPath(interfaceTableModule)); gates: input upperLayerIn; output upperLayerOut; inout phys @labels(PPPFrame); submodules: outputHook[numOutputHooks]: <default("Nop")> like IHook if numOutputHooks>0 { @display("p=42,33"); } inputHook[numInputHooks]: <default("Nop")> like IHook if numInputHooks>0 { @display("p=177,33"); } ingressTC: <ingressTCType> like ITrafficConditioner if ingressTCType != "" { @display("p=177,100"); } egressTC: <egressTCType> like ITrafficConditioner if egressTCType != "" { @display("p=42,100"); } queue: <queueType> like IOutputQueue if queueType != "" { parameters: @display("p=42,161;q=l2queue"); } ppp: PPP { parameters: queueModule = (queueType == "" ? "" : "^.queue"); txQueueLimit = (queueType == "" ? 10000 : 1); // queue sends one packet at a time @display("p=98,207"); } connections: upperLayerIn --> { @display("m=n"); } --> outputHook[0].in if numOutputHooks > 0; upperLayerIn --> { @display("m=n"); } --> egressTC.in if numOutputHooks == 0 && egressTCType != ""; upperLayerIn --> { @display("m=n"); } --> queue.in if numOutputHooks == 0 && egressTCType == "" && queueType != ""; upperLayerIn --> { @display("m=n"); } --> ppp.netwIn if numOutputHooks == 0 && egressTCType == "" && queueType == ""; egressTC.out --> queue.in if egressTCType != "" && queueType != ""; egressTC.out --> ppp.netwIn if egressTCType != "" && queueType == ""; for i=0..numOutputHooks-2 { outputHook[i].out --> outputHook[i+1].in; } outputHook[numOutputHooks-1].out --> egressTC.in if numOutputHooks > 0 && egressTCType != ""; outputHook[numOutputHooks-1].out --> queue.in if numOutputHooks > 0 && egressTCType == "" && queueType != ""; outputHook[numOutputHooks-1].out --> ppp.netwIn if numOutputHooks > 0 && egressTCType == "" && queueType == ""; queue.out --> ppp.netwIn if queueType != ""; phys <--> { @display("m=s"); } <--> ppp.phys; ppp.netwOut --> { @display("m=n"); } --> upperLayerOut if numInputHooks == 0 && ingressTCType == ""; ppp.netwOut --> ingressTC.in if ingressTCType != ""; ingressTC.out --> { @display("m=n"); } --> upperLayerOut if ingressTCType != "" && numInputHooks == 0; ppp.netwOut --> inputHook[0].in if numInputHooks > 0 && ingressTCType == ""; ingressTC.out --> inputHook[0].in if numInputHooks > 0 && ingressTCType != ""; for i=0..numInputHooks-2 { inputHook[i].out --> inputHook[i+1].in; } inputHook[numInputHooks-1].out --> { @display("m=n"); } --> upperLayerOut if numInputHooks > 0; }