MultiOperator.ned
NED File simulations/nr/mec/multiOperator/MultiOperator.ned
| Name | Type | Description |
|---|---|---|
| MultiOperator | network |
Two operator networks side by side. Each has three gNodeB cells chained by X2, an intermediate Upf that feeds them and carries the operator's MecHost, an anchor Upf, and a Ualcmp with its MecOrchestrator. The two anchor Upf nodes meet at a shared router, the only node the operators have in common. numUe_A and numUe_B NrUe terminals attach to operator A and B respectively, and numBgCells BackgroundCell cells can be added as interferers. |
Source code
// // Simu5G // // Copyright (C) 2019-2021 Giovanni Nardini, Giovanni Stea, Antonio Virdis et al. (University of Pisa) // Copyright (C) 2022-2026 Giovanni Nardini, Giovanni Stea et al. (University of Pisa) // // This file is part of a software released under the license included in file // "license.pdf". Please read LICENSE and README files before using it. // The above files and the present reference are part of the software itself, // and cannot be removed from it. // package simu5g.simulations.nr.mec.multiOperator; import inet.networklayer.configurator.ipv4.Ipv4NetworkConfigurator; import inet.networklayer.ipv4.RoutingTableRecorder; import inet.node.ethernet.Eth10G; import inet.node.inet.Router; import simu5g.common.binder.Binder; import simu5g.common.carrierAggregation.CarrierAggregation; import simu5g.corenetwork.bearerConfigurator.BearerConfigurator; import simu5g.nodes.NrUe; import simu5g.nodes.gNodeB; import simu5g.nodes.Upf; import simu5g.nodes.BackgroundCell; import simu5g.nodes.MecHost; import simu5g.mec.orchestrator.MecOrchestrator; import simu5g.mec.ualcmp.Ualcmp; import simu5g.world.radio.LteChannelControl; // // Two operator networks side by side. Each has three ~gNodeB cells chained by X2, // an intermediate ~Upf that feeds them and carries the operator's ~MecHost, an // anchor ~Upf, and a ~Ualcmp with its ~MecOrchestrator. The two anchor ~Upf nodes // meet at a shared router, the only node the operators have in common. numUe_A // and numUe_B ~NrUe terminals attach to operator A and B respectively, and // numBgCells ~BackgroundCell cells can be added as interferers. // // Operator B's MEC system -- its ~MecHost, ~MecOrchestrator and ~Ualcmp -- is // conditional on the enableMecOperatorB parameter. The addresses of the network // interfaces are assigned in demo.xml. // network MultiOperator { parameters: // The gNBs connect to a 5GC (Upf), so every cellular stack has SDAP: // TS 37.324 ties SDAP to the 5GC connection, not to the radio **.cellularNic.hasSdap = default(true); int numUe_A = default(1); int numUe_B = default(1); int numBgCells = default(0); bool enableMecOperatorB = default(true); @display("i=block/network2;bgb=1627,801;bgi=background/pisa"); submodules: channelControl: LteChannelControl { @display("p=50,25;is=s"); } routingRecorder: RoutingTableRecorder { @display("p=50,75;is=s"); } configurator: Ipv4NetworkConfigurator { @display("p=50,125;is=s"); } binder: Binder { @display("p=50,175;is=s"); } bearerConfigurator: BearerConfigurator { @display("p=50,225;is=s"); } carrierAggregation: CarrierAggregation { @display("p=50,275;is=s"); } router: Router { @display("p=750,73"); } upf_A: Upf { @display("p=625,173"); } upf_B: Upf { @display("p=875,173"); } iUpf_A: Upf { @display("p=623,281"); } iUpf_B: Upf { @display("p=874,281"); } gnb_A1: gNodeB { @display("p=274,454;is=vl"); } gnb_A2: gNodeB { @display("p=800,452;is=vl"); } gnb_A3: gNodeB { @display("p=1245,452;is=vl"); } gnb_B1: gNodeB { @display("p=330,514;is=vl"); } gnb_B2: gNodeB { @display("p=848,513;is=vl"); } gnb_B3: gNodeB { @display("p=1304,513;is=vl"); } bgCell[numBgCells]: BackgroundCell { @display("p=138,630;is=vl"); } ue_A[numUe_A]: NrUe { @display("p=717,691"); } ue_B[numUe_B]: NrUe { @display("p=937,691"); } //# MEC modules mecHost_A: MecHost { @display("p=273,281"); } mecHost_B: MecHost if enableMecOperatorB { @display("p=1245,281"); } mecOrchestrator_A: MecOrchestrator { @display("p=273,73"); } mecOrchestrator_B: MecOrchestrator if enableMecOperatorB { @display("p=1245,73"); } ualcmp_A: Ualcmp { @display("p=490,73"); } ualcmp_B: Ualcmp if enableMecOperatorB { @display("p=1027,73"); } connections: //# 5G Core Network connections upf_A.pppg++ <--> Eth10G <--> iUpf_A.pppg++; iUpf_A.pppg++ <--> Eth10G <--> mecHost_A.ppp++; iUpf_A.pppg++ <--> Eth10G <--> gnb_A1.ppp; iUpf_A.pppg++ <--> Eth10G <--> gnb_A2.ppp; iUpf_A.pppg++ <--> Eth10G <--> gnb_A3.ppp; upf_B.pppg++ <--> Eth10G <--> iUpf_B.pppg++; iUpf_B.pppg++ <--> Eth10G <--> mecHost_B.ppp++ if enableMecOperatorB; iUpf_B.pppg++ <--> Eth10G <--> gnb_B1.ppp; iUpf_B.pppg++ <--> Eth10G <--> gnb_B2.ppp; iUpf_B.pppg++ <--> Eth10G <--> gnb_B3.ppp; //# MEC-related connections router.pppg++ <--> Eth10G <--> upf_A.dnPppg; ualcmp_A.ppp++ <--> Eth10G <--> router.pppg++; ualcmp_A.toMecOrchestrator --> mecOrchestrator_A.fromUALCMP; ualcmp_A.fromMecOrchestrator <-- mecOrchestrator_A.toUALCMP; router.pppg++ <--> Eth10G <--> upf_B.dnPppg; ualcmp_B.ppp++ <--> Eth10G <--> router.pppg++ if enableMecOperatorB; ualcmp_B.toMecOrchestrator --> mecOrchestrator_B.fromUALCMP if enableMecOperatorB; ualcmp_B.fromMecOrchestrator <-- mecOrchestrator_B.toUALCMP if enableMecOperatorB; //# X2 connections gnb_A1.x2++ <--> Eth10G <--> gnb_A2.x2++; gnb_A2.x2++ <--> Eth10G <--> gnb_A3.x2++; gnb_B1.x2++ <--> Eth10G <--> gnb_B2.x2++; gnb_B2.x2++ <--> Eth10G <--> gnb_B3.x2++; }