First commit

This commit is contained in:
Leonardo Bonati
2021-12-08 20:17:46 +00:00
commit 60dffad583
2923 changed files with 463894 additions and 0 deletions

View File

@@ -0,0 +1,128 @@
##-----------------------------------
# BS Connector
#------------------------------------
ARG SCHEMA_PATH=schemas
ARG XAPP_DIR=sample-xapp
ARG CONNECTOR_DIR=xapp-bs-connector
ARG STAGE_DIR=/home/${CONNECTOR_DIR}
ARG DBAAS_SERVICE_HOST=10.0.2.12
ARG DBAAS_SERVICE_PORT="6379"
#==================================================================================
FROM ubuntu:18.04 as ricbuild
# to override repo base, pass in repo argument when running docker build:
# docker build --build-arg REPOBASE=http://abc.def.org . ....
ARG REPOBASE=https://gerrit.oran-osc.org/r
ARG SCHEMA_FILE
ARG SCHEMA_PATH
ARG XAPP_DIR
ARG CONNECTOR_DIR
ARG STAGE_DIR
ARG MDC_VER=0.0.4-1
ARG RMR_VER=4.0.5
ARG RNIB_VER=1.0.0
ENV RMR_RTG_SVC="9999" \
RMR_SEED_RT="/home/${CONNECTOR_DIR}/init/routes.txt" \
LD_LIBRARY_PATH="/usr/local/lib:/usr/local/libexec" \
VERBOSE=0 \
CONFIG_FILE=/opt/ric/config/config-file.json \
DBAAS_SERVICE_HOST=${DBAAS_SERVICE_HOST} \
DBAAS_SERVICE_PORT=${DBAAS_SERVICE_PORT}
COPY ${CONNECTOR_DIR} ${STAGE_DIR}
COPY ${XAPP_DIR} /home/${XAPP_DIR}
WORKDIR ${STAGE_DIR}
# Install necessary packages
RUN apt-get update \
&& apt-get install -y \
cmake \
git \
build-essential \
automake \
autoconf-archive \
autoconf \
pkg-config \
gawk \
libtool \
wget \
zlib1g-dev \
libffi-dev \
libcurl4-openssl-dev \
vim \
cpputest \
libboost-all-dev \
libhiredis-dev \
&& apt-get remove -y --purge python* \
&& apt-get install -y \
python3 \
python3-pip \
# Install mdclog using debian package hosted at packagecloud.io
&& wget -nv --content-disposition https://packagecloud.io/o-ran-sc/release/packages/debian/stretch/mdclog_${MDC_VER}_amd64.deb/download.deb \
&& wget -nv --content-disposition https://packagecloud.io/o-ran-sc/release/packages/debian/stretch/mdclog-dev_${MDC_VER}_amd64.deb/download.deb \
&& dpkg -i mdclog_${MDC_VER}_amd64.deb \
&& dpkg -i mdclog-dev_${MDC_VER}_amd64.deb \
&& rm mdclog_${MDC_VER}_amd64.deb mdclog-dev_${MDC_VER}_amd64.deb \
# Install RMR using debian package hosted at packagecloud.io
&& wget -nv --content-disposition https://packagecloud.io/o-ran-sc/release/packages/debian/stretch/rmr_${RMR_VER}_amd64.deb/download.deb \
&& wget -nv --content-disposition https://packagecloud.io/o-ran-sc/release/packages/debian/stretch/rmr-dev_${RMR_VER}_amd64.deb/download.deb \
&& dpkg -i rmr_${RMR_VER}_amd64.deb \
&& dpkg -i rmr-dev_${RMR_VER}_amd64.deb \
&& rm rmr_${RMR_VER}_amd64.deb rmr-dev_${RMR_VER}_amd64.deb \
# Install RNIB libraries
&& wget -nv --content-disposition https://packagecloud.io/o-ran-sc/release/packages/debian/stretch/rnib_${RNIB_VER}_all.deb/download.deb \
&& dpkg -i rnib_${RNIB_VER}_all.deb \
&& rm rnib_${RNIB_VER}_all.deb \
# Install dbaas
&& cd ${STAGE_DIR} \
&& git clone https://gerrit.o-ran-sc.org/r/ric-plt/dbaas \
&& cd dbaas/redismodule \
&& ./autogen.sh \
&& ./configure \
&& make -j ${nproc} all \
&& make install \
&& rm -Rf ${STAGE_DIR}/dbaas \
# Install sdl
&& cd ${STAGE_DIR} \
&& git clone https://gerrit.o-ran-sc.org/r/ric-plt/sdl \
&& cd sdl \
&& ./autogen.sh \
&& ./configure \
&& make -j ${nproc} all \
&& make install \
&& rm -Rf ${STAGE_DIR}/sdl \
# Install rapidjson
&& cd ${STAGE_DIR} \
&& git clone https://github.com/Tencent/rapidjson \
&& cd rapidjson \
&& mkdir build \
&& cd build \
&& cmake -DCMAKE_INSTALL_PREFIX=/usr/local .. \
&& make -j ${nproc} \
&& make install \
&& cd ${STAGE_DIR} \
&& rm -rf rapidjson \
##-----------------------------------
# Now install the program
#------------------------------------
# build connector
&& export CPATH=$CPATH:/usr/local/include \
&& cd src \
&& make clean \
&& make -j ${nproc} \
&& make install \
&& ldconfig \
&& sysctl -w net.ipv6.conf.lo.disable_ipv6=1 \
###-----------------------------------
## DRL Agent
##------------------------------------
## install packages and pip requirements
# && pip3 --no-cache-dir install -U pip \
# && pip3 --no-cache-dir install -r /home/${XAPP_DIR}/requirements.txt \
&& apt-get autoremove -y \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

View File

@@ -0,0 +1,31 @@
import logging
from xapp_control import *
def main():
# configure logger and console output
logging.basicConfig(level=logging.DEBUG, filename='/home/xapp-logger.log', filemode='a+',
format='%(asctime)-15s %(levelname)-8s %(message)s')
formatter = logging.Formatter('%(asctime)-15s %(levelname)-8s %(message)s')
console = logging.StreamHandler()
console.setLevel(logging.INFO)
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
control_sck = open_control_socket(4200)
while True:
data_sck = receive_from_socket(control_sck)
if len(data_sck) <= 0:
if len(data_sck) == 0:
continue
else:
logging.info('Negative value for socket')
break
else:
logging.info('Received data: ' + repr(data_sck))
if __name__ == '__main__':
main()

15
setup/sample-xapp/run_xapp.sh Executable file
View File

@@ -0,0 +1,15 @@
#!/bin/bash
# release previously opened sockets
kill -9 `pidof python3`
# Run agent, sleep, run connector
echo "[`date`] Run xApp" > /home/container.log
cd /home/sample-xapp && python3 run_xapp.py &
echo "[`date`] Pause 10 s" >> /home/container.log
sleep 10
echo "[`date`] Run connector" >> /home/container.log
cd /home/xapp-bs-connector && ./run_xapp.sh

View File

@@ -0,0 +1,50 @@
import socket
# open control socket
def open_control_socket(port: int):
print('Waiting for xApp connection on port ' + str(port))
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# host = socket.gethostname()
# bind to INADDR_ANY
server.bind(('', port))
server.listen(5)
control_sck, client_addr = server.accept()
print('xApp connected: ' + client_addr[0] + ':' + str(client_addr[1]))
return control_sck
# send through socket
def send_socket(socket, msg: str):
bytes_num = socket.send(msg.encode('utf-8'))
print('Socket sent ' + str(bytes_num) + ' bytes')
# receive data from socker
def receive_from_socket(socket) -> str:
ack = 'Indication ACK\n'
data = socket.recv(4096)
try:
data = data.decode('utf-8')
except UnicodeDecodeError:
return ''
if ack in data:
data = data[len(ack):]
if len(data) > 0:
# print("Received: ", str(data))
return data.strip()
else:
return ''