Fix to convert service name to IP during Route update Request 00/3100/2
authorwahidw <abdulwahid.w@nokia.com>
Wed, 1 Apr 2020 16:39:15 +0000 (16:39 +0000)
committerwahidw <abdulwahid.w@nokia.com>
Wed, 1 Apr 2020 17:01:03 +0000 (17:01 +0000)
Change-Id: Icd83a63454a01cf4a690e5cafde1fef304149d93
Signed-off-by: wahidw <abdulwahid.w@nokia.com>
20 files changed:
RELNOTES
container-tag.yaml
docs/api-docs.rst
docs/developer-guide.rst
docs/example/libnng.so [new file with mode: 0644]
docs/example/rtmgr-config.yaml [new file with mode: 0755]
docs/example/rtmgr_exe.sh [new file with mode: 0755]
docs/images/rtmgr_appmgr_cn.png [new file with mode: 0644]
docs/images/rtmgr_ass_dis_e2t.png [new file with mode: 0644]
docs/images/rtmgr_create_delete_e2t.png [new file with mode: 0644]
docs/images/rtmgr_flows.ppt [new file with mode: 0644]
docs/images/rtmgr_startup.png [new file with mode: 0644]
docs/images/rtmgr_submgr_add_delete.png [new file with mode: 0644]
docs/images/rtmgr_submgr_merge_add.png [new file with mode: 0644]
docs/images/rtmgr_submgr_merge_delete.png [new file with mode: 0644]
docs/index.rst
docs/installation-guide-rtmgr-as-exe.rst [new file with mode: 0644]
docs/installation-guide-rtmgr-as-pod.rst [new file with mode: 0644]
docs/installation-guide.rst
pkg/sbi/sbi.go

index 958037e..354ff2a 100644 (file)
--- a/RELNOTES
+++ b/RELNOTES
@@ -1,3 +1,6 @@
+### v0.5.6
+* Fix to convert service name to IP during Route update Request
+
 ### v0.5.5
 * Supporting xApp to xApp Routes handling 
 
index d624928..4f49c1f 100644 (file)
@@ -2,4 +2,4 @@
 # By default this file is in the docker build directory,
 # but the location can configured in the JJB template.
 ---
-tag: 0.5.5
+tag: 0.5.6
index 882f99a..7a43b1e 100644 (file)
@@ -27,16 +27,94 @@ This is the API-docs of ROUTING MANAGER
 
 .. note
 
-.. This section is used to describe a software API exposed from a O-RAN software component.  
-   
-.. This note must be removed after content has been added.
-
 
 API Introduction
 -----------------
-.. Please add what API a component have exposed.
+Routing Manager interacts with the following RIC platform components.
+
+.. code::
+
+   * Appmgr:
+
+     1. POST API to request the xapp list available
+      http://<rtmgr_http_service_IP>/ric/v1/xapps
+     2. POST API to send the xapps that either get deployed or undeployed
+      http://<rtmgr_http_service_IP>/ric/v1/handles/xapp-handle
+             
+
+.. code::   
+
+   * Submgr:
+
+     1. POST API to provide the subscription details 
+      http://<rtmgr_http_service_IP>/ric/v1/handles/xapp-subscription-handle
+
+     2. DELETE API to delete the subscription details
+      http://<rtmgr_http_service_IP>/ric/v1/handles/xapp-subscription-handle
+
+     3. PUT API to update the subscriptionID for given xApp.
+      http://<rtmgr_http_service_IP>/ric/v1/handles/xapp-subscription-handle/{subscription_id}
+
+.. code::    
+
+   * E2Mgr:
+
+     1. POST API to Add E2Termination Instance
+      http://<rtmgr_http_service_IP>/ric/v1/handles/e2t
+
+     2. DELETE API to Delete E2Termination Instance
+      http://<rtmgr_http_service_IP>/ric/v1/handles/e2t 
+
+     3. POST API to Associate RAN names to a given E2Termination
+      http://<rtmgr_http_service_IP>/ric/v1/handles/associate-ran-to-e2t
+
+     4. DELETE API to Dissociate RAN names to a given E2Termination
+      http://<rtmgr_http_service_IP>/ric/v1/handles/dissociate-ran
+
+.. code::    
+
+   * Health Check:
+
+     1. GET API's to retrieve the Aliveness and Readyness checks
+      http://<rtmgr_pod_IP>:8080/ric/v1/health/alive
+      http://<rtmgr_pod_IP>:8080/ric/v1/health/ready
+       
+
 
 API Functions
 -------------
-.. Please states the API functions.
+1. Routing Manager request the xapp list and E2Term list available during startup.
+
+.. image:: images/rtmgr_startup.png
+   :width: 600
+
+2. AppMgr send complete xapps list whenever a xapp is deployed/undeployed
+
+.. image:: images/rtmgr_appmgr_cn.png
+   :width: 600
+
+3. Subscription Manager adds/deletes subscription ID 
+
+.. image:: images/rtmgr_submgr_add_delete.png
+   :width: 600
+
+4. Update the subscription ID for given xApp.(Subscription Merge Add)
+
+.. image:: images/rtmgr_submgr_merge_add.png
+   :width: 600
+
+5. Update the subscription ID for given xApp.(Subscription Merge Delete)
+
+.. image:: images/rtmgr_submgr_merge_delete.png
+   :width: 600
+
+6. E2Mgr sends request to Add/Delete E2Termination Instance
+
+.. image:: images/rtmgr_create_delete_e2t.png
+   :width: 600
+
+7. E2Mgr sends request to Associate/Dissociate RAN names to a given E2Termination Instance
+
+.. image:: images/rtmgr_ass_dis_e2t.png
+   :width: 600
 
index 749b236..de70871 100644 (file)
@@ -27,11 +27,6 @@ Overview
 --------
 Routing Manager is a basic platform service of RIC. It is responsible for distributing routing policies among the other platform components and xApps.
 
-The routing manager has two ways to get the xapp details from xapp manager - httpGetter or httpRESTful.
-In case of httpGetter, the implemented logic periodically queries the xApp Manager component for xApps' list.
-Where in httpRESTful, starts a http server and creates a webhook subscription in xapp manager to update about changes in xapps and waits changed data to arrive on the REST http server.
-Either ways, the xapp data received is stored and then processed to create routing policies and distributes them to all xApps.
-
 Architecture
 ------------
 The architecture consists of the following five well defined functions:
@@ -42,44 +37,139 @@ The architecture consists of the following five well defined functions:
 * SouthBound Interface (__SBI__): Maintains the communication channels towards RIC tenants and control components
 * Control Logic (__RTMGR__): Controls the operation of above functions
 
+Configuration Settings for Routing Manager
+------------------------------------------
+The configuration related parameters for routing manager are provided in the following files -
 
-Installing Routing Manager
---------------------------
-* Tag the `rtmgr` container according to the project release and push it to a registry accessible from all minions of the Kubernetes cluster.
-* Edit the container image section of `rtmgr-dep.yaml` file according to the `rtmgr` image tag.
+ConfigMap: ric-dep/helm/rtmgr/config.yaml:
+------------------------------------------
+This file has the major configurations. The description for each of them is given below -
 
-Deploying Routing Manager
--------------------------
-* Issue the `kubectl create -f {manifest.yaml}` command in the following order:
-   1. `manifests/namespace.yaml`: creates the `example` namespace for routing-manager resources
-   2. `manifests/rtmgr/rtmgr-cfg.yaml`: creates default routes config file for routing-manager
-   3. `manifests/rtmgr/rtmgr-dep.yaml`: instantiates the `rtmgr` deployment in the `example` namespace
-   4. `manifests/rtmgr/rtmgr-svc.yaml`: creates the `rtmgr` service in `example` namespace
+* PlatformComponents : Represents the platform components that needs route table to be distributed. They usually contain the hard coded name(used internally by Routing Manager), the FQDN name and the port.
 
-NOTE: The above manifest files will deploy routing manager with NBI as httpRESTful which would not succeed unless there is an xapp manager running at the defined xm-url. The solution is either to deploy a real XAPP manager before deploying routing-manager or start the mock xmgr as mentioned in [Testing](#testing-and-troubleshoting).
+* XMURL : The URL used by RM to query Appmgr to provide the Xapp list during start-up
 
-Testing and Troubleshooting
----------------------------
-Testing with Kubernetes
------------------------
-Routing Manager's behaviour can be tested using the mocked xApp Manager, traffic generator xApp and receiver xApp.
+* EMURL : The URL used by RM to query E2Mgr to provide the E2Termination list during start-up
+
+* RTFILE: File based data store that RM uses to store the route table information and other internal details.
+
+* CFGFILE: Stores the path of config file in RTE. Mandatorily needed to start RM.
+
+* RPE/SBI/SBIURL/NBI/NBIURL/SDL : Derived from the RM helm chart and needed for respective module initialization.
+
+* logger : To change the log level setting
+
+* local : Http server that listens on the specified port. This port used for dumping RTFILE contains.
 
-* Checkout and compile both xApp receiver and xApp Tx generator of RIC admission control project:
-  `https://gerrit.o-ran-sc.org/r/admin/repos/ric-app/admin`
+* rmr : RMR messaging related attributes needed by xapp-framework.
 
-* Copy the `adm-ctrl-xapp` binary to `./test/docker/xapp.build` folder furthermore copy all RMR related dinamycally linked library under `./test/docker/xapp.build/usr` folder. Issue `docker build ./test/docker/xapp.build` command. Tag the recently created docker image and push it to the common registry.
+  * protPort: RMR Listening Port
+  * maxSize: Maximum Transmission Buffer size
+  * threadType: Always set to 1 so that RM doesn't wait for static Route table initialization.
 
-* Copy the `test-tx` binary to `./test/docker/xapp-tx.build` folder furthermore copy all RMR related dinamycally linked library under `./test/docker/xapp.build/usr` folder. Issue `docker build ./test/docker/xapp-tx.build` command.  Tag the recently created docker image and push it to the common registry.
+* PlatformRoutes: Static platform routes between the Platform Components. Based on these rules the routes wll get populated. The syntax is based on the RMR route table syntax.
 
-* Enter the `./test/docker/xmgr.build` folder and issue `docker build .`.  Tag the recently created docker image and push it to the common registry.
+  * messagetype: Message types as defined in mtypes.go(rmr.h) in xapp-framework(RMR)
+  * senderendpoint: Message originating address in the form IP:PORT
+  * subscriptionid: Subscription ID to be filled, mostlt "-1" for all static routes
+  * endpoint: Message reception address in the form IP:PORT
+  * meid: meid entry is required to be populated by "%meid"
+  
+  
+Env File: ric-dep/helm/rtmgr/env.yaml:
+---------------------------------------
+This file contains attributes based that are required by RMR.
 
-* Modify the docker image version in each kuberbetes manifest files under `./test/kubernetes/` folder accordingly then issue the `kubectl create -f {manifest.yaml}` on each file.
 
-Once the routing manager is started, it retrievs the initial xapp list from `xmgr` via HTTPGet additonaly it starts to listen on http://rtmgr:8888/v1/handles/xapp-handle endpoint and ready to receive xapp list updates.
+Installing RIC Platform - Routing Manager gets deployed automatically
+---------------------------------------------------------------------
+Follow the procedure found in 
 
-* Edit the provided `test/data/xapp.json` file accordingly and issue the following curl command to update `rtmgr's` xapp list.
+https://docs.o-ran-sc.org/projects/o-ran-sc-ric-plt-ric-dep/en/latest/
 
-  `curl --header "Content-Type: application/json" --request POST --data '@./test/data/xapps.json' http://10.244.2.104:8888/v1/handles/xapp-handle`
+This will be the best way to test the bugs and integrate new features. 
+
+Testing and Troubleshooting
+---------------------------
+
+1. Routing Manager is in Continous Reboot loop.
+  
+   1a. Check if the appmgr POD is running by running the command. This command should show it as "Running"
+   1b. If appmgr is running as expected, check the logs of appmgr,if helm is properly initialised.
+
+.. code:: bash
+
+   1a .#kubectl get pods -n ricplt | grep appmgr
+   deployment-ricplt-appmgr-77bcbb8886-p4zvq          2/2     Running   0          2d3h
+
+   2a .# kubectl logs  deployment-ricplt-appmgr-77bcbb8886-p4zvq -n ricplt container-ricplt-appmgr | grep "Helm init done successfully"
+   {"ts":1585551084410,"crit":"INFO","id":"appmgr","mdc":{"time":"2020-03-30T06:51:24Z","xm":"0.4.1"},"msg":"Helm init done successfully!"}
+
+   
+2. Check the Routes generated by Routing Manager and its internal map.
+
+   If this REST API is command fired, it should return the list of routes generated for platform components and the file contents. This should match with the user expectations while debugging.
+
+.. code:: bash
+
+   curl -X GET "http://<KONGPROXY_IP>:3800/ric/v1/getdebuginfo" -H  "accept: application/json" | json_pp
+
+   # curl -X GET "http://10.101.18.182:3800/ric/v1/getdebuginfo" -H  "accept: application/json" | json_pp
+   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
+                                  Dload  Upload   Total   Spent    Left  Speed
+   100  3765    0  3765    0     0  71037      0 --:--:-- --:--:-- --:--:-- 71037
+   {
+    "RouteConfigs" : "{\n\"XApps\": null,\n\"E2Ts\": {\n\"10.102.131.163:38000\": {\n\"name\": \"E2TERMINST\",\n\"fqdn\": \"10.102.131.163:38000\",\n\"ranlist\": []\n},\n\"10.103.165.47:38000\": {\n\"name\": \"E2TERMINST\",\n\"fqdn\": \"10.103.165.47:38000\",\n\"ranlist\": []\n},\n\"10.104.160.127:38000\": {\n\"name\": \"E2TERMINST\",\n\"fqdn\": \"10.104.160.127:38000\",\n\"ranlist\": []\n},\n\"10.104.30.46:38000\": {\n\"name\": \"E2TERMINST\",\n\"fqdn\": \"10.104.30.46:38000\",\n\"ranlist\": []\n},\n\"10.108.90.168:38000\": {\n\"name\": \"E2TERMINST\",\n\"fqdn\": \"10.108.90.168:38000\",\n\"ranlist\": []\n},\n\"10.110.3.220:38000\": {\n\"name\": \"E2TERMINST\",\n\"fqdn\": \"10.110.3.220:38000\",\n\"ranlist\": []\n},\n\"10.97.122.250:38000\": {\n\"name\": \"E2TERMINST\",\n\"fqdn\": \"10.97.122.250:38000\",\n\"ranlist\": []\n},\n\"10.98.173.62:38000\": {\n\"name\": \"E2TERMINST\",\n\"fqdn\": \"10.98.173.62:38000\",\n\"ranlist\": []\n}\n},\n\"MeidMap\": [],\n\"Pcs\": [\n{\n\"name\": \"E2TERM\",\n\"fqdn\": \"service-ricplt-e2term-rmr.ricplt\",\n\"port\": 38000\n},\n{\n\"name\": \"SUBMAN\",\n\"fqdn\": \"service-ricplt-submgr-rmr.ricplt\",\n\"port\": 4560\n},\n{\n\"name\": \"E2MAN\",\n\"fqdn\": \"service-ricplt-e2mgr-rmr.ricplt\",\n\"port\": 3801\n},\n{\n\"name\": \"RSM\",\n\"fqdn\": \"service-ricplt-rsm-rmr.ricplt\",\n\"port\": 4801\n},\n{\n\"name\": \"A1MEDIATOR\",\n\"fqdn\": \"service-ricplt-a1mediator-rmr.ricplt\",\n\"port\": 4562\n}\n]\n}",
+   "RouteTable" : [
+      "newrt|start\n",
+      "mse|12010,service-ricplt-submgr-rmr.ricplt:4560|-1|%meid\n",
+      "mse|12020,service-ricplt-submgr-rmr.ricplt:4560|-1|%meid\n",
+      "mse|12011|-1|service-ricplt-submgr-rmr.ricplt:4560\n",
+      "mse|12021|-1|service-ricplt-submgr-rmr.ricplt:4560\n",
+      "mse|12012|-1|service-ricplt-submgr-rmr.ricplt:4560\n",
+      "mse|12022|-1|service-ricplt-submgr-rmr.ricplt:4560\n",
+      "mse|10060,service-ricplt-e2mgr-rmr.ricplt:3801|-1|%meid\n",
+      "mse|10070,service-ricplt-e2mgr-rmr.ricplt:3801|-1|%meid\n",
+      "mse|10071,service-ricplt-e2mgr-rmr.ricplt:3801|-1|%meid\n",
+      "mse|10360,service-ricplt-e2mgr-rmr.ricplt:3801|-1|%meid\n",
+      "mse|10081,service-ricplt-e2mgr-rmr.ricplt:3801|-1|%meid\n",
+      "mse|10082,service-ricplt-e2mgr-rmr.ricplt:3801|-1|%meid\n",
+      "mse|10371,service-ricplt-e2mgr-rmr.ricplt:3801|-1|%meid\n",
+      "mse|10372,service-ricplt-e2mgr-rmr.ricplt:3801|-1|%meid\n",
+      "mse|1100|-1|service-ricplt-e2mgr-rmr.ricplt:3801\n",
+      "mse|10061|-1|service-ricplt-e2mgr-rmr.ricplt:3801\n",
+      "mse|10062|-1|service-ricplt-e2mgr-rmr.ricplt:3801\n",
+      "mse|10070|-1|service-ricplt-e2mgr-rmr.ricplt:3801\n",
+      "mse|10071|-1|service-ricplt-e2mgr-rmr.ricplt:3801\n",
+      "mse|10361|-1|service-ricplt-e2mgr-rmr.ricplt:3801\n",
+      "mse|10362|-1|service-ricplt-e2mgr-rmr.ricplt:3801\n",
+      "mse|10370|-1|service-ricplt-e2mgr-rmr.ricplt:3801\n",
+      "mse|1080|-1|service-ricplt-e2mgr-rmr.ricplt:3801\n",
+      "mse|10030|-1|service-ricplt-e2mgr-rmr.ricplt:3801\n",
+      "mse|10080|-1|service-ricplt-e2mgr-rmr.ricplt:3801\n",
+      "mse|10020|-1|service-ricplt-e2mgr-rmr.ricplt:3801\n",
+      "mse|1102|-1|service-ricplt-e2mgr-rmr.ricplt:3801\n",
+      "mse|1200,service-ricplt-e2mgr-rmr.ricplt:3801|-1|\n",
+      "mse|1210,service-ricplt-e2mgr-rmr.ricplt:3801|-1|\n",
+      "mse|1220,service-ricplt-e2mgr-rmr.ricplt:3801|-1|\n",
+      "mse|20012|-1|service-ricplt-a1mediator-rmr.ricplt:4562\n",
+      "mse|20011|-1|service-ricplt-a1mediator-rmr.ricplt:4562\n",
+      "mse|1090,service-ricplt-e2mgr-rmr.ricplt:3801|-1|10.104.160.127:38000;10.108.90.168:38000;10.102.131.163:38000;10.97.122.250:38000;10.98.173.62:38000;10.103.165.47:38000;10.110.3.220:38000;10.104.30.46:38000\n",
+      "mse|1101,service-ricplt-e2mgr-rmr.ricplt:3801|-1|10.104.160.127:38000;10.108.90.168:38000;10.102.131.163:38000;10.97.122.250:38000;10.98.173.62:38000;10.103.165.47:38000;10.110.3.220:38000;10.104.30.46:38000\n",
+      "newrt|end\n",
+      "meid_map|start\nmeid_map|end|0\n"
+   ]
+   }
+
+3. Further debugging can be done by checking the logs of routing manager. Debug flag if enabled in config map will allow more logs to be printed on the console
+
+.. code:: bash
+
+   #To enable debug logs, ensure this variable is as shown below in  ric-dep/helm/rtmgr/templates/config.yaml
+           "logger":
+                 "level": 4
+   #Re-start rtmgr and check for the logs,
+           kubectl logs <podname> -n ricplt
 
 Executing unit tests
 --------------------
@@ -88,11 +178,9 @@ For running unit tests, execute the following command:
 
 If you wish to execute the full UT set with coverage:
 
-   mkdir -p unit-test
+.. code:: bash
 
+   mkdir -p unit-test
    go test ./pkg/sbi ./pkg/rpe ./pkg/nbi ./pkg/sdl -cover -race -coverprofile=$PWD/unit-test/c.out
-
    go tool cover -html=$PWD/unit-test/c.out -o $PWD/unit-test/coverage.html
 
-
-For troubleshooting purpose the default logging level can be increased to `DEBUG`. (by hand launch it's set to INFO, kubernetes manifest has DEBUG set by default).
diff --git a/docs/example/libnng.so b/docs/example/libnng.so
new file mode 100644 (file)
index 0000000..59b9589
Binary files /dev/null and b/docs/example/libnng.so differ
diff --git a/docs/example/rtmgr-config.yaml b/docs/example/rtmgr-config.yaml
new file mode 100755 (executable)
index 0000000..9aeb2b9
--- /dev/null
@@ -0,0 +1,99 @@
+#
+#==================================================================================
+#   Copyright (c) 2019 AT&T Intellectual Property.
+#   Copyright (c) 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.
+#==================================================================================
+#
+#
+#   Abstract:           Configuration values for the routing manager
+#   Date:               29 May 2019
+#
+"PlatformComponents":
+  -
+    "name": "SUBMAN"
+    "fqdn": "a6d3e3e8c75e"
+    "port": 4560
+
+"XMURL":
+  "http://service-ricplt-appmgr-http:8080/ric/v1/xapps"
+"E2MURL":
+  "http://127.0.0.1:8080/v1/e2t/list"
+"RTFILE":
+  "/db/rt.json"
+"CFGFILE":
+  "/cfg/rtmgr-config.yaml"
+"RPE":
+  "rmrpush"
+"SBI":
+  "nngpush"
+"SBIURL":
+  "0.0.0.0"
+"NBI":
+  "httpRESTful"
+"NBIURL":
+  "http://service-ricplt-rtmgr-http:3800"
+"SDL":
+  "file"
+"local":
+  "host": ":8080"
+"logger":
+  "level": 4
+"rmr":
+  "protPort": "tcp:4560"
+  "maxSize": 2072
+  "numWorkers": 1
+  "threadType": 1
+"subscription":
+ "host": "localhost:8089"
+
+"PlatformRoutes": [
+  { 'messagetype': 'RIC_SUB_REQ', 'senderendpoint': 'SUBMAN', 'subscriptionid': -1, 'endpoint': '', 'meid': '%meid'},
+  { 'messagetype': 'RIC_SUB_DEL_REQ', 'senderendpoint': 'SUBMAN', 'subscriptionid': -1,'endpoint': '', 'meid': '%meid'},
+  { 'messagetype': 'RIC_SUB_RESP', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'SUBMAN', 'meid': ''},
+  { 'messagetype': 'RIC_SUB_DEL_RESP', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'SUBMAN', 'meid': ''},
+  { 'messagetype': 'RIC_SUB_FAILURE', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'SUBMAN', 'meid': ''},
+  { 'messagetype': 'RIC_SUB_DEL_FAILURE', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'SUBMAN', 'meid': ''},
+  { 'messagetype': 'RIC_X2_SETUP_REQ', 'senderendpoint': 'E2MAN', 'subscriptionid': -1, 'endpoint': '', 'meid': '%meid'},
+  { 'messagetype': 'RIC_X2_RESET', 'senderendpoint': 'E2MAN', 'subscriptionid': -1, 'endpoint': '', 'meid': '%meid'},
+  { 'messagetype': 'RIC_X2_RESET_RESP', 'senderendpoint': 'E2MAN', 'subscriptionid': -1, 'endpoint': '', 'meid': '%meid'},
+  { 'messagetype': 'RIC_ENDC_X2_SETUP_REQ', 'senderendpoint': 'E2MAN', 'subscriptionid': -1, 'endpoint': '', 'meid': '%meid'},
+  { 'messagetype': 'RIC_ENB_CONF_UPDATE_ACK', 'senderendpoint': 'E2MAN', 'subscriptionid': -1, 'endpoint': '', 'meid': '%meid'},
+  { 'messagetype': 'RIC_ENB_CONF_UPDATE_FAILURE', 'senderendpoint': 'E2MAN', 'subscriptionid': -1, 'endpoint': '', 'meid': '%meid'},
+  { 'messagetype': 'RIC_ENDC_CONF_UPDATE_ACK', 'senderendpoint': 'E2MAN', 'subscriptionid': -1, 'endpoint': '', 'meid': '%meid'},
+  { 'messagetype': 'RIC_ENDC_CONF_UPDATE_FAILURE', 'senderendpoint': 'E2MAN', 'subscriptionid': -1, 'endpoint': '', 'meid': '%meid'},
+  { 'messagetype': 'RIC_E2_SETUP_REQ', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'E2MAN', 'meid': ''},
+  { 'messagetype': 'E2_TERM_INIT', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'E2MAN', 'meid': ''},
+  { 'messagetype': 'RIC_X2_SETUP_RESP', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'E2MAN', 'meid': ''},
+  { 'messagetype': 'RIC_X2_SETUP_FAILURE', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'E2MAN', 'meid': ''},
+  { 'messagetype': 'RIC_X2_RESET', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'E2MAN', 'meid': ''},
+  { 'messagetype': 'RIC_X2_RESET_RESP', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'E2MAN', 'meid': ''},
+  { 'messagetype': 'RIC_ENDC_X2_SETUP_RESP', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'E2MAN', 'meid': ''},
+  { 'messagetype': 'RIC_ENDC_X2_SETUP_FAILURE', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'E2MAN', 'meid': ''},
+  { 'messagetype': 'RIC_ENDC_CONF_UPDATE', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'E2MAN', 'meid': ''},
+  { 'messagetype': 'RIC_SCTP_CONNECTION_FAILURE', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'E2MAN', 'meid': ''},
+  { 'messagetype': 'RIC_ERROR_INDICATION', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'E2MAN', 'meid': ''},
+  { 'messagetype': 'RIC_ENB_CONF_UPDATE', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'E2MAN', 'meid': ''},
+  { 'messagetype': 'RIC_ENB_LOAD_INFORMATION', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'E2MAN', 'meid': ''},
+  { 'messagetype': 'E2_TERM_KEEP_ALIVE_RESP', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'E2MAN', 'meid': ''},
+  { 'messagetype': 'RAN_CONNECTED', 'senderendpoint': 'E2MAN', 'subscriptionid': -1, 'endpoint': 'RSM', 'meid': ''},
+  { 'messagetype': 'RAN_RESTARTED', 'senderendpoint': 'E2MAN', 'subscriptionid': -1, 'endpoint': 'RSM', 'meid': ''},
+  { 'messagetype': 'RAN_RECONFIGURED', 'senderendpoint': 'E2MAN', 'subscriptionid': -1, 'endpoint': 'RSM', 'meid': ''},
+  { 'messagetype': 'RIC_RES_STATUS_REQ', 'senderendpoint': 'RSM', 'subscriptionid': -1, 'endpoint': '', 'meid': '%meid'},
+  { 'messagetype': 'RIC_RES_STATUS_RESP', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'RSM', 'meid': ''},
+  { 'messagetype': 'RIC_RES_STATUS_FAILURE', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'RSM', 'meid': ''},
+  { 'messagetype': 'A1_POLICY_QUERY', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'A1MEDIATOR', 'meid': ''},
+  { 'messagetype': 'A1_POLICY_RESP', 'senderendpoint': '', 'subscriptionid': -1, 'endpoint': 'A1MEDIATOR', 'meid': ''},
+   ]
+
diff --git a/docs/example/rtmgr_exe.sh b/docs/example/rtmgr_exe.sh
new file mode 100755 (executable)
index 0000000..095906b
--- /dev/null
@@ -0,0 +1,38 @@
+#!/bin/bash
+#set -x
+
+curdir=`pwd`
+RMRVERSION=3.6.0
+wget --content-disposition https://packagecloud.io/o-ran-sc/staging/packages/debian/stretch/rmr_${RMRVERSION}_amd64.deb/download.deb && dpkg -i rmr_${RMRVERSION}_amd64.deb && rm -rf rmr_${RMRVERSION}_amd64.deb
+wget --content-disposition https://packagecloud.io/o-ran-sc/staging/packages/debian/stretch/rmr-dev_${RMRVERSION}_amd64.deb/download.deb && dpkg -i rmr-dev_${RMRVERSION}_amd64.deb && rm -rf rmr-dev_${RMRVERSION}_amd64.deb
+
+wget http://launchpadlibrarian.net/463891089/libnng1_1.2.6-1_amd64.deb && dpkg -i libnng1_1.2.6-1_amd64.deb && rm -rf libnng1_1.2.6-1_amd64.deb 
+
+mkdir -p /tmp/go/bin
+
+wget --quiet https://github.com/go-swagger/go-swagger/releases/download/v0.19.0/swagger_linux_amd64 && mv swagger_linux_amd64 swagger && chmod +x swagger
+
+mv swagger /tmp/go/bin
+
+export GOPATH=/tmp/go
+export GO111MODULE=on
+
+mkdir -p /tmp/go/src/routing-manager
+
+git clone "https://gerrit.o-ran-sc.org/r/ric-plt/appmgr" \
+  && cp appmgr/api/appmgr_rest_api.yaml api/ \
+  && rm -rf appmgr
+
+cp -r $PWD/../../rtmgr/* /tmp/go/src/routing-manager/. 
+
+cd /tmp/go/src/routing-manager
+/tmp/go/bin/swagger generate server -f api/routing_manager.yaml -t pkg/ --exclude-main -r LICENSE
+/tmp/go/bin/swagger generate client -f api/appmgr_rest_api.yaml -t pkg/ -m appmgr_model -c appmgr_client -r LICENSE
+  
+export GO111MODULE=on 
+ldconfig
+go build ./cmd/rtmgr.go
+
+cp -f rtmgr $curdir/.
+
+mkdir -p /db && touch /db/rt.json && chmod 777 /db/rt.json
diff --git a/docs/images/rtmgr_appmgr_cn.png b/docs/images/rtmgr_appmgr_cn.png
new file mode 100644 (file)
index 0000000..b599ac8
Binary files /dev/null and b/docs/images/rtmgr_appmgr_cn.png differ
diff --git a/docs/images/rtmgr_ass_dis_e2t.png b/docs/images/rtmgr_ass_dis_e2t.png
new file mode 100644 (file)
index 0000000..9c1eae7
Binary files /dev/null and b/docs/images/rtmgr_ass_dis_e2t.png differ
diff --git a/docs/images/rtmgr_create_delete_e2t.png b/docs/images/rtmgr_create_delete_e2t.png
new file mode 100644 (file)
index 0000000..761c06d
Binary files /dev/null and b/docs/images/rtmgr_create_delete_e2t.png differ
diff --git a/docs/images/rtmgr_flows.ppt b/docs/images/rtmgr_flows.ppt
new file mode 100644 (file)
index 0000000..8ef4f03
Binary files /dev/null and b/docs/images/rtmgr_flows.ppt differ
diff --git a/docs/images/rtmgr_startup.png b/docs/images/rtmgr_startup.png
new file mode 100644 (file)
index 0000000..f93f2e4
Binary files /dev/null and b/docs/images/rtmgr_startup.png differ
diff --git a/docs/images/rtmgr_submgr_add_delete.png b/docs/images/rtmgr_submgr_add_delete.png
new file mode 100644 (file)
index 0000000..5c8ce90
Binary files /dev/null and b/docs/images/rtmgr_submgr_add_delete.png differ
diff --git a/docs/images/rtmgr_submgr_merge_add.png b/docs/images/rtmgr_submgr_merge_add.png
new file mode 100644 (file)
index 0000000..ffc60b3
Binary files /dev/null and b/docs/images/rtmgr_submgr_merge_add.png differ
diff --git a/docs/images/rtmgr_submgr_merge_delete.png b/docs/images/rtmgr_submgr_merge_delete.png
new file mode 100644 (file)
index 0000000..909632e
Binary files /dev/null and b/docs/images/rtmgr_submgr_merge_delete.png differ
index f8ac6da..d8457fd 100644 (file)
@@ -25,7 +25,7 @@ Welcome to O-RAN SC Routing Manager
    :maxdepth: 2
    :caption: Contents:
 
-
+   
    installation-guide.rst
    developer-guide.rst
    release-notes.rst
diff --git a/docs/installation-guide-rtmgr-as-exe.rst b/docs/installation-guide-rtmgr-as-exe.rst
new file mode 100644 (file)
index 0000000..08d74ff
--- /dev/null
@@ -0,0 +1,44 @@
+..
+..  Copyright (c) 2019 AT&T Intellectual Property.
+..  Copyright (c) 2019 Nokia.
+..
+..  Licensed under the Creative Commons Attribution 4.0 International
+..  Public License (the "License"); you may not use this file except
+..  in compliance with the License. You may obtain a copy of the License at
+..
+..    https://creativecommons.org/licenses/by/4.0/
+..
+..  Unless required by applicable law or agreed to in writing, documentation
+..  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.
+..
+
+Pre-requisites
+--------------
+    * Ubuntu machine
+    * golang 1.12.1 minimum
+
+Compiling Routing Manager
+-------------------------
+Clone the ric-plt/dep git repository.
+
+.. code:: bash
+
+  git clone "https://gerrit.o-ran-sc.org/r/ric-plt/rtmgr"
+
+Execute this shell script which will give you the rtmgr as executable
+
+.. code:: bash
+
+  cd rtmgr/example
+  ./rtmgr_exe.sh
+
+Run rtmgr by passing the config file as parameter. Note that the rtmgr may abort after sometime as it needs appmgr to be running. This can be tweaked by modifying the actual code. As this would be needed only for actual Development, the sam eis not being mentioned here.
+
+.. code:: bash
+
+  ./rtmgr -f rtmgr-config.yaml
+
diff --git a/docs/installation-guide-rtmgr-as-pod.rst b/docs/installation-guide-rtmgr-as-pod.rst
new file mode 100644 (file)
index 0000000..3177efc
--- /dev/null
@@ -0,0 +1,121 @@
+..
+..  Copyright (c) 2019 AT&T Intellectual Property.
+..  Copyright (c) 2019 Nokia.
+..
+..  Licensed under the Creative Commons Attribution 4.0 International
+..  Public License (the "License"); you may not use this file except
+..  in compliance with the License. You may obtain a copy of the License at
+..
+..    https://creativecommons.org/licenses/by/4.0/
+..
+..  Unless required by applicable law or agreed to in writing, documentation
+..  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.
+..
+
+
+.. contents::
+   :depth: 3
+   :local:
+
+Pre-requisites
+--------------
+    * Kubernetes v.1.16.0 or above
+    * helm v2.12.3 or above
+    * Appmgr pods should be deployed and in running state
+
+Clone the ric-plt/dep git repository
+------------------------------------
+
+.. code:: bash
+
+  git clone "https://gerrit.o-ran-sc.org/r/ric-plt/ric-dep"
+
+
+Modify the deployment recipe
+----------------------------
+Locate for 'rtmgr' in the recipe file and edit the tag and repo.
+
+.. code:: bash
+
+  rtmgr:
+    image:
+      registry: "nexus3.o-ran-sc.org:10004/o-ran-sc"
+      name: ric-plt-rtmgr
+      tag: 0.5.3
+
+Copy the ric-common helm charts for it/dep, configure the helm repo and start local helm server
+
+.. code:: bash
+
+   git clone "https://gerrit.o-ran-sc.org/r/it/dep"
+   HELM_HOME=$(helm home)
+   COMMON_CHART_VERSION=$(cat dep/ric-common/Common-Template/helm/ric-common/Chart.yaml | grep version | awk '{print $2}')
+   helm package -d /tmp dep/ric-common/Common-Template/helm/ric-common
+   cp /tmp/ric-common-$COMMON_CHART_VERSION.tgz $HELM_HOME/repository/local/
+   helm repo index $HELM_HOME/repository/local/
+   helm serve >& /dev/null &
+   helm repo remove local
+   helm repo add local http://127.0.0.1:8879/charts
+
+
+At this stage, routing manager can be deployed.
+
+.. code:: bash
+
+  cd ric-dep/bin
+  ./install -f ../RECIPE_EXAMPLE/PLATFORM/example_recipe.yaml -c rtmgr
+
+Checking the Deployment Status
+------------------------------
+
+Now check the deployment status after a short wait. Results similar to the
+output shown below indicate a complete and successful deployment. Check the
+STATUS column from both kubectl outputs to ensure that all are either
+"Completed" or "Running", and that none are "Error" or "ImagePullBackOff".
+
+.. code:: bash
+
+  #helm list | grep rtmgr
+  r3-rtmgr                1               Wed Mar 25 08:34:22 2020        DEPLOYED        rtmgr-3.0.0             1.0          ricplt
+
+  # kubectl get pods -n ricplt | grep rtmgr
+  deployment-ricplt-rtmgr-6446b96b65-8mxzn           1/1     Running   0          46s
+
+Checking Container Health
+-------------------------
+
+Check the health of the routing manager platform component by querying it
+with the following command.
+
+.. code:: bash
+
+ #kubectl get pods -n ricplt -o wide | grep rtmgr
+ deployment-ricplt-rtmgr-6446b96b65-8mxzn           1/1     Running   0          16m   10.244.0.17    master-node   <none>           <none>
+
+
+ curl -v http://10.244.0.17:8080/ric/v1/health/alive
+ *   Trying 10.244.0.17...
+ * TCP_NODELAY set
+ * Connected to 10.244.0.17 (10.244.0.17) port 8080 (#0)
+ > GET /ric/v1/health/alive HTTP/1.1
+ > Host: 10.244.0.17:8080
+ > User-Agent: curl/7.58.0
+ > Accept: */*
+ >
+ < HTTP/1.1 200 OK
+ < Content-Type: application/json
+ < Date: Wed, 25 Mar 2020 03:19:05 GMT
+ < Content-Length: 0
+ <  
+ * Connection #0 to host 10.244.0.17 left intact
+
+Undeploying Routing Manager
+---------------------------
+
+.. code:: bash
+
+ #helm delete --purge r3-rtmgr
index 25ed53f..6e16806 100644 (file)
@@ -17,7 +17,6 @@
 ..
 
 
-
 Installation Guide
 ==================
 
@@ -25,83 +24,22 @@ Installation Guide
    :depth: 3
    :local:
 
-Abstract
---------
-
-This document describes how to install ric-plt/rtmgr, it's dependencies and required system resources.
-
 Introduction
 ------------
-Routing Manager is a basic platform service of RIC. It is responsible for distributing routing policies among the other platform components and xApps.
-
-Pre-requisites
---------------
-* Healthy kubernetes cluster (for Kubernetes testing)
-* Access to the common docker registry (alternatively, you can set up your own private registry for testing: "https://docs.docker.com/registry/deploying/")
-* In case of non-Docker build: 
-    * golang 11.1 at least
-    * go-swagger ("https://github.com/go-swagger/go-swagger", v0.19.0)
-    * glide ("https://github.com/Masterminds/glide")
-    * XApp Manager spec file (available in ORAN: "https://gerrit.o-ran-sc.org/r/admin/repos/ric-plt/appmgr" under api folder)
-
-Software Installation and Deployment
-------------------------------------
-This section describes the installation of the ric-plt/rtmgr installation.
-
-Docker Image
-------------
-The Dockerfile located in the project root folder does the following three things:
-
-* As a first step, it creates a build container, fetches XApp Manager's spec file, generates rest api code from swagger spec and builds rtmgr.
-* As a second step, it executes UTs on rtmgr source code.
-* As a third step, it creates the final container from rtmgr binary (Ubuntu based).
+Routing Manager is a basic platform service of RIC. It is responsible for distributing routing policies to other platform components and xApps.
 
-For a docker build execute `docker build --tag=rtmgr-build:test .` in the project root directory (feel free to replace the name:tag with your own)
-
-Linux Binary
-------------
-* Compiling without Docker involves some manual steps before compiling directly with "go build".
-* The XApp manager's spec file must be fetched, then api generated with swagger. (these steps are included in the Dockerfile).
-* After the code is generated, glide can install the dependencies of rtmgr.
-* Make sure you set your GOPATH variable correctly (example: $HOME/go/src/routing-manager)
-* Code generation and building example (from project root folder):
+Installation of routing manager in a k8s environment
+====================================================
 
-  * git clone https://gerrit.o-ran-sc.org/r/ric-plt/appmgr && cp appmgr/api/appmgr_rest_api.yaml api/
-  * swagger generate server -f api/routing_manager.yaml -t pkg/ --exclude-main -r LICENSE
-  * swagger generate client -f api/appmgr_rest_api.yaml -t pkg/ -m appmgr_model -c appmgr_client -r LICENSE
-  * glide install --strip-vendor
-  * go build cmd/rtmgr.go
+This deployment guide is for testing routing manager in actual k8s environment.
 
-NOTE: before doing a docker build it is advised to remove any generated files and vendor packages:
-assuming that you stand in project root dir
+.. include:: ./installation-guide-rtmgr-as-pod.rst
 
-       rm -rf appmgr vendor pkg/appmgr_* pkg/models pkg/restapi
 
-Command line arguments
-----------------------
-Routing manager binary can be called with `-h` flag when it displays the available command line arguments and it's default value.
+Installation of routing manager in a standalone linux machine
+=============================================================
 
-Example:
+This deployment guide will be useful for development purposes
 
-Usage of ./rtmgr:
-   -configfile string
-         Routing manager's configuration file path (default "/etc/rtmgrcfg.json")
-   -filename string
-         Absolute path of file where the route information to be stored (default "/db/rt.json")
-   -loglevel string
-         INFO | WARN | ERROR | DEBUG (default "INFO")
-   -nbi string
-         Northbound interface module to be used. Valid values are: 'httpGetter | httpRESTful' (default "httpGetter")
-   -nbi-if string
-         Base HTTP URL where routing manager will be listening on (default "http://localhost:8888")
-   -rpe string
-         Route Policy Engine to be used. Valid values are: 'rmrpush | rmrpub' (default "rmrpush")
-   -sbi string
-         Southbound interface module to be used. Valid values are: 'nngpush | nngpub' (default "nngpush")
-   -sbi-if string
-         IPv4 address of interface where Southbound socket to be opened (default "0.0.0.0")
-   -sdl string
-         Datastore enginge to be used. Valid values are: 'file' (default "file")
-   -xm-url string
-         HTTP URL where xApp Manager exposes the entire xApp List (default "http://localhost:3000/xapps")
+.. include:: ./installation-guide-rtmgr-as-exe.rst
 
index 58fe7d8..be415f3 100644 (file)
@@ -31,7 +31,9 @@ package sbi
 
 import (
        "errors"
+       "fmt"
        "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
+       "net"
        "routing-manager/pkg/rtmgr"
        "strconv"
        "strings"
@@ -107,7 +109,7 @@ func (s *Sbi) updateEndpoints(rcs *rtmgr.RicComponents, sbi Engine) {
                }
        }
        s.updatePlatformEndpoints(&((*rcs).Pcs), sbi)
-        s.updateE2TEndpoints(&((*rcs).E2Ts), sbi)
+       s.updateE2TEndpoints(&((*rcs).E2Ts), sbi)
        s.pruneEndpointList(sbi)
 }
 
@@ -141,48 +143,59 @@ func (s *Sbi) updatePlatformEndpoints(pcs *rtmgr.PlatformComponents, sbi Engine)
 }
 
 func (s *Sbi) updateE2TEndpoints(E2Ts *map[string]rtmgr.E2TInstance, sbi Engine) {
-        xapp.Logger.Debug("updateE2TEndpoints invoked. E2T: %v", *E2Ts)
-        for _, e2t := range *E2Ts {
-                uuid := e2t.Fqdn
-                stringSlice := strings.Split(e2t.Fqdn, ":")
-                ipaddress := stringSlice[0]
-                port, _ := strconv.Atoi(stringSlice[1])
-                if _, ok := rtmgr.Eps[uuid]; ok {
-                        rtmgr.Eps[uuid].Keepalive = true
-                } else {
-                        ep := &rtmgr.Endpoint{
-                                Uuid:       uuid,
-                                Name:       e2t.Name,
-                                XAppType:   PlatformType,
-                                Ip:         ipaddress,
-                                Port:       uint16(port),
-                                TxMessages: rtmgr.PLATFORMMESSAGETYPES[e2t.Name]["tx"],
-                                RxMessages: rtmgr.PLATFORMMESSAGETYPES[e2t.Name]["rx"],
-                                Socket:     nil,
-                                IsReady:    false,
-                                Keepalive:  true,
-                        }
-                        xapp.Logger.Debug("ep created: %v", ep)
-                        if err := sbi.AddEndpoint(ep); err != nil {
-                                xapp.Logger.Error("can't create socket for endpoint: " + ep.Name + " due to:" + err.Error())
-                                continue
-                        }
-                        rtmgr.Eps[uuid] = ep
-                }
-        }
+       xapp.Logger.Debug("updateE2TEndpoints invoked. E2T: %v", *E2Ts)
+       for _, e2t := range *E2Ts {
+               uuid := e2t.Fqdn
+               stringSlice := strings.Split(e2t.Fqdn, ":")
+               ipaddress := stringSlice[0]
+               port, _ := strconv.Atoi(stringSlice[1])
+               if _, ok := rtmgr.Eps[uuid]; ok {
+                       rtmgr.Eps[uuid].Keepalive = true
+               } else {
+                       ep := &rtmgr.Endpoint{
+                               Uuid:       uuid,
+                               Name:       e2t.Name,
+                               XAppType:   PlatformType,
+                               Ip:         ipaddress,
+                               Port:       uint16(port),
+                               TxMessages: rtmgr.PLATFORMMESSAGETYPES[e2t.Name]["tx"],
+                               RxMessages: rtmgr.PLATFORMMESSAGETYPES[e2t.Name]["rx"],
+                               Socket:     nil,
+                               IsReady:    false,
+                               Keepalive:  true,
+                       }
+                       xapp.Logger.Debug("ep created: %v", ep)
+                       if err := sbi.AddEndpoint(ep); err != nil {
+                               xapp.Logger.Error("can't create socket for endpoint: " + ep.Name + " due to:" + err.Error())
+                               continue
+                       }
+                       rtmgr.Eps[uuid] = ep
+               }
+       }
 }
 
-func (s *Sbi) createEndpoint(payload string, sbi Engine) (*rtmgr.Endpoint) {
+func (s *Sbi) createEndpoint(payload string, sbi Engine) *rtmgr.Endpoint {
        xapp.Logger.Debug("CreateEndPoint %v", payload)
        stringSlice := strings.Split(payload, " ")
        uuid := stringSlice[0]
-       xapp.Logger.Debug(">>> uuid %v",  stringSlice[0])
-
+       xapp.Logger.Debug(">>> uuid %v", stringSlice[0])
 
        if _, ok := rtmgr.Eps[uuid]; ok {
                ep := rtmgr.Eps[uuid]
                return ep
        }
 
+       /* incase the stored Endpoint list is in the form of IP:port*/
+       stringsubsplit := strings.Split(uuid, ":")
+       addr, err := net.LookupIP(stringsubsplit[0])
+       if err == nil {
+               convertedUuid := fmt.Sprintf("%s:%s", addr[0], stringsubsplit[1])
+               xapp.Logger.Info(" IP:Port received is %s", convertedUuid)
+               if _, ok := rtmgr.Eps[convertedUuid]; ok {
+                       ep := rtmgr.Eps[convertedUuid]
+                       return ep
+               }
+       }
+
        return nil
 }