//
// This library is free software, you can redistribute it
// and/or modify
// it under  the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation;
// either version 2 of the License, or any later version.
// The library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Lesser General Public License for more details.
//



package inet.examples.mpls.ldp;

import inet.common.lifecycle.LifecycleController;
import inet.common.scenario.ScenarioManager;
import inet.node.inet.StandardHost;
import inet.node.mpls.LDP_LSR;
import ned.DatarateChannel;


network LDPTEST
{
    parameters:
        **.networkLayer.configurator.networkConfiguratorModule = "";

    types:
        channel C5 extends DatarateChannel
        {
            datarate = 600kbps;
            delay = 5us;
        }
        channel C10 extends DatarateChannel
        {
            datarate = 600kbps;
            delay = 10us;
        }
        channel C15 extends DatarateChannel
        {
            datarate = 600kbps;
            delay = 15us;
        }

    submodules:
        LSR1: LDP_LSR {
            parameters:
                peers = "ppp0 ppp1 ppp2";
                @display("p=150,200");
            gates:
                pppg[4];
        }
        LSR2: LDP_LSR {
            parameters:
                peers = "ppp0 ppp1 ppp2 ppp3";
                @display("p=250,200");
            gates:
                pppg[4];
        }
        LSR3: LDP_LSR {
            parameters:
                peers = "ppp0 ppp1 ppp2";
                @display("p=350,200");
            gates:
                pppg[4];
        }
        LSR4: LDP_LSR {
            parameters:
                peers = "ppp0 ppp1 ppp2";
                @display("p=250,100");
            gates:
                pppg[4];
        }
        LSR5: LDP_LSR {
            parameters:
                peers = "ppp0 ppp1 ppp2";
                @display("p=250,300");
            gates:
                pppg[4];
        }
        host1: StandardHost { // client
            parameters:
                @display("p=40,200;i=device/pc2");
        }
        host2: StandardHost { // client
            parameters:
                @display("p=440,200;i=device/pc2");
        }
        host3: StandardHost { // client
            parameters:
                @display("p=250,10;i=device/pc2");
        }
        host4: StandardHost { // client
            parameters:
                @display("p=250,390;i=device/pc2");
        }
        scenarioManager: ScenarioManager {
            parameters:
                @display("p=150,50");
        }
        lifecycleController: LifecycleController {
            parameters:
                @display("p=350,50");
        }
    connections:
        LSR1.pppg[0] <--> C15 <--> LSR2.pppg[0];
        LSR1.pppg[1] <--> C5 <--> LSR4.pppg[0];
        LSR1.pppg[2] <--> C5 <--> LSR5.pppg[0];
        LSR2.pppg[1] <--> C5 <--> LSR3.pppg[0];
        LSR2.pppg[2] <--> C5 <--> LSR4.pppg[1];
        LSR2.pppg[3] <--> C5 <--> LSR5.pppg[1];
        LSR3.pppg[1] <--> C10 <--> LSR4.pppg[2];
        LSR3.pppg[2] <--> C10 <--> LSR5.pppg[2];
        host1.pppg++ <--> C10 <--> LSR1.pppg[3];
        host2.pppg++ <--> C10 <--> LSR3.pppg[3];
        host3.pppg++ <--> C10 <--> LSR4.pppg[3];
        host4.pppg++ <--> C10 <--> LSR5.pppg[3];
}

