PPPInterface

Package: inet.linklayer.ppp

PPPInterface

compound module

PPP interface. Complements the PPP module with an output queue for QoS and RED support.

outputHook[numOutputHooks] : like IHook

Nop: Just lets messages through without any change or delay.

IHook: Generic module that can be inserted in some points in the model

Source:
outputHook[numOutputHooks]: <default("Nop")> like IHook if numOutputHooks>0 {
    @display("p=42,33");
} inputHook[numInputHooks] : like IHook

Nop: Just lets messages through without any change or delay.

IHook: Generic module that can be inserted in some points in the model

Source:
inputHook[numInputHooks]: <default("Nop")> like IHook if numInputHooks>0 {
    @display("p=177,33");
} ingressTC : like ITrafficConditioner

ITrafficConditioner: This is the interface of traffic conditioner modules.

Source:
ingressTC: <ingressTCType> like ITrafficConditioner if ingressTCType != "" {
    @display("p=177,100");
} egressTC : like ITrafficConditioner

ITrafficConditioner: This is the interface of traffic conditioner modules.

Source:
egressTC: <egressTCType> like ITrafficConditioner if egressTCType != "" {
    @display("p=42,100");
} queue : like IOutputQueue

IOutputQueue: Prototype for output queues.

Source:
queue: <queueType> like IOutputQueue if queueType != "" {
    parameters:
        @display("p=42,161;q=l2queue");
} ppp : PPP

PPP implementation.

Source:
ppp: PPP {
    parameters:
        queueModule = (parent.queueType == "" ? "" : "^.queue");
        txQueueLimit = (parent.queueType == "" ? 10000 : 1); // queue sends one packet at a time
        @display("p=98,207");
}

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
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

Properties

Name Value Description
display i=block/ifcard;bgb=214,249;bgl=53

Gates

Name Direction Size Description
upperLayerIn input
upperLayerOut output
phys inout

Unassigned submodule parameters

Name Type Default value Description
ppp.interfaceTableModule string

The path to the InterfaceTable module

ppp.mtu int 4470B

Source code

//
// 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(this.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 = (parent.queueType == "" ? "" : "^.queue");
                txQueueLimit = (parent.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;
}

File: src/inet/linklayer/ppp/PPPInterface.ned