First commit
This commit is contained in:
128
setup/sample-xapp/Dockerfile
Normal file
128
setup/sample-xapp/Dockerfile
Normal 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/*
|
31
setup/sample-xapp/run_xapp.py
Normal file
31
setup/sample-xapp/run_xapp.py
Normal 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
15
setup/sample-xapp/run_xapp.sh
Executable 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
|
||||
|
50
setup/sample-xapp/xapp_control.py
Normal file
50
setup/sample-xapp/xapp_control.py
Normal 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 ''
|
||||
|
Reference in New Issue
Block a user