#/***************************************************************************** # * # Copyright 2019 AT&T Intellectual Property * # Copyright 2019 Nokia * # * # Licensed under the Apache License, Version 2.0 (the "License"); * # you may not use this file except in compliance with the License. * # You may obtain a copy of the License at * # * # http://www.apache.org/licenses/LICENSE-2.0 * # * # Unless required by applicable law or agreed to in writing, software * # distributed under the License is distributed on an "AS IS" BASIS, * # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * # See the License for the specific language governing permissions and * # limitations under the License. * # * #******************************************************************************/ This is an update to E2 Simulator, based on E2AP v1 defined in ORAN E2 Simulator is built as a library that supports basic functions and is linked by an E2 Simulation application. The E2 Simulator breaks up the simulation roles into two: 1. Base E2AP support 2. E2SM Support #1 is the role supported by E2 Simulator library, while #2 is supported by the calling application. An example of a calling application is provided in this repo under the E2 Simulator enables a specific E2SM to be supported by the calling application in the following way: * E2SM must be registered by the calling application * E2SM-specific code uses callbacks to handle interaction from xApp * E2SM-specific code must continuously implement simulation logic Registration of an E2SM with the E2 Simulator entails the following: * RAN function definition * Callback functions for any of the following: Subscription Control Any Responses The following is the E2 Simulator Main Program Flow 1. Upon startup, Simulator generates E2 Setup Request For each E2SM that is registered, include RAN function definition 2. Upon receiving incoming requests, decode Identify RAN function ID Call appropriate callback function for RAN function ID and request type Provide entire encoded request If no callback is provided, we return an error response 3. Upon receiving responses, decode: Identify RAN function ID If a callback is registered for this message type, call it based on RAN function ID and request type Provide entire encoded response If no callback is registered, no action is taken E2SM Callback Functions: * Callback functions are responsible for sending responses * They may also need to set up ongoing simulation messaging REPORT Service sends back periodic Indication messages containing REPORT INSERT Service sends back periodic Indication messages containing INSERT * They may need to associate incoming messages with existing service invocation Modify Subscription CONTROL message associated with INSERT * Base E2 simulator should not be concerned with these details; only specific E2SM code should be responsible for any messaging # INSTALLATION Instructions (tested on Ubuntu 16.04) 1. Install dependencies $ sudo apt-get update $ sudo apt-get install -y build-essential git cmake libsctp-dev lksctp-tools autoconf automake libtool bison flex libboost-all-dev $ sudo apt-get clean 2. Build the official e2sim $ mkdir build $ cd build $ cmake .. $ make package $ cmake .. -DDEV_PKG=1 $ make package # Building docker image and running simulator instance To start building docker image one should generate the `.deb` packages using following commands : ``` $ cd build // create folder if not present ``` Generate .deb packages and move it to `e2sm_examples/kpm_e2sm` folder : ``` cmake .. && make package && cmake .. -DDEV_PKG=1 && make package cp *.deb ../e2sm_examples/kpm_e2sm/ ``` Now we are ready to build the docker image using below command : ``` cd ../e2sm_examples/kpm_e2sm/ docker build -t . ``` if you wish to change the e2t address to connect then modify the `Dockerfile` in `e2sm_examples/kpm_e2sm/` path. ``` CMD kpm_sim 10.110.102.29 36422 ``` Create instance of simulator : ``` $ docker run ``` It will connect to specified e2t instance.