17 Commits

Author SHA1 Message Date
7287471c93 test 2024-03-26 14:46:57 +01:00
08e1fb839a use the new dockerfile 2024-03-26 14:45:49 +01:00
8f3f20cfa3 make docker use the cache 2024-03-26 14:42:26 +01:00
cf8cd37685 debug: add more print 2024-03-25 16:30:05 +01:00
f2e465c33e add missing";" 2024-03-25 15:44:12 +01:00
178ec65486 debug: add print 2024-03-25 15:39:17 +01:00
a09d784d52 debug 2024-03-22 16:28:29 +01:00
45fa45ee2c debug: still prototyping 2024-03-22 16:17:21 +01:00
887f0d180a add missing ";" 2024-03-22 15:56:23 +01:00
93d45e3c58 Add more verbosity 2024-03-22 15:11:06 +01:00
a34e83b524 debug: trying to figure out why sub req is not beeing spamed 2024-03-22 15:09:33 +01:00
290e030071 forece x-app to send sub. req. indefinitly 2024-03-22 12:53:46 +01:00
Andrea Lacava
e3161c1f4c Fix delivery of indication message - merge pull request #11 from JaykobJ/ns-o-ran
xapp-sm-connector now sends entire indication message to the connected xApp. Previously only first Byte of the message was sent.

Thanks @JaykobJ
2023-12-01 11:32:54 -05:00
JaykobJ
54fee7c1d0 Update setup/xapp-sm-connector/src/agent_connector.cc
Co-authored-by: Andrea Lacava <thecave003@gmail.com>
2023-12-01 08:50:22 +02:00
Andrea Lacava
4f46bbf4b1 Merge pull request #8 from wineslab/e2term_crash
Remove of RIC_INTERFACE lines in ns-O-RAN copy
2023-11-30 19:37:18 -05:00
JaykobJ
b65e2a4a1f Fix delivery of indication message
xApp can now receive entire indication message.
2023-11-30 10:46:49 +00:00
Andrea Lacava
edf7fe9e8d Remove of RIC_INTERFACE lines that may be the cause of unexpected crash in e2term 2023-01-09 20:07:57 +01:00
8 changed files with 163 additions and 25 deletions

View File

@@ -14,17 +14,6 @@ do
esac
done
# get RIC interface from cli arguments
if [ $# -eq 0 ] || [ "$import" = false ] ; then
RIC_INTERFACE="col0"
else
if [ "$arena" = true ]; then
RIC_INTERFACE="brric"
else
RIC_INTERFACE=$1
fi
fi
export SRC=`dirname $0`
. $SRC/setup-lib.sh
@@ -175,9 +164,6 @@ EOF
fi
E2TERM_CONFIG_BIND="--mount type=bind,source=$E2TERMCONFFILE,destination=/opt/e2/config/config.conf,ro"
export RIC_IP=`ifconfig ${RIC_INTERFACE} | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*'`
if [ "$arena" = true ]; then
echo 'Starting local setup'
# if both RIC and DU are executed on the same machine, do not set Docker NAT rules

View File

@@ -36,7 +36,7 @@ if [ ! $? -eq 0 ]; then
$SUDO docker build \
--build-arg DBAAS_SERVICE_HOST=$DBAAS_IP \
--build-arg DBAAS_SERVICE_PORT=$DBAAS_PORT \
-f ${DOCKER_FILE}_${IMAGE_NAME} -t ${IMAGE_NAME}:$tagvers .
-f ${DOCKER_FILE}_${IMAGE_NAME}_c -t ${IMAGE_NAME}:$tagvers .
# remove copied Dockerfile
rm ${DOCKER_FILE}_${IMAGE_NAME}

View File

@@ -0,0 +1,129 @@
##-----------------------------------
# BS Connector
#------------------------------------
ARG SCHEMA_PATH=schemas
ARG XAPP_DIR=sample-xapp
ARG CONNECTOR_DIR=xapp-sm-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 ricbuild1
# 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
FROM ricbuild1
##-----------------------------------
# Now install the program
#------------------------------------
# build connector
RUN 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

@@ -104,7 +104,7 @@ std::string find_agent_ip_from_gnb(unsigned char* gnb_id_trans) {
// send through socket
int send_socket(char* buf, std::string dest_ip) {
int send_socket(char* buf, size_t payload_size, std::string dest_ip) {
int control_sckfd = -1;
@@ -126,8 +126,7 @@ int send_socket(char* buf, std::string dest_ip) {
// const size_t max_size = 512;
// char buf[max_size] = "Hello, Server!"; // store the data in a buffer
size_t data_size = strlen(buf);
int sent_size = send(control_sckfd ,buf, data_size, 0);
int sent_size = send(control_sckfd, buf, payload_size, 0);
if(sent_size < 0) { // the send returns a size of -1 in case of errors
std::cout << "ERROR: SEND to agent " << dest_ip << std::endl;

View File

@@ -27,6 +27,6 @@ extern std::map<std::string, std::string> agentIp_gnbId;
int open_control_socket_agent(const char* dest_ip, const int dest_port);
void close_control_socket_agent(void);
std::string find_agent_ip_from_gnb(unsigned char* gnb_id);
int send_socket(char* buf, std::string dest_ip);
int send_socket(char* buf, size_t payload_size, std::string dest_ip);
#endif

View File

@@ -30,6 +30,7 @@ void signalHandler( int signum ) {
}
int main(int argc, char *argv[]){
std::cout << "hw_xapp_main Running";
// Get the thread id
std::thread::id my_id = std::this_thread::get_id();
@@ -71,7 +72,9 @@ int main(int argc, char *argv[]){
sleep(1);
//Startup E2 subscription and A1 policy
//hw_xapp->startup(std::ref(*sub_handler));
std::cout << "Startup E2 subscription and A1 policy";
hw_xapp->startup(std::ref(*sub_handler));
//start listener threads and register message handlers.
int num_threads = std::stoi(config[XappSettings::SettingName::THREADS]);

View File

@@ -271,7 +271,7 @@ uint8_t procRicIndication(E2AP_PDU_t *e2apMsg, transaction_identifier gnb_id)
}
case 26: // RIC indication message
{
int payload_size = ricIndication->protocolIEs.list.array[idx]-> \
size_t payload_size = ricIndication->protocolIEs.list.array[idx]-> \
value.choice.RICindicationMessage.size;
@@ -283,7 +283,7 @@ uint8_t procRicIndication(E2AP_PDU_t *e2apMsg, transaction_identifier gnb_id)
// send payload to agent
std::string agent_ip = find_agent_ip_from_gnb(gnb_id);
send_socket(payload, agent_ip);
send_socket(payload, payload_size, agent_ip);
break;
}

View File

@@ -87,6 +87,8 @@ void Xapp::stop(void){
void Xapp::startup(SubscriptionHandler &sub_ref) {
std::cout << "Startup beeing called";
subhandler_ref = &sub_ref;
if (GNB_ID == "") {
@@ -118,7 +120,15 @@ void Xapp::startup(SubscriptionHandler &sub_ref) {
std::cout << "Querying target gNB" << std::endl;
rnib_gnblist.push_back(GNB_ID);
}
while (
true
)
{
std::cout << "Send sub. req.";
std::cout << "yeet";
startup_subscribe_requests();
}
// open external control socket in thread and wait for message
ext_control_thr_rx = std::unique_ptr<std::thread>(new std::thread{&Xapp::handle_external_control_message, this, SOCKET_PORT_EXT});
@@ -135,7 +145,16 @@ void Xapp::startup(SubscriptionHandler &sub_ref) {
// send_socket("Hello, Server!", AGENT_1);
//send subscriptions.
while (
true
)
{
std::cout << "Send sub. req.";
std::cout << "yeet";
startup_subscribe_requests();
}
//read A1 policies
// startup_get_policies();
@@ -417,7 +436,7 @@ void Xapp::send_ric_control_request(char* payload, std::string gnb_id) {
}
void Xapp::startup_subscribe_requests(void ){
std::cout << "Startup subscribe request \n";
bool res;
size_t data_size = ASN_BUFF_MAX_SIZE;
unsigned char data[data_size];
@@ -432,11 +451,12 @@ void Xapp::startup_subscribe_requests(void ){
if(sz <= 0)
mdclog_write(MDCLOG_INFO,"Subscriptions cannot be sent as GNBList in RNIB is NULL");
std::cout << "pre for loop \n";
for(int i = 0; i<sz; i++){
std::cout << "Sending subscriptions to: " << gnblist[i] << std::endl;
// give the message to subscription handler, along with the transmitter.
strcpy((char*)meid,gnblist[i].c_str());
// char *strMsg = "Subscription Request from HelloWorld XApp\0";
@@ -483,6 +503,7 @@ void Xapp::startup_subscribe_requests(void ){
mdclog_write(MDCLOG_INFO,"Subscription SUCCESSFUL in file= %s, line=%d for MEID %s",__FILE__,__LINE__, meid);
}
}
std::cout << "Finisched subscribe request \n";
}
void Xapp::startup_get_policies(void){