Package: inet.linklayer.ppp


compound module

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

ITrafficConditioner ITrafficConditioner IOutputQueue Ppp

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.


Name Type Description
InterfaceEntry compound module (no description)


Name Type Default value Description
displayStringTextFormat string "%a (%i)\n%m"
interfaceTableModule string


Name Value Description
class InterfaceEntry
display i=block/ifcard;bgl=53


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.sendRawBytes bool false

when true packets are serialized into a sequence of bytes before sending out

ppp.mtu int 4470B
ppp.stopOperationExtraTime double -1s

extra time after lifecycle stop operation finished

ppp.stopOperationTimeout double 2s

timeout value for lifecycle stop operation

Source code

// PPP interface. Complements the ~PPP module with an output queue
// for QoS and RED support.
module PppInterface extends InterfaceEntry like IPppInterface
        string interfaceTableModule;
        *.interfaceTableModule = default(absPath(interfaceTableModule));
        input upperLayerIn;
        output upperLayerOut;
        inout phys @labels(PppFrame);
        ingressTC: <default("")> like ITrafficConditioner if typename != "" {
        egressTC: <default("")> like ITrafficConditioner if typename != "" {
        queue: <default("DropTailQueue")> like IOutputQueue if typename != "" {
        ppp: Ppp {
                queueModule = (!exists(queue) ? "" : "^.queue");
                txQueueLimit = (!exists(queue) ? 10000 : 1); // queue sends one packet at a time
        upperLayerIn --> { @display("m=n"); } --> egressTC.in if exists(egressTC);
        upperLayerIn --> { @display("m=n"); } --> queue.in if !exists(egressTC) && exists(queue);
        upperLayerIn --> { @display("m=n"); } --> ppp.upperLayerIn if !exists(egressTC) && !exists(queue);

        egressTC.out --> queue.in if exists(egressTC) && exists(queue);
        egressTC.out --> ppp.upperLayerIn if exists(egressTC) && !exists(queue);

        queue.out --> ppp.upperLayerIn if exists(queue);

        phys <--> { @display("m=s"); } <--> ppp.phys;

        ppp.upperLayerOut --> { @display("m=n"); } --> upperLayerOut if !exists(ingressTC);

        ppp.upperLayerOut --> ingressTC.in if exists(ingressTC);
        ingressTC.out --> { @display("m=n"); } --> upperLayerOut if exists(ingressTC);

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