ConnectionControlEnb.ned
NED File src/simu5g/stack/rrc/ConnectionControlEnb.ned
| Name | Type | Description |
|---|---|---|
| ConnectionControlEnb | simple module |
The control-plane entry point of a base station: the one module of the node that the control plane of other nodes -- the CoreControl, the other base stations, and the UEs' ConnectionControlUe -- talks to, and that the node's own data path turns to when it needs a bearer. |
Source code
// // Simu5G // // Authors: Andras Varga (OpenSim Ltd) // // 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.stack.rrc; // // The control-plane entry point of a base station: the one module of the node that // the control plane of other nodes -- the ~CoreControl, the other base stations, and // the UEs' ~ConnectionControlUe -- talks to, and that the node's own data path turns // to when it needs a bearer. // // Tunnels. It owns the node's GTP-U tunnel endpoint id (TEID) space, and programs the // node's tunnel endpoints, ~GtpUser (the N3/S1-U end) and ~GtpUserX2 (the X2-U end), // as the calls of the ~CoreControl and of the other base stations say: // - sessionTunnelSetup(): a session's tunnels at this base station: the downlink // tunnel, under a TEID allocated here, which also receives the downlink a handover // source forwards over X2-U, and the uplink tunnels into the core network; set up // once per session, whichever side asks first // - setForwardingTeid(): the session's downlink TEID at another base station, to // forward the downlink to it with during a handover // - sessionRelease(): the session's tunnels here are forgotten // - addDcTunnel(), setDcTunnelTeid(): the X2-U tunnels of a dual connectivity // bearer, one per direction, each allocated at its receiving end // // Bearers. It establishes the data radio bearers of the UEs it serves, from the bearer // definitions the ~BearerConfigurator holds (which it reads and never writes): a flow // the data path could not place gets the bearer of the definition it matches, an // unmapped QFI the bearer of the definition that maps it, and each bearer's entities // are installed at this node, at the UE, and at a dual connectivity secondary, through // their control-plane entry points -- the RRC signaling the model does not have. It // also owns the DRB identities of its UEs (one pool per UE-and-node pair), which a // torn-down bearer's returns to. // // Attach. A UE's leg connects here with connectionSetupRequest() (at initialization, at its // configured serving cell; during the run, when a detached leg finds a cell), stating // the type of the session the UE requests; the base station takes it on at its AMC and // registers the UE with the ~CoreControl (the INITIAL UE MESSAGE of S1AP/NGAP), which // establishes the UE's session and asks this base station to set up its resources // (sessionResourceSetup(): the tunnels, which keep the session's type, the UE's uplink // QoS rules, and the static bearers of the leg that carries them). A // leg that lost its cell, or whose UE leaves, says so with connectionLost(): the base // station releases its state for the leg and tells the core network. // // Handover. The serving base station decides on a leg's measurementReport() and // prepares the handover with the target over Xn: handoverRequest() carries the leg's // context to the target, which sets the UE's session tunnels up at the base station // the downlink will enter the RAN at, installs the leg's bearer configuration, and // starts holding the leg's downlink; // handoverRequestAck() brings the source the target's downlink TEIDs, on which the // source commands the leg (the UE's handoverCommand()) and forwards its downlink over // X2-U from then on. When the leg arrives (reconfigurationComplete()), the target // takes it on, has the ~CoreControl switch the session's downlink path (PATH SWITCH // REQUEST, reporting the tunnels the preparation set up; the base station the // downlink enters at learns of the switch with downlinkPathSwitched()), and releases // the leg at the source (ueContextRelease(), the UE CONTEXT RELEASE of Xn), which // stops forwarding and drops its state for the leg. A source that loses the leg // meanwhile cancels the handover at the target (handoverCancel()). // // Radio link failure. Either end's RLC may detect it; the detecting node releases its // end of the link and tells the other through its control-plane entry point // (radioLinkFailure() here, from a UE leg; the UE's from this base station), which // releases its end the same way -- and starts RRC re-establishment if configured // (see ~BearerManagement). // // Nothing outside the node reaches its ~GtpUser, ~GtpUserX2 or ~BearerManagement // directly; how the node is composed is its own business. Other nodes find this // module through the ~Binder's node directory. The D2D-capable variant, // ~ConnectionControlEnbD2D, adds the sidelink and multicast bearers. // simple ConnectionControlEnb like IConnectionControl { parameters: @display("i=block/control"); string binderModule = default("binder"); string bearerConfiguratorModule = default("bearerConfigurator"); string coreControlModule = default("coreControl"); string bearerManagementModule = default("^.bearerManagement"); string macModule = default("^.^.mac"); string handoverPacketHolderModule = default("^.^.handoverPacketHolder"); string gtpUserModule = default("^.^.^.relay.gtpUser"); string gtpUserX2Module = default("^.^.^.gtpUserX2"); int macNodeId; // The base station's node id; the NIC sets it from the node's string gateway = default(""); // The node's core network gateway, as its gateway parameter names it; ignored at a node not connected to a core network (a secondary node) }