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