From 63124fc4873029d3eebd6e3b165b5ab2779cf4b5 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 27 Jan 2023 13:49:42 +0100 Subject: [PATCH 01/36] chore(ci): updating simulators docker-compose for CN5G release v1.5 Signed-off-by: Raphael Defosseux --- .../5g_f1_rfsimulator/docker-compose.yaml | 112 ++++------------- .../5g_fdd_rfsimulator/docker-compose.yaml | 112 ++++------------- ci-scripts/yaml_files/5g_l2sim_tdd/README.md | 16 +-- .../5g_l2sim_tdd/docker-compose.yaml | 113 ++++------------- .../yaml_files/5g_rfsimulator/README.md | 22 ++-- .../5g_rfsimulator/amf-healthcheck.sh | 57 --------- .../5g_rfsimulator/docker-compose.yaml | 114 ++++------------- .../5g_rfsimulator/nrf-healthcheck.sh | 20 --- .../5g_rfsimulator/smf-healthcheck.sh | 21 ---- .../5g_rfsimulator/spgwu-healthcheck.sh | 28 ----- .../5g_rfsimulator_24prb/docker-compose.yaml | 119 ++++-------------- .../5g_rfsimulator_2x2/docker-compose.yaml | 118 ++++------------- .../docker-compose.yaml | 118 ++++------------- 13 files changed, 171 insertions(+), 799 deletions(-) delete mode 100755 ci-scripts/yaml_files/5g_rfsimulator/amf-healthcheck.sh delete mode 100755 ci-scripts/yaml_files/5g_rfsimulator/nrf-healthcheck.sh delete mode 100755 ci-scripts/yaml_files/5g_rfsimulator/smf-healthcheck.sh delete mode 100755 ci-scripts/yaml_files/5g_rfsimulator/spgwu-healthcheck.sh diff --git a/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml b/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml index 5765a33351..d9d97670d3 100644 --- a/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml +++ b/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml @@ -2,27 +2,16 @@ version: '3.8' services: oai-nrf: container_name: "rfsim5g-oai-nrf" - image: oai-nrf:august-dev + image: oaisoftwarealliance/oai-nrf:v1.5.0 environment: - NRF_INTERFACE_NAME_FOR_SBI=eth0 - - NRF_INTERFACE_PORT_FOR_SBI=80 - - NRF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 - - NRF_API_VERSION=v1 - - INSTANCE=0 - - PID_DIRECTORY=/var/run + - TZ=Europe/Paris networks: public_net: ipv4_address: 192.168.71.130 - volumes: - - ./nrf-healthcheck.sh:/openair-nrf/bin/nrf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-nrf/bin/nrf-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 mysql: container_name: "rfsim5g-mysql" - image: mysql:5.7 + image: mysql:8.0 volumes: - ./oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - ./mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh @@ -36,17 +25,15 @@ services: test: /bin/bash -c "/tmp/mysql-healthcheck.sh" interval: 10s timeout: 5s - retries: 5 + retries: 30 networks: public_net: ipv4_address: 192.168.71.131 oai-amf: container_name: "rfsim5g-oai-amf" - image: oai-amf:august-dev + image: oaisoftwarealliance/oai-amf:v1.5.0 environment: - TZ=Europe/paris - - INSTANCE=0 - - PID_DIRECTORY=/var/run - MCC=208 - MNC=99 - REGION_ID=128 @@ -62,132 +49,85 @@ services: - PLMN_SUPPORT_MCC=208 - PLMN_SUPPORT_MNC=99 - PLMN_SUPPORT_TAC=0x0001 + # Only one slice is defined (1, 0xFFFFFF). - SST_0=1 - - SD_0=0xffffff - - SST_1=1 - - SD_1=1 - AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0 + # One single SMF instance - SMF_INSTANCE_ID_0=1 - SMF_FQDN_0=oai-smf - - SMF_IPV4_ADDR_0=0.0.0.0 - - SMF_HTTP_VERSION_0=v1 + - SMF_IPV4_ADDR_0=192.168.71.133 - SELECTED_0=true - - SMF_INSTANCE_ID_1=2 - - SMF_FQDN_1=oai-smf - - SMF_IPV4_ADDR_1=0.0.0.0 - - SMF_HTTP_VERSION_1=v1 - - SELECTED_1=false + # mysql definition in AMF is mandatory in mini deployment. - MYSQL_SERVER=192.168.71.131 - MYSQL_USER=root - MYSQL_PASS=linux - MYSQL_DB=oai_db - - OPERATOR_KEY=c42449363bbad02b66d16bc975d77cc1 + # NF registration - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 + - NRF_FQDN=oai-nrf - NF_REGISTRATION=yes - SMF_SELECTION=yes - USE_FQDN_DNS=yes - - NRF_API_VERSION=v1 - - NRF_FQDN=oai-nrf - - EXTERNAL_AUSF=no - - AUSF_IPV4_ADDRESS=0.0.0.0 - - AUSF_PORT=80 - - AUSF_API_VERSION=v1 - - AUSF_FQDN=localhost + - USE_HTTP2=no depends_on: - oai-nrf - mysql - volumes: - - ./amf-healthcheck.sh:/openair-amf/bin/amf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-amf/bin/amf-healthcheck.sh" - interval: 10s - timeout: 15s - retries: 5 networks: public_net: ipv4_address: 192.168.71.132 oai-smf: container_name: "rfsim5g-oai-smf" - image: oai-smf:august-dev + image: oaisoftwarealliance/oai-smf:v1.5.0 environment: - TZ=Europe/Paris - - INSTANCE=0 - - PID_DIRECTORY=/var/run - SMF_INTERFACE_NAME_FOR_N4=eth0 - SMF_INTERFACE_NAME_FOR_SBI=eth0 - - SMF_INTERFACE_PORT_FOR_SBI=80 - - SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 - - SMF_API_VERSION=v1 - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 - - AMF_IPV4_ADDRESS=0.0.0.0 - - AMF_PORT=80 - - AMF_API_VERSION=v1 + - AMF_IPV4_ADDRESS=192.168.71.132 - AMF_FQDN=oai-amf - - UDM_IPV4_ADDRESS=127.0.0.1 - - UDM_PORT=80 - - UDM_API_VERSION=v1 - - UDM_FQDN=localhost - UPF_IPV4_ADDRESS=192.168.71.134 - UPF_FQDN_0=oai-spgwu - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 - - NRF_API_VERSION=v1 - NRF_FQDN=oai-nrf - REGISTER_NRF=yes - DISCOVER_UPF=yes - USE_FQDN_DNS=yes + - USE_LOCAL_SUBSCRIPTION_INFO=yes + - UE_MTU=1500 + # Only one slice is defined (1, 0xFFFFFF) - DNN_NI0=oai - TYPE0=IPv4 - DNN_RANGE0=12.1.1.2 - 12.1.1.127 - NSSAI_SST0=1 - - NSSAI_SD0=0xFFFFFF - SESSION_AMBR_UL0=200Mbps - SESSION_AMBR_DL0=400Mbps - - DNN_NI2=oai.ipv4 + - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1 + - ENABLE_USAGE_REPORTING=no depends_on: - oai-nrf - oai-amf - volumes: - - ./smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 networks: public_net: ipv4_address: 192.168.71.133 oai-spgwu: container_name: "rfsim5g-oai-spgwu" - image: oai-spgwu-tiny:august-dev + image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 environment: - TZ=Europe/Paris - - PID_DIRECTORY=/var/run - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 - SGW_INTERFACE_NAME_FOR_SX=eth0 - PGW_INTERFACE_NAME_FOR_SGI=eth0 - NETWORK_UE_NAT_OPTION=yes - NETWORK_UE_IP=12.1.1.0/24 - - SPGWC0_IP_ADDRESS=192.168.71.133 - - BYPASS_UL_PFCP_RULES=no - - MCC=208 - - MNC=99 - - MNC03=099 - - TAC=1 - - GTP_EXTENSION_HEADER_PRESENT=yes - - GW_ID=1 - - REALM=openairinterface.org - ENABLE_5G_FEATURES=yes - REGISTER_NRF=yes - USE_FQDN_NRF=yes - UPF_FQDN_5G=oai-spgwu - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 - - NRF_API_VERSION=v1 - NRF_FQDN=oai-nrf + # Only one slice is defined (1, 0xFFFFFF) - NSSAI_SST_0=1 - NSSAI_SD_0=0xffffff - DNN_0=oai @@ -200,24 +140,16 @@ services: cap_drop: - ALL privileged: true - volumes: - - ./spgwu-healthcheck.sh:/openair-spgwu-tiny/bin/spgwu-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-spgwu-tiny/bin/spgwu-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 networks: public_net: ipv4_address: 192.168.71.134 traffic_net: ipv4_address: 192.168.72.134 oai-ext-dn: - image: ubuntu:bionic privileged: true container_name: rfsim5g-oai-ext-dn + image: oaisoftwarealliance/trf-gen-cn5g:latest entrypoint: /bin/bash -c \ - "apt update; apt install -y procps iptables iproute2 iperf iputils-ping;"\ "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity" depends_on: diff --git a/ci-scripts/yaml_files/5g_fdd_rfsimulator/docker-compose.yaml b/ci-scripts/yaml_files/5g_fdd_rfsimulator/docker-compose.yaml index 695a05f2b0..c3c3797125 100644 --- a/ci-scripts/yaml_files/5g_fdd_rfsimulator/docker-compose.yaml +++ b/ci-scripts/yaml_files/5g_fdd_rfsimulator/docker-compose.yaml @@ -2,27 +2,16 @@ version: '3.8' services: oai-nrf: container_name: "rfsim5g-oai-nrf" - image: oai-nrf:august-dev + image: oaisoftwarealliance/oai-nrf:v1.5.0 environment: - NRF_INTERFACE_NAME_FOR_SBI=eth0 - - NRF_INTERFACE_PORT_FOR_SBI=80 - - NRF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 - - NRF_API_VERSION=v1 - - INSTANCE=0 - - PID_DIRECTORY=/var/run + - TZ=Europe/Paris networks: public_net: ipv4_address: 192.168.71.130 - volumes: - - ./nrf-healthcheck.sh:/openair-nrf/bin/nrf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-nrf/bin/nrf-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 mysql: container_name: "rfsim5g-mysql" - image: mysql:5.7 + image: mysql:8.0 volumes: - ./oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - ./mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh @@ -36,17 +25,15 @@ services: test: /bin/bash -c "/tmp/mysql-healthcheck.sh" interval: 10s timeout: 5s - retries: 5 + retries: 30 networks: public_net: ipv4_address: 192.168.71.131 oai-amf: container_name: "rfsim5g-oai-amf" - image: oai-amf:august-dev + image: oaisoftwarealliance/oai-amf:v1.5.0 environment: - TZ=Europe/paris - - INSTANCE=0 - - PID_DIRECTORY=/var/run - MCC=208 - MNC=99 - REGION_ID=128 @@ -62,132 +49,85 @@ services: - PLMN_SUPPORT_MCC=208 - PLMN_SUPPORT_MNC=99 - PLMN_SUPPORT_TAC=0x0001 + # Only one slice is defined (1, 0xFFFFFF). - SST_0=1 - - SD_0=0xffffff - - SST_1=1 - - SD_1=1 - AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0 + # One single SMF instance - SMF_INSTANCE_ID_0=1 - SMF_FQDN_0=oai-smf - - SMF_IPV4_ADDR_0=0.0.0.0 - - SMF_HTTP_VERSION_0=v1 + - SMF_IPV4_ADDR_0=192.168.71.133 - SELECTED_0=true - - SMF_INSTANCE_ID_1=2 - - SMF_FQDN_1=oai-smf - - SMF_IPV4_ADDR_1=0.0.0.0 - - SMF_HTTP_VERSION_1=v1 - - SELECTED_1=false + # mysql definition in AMF is mandatory in mini deployment. - MYSQL_SERVER=192.168.71.131 - MYSQL_USER=root - MYSQL_PASS=linux - MYSQL_DB=oai_db - - OPERATOR_KEY=c42449363bbad02b66d16bc975d77cc1 + # NF registration - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 + - NRF_FQDN=oai-nrf - NF_REGISTRATION=yes - SMF_SELECTION=yes - USE_FQDN_DNS=yes - - NRF_API_VERSION=v1 - - NRF_FQDN=oai-nrf - - EXTERNAL_AUSF=no - - AUSF_IPV4_ADDRESS=0.0.0.0 - - AUSF_PORT=80 - - AUSF_API_VERSION=v1 - - AUSF_FQDN=localhost + - USE_HTTP2=no depends_on: - oai-nrf - mysql - volumes: - - ./amf-healthcheck.sh:/openair-amf/bin/amf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-amf/bin/amf-healthcheck.sh" - interval: 10s - timeout: 15s - retries: 5 networks: public_net: ipv4_address: 192.168.71.132 oai-smf: container_name: "rfsim5g-oai-smf" - image: oai-smf:august-dev + image: oaisoftwarealliance/oai-smf:v1.5.0 environment: - TZ=Europe/Paris - - INSTANCE=0 - - PID_DIRECTORY=/var/run - SMF_INTERFACE_NAME_FOR_N4=eth0 - SMF_INTERFACE_NAME_FOR_SBI=eth0 - - SMF_INTERFACE_PORT_FOR_SBI=80 - - SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 - - SMF_API_VERSION=v1 - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 - - AMF_IPV4_ADDRESS=0.0.0.0 - - AMF_PORT=80 - - AMF_API_VERSION=v1 + - AMF_IPV4_ADDRESS=192.168.71.132 - AMF_FQDN=oai-amf - - UDM_IPV4_ADDRESS=127.0.0.1 - - UDM_PORT=80 - - UDM_API_VERSION=v1 - - UDM_FQDN=localhost - UPF_IPV4_ADDRESS=192.168.71.134 - UPF_FQDN_0=oai-spgwu - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 - - NRF_API_VERSION=v1 - NRF_FQDN=oai-nrf - REGISTER_NRF=yes - DISCOVER_UPF=yes - USE_FQDN_DNS=yes + - USE_LOCAL_SUBSCRIPTION_INFO=yes + - UE_MTU=1500 + # Only one slice is defined (1, 0xFFFFFF) - DNN_NI0=oai - TYPE0=IPv4 - DNN_RANGE0=12.1.1.2 - 12.1.1.127 - NSSAI_SST0=1 - - NSSAI_SD0=0xFFFFFF - SESSION_AMBR_UL0=200Mbps - SESSION_AMBR_DL0=400Mbps - - DNN_NI2=oai.ipv4 + - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1 + - ENABLE_USAGE_REPORTING=no depends_on: - oai-nrf - oai-amf - volumes: - - ./smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 networks: public_net: ipv4_address: 192.168.71.133 oai-spgwu: container_name: "rfsim5g-oai-spgwu" - image: oai-spgwu-tiny:august-dev + image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 environment: - TZ=Europe/Paris - - PID_DIRECTORY=/var/run - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 - SGW_INTERFACE_NAME_FOR_SX=eth0 - PGW_INTERFACE_NAME_FOR_SGI=eth0 - NETWORK_UE_NAT_OPTION=yes - NETWORK_UE_IP=12.1.1.0/24 - - SPGWC0_IP_ADDRESS=192.168.71.133 - - BYPASS_UL_PFCP_RULES=no - - MCC=208 - - MNC=99 - - MNC03=099 - - TAC=1 - - GTP_EXTENSION_HEADER_PRESENT=yes - - GW_ID=1 - - REALM=openairinterface.org - ENABLE_5G_FEATURES=yes - REGISTER_NRF=yes - USE_FQDN_NRF=yes - UPF_FQDN_5G=oai-spgwu - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 - - NRF_API_VERSION=v1 - NRF_FQDN=oai-nrf + # Only one slice is defined (1, 0xFFFFFF) - NSSAI_SST_0=1 - NSSAI_SD_0=0xffffff - DNN_0=oai @@ -200,24 +140,16 @@ services: cap_drop: - ALL privileged: true - volumes: - - ./spgwu-healthcheck.sh:/openair-spgwu-tiny/bin/spgwu-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-spgwu-tiny/bin/spgwu-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 networks: public_net: ipv4_address: 192.168.71.134 traffic_net: ipv4_address: 192.168.72.134 oai-ext-dn: - image: ubuntu:bionic privileged: true container_name: rfsim5g-oai-ext-dn + image: oaisoftwarealliance/trf-gen-cn5g:latest entrypoint: /bin/bash -c \ - "apt update; apt install -y procps iptables iproute2 iperf iputils-ping;"\ "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity" depends_on: diff --git a/ci-scripts/yaml_files/5g_l2sim_tdd/README.md b/ci-scripts/yaml_files/5g_l2sim_tdd/README.md index 9578d037ca..adbb6edd44 100644 --- a/ci-scripts/yaml_files/5g_l2sim_tdd/README.md +++ b/ci-scripts/yaml_files/5g_l2sim_tdd/README.md @@ -32,11 +32,12 @@ Password: Now pull images. ```bash -$ docker pull mysql:5.7 -$ docker pull oaisoftwarealliance/oai-amf:develop -$ docker pull oaisoftwarealliance/oai-nrf:develop -$ docker pull oaisoftwarealliance/oai-smf:develop -$ docker pull oaisoftwarealliance/oai-spgwu-tiny:develop +$ docker pull mysql:8.0 +$ docker pull oaisoftwarealliance/oai-amf:v1.5.0 +$ docker pull oaisoftwarealliance/oai-nrf:v1.5.0 +$ docker pull oaisoftwarealliance/oai-smf:v1.5.0 +$ docker pull oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 +$ docker pull oaisoftwarealliance/trf-gen-cn5g:latest $ docker pull oaisoftwarealliance/oai-gnb:develop $ docker pull oaisoftwarealliance/oai-nr-ue:develop @@ -46,11 +47,6 @@ $ docker pull oaisoftwarealliance/proxy:latest And **re-tag** them for tutorials' docker-compose file to work. ```bash -$ docker image tag oaisoftwarealliance/oai-amf:latest oai-amf:august-dev -$ docker image tag oaisoftwarealliance/oai-nrf:latest oai-nrf:august-dev -$ docker image tag oaisoftwarealliance/oai-smf:latest oai-smf:august-dev -$ docker image tag oaisoftwarealliance/oai-spgwu-tiny:latest oai-spgwu-tiny:august-dev - $ docker image tag oaisoftwarealliance/oai-gnb:develop oai-gnb:develop $ docker image tag oaisoftwarealliance/oai-nr-ue:develop oai-nr-ue:develop $ docker image tag oaisoftwarealliance/proxy:latest oai-lte-multi-ue-proxy:latest diff --git a/ci-scripts/yaml_files/5g_l2sim_tdd/docker-compose.yaml b/ci-scripts/yaml_files/5g_l2sim_tdd/docker-compose.yaml index 83b6ce50ae..265f130c08 100644 --- a/ci-scripts/yaml_files/5g_l2sim_tdd/docker-compose.yaml +++ b/ci-scripts/yaml_files/5g_l2sim_tdd/docker-compose.yaml @@ -2,27 +2,16 @@ version: '3.8' services: oai-nrf: container_name: "l2sim-oai-nrf" - image: oai-nrf:august-dev + image: oaisoftwarealliance/oai-nrf:v1.5.0 environment: - NRF_INTERFACE_NAME_FOR_SBI=eth0 - - NRF_INTERFACE_PORT_FOR_SBI=80 - - NRF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 - - NRF_API_VERSION=v1 - - INSTANCE=0 - - PID_DIRECTORY=/var/run + - TZ=Europe/Paris networks: public_net: ipv4_address: 192.168.71.130 - volumes: - - ../5g_rfsimulator/nrf-healthcheck.sh:/openair-nrf/bin/nrf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-nrf/bin/nrf-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 mysql: container_name: "l2sim-mysql" - image: mysql:5.7 + image: mysql:8.0 volumes: - ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh @@ -36,17 +25,15 @@ services: test: /bin/bash -c "/tmp/mysql-healthcheck.sh" interval: 10s timeout: 5s - retries: 5 + retries: 30 networks: public_net: ipv4_address: 192.168.71.131 oai-amf: container_name: "l2sim-oai-amf" - image: oai-amf:august-dev + image: oaisoftwarealliance/oai-amf:v1.5.0 environment: - TZ=Europe/paris - - INSTANCE=0 - - PID_DIRECTORY=/var/run - MCC=208 - MNC=99 - REGION_ID=128 @@ -62,132 +49,85 @@ services: - PLMN_SUPPORT_MCC=208 - PLMN_SUPPORT_MNC=99 - PLMN_SUPPORT_TAC=0x0001 + # Only one slice is defined (1, 0xFFFFFF). - SST_0=1 - - SD_0=0xffffff - - SST_1=1 - - SD_1=1 - AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0 + # One single SMF instance - SMF_INSTANCE_ID_0=1 - SMF_FQDN_0=oai-smf - - SMF_IPV4_ADDR_0=0.0.0.0 - - SMF_HTTP_VERSION_0=v1 + - SMF_IPV4_ADDR_0=192.168.71.133 - SELECTED_0=true - - SMF_INSTANCE_ID_1=2 - - SMF_FQDN_1=oai-smf - - SMF_IPV4_ADDR_1=0.0.0.0 - - SMF_HTTP_VERSION_1=v1 - - SELECTED_1=false + # mysql definition in AMF is mandatory in mini deployment. - MYSQL_SERVER=192.168.71.131 - MYSQL_USER=root - MYSQL_PASS=linux - MYSQL_DB=oai_db - - OPERATOR_KEY=c42449363bbad02b66d16bc975d77cc1 + # NF registration - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 + - NRF_FQDN=oai-nrf - NF_REGISTRATION=yes - SMF_SELECTION=yes - USE_FQDN_DNS=yes - - NRF_API_VERSION=v1 - - NRF_FQDN=oai-nrf - - EXTERNAL_AUSF=no - - AUSF_IPV4_ADDRESS=0.0.0.0 - - AUSF_PORT=80 - - AUSF_API_VERSION=v1 - - AUSF_FQDN=localhost + - USE_HTTP2=no depends_on: - oai-nrf - mysql - volumes: - - ../5g_rfsimulator/amf-healthcheck.sh:/openair-amf/bin/amf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-amf/bin/amf-healthcheck.sh" - interval: 10s - timeout: 15s - retries: 5 networks: public_net: ipv4_address: 192.168.71.132 oai-smf: container_name: "l2sim-oai-smf" - image: oai-smf:august-dev + image: oaisoftwarealliance/oai-smf:v1.5.0 environment: - TZ=Europe/Paris - - INSTANCE=0 - - PID_DIRECTORY=/var/run - SMF_INTERFACE_NAME_FOR_N4=eth0 - SMF_INTERFACE_NAME_FOR_SBI=eth0 - - SMF_INTERFACE_PORT_FOR_SBI=80 - - SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 - - SMF_API_VERSION=v1 - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 - - AMF_IPV4_ADDRESS=0.0.0.0 - - AMF_PORT=80 - - AMF_API_VERSION=v1 + - AMF_IPV4_ADDRESS=192.168.71.132 - AMF_FQDN=oai-amf - - UDM_IPV4_ADDRESS=127.0.0.1 - - UDM_PORT=80 - - UDM_API_VERSION=v1 - - UDM_FQDN=localhost - UPF_IPV4_ADDRESS=192.168.71.134 - UPF_FQDN_0=oai-spgwu - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 - - NRF_API_VERSION=v1 - NRF_FQDN=oai-nrf - REGISTER_NRF=yes - DISCOVER_UPF=yes - USE_FQDN_DNS=yes + - USE_LOCAL_SUBSCRIPTION_INFO=yes + - UE_MTU=1500 + # Only one slice is defined (1, 0xFFFFFF) - DNN_NI0=oai - TYPE0=IPv4 - DNN_RANGE0=12.1.1.2 - 12.1.1.127 - NSSAI_SST0=1 - - NSSAI_SD0=0xFFFFFF - SESSION_AMBR_UL0=200Mbps - SESSION_AMBR_DL0=400Mbps - - DNN_NI2=oai.ipv4 + - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1 + - ENABLE_USAGE_REPORTING=no depends_on: - oai-nrf - oai-amf - volumes: - - ../5g_rfsimulator/smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 networks: public_net: ipv4_address: 192.168.71.133 oai-spgwu: container_name: "l2sim-oai-spgwu" - image: oai-spgwu-tiny:august-dev + image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 environment: - TZ=Europe/Paris - - PID_DIRECTORY=/var/run - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 - SGW_INTERFACE_NAME_FOR_SX=eth0 - PGW_INTERFACE_NAME_FOR_SGI=eth0 - NETWORK_UE_NAT_OPTION=yes - NETWORK_UE_IP=12.1.1.0/24 - - SPGWC0_IP_ADDRESS=192.168.71.133 - - BYPASS_UL_PFCP_RULES=no - - MCC=208 - - MNC=99 - - MNC03=099 - - TAC=1 - - GTP_EXTENSION_HEADER_PRESENT=yes - - GW_ID=1 - - REALM=openairinterface.org - ENABLE_5G_FEATURES=yes - REGISTER_NRF=yes - USE_FQDN_NRF=yes - UPF_FQDN_5G=oai-spgwu - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 - - NRF_API_VERSION=v1 - NRF_FQDN=oai-nrf + # Only one slice is defined (1, 0xFFFFFF) - NSSAI_SST_0=1 - NSSAI_SD_0=0xffffff - DNN_0=oai @@ -200,24 +140,17 @@ services: cap_drop: - ALL privileged: true - volumes: - - ../5g_rfsimulator/spgwu-healthcheck.sh:/openair-spgwu-tiny/bin/spgwu-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-spgwu-tiny/bin/spgwu-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 networks: public_net: ipv4_address: 192.168.71.134 traffic_net: ipv4_address: 192.168.72.134 oai-ext-dn: - image: ubuntu:bionic privileged: true container_name: "l2sim-oai-ext-dn" + image: oaisoftwarealliance/trf-gen-cn5g:latest entrypoint: /bin/bash -c \ - "apt update; apt install -y procps iptables iproute2 iperf iputils-ping;"\ + "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity" depends_on: - oai-spgwu diff --git a/ci-scripts/yaml_files/5g_rfsimulator/README.md b/ci-scripts/yaml_files/5g_rfsimulator/README.md index f75d3721da..901aa37f78 100644 --- a/ci-scripts/yaml_files/5g_rfsimulator/README.md +++ b/ci-scripts/yaml_files/5g_rfsimulator/README.md @@ -14,7 +14,7 @@ This page is only valid for an `Ubuntu18` host. -**NOTE: this version (2022-01-27) has been updated for the `v1.3.0` version of the `OAI 5G CN`.** +**NOTE: this version (2023-01-27) has been updated for the `v1.5.0` version of the `OAI 5G CN`.** **Table of Contents** @@ -36,11 +36,12 @@ Password: Now pull images. ```bash -$ docker pull mysql:5.7 -$ docker pull oaisoftwarealliance/oai-amf:develop -$ docker pull oaisoftwarealliance/oai-nrf:develop -$ docker pull oaisoftwarealliance/oai-smf:develop -$ docker pull oaisoftwarealliance/oai-spgwu-tiny:develop +$ docker pull mysql:8.0 +$ docker pull oaisoftwarealliance/oai-amf:v1.5.0 +$ docker pull oaisoftwarealliance/oai-nrf:v1.5.0 +$ docker pull oaisoftwarealliance/oai-smf:v1.5.0 +$ docker pull oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 +$ docker pull oaisoftwarealliance/trf-gen-cn5g:latest $ docker pull oaisoftwarealliance/oai-gnb:develop $ docker pull oaisoftwarealliance/oai-nr-ue:develop @@ -49,11 +50,6 @@ $ docker pull oaisoftwarealliance/oai-nr-ue:develop And **re-tag** them for tutorials' docker-compose file to work. ```bash -$ docker image tag oaisoftwarealliance/oai-amf:latest oai-amf:august-dev -$ docker image tag oaisoftwarealliance/oai-nrf:latest oai-nrf:august-dev -$ docker image tag oaisoftwarealliance/oai-smf:latest oai-smf:august-dev -$ docker image tag oaisoftwarealliance/oai-spgwu-tiny:latest oai-spgwu-tiny:august-dev - $ docker image tag oaisoftwarealliance/oai-gnb:develop oai-gnb:develop $ docker image tag oaisoftwarealliance/oai-nr-ue:develop oai-nr-ue:develop ``` @@ -62,9 +58,9 @@ $ docker image tag oaisoftwarealliance/oai-nr-ue:develop oai-nr-ue:develop $ docker logout ``` -**CAUTION: 2022/01/27 with the release `v1.3.0` of the `CN5G`, the previous version was not compatible any-more.** +**CAUTION: 2023/01/27 with the release `v1.5.0` of the `CN5G`, the previous version was not compatible any-more.** -**This new version is working only with the `v1.3.0` of the `CN5G`.** +**This new version is working only with the `v1.5.0` of the `CN5G`.** # 2. Deploy containers # diff --git a/ci-scripts/yaml_files/5g_rfsimulator/amf-healthcheck.sh b/ci-scripts/yaml_files/5g_rfsimulator/amf-healthcheck.sh deleted file mode 100755 index 8bfdee2aac..0000000000 --- a/ci-scripts/yaml_files/5g_rfsimulator/amf-healthcheck.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash -set -eo pipefail - -STATUS=0 -AMF_PORT_FOR_NGAP=38412 -AMF_PORT_FOR_N11_HTTP=80 -AMF_IP_NGAP_INTERFACE=$(ifconfig $AMF_INTERFACE_NAME_FOR_NGAP | grep inet | awk {'print $2'}) -AMF_IP_N11_INTERFACE=$(ifconfig $AMF_INTERFACE_NAME_FOR_N11 | grep inet | awk {'print $2'}) -N2_PORT_STATUS=$(netstat -Snpl | grep -o "$AMF_IP_NGAP_INTERFACE:$AMF_PORT_FOR_NGAP") -N11_PORT_STATUS=$(netstat -tnpl | grep -o "$AMF_IP_N11_INTERFACE:$AMF_PORT_FOR_N11_HTTP") -#Check if entrypoint properly configured the conf file and no parameter is unset (optional) -NB_UNREPLACED_AT=`cat /openair-amf/etc/*.conf | grep -v contact@openairinterface.org | grep -c @ || true` - -if [ $NB_UNREPLACED_AT -ne 0 ]; then - STATUS=1 - echo "Healthcheck error: configuration file is not configured properly" -fi - -if [[ -z $N2_PORT_STATUS ]]; then - STATUS=1 - echo "Healthcheck error: N2 SCTP port $AMF_PORT_FOR_NGAP is not listening" -fi - -if [[ -z $N11_PORT_STATUS ]]; then - STATUS=1 - echo "Healthcheck error: N11/SBI TCP/HTTP port $AMF_PORT_FOR_N11_HTTP is not listening" -fi - -#host="${MYSQL_SERVER}" -#user="${MYSQL_USER:-root}" -#export MYSQL_PWD="${MYSQL_PASS}" - -#args=( -# -h"$host" -# -u"$user" -# --silent -#) - -#if ! command -v mysql &> /dev/null; then -# echo "Installing mysql command" -# apt update -# apt-get -y install mysql-client -#else -# if select="$(echo 'SELECT 1' | mysql "${args[@]}")" && [ "$select" = '1' ]; then -# database_check=$(mysql -h$host -u$user -D oai_db --silent -e "SELECT * FROM users;") -# if [[ -z $database_check ]]; then -# echo "Healthcheck error: oai_db not populated" -# STATUS=1 -# fi -# STATUS=0 -# else -# echo "Healthcheck error: Mysql port inactive" -# STATUS=1 -# fi -#fi - -exit $STATUS diff --git a/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml index 107ec626e2..ab78b35ab5 100644 --- a/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml +++ b/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml @@ -2,27 +2,16 @@ version: '3.8' services: oai-nrf: container_name: "rfsim5g-oai-nrf" - image: oai-nrf:august-dev + image: oaisoftwarealliance/oai-nrf:v1.5.0 environment: - NRF_INTERFACE_NAME_FOR_SBI=eth0 - - NRF_INTERFACE_PORT_FOR_SBI=80 - - NRF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 - - NRF_API_VERSION=v1 - - INSTANCE=0 - - PID_DIRECTORY=/var/run + - TZ=Europe/Paris networks: public_net: ipv4_address: 192.168.71.130 - volumes: - - ./nrf-healthcheck.sh:/openair-nrf/bin/nrf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-nrf/bin/nrf-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 mysql: container_name: "rfsim5g-mysql" - image: mysql:5.7 + image: mysql:8.0 volumes: - ./oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - ./mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh @@ -36,17 +25,15 @@ services: test: /bin/bash -c "/tmp/mysql-healthcheck.sh" interval: 10s timeout: 5s - retries: 5 + retries: 30 networks: public_net: ipv4_address: 192.168.71.131 oai-amf: container_name: "rfsim5g-oai-amf" - image: oai-amf:august-dev + image: oaisoftwarealliance/oai-amf:v1.5.0 environment: - TZ=Europe/paris - - INSTANCE=0 - - PID_DIRECTORY=/var/run - MCC=208 - MNC=99 - REGION_ID=128 @@ -62,132 +49,85 @@ services: - PLMN_SUPPORT_MCC=208 - PLMN_SUPPORT_MNC=99 - PLMN_SUPPORT_TAC=0x0001 + # Only one slice is defined (1, 0xFFFFFF). - SST_0=1 - - SD_0=0xffffff - - SST_1=1 - - SD_1=1 - AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0 + # One single SMF instance - SMF_INSTANCE_ID_0=1 - SMF_FQDN_0=oai-smf - - SMF_IPV4_ADDR_0=0.0.0.0 - - SMF_HTTP_VERSION_0=v1 + - SMF_IPV4_ADDR_0=192.168.71.133 - SELECTED_0=true - - SMF_INSTANCE_ID_1=2 - - SMF_FQDN_1=oai-smf - - SMF_IPV4_ADDR_1=0.0.0.0 - - SMF_HTTP_VERSION_1=v1 - - SELECTED_1=false + # mysql definition in AMF is mandatory in mini deployment. - MYSQL_SERVER=192.168.71.131 - MYSQL_USER=root - MYSQL_PASS=linux - MYSQL_DB=oai_db - - OPERATOR_KEY=c42449363bbad02b66d16bc975d77cc1 + # NF registration - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 + - NRF_FQDN=oai-nrf - NF_REGISTRATION=yes - SMF_SELECTION=yes - USE_FQDN_DNS=yes - - NRF_API_VERSION=v1 - - NRF_FQDN=oai-nrf - - EXTERNAL_AUSF=no - - AUSF_IPV4_ADDRESS=0.0.0.0 - - AUSF_PORT=80 - - AUSF_API_VERSION=v1 - - AUSF_FQDN=localhost + - USE_HTTP2=no depends_on: - oai-nrf - mysql - volumes: - - ./amf-healthcheck.sh:/openair-amf/bin/amf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-amf/bin/amf-healthcheck.sh" - interval: 10s - timeout: 15s - retries: 5 networks: public_net: ipv4_address: 192.168.71.132 oai-smf: container_name: "rfsim5g-oai-smf" - image: oai-smf:august-dev + image: oaisoftwarealliance/oai-smf:v1.5.0 environment: - TZ=Europe/Paris - - INSTANCE=0 - - PID_DIRECTORY=/var/run - SMF_INTERFACE_NAME_FOR_N4=eth0 - SMF_INTERFACE_NAME_FOR_SBI=eth0 - - SMF_INTERFACE_PORT_FOR_SBI=80 - - SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 - - SMF_API_VERSION=v1 - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 - - AMF_IPV4_ADDRESS=0.0.0.0 - - AMF_PORT=80 - - AMF_API_VERSION=v1 + - AMF_IPV4_ADDRESS=192.168.71.132 - AMF_FQDN=oai-amf - - UDM_IPV4_ADDRESS=127.0.0.1 - - UDM_PORT=80 - - UDM_API_VERSION=v1 - - UDM_FQDN=localhost - UPF_IPV4_ADDRESS=192.168.71.134 - UPF_FQDN_0=oai-spgwu - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 - - NRF_API_VERSION=v1 - NRF_FQDN=oai-nrf - REGISTER_NRF=yes - DISCOVER_UPF=yes - USE_FQDN_DNS=yes + - USE_LOCAL_SUBSCRIPTION_INFO=yes + - UE_MTU=1500 + # Only one slice is defined (1, 0xFFFFFF) - DNN_NI0=oai - TYPE0=IPv4 - DNN_RANGE0=12.1.1.2 - 12.1.1.127 - NSSAI_SST0=1 - - NSSAI_SD0=0xFFFFFF - SESSION_AMBR_UL0=200Mbps - SESSION_AMBR_DL0=400Mbps - - DNN_NI2=oai.ipv4 + - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1 + - ENABLE_USAGE_REPORTING=no depends_on: - oai-nrf - oai-amf - volumes: - - ./smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 networks: public_net: ipv4_address: 192.168.71.133 oai-spgwu: container_name: "rfsim5g-oai-spgwu" - image: oai-spgwu-tiny:august-dev + image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 environment: - TZ=Europe/Paris - - PID_DIRECTORY=/var/run - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 - SGW_INTERFACE_NAME_FOR_SX=eth0 - PGW_INTERFACE_NAME_FOR_SGI=eth0 - NETWORK_UE_NAT_OPTION=yes - NETWORK_UE_IP=12.1.1.0/24 - - SPGWC0_IP_ADDRESS=192.168.71.133 - - BYPASS_UL_PFCP_RULES=no - - MCC=208 - - MNC=99 - - MNC03=099 - - TAC=1 - - GTP_EXTENSION_HEADER_PRESENT=yes - - GW_ID=1 - - REALM=openairinterface.org - ENABLE_5G_FEATURES=yes - REGISTER_NRF=yes - USE_FQDN_NRF=yes - UPF_FQDN_5G=oai-spgwu - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 - - NRF_API_VERSION=v1 - NRF_FQDN=oai-nrf + # Only one slice is defined (1, 0xFFFFFF) - NSSAI_SST_0=1 - NSSAI_SD_0=0xffffff - DNN_0=oai @@ -200,24 +140,16 @@ services: cap_drop: - ALL privileged: true - volumes: - - ./spgwu-healthcheck.sh:/openair-spgwu-tiny/bin/spgwu-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-spgwu-tiny/bin/spgwu-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 networks: public_net: ipv4_address: 192.168.71.134 traffic_net: ipv4_address: 192.168.72.134 oai-ext-dn: - image: ubuntu:bionic privileged: true container_name: rfsim5g-oai-ext-dn + image: oaisoftwarealliance/trf-gen-cn5g:latest entrypoint: /bin/bash -c \ - "apt update; apt install -y procps iptables iproute2 iperf iputils-ping;"\ "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity" depends_on: @@ -234,7 +166,7 @@ services: image: oai-gnb:develop privileged: true container_name: rfsim5g-oai-gnb - environment: + environment: RFSIMULATOR: server USE_SA_TDD_MONO: 'yes' GNB_NAME: gnb-rfsim diff --git a/ci-scripts/yaml_files/5g_rfsimulator/nrf-healthcheck.sh b/ci-scripts/yaml_files/5g_rfsimulator/nrf-healthcheck.sh deleted file mode 100755 index 3479c092e8..0000000000 --- a/ci-scripts/yaml_files/5g_rfsimulator/nrf-healthcheck.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -set -eo pipefail - -STATUS=0 -NRF_IP_SBI_INTERFACE=$(ifconfig $NRF_INTERFACE_NAME_FOR_SBI | grep inet | awk {'print $2'}) -NRF_SBI_PORT_STATUS=$(netstat -tnpl | grep -o "$NRF_IP_SBI_INTERFACE:$NRF_INTERFACE_PORT_FOR_SBI") -#Check if entrypoint properly configured the conf file and no parameter is unset(optional) -NB_UNREPLACED_AT=`cat /openair-nrf/etc/*.conf | grep -v contact@openairinterface.org | grep -c @ || true` - -if [ $NB_UNREPLACED_AT -ne 0 ]; then - STATUS=1 - echo "Healthcheck error: UNHEALTHY configuration file is not configured properly" -fi - -if [[ -z $NRF_SBI_PORT_STATUS ]]; then - STATUS=1 - echo "Healthcheck error: UNHEALTHY SBI TCP/HTTP port $NRF_INTERFACE_PORT_FOR_SBI is not listening." -fi - -exit $STATUS \ No newline at end of file diff --git a/ci-scripts/yaml_files/5g_rfsimulator/smf-healthcheck.sh b/ci-scripts/yaml_files/5g_rfsimulator/smf-healthcheck.sh deleted file mode 100755 index d9ff7608e8..0000000000 --- a/ci-scripts/yaml_files/5g_rfsimulator/smf-healthcheck.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash -set -eo pipefail - -STATUS=0 -SMF_IP_SBI_INTERFACE=$(ifconfig $SMF_INTERFACE_NAME_FOR_SBI | grep inet | awk {'print $2'}) -SMF_SBI_PORT_STATUS=$(netstat -tnpl | grep -o "$SMF_IP_SBI_INTERFACE:$SMF_INTERFACE_PORT_FOR_SBI") - -#Check if entrypoint properly configured the conf file and no parameter is unset(optional) -#NB_UNREPLACED_AT=`cat /openair-smf/etc/*.conf | grep -v contact@openairinterface.org | grep -c @ || true` - -#if [ $NB_UNREPLACED_AT -ne 0 ]; then -# STATUS=-1 -# echo "Healthcheck error: UNHEALTHY configuration file is not configured properly" -#fi -# -if [[ -z $SMF_SBI_PORT_STATUS ]]; then - STATUS=-1 - echo "Healthcheck error: UNHEALTHY SBI TCP/HTTP port $SMF_INTERFACE_PORT_FOR_SBI is not listening." -fi - -exit $STATUS diff --git a/ci-scripts/yaml_files/5g_rfsimulator/spgwu-healthcheck.sh b/ci-scripts/yaml_files/5g_rfsimulator/spgwu-healthcheck.sh deleted file mode 100755 index 0e3b67ee7e..0000000000 --- a/ci-scripts/yaml_files/5g_rfsimulator/spgwu-healthcheck.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -set -eo pipefail - -STATUS=0 -SGW_PORT_FOR_S1U_S12_S4_UP=2152 -SGW_PORT_FOR_SX=8805 -SGW_IP_S1U_INTERFACE=$(ifconfig $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP | grep inet | awk {'print $2'}) -SGW_IP_SX_INTERFACE=$(ifconfig $SGW_INTERFACE_NAME_FOR_SX | grep inet | awk {'print $2'}) -S1U_S12_S4_UP_PORT_STATUS=$(netstat -unpl | grep -o "$SGW_IP_S1U_INTERFACE:$SGW_PORT_FOR_S1U_S12_S4_UP") -SX_PORT_STATUS=$(netstat -unpl | grep -o "$SGW_IP_SX_INTERFACE:$SGW_PORT_FOR_SX") -#Check if entrypoint properly configured the conf file and no parameter is unset (optional) -NB_UNREPLACED_AT=`cat /openair-spgwu/etc/*.conf | grep -v contact@openairinterface.org | grep -c @ || true` -if [ $NB_UNREPLACED_AT -ne 0 ]; then - STATUS=1 - echo "Healthcheck error: UNHEALTHY configuration file is not configured properly" -fi - -if [[ -z $S1U_S12_S4_UP_PORT_STATUS ]]; then - STATUS=1 - echo "Healthcheck error: UNHEALTHY S1U port $SGW_PORT_FOR_S1U_S12_S4_UP is not listening." -fi - -if [[ -z $SX_PORT_STATUS ]]; then - STATUS=1 - echo "Healthcheck error: UNHEALTHY SX port $SGW_PORT_FOR_SX is not listening." -fi - -exit $STATUS \ No newline at end of file diff --git a/ci-scripts/yaml_files/5g_rfsimulator_24prb/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator_24prb/docker-compose.yaml index 683c6bd9e6..64a507e4f6 100644 --- a/ci-scripts/yaml_files/5g_rfsimulator_24prb/docker-compose.yaml +++ b/ci-scripts/yaml_files/5g_rfsimulator_24prb/docker-compose.yaml @@ -2,28 +2,16 @@ version: '3.8' services: oai-nrf: container_name: "rfsim5g-oai-nrf" - image: oai-nrf:august-dev + image: oaisoftwarealliance/oai-nrf:v1.5.0 environment: - NRF_INTERFACE_NAME_FOR_SBI=eth0 - - NRF_INTERFACE_PORT_FOR_SBI=80 - - NRF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 - - NRF_API_VERSION=v1 - - INSTANCE=0 - - PID_DIRECTORY=/var/run + - TZ=Europe/Paris networks: public_net: ipv4_address: 192.168.71.130 - volumes: - - ../5g_rfsimulator/nrf-healthcheck.sh:/openair-nrf/bin/nrf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-nrf/bin/nrf-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 - mysql: container_name: "rfsim5g-mysql" - image: mysql:5.7 + image: mysql:8.0 volumes: - ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh @@ -37,18 +25,15 @@ services: test: /bin/bash -c "/tmp/mysql-healthcheck.sh" interval: 10s timeout: 5s - retries: 5 + retries: 30 networks: public_net: ipv4_address: 192.168.71.131 - oai-amf: container_name: "rfsim5g-oai-amf" - image: oai-amf:august-dev + image: oaisoftwarealliance/oai-amf:v1.5.0 environment: - TZ=Europe/paris - - INSTANCE=0 - - PID_DIRECTORY=/var/run - MCC=208 - MNC=99 - REGION_ID=128 @@ -64,134 +49,85 @@ services: - PLMN_SUPPORT_MCC=208 - PLMN_SUPPORT_MNC=99 - PLMN_SUPPORT_TAC=0x0001 + # Only one slice is defined (1, 0xFFFFFF). - SST_0=1 - - SD_0=0xffffff - - SST_1=1 - - SD_1=1 - AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0 + # One single SMF instance - SMF_INSTANCE_ID_0=1 - SMF_FQDN_0=oai-smf - - SMF_IPV4_ADDR_0=0.0.0.0 - - SMF_HTTP_VERSION_0=v1 + - SMF_IPV4_ADDR_0=192.168.71.133 - SELECTED_0=true - - SMF_INSTANCE_ID_1=2 - - SMF_FQDN_1=oai-smf - - SMF_IPV4_ADDR_1=0.0.0.0 - - SMF_HTTP_VERSION_1=v1 - - SELECTED_1=false + # mysql definition in AMF is mandatory in mini deployment. - MYSQL_SERVER=192.168.71.131 - MYSQL_USER=root - MYSQL_PASS=linux - MYSQL_DB=oai_db - - OPERATOR_KEY=c42449363bbad02b66d16bc975d77cc1 + # NF registration - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 + - NRF_FQDN=oai-nrf - NF_REGISTRATION=yes - SMF_SELECTION=yes - USE_FQDN_DNS=yes - - NRF_API_VERSION=v1 - - NRF_FQDN=oai-nrf - - EXTERNAL_AUSF=no - - AUSF_IPV4_ADDRESS=0.0.0.0 - - AUSF_PORT=80 - - AUSF_API_VERSION=v1 - - AUSF_FQDN=localhost + - USE_HTTP2=no depends_on: - oai-nrf - mysql - volumes: - - ../5g_rfsimulator/amf-healthcheck.sh:/openair-amf/bin/amf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-amf/bin/amf-healthcheck.sh" - interval: 10s - timeout: 15s - retries: 5 networks: public_net: ipv4_address: 192.168.71.132 - oai-smf: container_name: "rfsim5g-oai-smf" - image: oai-smf:august-dev + image: oaisoftwarealliance/oai-smf:v1.5.0 environment: - TZ=Europe/Paris - - INSTANCE=0 - - PID_DIRECTORY=/var/run - SMF_INTERFACE_NAME_FOR_N4=eth0 - SMF_INTERFACE_NAME_FOR_SBI=eth0 - - SMF_INTERFACE_PORT_FOR_SBI=80 - - SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 - - SMF_API_VERSION=v1 - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 - - AMF_IPV4_ADDRESS=0.0.0.0 - - AMF_PORT=80 - - AMF_API_VERSION=v1 + - AMF_IPV4_ADDRESS=192.168.71.132 - AMF_FQDN=oai-amf - - UDM_IPV4_ADDRESS=127.0.0.1 - - UDM_PORT=80 - - UDM_API_VERSION=v1 - - UDM_FQDN=localhost - UPF_IPV4_ADDRESS=192.168.71.134 - UPF_FQDN_0=oai-spgwu - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 - - NRF_API_VERSION=v1 - NRF_FQDN=oai-nrf - REGISTER_NRF=yes - DISCOVER_UPF=yes - USE_FQDN_DNS=yes + - USE_LOCAL_SUBSCRIPTION_INFO=yes + - UE_MTU=1500 + # Only one slice is defined (1, 0xFFFFFF) - DNN_NI0=oai - TYPE0=IPv4 - DNN_RANGE0=12.1.1.2 - 12.1.1.127 - NSSAI_SST0=1 - - NSSAI_SD0=0xFFFFFF - SESSION_AMBR_UL0=200Mbps - SESSION_AMBR_DL0=400Mbps - - DNN_NI2=oai.ipv4 + - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1 + - ENABLE_USAGE_REPORTING=no depends_on: - oai-nrf - oai-amf - volumes: - - ../5g_rfsimulator/smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 networks: public_net: ipv4_address: 192.168.71.133 - oai-spgwu: container_name: "rfsim5g-oai-spgwu" - image: oai-spgwu-tiny:august-dev + image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 environment: - TZ=Europe/Paris - - PID_DIRECTORY=/var/run - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 - SGW_INTERFACE_NAME_FOR_SX=eth0 - PGW_INTERFACE_NAME_FOR_SGI=eth0 - NETWORK_UE_NAT_OPTION=yes - NETWORK_UE_IP=12.1.1.0/24 - - SPGWC0_IP_ADDRESS=192.168.71.133 - - BYPASS_UL_PFCP_RULES=no - - MCC=208 - - MNC=99 - - MNC03=099 - - TAC=1 - - GTP_EXTENSION_HEADER_PRESENT=yes - - GW_ID=1 - - REALM=openairinterface.org - ENABLE_5G_FEATURES=yes - REGISTER_NRF=yes - USE_FQDN_NRF=yes - UPF_FQDN_5G=oai-spgwu - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 - - NRF_API_VERSION=v1 - NRF_FQDN=oai-nrf + # Only one slice is defined (1, 0xFFFFFF) - NSSAI_SST_0=1 - NSSAI_SD_0=0xffffff - DNN_0=oai @@ -204,25 +140,16 @@ services: cap_drop: - ALL privileged: true - volumes: - - ../5g_rfsimulator/spgwu-healthcheck.sh:/openair-spgwu-tiny/bin/spgwu-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-spgwu-tiny/bin/spgwu-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 networks: public_net: ipv4_address: 192.168.71.134 traffic_net: ipv4_address: 192.168.72.134 - oai-ext-dn: - image: ubuntu:bionic privileged: true container_name: rfsim5g-oai-ext-dn + image: oaisoftwarealliance/trf-gen-cn5g:latest entrypoint: /bin/bash -c \ - "apt update; apt install -y procps iptables iproute2 iperf iputils-ping;"\ "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity" depends_on: @@ -235,7 +162,6 @@ services: interval: 10s timeout: 5s retries: 5 - oai-gnb: image: oai-gnb:develop privileged: true @@ -256,7 +182,6 @@ services: interval: 10s timeout: 5s retries: 5 - oai-nr-ue: image: oai-nr-ue:develop privileged: true diff --git a/ci-scripts/yaml_files/5g_rfsimulator_2x2/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator_2x2/docker-compose.yaml index 6161f223f8..06f1dcc80e 100644 --- a/ci-scripts/yaml_files/5g_rfsimulator_2x2/docker-compose.yaml +++ b/ci-scripts/yaml_files/5g_rfsimulator_2x2/docker-compose.yaml @@ -2,28 +2,16 @@ version: '3.8' services: oai-nrf: container_name: "rfsim5g-oai-nrf" - image: oai-nrf:august-dev + image: oaisoftwarealliance/oai-nrf:v1.5.0 environment: - NRF_INTERFACE_NAME_FOR_SBI=eth0 - - NRF_INTERFACE_PORT_FOR_SBI=80 - - NRF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 - - NRF_API_VERSION=v1 - - INSTANCE=0 - - PID_DIRECTORY=/var/run + - TZ=Europe/Paris networks: public_net: ipv4_address: 192.168.71.130 - volumes: - - ../5g_rfsimulator/nrf-healthcheck.sh:/openair-nrf/bin/nrf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-nrf/bin/nrf-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 - mysql: container_name: "rfsim5g-mysql" - image: mysql:5.7 + image: mysql:8.0 volumes: - ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh @@ -37,18 +25,15 @@ services: test: /bin/bash -c "/tmp/mysql-healthcheck.sh" interval: 10s timeout: 5s - retries: 5 + retries: 30 networks: public_net: ipv4_address: 192.168.71.131 - oai-amf: container_name: "rfsim5g-oai-amf" - image: oai-amf:august-dev + image: oaisoftwarealliance/oai-amf:v1.5.0 environment: - TZ=Europe/paris - - INSTANCE=0 - - PID_DIRECTORY=/var/run - MCC=208 - MNC=99 - REGION_ID=128 @@ -64,134 +49,85 @@ services: - PLMN_SUPPORT_MCC=208 - PLMN_SUPPORT_MNC=99 - PLMN_SUPPORT_TAC=0x0001 + # Only one slice is defined (1, 0xFFFFFF). - SST_0=1 - - SD_0=0xffffff - - SST_1=1 - - SD_1=1 - AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0 + # One single SMF instance - SMF_INSTANCE_ID_0=1 - SMF_FQDN_0=oai-smf - - SMF_IPV4_ADDR_0=0.0.0.0 - - SMF_HTTP_VERSION_0=v1 + - SMF_IPV4_ADDR_0=192.168.71.133 - SELECTED_0=true - - SMF_INSTANCE_ID_1=2 - - SMF_FQDN_1=oai-smf - - SMF_IPV4_ADDR_1=0.0.0.0 - - SMF_HTTP_VERSION_1=v1 - - SELECTED_1=false + # mysql definition in AMF is mandatory in mini deployment. - MYSQL_SERVER=192.168.71.131 - MYSQL_USER=root - MYSQL_PASS=linux - MYSQL_DB=oai_db - - OPERATOR_KEY=c42449363bbad02b66d16bc975d77cc1 + # NF registration - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 + - NRF_FQDN=oai-nrf - NF_REGISTRATION=yes - SMF_SELECTION=yes - USE_FQDN_DNS=yes - - NRF_API_VERSION=v1 - - NRF_FQDN=oai-nrf - - EXTERNAL_AUSF=no - - AUSF_IPV4_ADDRESS=0.0.0.0 - - AUSF_PORT=80 - - AUSF_API_VERSION=v1 - - AUSF_FQDN=localhost + - USE_HTTP2=no depends_on: - oai-nrf - mysql - volumes: - - ../5g_rfsimulator/amf-healthcheck.sh:/openair-amf/bin/amf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-amf/bin/amf-healthcheck.sh" - interval: 10s - timeout: 15s - retries: 5 networks: public_net: ipv4_address: 192.168.71.132 - oai-smf: container_name: "rfsim5g-oai-smf" - image: oai-smf:august-dev + image: oaisoftwarealliance/oai-smf:v1.5.0 environment: - TZ=Europe/Paris - - INSTANCE=0 - - PID_DIRECTORY=/var/run - SMF_INTERFACE_NAME_FOR_N4=eth0 - SMF_INTERFACE_NAME_FOR_SBI=eth0 - - SMF_INTERFACE_PORT_FOR_SBI=80 - - SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 - - SMF_API_VERSION=v1 - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 - - AMF_IPV4_ADDRESS=0.0.0.0 - - AMF_PORT=80 - - AMF_API_VERSION=v1 + - AMF_IPV4_ADDRESS=192.168.71.132 - AMF_FQDN=oai-amf - - UDM_IPV4_ADDRESS=127.0.0.1 - - UDM_PORT=80 - - UDM_API_VERSION=v1 - - UDM_FQDN=localhost - UPF_IPV4_ADDRESS=192.168.71.134 - UPF_FQDN_0=oai-spgwu - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 - - NRF_API_VERSION=v1 - NRF_FQDN=oai-nrf - REGISTER_NRF=yes - DISCOVER_UPF=yes - USE_FQDN_DNS=yes + - USE_LOCAL_SUBSCRIPTION_INFO=yes + - UE_MTU=1500 + # Only one slice is defined (1, 0xFFFFFF) - DNN_NI0=oai - TYPE0=IPv4 - DNN_RANGE0=12.1.1.2 - 12.1.1.127 - NSSAI_SST0=1 - - NSSAI_SD0=0xFFFFFF - SESSION_AMBR_UL0=200Mbps - SESSION_AMBR_DL0=400Mbps - - DNN_NI2=oai.ipv4 + - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1 + - ENABLE_USAGE_REPORTING=no depends_on: - oai-nrf - oai-amf - volumes: - - ../5g_rfsimulator/smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 networks: public_net: ipv4_address: 192.168.71.133 - oai-spgwu: container_name: "rfsim5g-oai-spgwu" - image: oai-spgwu-tiny:august-dev + image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 environment: - TZ=Europe/Paris - - PID_DIRECTORY=/var/run - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 - SGW_INTERFACE_NAME_FOR_SX=eth0 - PGW_INTERFACE_NAME_FOR_SGI=eth0 - NETWORK_UE_NAT_OPTION=yes - NETWORK_UE_IP=12.1.1.0/24 - - SPGWC0_IP_ADDRESS=192.168.71.133 - - BYPASS_UL_PFCP_RULES=no - - MCC=208 - - MNC=99 - - MNC03=099 - - TAC=1 - - GTP_EXTENSION_HEADER_PRESENT=yes - - GW_ID=1 - - REALM=openairinterface.org - ENABLE_5G_FEATURES=yes - REGISTER_NRF=yes - USE_FQDN_NRF=yes - UPF_FQDN_5G=oai-spgwu - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 - - NRF_API_VERSION=v1 - NRF_FQDN=oai-nrf + # Only one slice is defined (1, 0xFFFFFF) - NSSAI_SST_0=1 - NSSAI_SD_0=0xffffff - DNN_0=oai @@ -204,25 +140,16 @@ services: cap_drop: - ALL privileged: true - volumes: - - ../5g_rfsimulator/spgwu-healthcheck.sh:/openair-spgwu-tiny/bin/spgwu-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-spgwu-tiny/bin/spgwu-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 networks: public_net: ipv4_address: 192.168.71.134 traffic_net: ipv4_address: 192.168.72.134 - oai-ext-dn: - image: ubuntu:bionic privileged: true container_name: rfsim5g-oai-ext-dn + image: oaisoftwarealliance/trf-gen-cn5g:latest entrypoint: /bin/bash -c \ - "apt update; apt install -y procps iptables iproute2 iperf iputils-ping;"\ "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity" depends_on: @@ -235,7 +162,6 @@ services: interval: 10s timeout: 5s retries: 5 - oai-gnb: image: oai-gnb:develop privileged: true diff --git a/ci-scripts/yaml_files/5g_rfsimulator_u0_25prb/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator_u0_25prb/docker-compose.yaml index 973a687e87..51d21efc60 100644 --- a/ci-scripts/yaml_files/5g_rfsimulator_u0_25prb/docker-compose.yaml +++ b/ci-scripts/yaml_files/5g_rfsimulator_u0_25prb/docker-compose.yaml @@ -2,28 +2,16 @@ version: '3.8' services: oai-nrf: container_name: "rfsim5g-oai-nrf" - image: oai-nrf:august-dev + image: oaisoftwarealliance/oai-nrf:v1.5.0 environment: - NRF_INTERFACE_NAME_FOR_SBI=eth0 - - NRF_INTERFACE_PORT_FOR_SBI=80 - - NRF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 - - NRF_API_VERSION=v1 - - INSTANCE=0 - - PID_DIRECTORY=/var/run + - TZ=Europe/Paris networks: public_net: ipv4_address: 192.168.71.130 - volumes: - - ../5g_rfsimulator/nrf-healthcheck.sh:/openair-nrf/bin/nrf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-nrf/bin/nrf-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 - mysql: container_name: "rfsim5g-mysql" - image: mysql:5.7 + image: mysql:8.0 volumes: - ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh @@ -37,18 +25,15 @@ services: test: /bin/bash -c "/tmp/mysql-healthcheck.sh" interval: 10s timeout: 5s - retries: 5 + retries: 30 networks: public_net: ipv4_address: 192.168.71.131 - oai-amf: container_name: "rfsim5g-oai-amf" - image: oai-amf:august-dev + image: oaisoftwarealliance/oai-amf:v1.5.0 environment: - TZ=Europe/paris - - INSTANCE=0 - - PID_DIRECTORY=/var/run - MCC=208 - MNC=99 - REGION_ID=128 @@ -64,134 +49,85 @@ services: - PLMN_SUPPORT_MCC=208 - PLMN_SUPPORT_MNC=99 - PLMN_SUPPORT_TAC=0x0001 + # Only one slice is defined (1, 0xFFFFFF). - SST_0=1 - - SD_0=0xffffff - - SST_1=1 - - SD_1=1 - AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0 + # One single SMF instance - SMF_INSTANCE_ID_0=1 - SMF_FQDN_0=oai-smf - - SMF_IPV4_ADDR_0=0.0.0.0 - - SMF_HTTP_VERSION_0=v1 + - SMF_IPV4_ADDR_0=192.168.71.133 - SELECTED_0=true - - SMF_INSTANCE_ID_1=2 - - SMF_FQDN_1=oai-smf - - SMF_IPV4_ADDR_1=0.0.0.0 - - SMF_HTTP_VERSION_1=v1 - - SELECTED_1=false + # mysql definition in AMF is mandatory in mini deployment. - MYSQL_SERVER=192.168.71.131 - MYSQL_USER=root - MYSQL_PASS=linux - MYSQL_DB=oai_db - - OPERATOR_KEY=c42449363bbad02b66d16bc975d77cc1 + # NF registration - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 + - NRF_FQDN=oai-nrf - NF_REGISTRATION=yes - SMF_SELECTION=yes - USE_FQDN_DNS=yes - - NRF_API_VERSION=v1 - - NRF_FQDN=oai-nrf - - EXTERNAL_AUSF=no - - AUSF_IPV4_ADDRESS=0.0.0.0 - - AUSF_PORT=80 - - AUSF_API_VERSION=v1 - - AUSF_FQDN=localhost + - USE_HTTP2=no depends_on: - oai-nrf - mysql - volumes: - - ../5g_rfsimulator/amf-healthcheck.sh:/openair-amf/bin/amf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-amf/bin/amf-healthcheck.sh" - interval: 10s - timeout: 15s - retries: 5 networks: public_net: ipv4_address: 192.168.71.132 - oai-smf: container_name: "rfsim5g-oai-smf" - image: oai-smf:august-dev + image: oaisoftwarealliance/oai-smf:v1.5.0 environment: - TZ=Europe/Paris - - INSTANCE=0 - - PID_DIRECTORY=/var/run - SMF_INTERFACE_NAME_FOR_N4=eth0 - SMF_INTERFACE_NAME_FOR_SBI=eth0 - - SMF_INTERFACE_PORT_FOR_SBI=80 - - SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 - - SMF_API_VERSION=v1 - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 - - AMF_IPV4_ADDRESS=0.0.0.0 - - AMF_PORT=80 - - AMF_API_VERSION=v1 + - AMF_IPV4_ADDRESS=192.168.71.132 - AMF_FQDN=oai-amf - - UDM_IPV4_ADDRESS=127.0.0.1 - - UDM_PORT=80 - - UDM_API_VERSION=v1 - - UDM_FQDN=localhost - UPF_IPV4_ADDRESS=192.168.71.134 - UPF_FQDN_0=oai-spgwu - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 - - NRF_API_VERSION=v1 - NRF_FQDN=oai-nrf - REGISTER_NRF=yes - DISCOVER_UPF=yes - USE_FQDN_DNS=yes + - USE_LOCAL_SUBSCRIPTION_INFO=yes + - UE_MTU=1500 + # Only one slice is defined (1, 0xFFFFFF) - DNN_NI0=oai - TYPE0=IPv4 - DNN_RANGE0=12.1.1.2 - 12.1.1.127 - NSSAI_SST0=1 - - NSSAI_SD0=0xFFFFFF - SESSION_AMBR_UL0=200Mbps - SESSION_AMBR_DL0=400Mbps - - DNN_NI2=oai.ipv4 + - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1 + - ENABLE_USAGE_REPORTING=no depends_on: - oai-nrf - oai-amf - volumes: - - ../5g_rfsimulator/smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 networks: public_net: ipv4_address: 192.168.71.133 - oai-spgwu: container_name: "rfsim5g-oai-spgwu" - image: oai-spgwu-tiny:august-dev + image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 environment: - TZ=Europe/Paris - - PID_DIRECTORY=/var/run - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 - SGW_INTERFACE_NAME_FOR_SX=eth0 - PGW_INTERFACE_NAME_FOR_SGI=eth0 - NETWORK_UE_NAT_OPTION=yes - NETWORK_UE_IP=12.1.1.0/24 - - SPGWC0_IP_ADDRESS=192.168.71.133 - - BYPASS_UL_PFCP_RULES=no - - MCC=208 - - MNC=99 - - MNC03=099 - - TAC=1 - - GTP_EXTENSION_HEADER_PRESENT=yes - - GW_ID=1 - - REALM=openairinterface.org - ENABLE_5G_FEATURES=yes - REGISTER_NRF=yes - USE_FQDN_NRF=yes - UPF_FQDN_5G=oai-spgwu - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 - - NRF_API_VERSION=v1 - NRF_FQDN=oai-nrf + # Only one slice is defined (1, 0xFFFFFF) - NSSAI_SST_0=1 - NSSAI_SD_0=0xffffff - DNN_0=oai @@ -204,25 +140,16 @@ services: cap_drop: - ALL privileged: true - volumes: - - ../5g_rfsimulator/spgwu-healthcheck.sh:/openair-spgwu-tiny/bin/spgwu-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-spgwu-tiny/bin/spgwu-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 networks: public_net: ipv4_address: 192.168.71.134 traffic_net: ipv4_address: 192.168.72.134 - oai-ext-dn: - image: ubuntu:bionic privileged: true container_name: rfsim5g-oai-ext-dn + image: oaisoftwarealliance/trf-gen-cn5g:latest entrypoint: /bin/bash -c \ - "apt update; apt install -y procps iptables iproute2 iperf iputils-ping;"\ "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity" depends_on: @@ -235,7 +162,6 @@ services: interval: 10s timeout: 5s retries: 5 - oai-gnb: image: oai-gnb:develop privileged: true From 76ed14e76c06f02d48658cb578f112b305f371d1 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Wed, 1 Feb 2023 15:41:41 +0100 Subject: [PATCH 02/36] chore(ci): using pyshark live-capture instead of launching a bg tshark Signed-off-by: Raphael Defosseux --- ci-scripts/cls_containerize.py | 163 ++++++++++++++++----------------- ci-scripts/main.py | 1 + 2 files changed, 81 insertions(+), 83 deletions(-) diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index e02d208945..2ef3e8387a 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -38,6 +38,8 @@ import os import shutil import subprocess import time +import pyshark +import threading from multiprocessing import Process, Lock, SimpleQueue from zipfile import ZipFile @@ -345,7 +347,7 @@ class Containerize(): self.dockerfileprefix = '.rhel8.2' self.cliBuildOptions = '--no-cache --disable-compression' - # we always build the ran-build image with all targets + # we always build the ran-build image with all targets imageNames = [('ran-build', 'build')] result = re.search('eNB', self.imageKind) # Creating a tupple with the imageName and the DockerFile prefix pattern on obelix @@ -739,8 +741,7 @@ class Containerize(): mySSH.command(cmd, '\$', 5) response = mySSH.getBefore() else: - logging.info(cmd) - response = subprocess.check_output(cmd, shell=True, universal_newlines=True, stderr=subprocess.STDOUT) + response = self.run_cmd_local_host(cmd) if re.search('Login Succeeded', response) is None: msg = 'Could not log into local registry' logging.error(msg) @@ -756,8 +757,7 @@ class Containerize(): mySSH.command(cmd, '\$', 120) response = mySSH.getBefore() else: - logging.info(cmd) - response = subprocess.check_output(cmd, shell=True, universal_newlines=True) + response = self.run_cmd_local_host(cmd) if re.search('Status: Downloaded newer image for |Status: Image is up to date for', response) is None: logging.debug(response) msg = f'Could not pull {image} from local registry : {tagToUse}' @@ -772,8 +772,7 @@ class Containerize(): mySSH.command(cmd, '\$', 5) response = mySSH.getBefore() else: - logging.info(cmd) - response = subprocess.check_output(cmd, shell=True, universal_newlines=True) + response = self.run_cmd_local_host(cmd) if re.search('Removing login credentials', response) is None: msg = 'Could not log off from local registry' logging.error(msg) @@ -820,8 +819,7 @@ class Containerize(): if lIpAddr != 'none': mySSH.command(cmd, '\$', 5) else: - logging.info(cmd) - subprocess.run(cmd, shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + self.run_cmd_local_host(cmd) if lIpAddr != 'none': mySSH.close() @@ -921,7 +919,7 @@ class Containerize(): if healthyNb == 1: cnt = 0 while (cnt < 20): - mySSH.command('docker logs ' + containerName + ' | egrep --text --color=never -i "wait|sync|Starting"', '\$', 30) + mySSH.command('docker logs ' + containerName + ' | egrep --text --color=never -i "wait|sync|Starting"', '\$', 30) result = re.search('got sync|Starting F1AP at CU', mySSH.getBefore()) if result is None: time.sleep(6) @@ -1048,9 +1046,8 @@ class Containerize(): self.exitStatus = 0 logging.debug('\u001B[1m Checking Services to deploy\u001B[0m') cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose config --services' - logging.info(cmd) try: - listServices = subprocess.check_output(cmd, shell=True, universal_newlines=True) + listServices = self.run_cmd_local_host(cmd) except Exception as e: self.exitStatus = 1 HTML.CreateHtmlTestRow('SVC not Found', 'KO', CONST.ALL_PROCESSES_OK) @@ -1065,18 +1062,16 @@ class Containerize(): return cmd = 'cd ' + self.yamlPath[0] + ' && cp docker-compose.y*ml docker-compose-ci.yml' - subprocess.run(cmd, shell=True) + self.run_cmd_local_host(cmd) imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru'] for image in imageNames: tagToUse = self.ImageTagToUse(image) cmd = f'cd {self.yamlPath[0]} && sed -i -e "s@{image}:develop@{tagToUse}@" docker-compose-ci.yml' - logging.debug(cmd) - subprocess.run(cmd, shell=True) + self.run_cmd_local_host(cmd) cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml up -d ' + self.services[0] - logging.info(cmd) try: - deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100) + deployStatus = self.run_cmd_local_host(cmd, 100) except Exception as e: self.exitStatus = 1 logging.error('Could not deploy') @@ -1087,14 +1082,17 @@ class Containerize(): cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps -a' count = 0 healthy = 0 + restarting = 0 newContainers = [] while (count < 10): count += 1 containerStatus = [] - deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30) + deployStatus = self.run_cmd_local_host(cmd, 30, silent=True) healthy = 0 + restarting = 0 for state in deployStatus.split('\n'): - res = re.search('Name|----------', state) + state = state.strip() + res = re.search('Name|NAME|----------', state) if res is not None: continue if len(state) == 0: @@ -1109,23 +1107,28 @@ class Containerize(): if not found: newContainers.append(cName) self.deployedContainers.append(cName) - if re.search('Up \(healthy\)', state) is not None: + if re.search('\(healthy\)', state) is not None: healthy += 1 - if re.search('rfsim4g-db-init.*Exit 0', state) is not None: - subprocess.check_output('docker rm -f rfsim4g-db-init || true', shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30) - containerStatus.append(state) - if healthy == self.nb_healthy[0]: + if re.search('rfsim4g-db-init.*Exit 0', state) is not None or re.search('rfsim4g-db-init.*Exited \(0\)', state) is not None: + self.run_cmd_local_host('docker rm -f rfsim4g-db-init || true', 30, silent=True) + if re.search('Restarting', state) is None: + containerStatus.append(state) + else: + restarting += 1 + if healthy == self.nb_healthy[0] and restarting == 0: count = 100 else: time.sleep(10) imagesInfo = '' for newCont in newContainers: + if newCont == 'rfsim4g-db-init': + continue cmd = 'docker inspect -f "{{.Config.Image}}" ' + newCont - imageName = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30) + imageName = self.run_cmd_local_host(cmd, 30, silent=True) imageName = str(imageName).strip() cmd = 'docker image inspect --format "{{.RepoTags}}\t{{.Size}} bytes\t{{.Created}}\t{{.Id}}" ' + imageName - imagesInfo += subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30) + imagesInfo += self.run_cmd_local_host(cmd, 30, silent=True) html_queue = SimpleQueue() html_cell = '
\n'
@@ -1157,30 +1160,36 @@ class Containerize():
 			self.UndeployGenObject(HTML, RAN, UE)
 			self.exitStatus = 1
 
+	def LaunchPySharkCapture(self, lIfs, lFilter, loFile):
+		capture = pyshark.LiveCapture(interface=lIfs, bpf_filter=lFilter, output_file=loFile, debug=False)
+		for packet in capture.sniff_continuously():
+			pass
+
 	def CaptureOnDockerNetworks(self):
 		cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml config | grep com.docker.network.bridge.name | sed -e "s@^.*name: @@"'
-		networkNames = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
+		networkNames = self.run_cmd_local_host(cmd, silent=True)
 		if re.search('4g.*rfsimulator', self.yamlPath[0]) is not None:
 			# Excluding any traffic from LTE-UE container (192.168.61.30)
 			# From the trf-gen, keeping only PING traffic
-			cmd = 'sudo nohup tshark -f "(host 192.168.61.11 and icmp) or (not host 192.168.61.11 and not host 192.168.61.30 and not arp and not port 53 and not port 2152)"'
+			capture_filter = '(host 192.168.61.11 and icmp) or (not host 192.168.61.11 and not host 192.168.61.30 and not arp and not port 53 and not port 2152)'
 		elif re.search('5g.*rfsimulator', self.yamlPath[0]) is not None:
 			# Excluding any traffic from NR-UE containers (192.168.71.150 and 192.168.71.151)
 			# From the ext-dn, keeping only PING traffic
-			cmd = 'sudo nohup tshark -f "(host 192.168.72.135 and icmp) or (not host 192.168.72.135 and not host 192.168.71.150 and not host 192.168.71.151 and not arp and not port 53 and not port 2152 and not port 2153)"'
+			capture_filter = '(host 192.168.72.135 and icmp) or (not host 192.168.72.135 and not host 192.168.71.150 and not host 192.168.71.151 and not arp and not port 53 and not port 2152 and not port 2153)'
 		elif re.search('5g_l2sim', self.yamlPath[0]) is not None:
-			cmd = 'sudo nohup tshark -f "(host 192.168.72.135 and icmp) or (not host 192.168.72.135 and not arp and not port 53 and not port 2152 and not port 2153)"'
+			capture_filter = '(host 192.168.72.135 and icmp) or (not host 192.168.72.135 and not arp and not port 53 and not port 2152 and not port 2153)'
 		else:
 			return
+		interfaces = []
 		for name in networkNames.split('\n'):
 			if re.search('rfsim', name) is not None or re.search('l2sim', name) is not None:
-				cmd += ' -i ' + name
-		cmd += ' -w /tmp/capture_'
+				interfaces.append(name)
 		ymlPath = self.yamlPath[0].split('/')
-		cmd += ymlPath[1] + '.pcap > /tmp/tshark.log 2>&1 &'
-		logging.info(cmd)
-		networkNames = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
+		output_file = f'/tmp/capture_{ymlPath[1]}.pcap'
 		self.tsharkStarted = True
+		x = threading.Thread(target = self.LaunchPySharkCapture, args = (interfaces,capture_filter,output_file,))
+		x.daemon = True
+		x.start()
 
 	def UndeployGenObject(self, HTML, RAN, UE):
 		self.exitStatus = 0
@@ -1188,25 +1197,22 @@ class Containerize():
 		logPath = '../cmake_targets/log/' + ymlPath[1]
 
 		cmd = 'cd ' + self.yamlPath[0] + ' && cp docker-compose.y*ml docker-compose-ci.yml'
-		logging.info(cmd)
-		subprocess.run(cmd, shell=True)
+		self.run_cmd_local_host(cmd)
 		imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru']
 		for image in imageNames:
 			tagToUse = self.ImageTagToUse(image)
 			cmd = f'cd {self.yamlPath[0]} && sed -i -e "s@{image}:develop@{tagToUse}@" docker-compose-ci.yml'
-			subprocess.run(cmd, shell=True)
+			self.run_cmd_local_host(cmd)
 
 		# check which containers are running for log recovery later
 		cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps --all'
-		logging.info(cmd)
-		deployStatusLogs = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
+		deployStatusLogs = self.run_cmd_local_host(cmd, 30)
 
 		# Stop the containers to shut down objects
 		logging.debug('\u001B[1m Stopping containers \u001B[0m')
 		cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml stop -t3'
-		logging.info(cmd)
 		try:
-			deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100)
+			deployStatus = self.run_cmd_local_host(cmd, 100)
 		except Exception as e:
 			self.exitStatus = 1
 			logging.error('Could not stop containers')
@@ -1216,7 +1222,7 @@ class Containerize():
 
 		anyLogs = False
 		for state in deployStatusLogs.split('\n'):
-			res = re.search('Name|----------', state)
+			res = re.search('Name|NAME|----------', state)
 			if res is not None:
 				continue
 			if len(state) == 0:
@@ -1226,17 +1232,14 @@ class Containerize():
 				anyLogs = True
 				cName = res.group('container_name')
 				cmd = 'cd ' + self.yamlPath[0] + ' && docker logs ' + cName + ' > ' + cName + '.log 2>&1'
-				logging.info(cmd)
-				subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
+				self.run_cmd_local_host(cmd, 30)
 				if re.search('magma-mme', cName) is not None:
 					cmd = 'cd ' + self.yamlPath[0] + ' && docker cp -L ' + cName + ':/var/log/mme.log ' + cName + '-full.log'
-					logging.info(cmd)
-					subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
+					self.run_cmd_local_host(cmd, 30)
 		fullStatus = True
 		if anyLogs:
 			cmd = 'mkdir -p '+ logPath + ' && cp ' + self.yamlPath[0] + '/*.log ' + logPath
-			logging.info(cmd)
-			deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
+			deployStatus = self.run_cmd_local_host(cmd)
 
 			# Analyzing log file(s)!
 			listOfPossibleRanContainers = ['enb', 'gnb', 'cu', 'du']
@@ -1245,7 +1248,7 @@ class Containerize():
 				cmd = 'ls ' + filenames
 				containerStatus = True
 				try:
-					lsStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
+					lsStatus = self.run_cmd_local_host(cmd, silent=True)
 					filenames = str(lsStatus).strip()
 				except:
 					containerStatus = False
@@ -1268,7 +1271,7 @@ class Containerize():
 				cmd = 'ls ' + filenames
 				containerStatus = True
 				try:
-					lsStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
+					lsStatus = self.run_cmd_local_host(cmd, silent=True)
 					filenames = str(lsStatus).strip()
 				except:
 					containerStatus = False
@@ -1285,27 +1288,20 @@ class Containerize():
 						HTML.CreateHtmlTestRow('UE log Analysis', 'OK', CONST.ALL_PROCESSES_OK)
 
 			cmd = 'rm ' + self.yamlPath[0] + '/*.log'
-			logging.info(cmd)
-			deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
+			deployStatus = self.run_cmd_local_host(cmd)
 			if self.tsharkStarted:
 				self.tsharkStarted = True
+				cmd = 'killall tshark || true'
+				self.run_cmd_local_host(cmd)
 				ymlPath = self.yamlPath[0].split('/')
-				cmd = 'sudo chmod 666 /tmp/capture_' + ymlPath[1] + '.pcap'
-				logging.info(cmd)
-				copyStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
-				cmd = 'cp /tmp/capture_' + ymlPath[1] + '.pcap ' + logPath
-				logging.info(cmd)
-				copyStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
-				cmd = 'sudo rm /tmp/capture_' + ymlPath[1] + '.pcap'
-				logging.info(cmd)
-				copyStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
+				cmd = 'mv /tmp/capture_' + ymlPath[1] + '.pcap ' + logPath + ' || true'
+				copyStatus = self.run_cmd_local_host(cmd, 100)
 				self.tsharkStarted = False
 
 		logging.debug('\u001B[1m Undeploying \u001B[0m')
 		cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml down'
-		logging.info(cmd)
 		try:
-			deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100)
+			deployStatus = self.run_cmd_local_host(cmd, 100)
 		except Exception as e:
 			self.exitStatus = 1
 			logging.error('Could not undeploy')
@@ -1316,8 +1312,7 @@ class Containerize():
 		self.deployedContainers = []
 		# Cleaning any created tmp volume
 		cmd = 'docker volume prune --force || true'
-		logging.info(cmd)
-		deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100)
+		deployStatus = self.run_cmd_local_host(cmd, 100)
 
 		if fullStatus:
 			HTML.CreateHtmlTestRow('n/a', 'OK', CONST.ALL_PROCESSES_OK)
@@ -1333,12 +1328,11 @@ class Containerize():
 
 		# if the containers are running, recover the logs!
 		cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps --all'
-		logging.info(cmd)
-		deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
+		deployStatus = self.run_cmd_local_host(cmd, 30)
 		cmd = 'docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}" '
 		anyLogs = False
 		for state in deployStatus.split('\n'):
-			res = re.search('Name|----------', state)
+			res = re.search('Name|NAME|----------', state)
 			if res is not None:
 				continue
 			if len(state) == 0:
@@ -1349,8 +1343,7 @@ class Containerize():
 				cmd += res.group('container_name') + ' '
 		message = ''
 		if anyLogs:
-			logging.info(cmd)
-			stats = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
+			stats = self.run_cmd_local_host(cmd, 30)
 			for statLine in stats.split('\n'):
 				logging.debug(statLine)
 				message += statLine + '\n'
@@ -1365,12 +1358,11 @@ class Containerize():
 		ymlPath = self.yamlPath[0].split('/')
 		logPath = '../cmake_targets/log/' + ymlPath[1]
 		cmd = 'mkdir -p ' + logPath
-		deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
+		deployStatus = self.run_cmd_local_host(cmd, silent=True)
 
 		cmd = 'docker exec ' + self.pingContName + ' /bin/bash -c "ping ' + self.pingOptions + '" 2>&1 | tee ' + logPath + '/ping_' + HTML.testCase_id + '.log || true'
 
-		logging.info(cmd)
-		deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100)
+		deployStatus = self.run_cmd_local_host(cmd, 100)
 
 		result = re.search(', (?P[0-9\.]+)% packet loss, time [0-9\.]+ms', deployStatus)
 		if result is None:
@@ -1440,28 +1432,24 @@ class Containerize():
 		ymlPath = self.yamlPath[0].split('/')
 		logPath = '../cmake_targets/log/' + ymlPath[1]
 		cmd = 'mkdir -p ' + logPath
-		logStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
+		logStatus = self.run_cmd_local_host(cmd, silent=True)
 
 		# Start the server process
 		cmd = f'docker exec -d {self.svrContName} /bin/bash -c "nohup iperf {self.svrOptions} > /tmp/iperf_server.log 2>&1"'
-		logging.info(cmd)
-		subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
+		self.run_cmd_local_host(cmd)
 		time.sleep(3)
 
 		# Start the client process
 		cmd = f'docker exec {self.cliContName} /bin/bash -c "iperf {self.cliOptions}" 2>&1 | tee {logPath}/iperf_client_{HTML.testCase_id}.log'
-		logging.info(cmd)
-		clientStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100)
+		clientStatus = self.run_cmd_local_host(cmd, 100)
 
 		# Stop the server process
 		cmd = f'docker exec {self.svrContName} /bin/bash -c "pkill iperf"'
-		logging.info(cmd)
-		subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
+		self.run_cmd_local_host(cmd)
 		time.sleep(3)
 		serverStatusFilename = f'{logPath}/iperf_server_{HTML.testCase_id}.log'
 		cmd = f'docker cp {self.svrContName}:/tmp/iperf_server.log {serverStatusFilename}'
-		logging.info(cmd)
-		subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
+		self.run_cmd_local_host(cmd, 30)
 
 		# clientStatus was retrieved above. The serverStatus was
 		# written in the background, then copied to the local machine
@@ -1604,3 +1592,12 @@ class Containerize():
 				mySSH.command('echo ' + password + ' | sudo -S iptables -P FORWARD ACCEPT', '\$', 10)
 			mySSH.close()
 
+	def run_cmd_local_host(self, lCmd, lTimeout=10, silent=False):
+		if not silent:
+			logging.info(lCmd)
+		result = subprocess.run(lCmd, shell=True, check=True,
+								universal_newlines=True,
+								stdout=subprocess.PIPE,
+								stderr=subprocess.STDOUT,
+								timeout=lTimeout)
+		return str(result.stdout)
diff --git a/ci-scripts/main.py b/ci-scripts/main.py
index 322b6a5c72..438f310ca8 100644
--- a/ci-scripts/main.py
+++ b/ci-scripts/main.py
@@ -70,6 +70,7 @@ import subprocess
 from multiprocessing import Process, Lock, SimpleQueue
 logging.basicConfig(
 	level=logging.DEBUG,
+	stream=sys.stdout,
 	format="[%(asctime)s] %(levelname)8s: %(message)s"
 )
 

From 6905159a3829420ee65a502d5d5bb8480ab3581f Mon Sep 17 00:00:00 2001
From: Raphael Defosseux 
Date: Thu, 2 Feb 2023 10:37:04 +0100
Subject: [PATCH 03/36] chore(ci): applying the same image syntax with
 oaisoftwarealliance/ for RAN components

Signed-off-by: Raphael Defosseux 
---
 ci-scripts/cls_containerize.py                    | 15 +++++++++------
 .../yaml_files/4g_l2sim_fdd/docker-compose.yml    |  6 +++---
 .../yaml_files/4g_rfsimulator_fdd_05MHz/README.md |  3 ---
 .../4g_rfsimulator_fdd_05MHz/docker-compose.yml   |  4 ++--
 .../docker-compose.yml                            |  4 ++--
 .../4g_rfsimulator_fdd_10MHz/docker-compose.yml   |  4 ++--
 .../4g_rfsimulator_fdd_20MHz/docker-compose.yml   |  4 ++--
 .../4g_rfsimulator_fembms/docker-compose.yml      |  4 ++--
 .../4g_rfsimulator_mbms/docker-compose.yml        |  4 ++--
 .../4g_rfsimulator_tdd_05MHz/docker-compose.yml   |  4 ++--
 .../5g_f1_rfsimulator/docker-compose.yaml         |  6 +++---
 .../5g_fdd_rfsimulator/docker-compose.yaml        |  4 ++--
 ci-scripts/yaml_files/5g_l2sim_tdd/README.md      |  6 ++----
 .../yaml_files/5g_l2sim_tdd/docker-compose.yaml   |  4 ++--
 ci-scripts/yaml_files/5g_rfsimulator/README.md    |  7 -------
 .../yaml_files/5g_rfsimulator/docker-compose.yaml |  6 +++---
 .../5g_rfsimulator_24prb/docker-compose.yaml      |  4 ++--
 .../5g_rfsimulator_2x2/docker-compose.yaml        |  4 ++--
 .../docker-compose.yaml                           |  4 ++--
 .../5g_rfsimulator_fr2_32prb/docker-compose.yaml  |  4 ++--
 .../5g_rfsimulator_tdd_dora/docker-compose.yaml   |  4 ++--
 .../5g_rfsimulator_u0_25prb/docker-compose.yaml   |  4 ++--
 22 files changed, 50 insertions(+), 59 deletions(-)

diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py
index 2ef3e8387a..ca98b967a0 100644
--- a/ci-scripts/cls_containerize.py
+++ b/ci-scripts/cls_containerize.py
@@ -289,6 +289,7 @@ class Containerize():
 
 		self.deployedContainers = []
 		self.tsharkStarted = False
+		self.displayedNewTags = False
 		self.pingContName = ''
 		self.pingOptions = ''
 		self.pingLossThreshold = ''
@@ -1062,12 +1063,13 @@ class Containerize():
 			return
 
 		cmd = 'cd ' + self.yamlPath[0] + ' && cp docker-compose.y*ml docker-compose-ci.yml'
-		self.run_cmd_local_host(cmd)
+		self.run_cmd_local_host(cmd, silent=self.displayedNewTags)
 		imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru']
 		for image in imageNames:
 			tagToUse = self.ImageTagToUse(image)
-			cmd = f'cd {self.yamlPath[0]} && sed -i -e "s@{image}:develop@{tagToUse}@" docker-compose-ci.yml'
-			self.run_cmd_local_host(cmd)
+			cmd = f'cd {self.yamlPath[0]} && sed -i -e "s@oaisoftwarealliance/{image}:develop@{tagToUse}@" docker-compose-ci.yml'
+			self.run_cmd_local_host(cmd, silent=self.displayedNewTags)
+		silent=self.displayedNewTags = True
 
 		cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml up -d ' + self.services[0]
 		try:
@@ -1197,12 +1199,13 @@ class Containerize():
 		logPath = '../cmake_targets/log/' + ymlPath[1]
 
 		cmd = 'cd ' + self.yamlPath[0] + ' && cp docker-compose.y*ml docker-compose-ci.yml'
-		self.run_cmd_local_host(cmd)
+		self.run_cmd_local_host(cmd, silent=self.displayedNewTags)
 		imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru']
 		for image in imageNames:
 			tagToUse = self.ImageTagToUse(image)
-			cmd = f'cd {self.yamlPath[0]} && sed -i -e "s@{image}:develop@{tagToUse}@" docker-compose-ci.yml'
-			self.run_cmd_local_host(cmd)
+			cmd = f'cd {self.yamlPath[0]} && sed -i -e "s@oaisoftwarealliance/{image}:develop@{tagToUse}@" docker-compose-ci.yml'
+			self.run_cmd_local_host(cmd, silent=self.displayedNewTags)
+		silent=self.displayedNewTags = True
 
 		# check which containers are running for log recovery later
 		cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps --all'
diff --git a/ci-scripts/yaml_files/4g_l2sim_fdd/docker-compose.yml b/ci-scripts/yaml_files/4g_l2sim_fdd/docker-compose.yml
index b3e3ede92e..546211e5b3 100644
--- a/ci-scripts/yaml_files/4g_l2sim_fdd/docker-compose.yml
+++ b/ci-scripts/yaml_files/4g_l2sim_fdd/docker-compose.yml
@@ -180,7 +180,7 @@ services:
             retries: 5
 
     oai_enb:
-        image: oai-enb:develop
+        image: oaisoftwarealliance/oai-enb:develop
         privileged: true
         container_name: l2sim4g-oai-enb
         network_mode: "host"
@@ -230,7 +230,7 @@ services:
             retries: 5
 
     oai_ue1:
-        image: oai-lte-ue:develop
+        image: oaisoftwarealliance/oai-lte-ue:develop
         privileged: true
         container_name: l2sim4g-oai-lte-ue1
         network_mode: "host"
@@ -258,7 +258,7 @@ services:
             retries: 5
 
     oai_ue2:
-        image: oai-lte-ue:develop
+        image: oaisoftwarealliance/oai-lte-ue:develop
         privileged: true
         container_name: l2sim4g-oai-lte-ue2
         network_mode: "host"
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md
index d134ffc824..d47c4842de 100644
--- a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md
+++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md
@@ -54,9 +54,6 @@ $ docker image tag oaisoftwarealliance/oai-spgwc:latest oai-spgwc:latest
 $ docker image tag oaisoftwarealliance/oai-hss:latest oai-hss:latest
 $ docker image tag oaisoftwarealliance/oai-spgwu-tiny:latest oai-spgwu-tiny:latest 
 $ docker image tag oaisoftwarealliance/magma-mme:latest magma-mme:latest
-
-$ docker image tag oaisoftwarealliance/oai-enb:develop oai-enb:develop
-$ docker image tag oaisoftwarealliance/oai-lte-ue:develop oai-lte-ue:develop
 ```
 
 ```bash
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/docker-compose.yml
index ab54c3ada1..18f929a6e8 100644
--- a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/docker-compose.yml
+++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/docker-compose.yml
@@ -180,7 +180,7 @@ services:
             retries: 5
 
     oai_enb0:
-        image: oai-enb:develop
+        image: oaisoftwarealliance/oai-enb:develop
         privileged: true
         container_name: rfsim4g-oai-enb
         networks:
@@ -214,7 +214,7 @@ services:
             retries: 5
 
     oai_ue0:
-        image: oai-lte-ue:develop
+        image: oaisoftwarealliance/oai-lte-ue:develop
         privileged: true
         container_name: rfsim4g-oai-lte-ue0
         networks:
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz_noS1/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz_noS1/docker-compose.yml
index dea6724926..39c9394769 100644
--- a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz_noS1/docker-compose.yml
+++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz_noS1/docker-compose.yml
@@ -2,7 +2,7 @@ version: '3.8'
 
 services:
     oai_enb0:
-        image: oai-enb:develop
+        image: ioaisoftwarealliance/oai-enb:develop
         privileged: true
         container_name: rfsim4g-oai-enb
         networks:
@@ -36,7 +36,7 @@ services:
             retries: 5
 
     oai_ue0:
-        image: oai-lte-ue:develop
+        image: oaisoftwarealliance/oai-lte-ue:develop
         privileged: true
         container_name: rfsim4g-oai-lte-ue0
         networks:
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz/docker-compose.yml
index b24ebd367d..3f9d764f3a 100644
--- a/ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz/docker-compose.yml
+++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz/docker-compose.yml
@@ -180,7 +180,7 @@ services:
             retries: 5
 
     oai_enb0:
-        image: oai-enb:develop
+        image: oaisoftwarealliance/oai-enb:develop
         privileged: true
         container_name: rfsim4g-oai-enb
         networks:
@@ -214,7 +214,7 @@ services:
             retries: 5
 
     oai_ue0:
-        image: oai-lte-ue:develop
+        image: oaisoftwarealliance/oai-lte-ue:develop
         privileged: true
         container_name: rfsim4g-oai-lte-ue0
         networks:
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz/docker-compose.yml
index ebe2b2f4a0..6cf8ee2677 100644
--- a/ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz/docker-compose.yml
+++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz/docker-compose.yml
@@ -180,7 +180,7 @@ services:
             retries: 5
 
     oai_enb0:
-        image: oai-enb:develop
+        image: oaisoftwarealliance/oai-enb:develop
         privileged: true
         container_name: rfsim4g-oai-enb
         networks:
@@ -214,7 +214,7 @@ services:
             retries: 5
 
     oai_ue0:
-        image: oai-lte-ue:develop
+        image: oaisoftwarealliance/oai-lte-ue:develop
         privileged: true
         container_name: rfsim4g-oai-lte-ue0
         networks:
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fembms/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_fembms/docker-compose.yml
index 39d06f1651..f57b913daf 100644
--- a/ci-scripts/yaml_files/4g_rfsimulator_fembms/docker-compose.yml
+++ b/ci-scripts/yaml_files/4g_rfsimulator_fembms/docker-compose.yml
@@ -2,7 +2,7 @@ version: '3.8'
 
 services:
     oai_enb0:
-        image: oai-enb:develop
+        image: oaisoftwarealliance/oai-enb:develop
         privileged: true
         container_name: rfsim4g-oai-enb
         networks:
@@ -22,7 +22,7 @@ services:
             retries: 5
 
     oai_ue0:
-        image: oai-lte-ue:develop
+        image: oaisoftwarealliance/oai-lte-ue:develop
         privileged: true
         container_name: rfsim4g-oai-lte-ue0
         networks:
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_mbms/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_mbms/docker-compose.yml
index dc64984068..98cb6d5d53 100644
--- a/ci-scripts/yaml_files/4g_rfsimulator_mbms/docker-compose.yml
+++ b/ci-scripts/yaml_files/4g_rfsimulator_mbms/docker-compose.yml
@@ -2,7 +2,7 @@ version: '3.8'
 
 services:
     oai_enb0:
-        image: oai-enb:develop
+        image: oaisoftwarealliance/oai-enb:develop
         privileged: true
         container_name: rfsim4g-oai-enb
         networks:
@@ -22,7 +22,7 @@ services:
             retries: 5
 
     oai_ue0:
-        image: oai-lte-ue:develop
+        image: oaisoftwarealliance/oai-lte-ue:develop
         privileged: true
         container_name: rfsim4g-oai-lte-ue0
         networks:
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz/docker-compose.yml
index 63c4965ddb..b3182ba23b 100644
--- a/ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz/docker-compose.yml
+++ b/ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz/docker-compose.yml
@@ -180,7 +180,7 @@ services:
             retries: 5
 
     oai_enb0:
-        image: oai-enb:develop
+        image: oaisoftwarealliance/oai-enb:develop
         privileged: true
         container_name: rfsim4g-oai-enb
         networks:
@@ -213,7 +213,7 @@ services:
             retries: 5
 
     oai_ue0:
-        image: oai-lte-ue:develop
+        image: oaisoftwarealliance/oai-lte-ue:develop
         privileged: true
         container_name: rfsim4g-oai-lte-ue0
         networks:
diff --git a/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml b/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml
index d9d97670d3..a364a1db95 100644
--- a/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml
@@ -163,7 +163,7 @@ services:
             timeout: 5s
             retries: 5
     oai-cu:
-        image: oai-gnb:develop
+        image: oaisoftwarealliance/oai-gnb:develop
         privileged: true
         container_name: rfsim5g-oai-cu
         environment: 
@@ -197,7 +197,7 @@ services:
             timeout: 5s
             retries: 5
     oai-du:
-        image: oai-gnb:develop
+        image: oaisoftwarealliance/oai-gnb:develop
         privileged: true
         container_name: rfsim5g-oai-du
         environment: 
@@ -231,7 +231,7 @@ services:
             timeout: 5s
             retries: 5
     oai-nr-ue:
-        image: oai-nr-ue:develop
+        image: oaisoftwarealliance/oai-nr-ue:develop
         privileged: true
         container_name: rfsim5g-oai-nr-ue
         environment: 
diff --git a/ci-scripts/yaml_files/5g_fdd_rfsimulator/docker-compose.yaml b/ci-scripts/yaml_files/5g_fdd_rfsimulator/docker-compose.yaml
index c3c3797125..42d67b0bdc 100644
--- a/ci-scripts/yaml_files/5g_fdd_rfsimulator/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_fdd_rfsimulator/docker-compose.yaml
@@ -163,7 +163,7 @@ services:
             timeout: 5s
             retries: 5
     oai-gnb:
-        image: oai-gnb:develop
+        image: oaisoftwarealliance/oai-gnb:develop
         privileged: true
         container_name: rfsim5g-oai-gnb
         environment: 
@@ -192,7 +192,7 @@ services:
             timeout: 5s
             retries: 5
     oai-nr-ue:
-        image: oai-nr-ue:develop
+        image: oaisoftwarealliance/oai-nr-ue:develop
         privileged: true
         container_name: rfsim5g-oai-nr-ue
         environment: 
diff --git a/ci-scripts/yaml_files/5g_l2sim_tdd/README.md b/ci-scripts/yaml_files/5g_l2sim_tdd/README.md
index adbb6edd44..eb8e58d415 100644
--- a/ci-scripts/yaml_files/5g_l2sim_tdd/README.md
+++ b/ci-scripts/yaml_files/5g_l2sim_tdd/README.md
@@ -41,15 +41,13 @@ $ docker pull oaisoftwarealliance/trf-gen-cn5g:latest
 
 $ docker pull oaisoftwarealliance/oai-gnb:develop
 $ docker pull oaisoftwarealliance/oai-nr-ue:develop
-$ docker pull oaisoftwarealliance/proxy:latest
+$ docker pull oaisoftwarealliance/proxy:develop
 ```
 
 And **re-tag** them for tutorials' docker-compose file to work.
 
 ```bash
-$ docker image tag oaisoftwarealliance/oai-gnb:develop oai-gnb:develop
-$ docker image tag oaisoftwarealliance/oai-nr-ue:develop oai-nr-ue:develop
-$ docker image tag oaisoftwarealliance/proxy:latest oai-lte-multi-ue-proxy:latest
+$ docker image tag oaisoftwarealliance/proxy:develop oai-lte-multi-ue-proxy:latest
 ```
 
 ```bash
diff --git a/ci-scripts/yaml_files/5g_l2sim_tdd/docker-compose.yaml b/ci-scripts/yaml_files/5g_l2sim_tdd/docker-compose.yaml
index 265f130c08..3af3bc60cf 100644
--- a/ci-scripts/yaml_files/5g_l2sim_tdd/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_l2sim_tdd/docker-compose.yaml
@@ -163,7 +163,7 @@ services:
             timeout: 5s
             retries: 5
     oai-gnb:
-        image: oai-gnb:develop
+        image: oaisoftwarealliance/oai-gnb:develop
         privileged: true
         container_name: "l2sim-oai-gnb"
         network_mode: "host"
@@ -211,7 +211,7 @@ services:
             retries: 5
 
     oai-nr-ue0:
-        image: oai-nr-ue:develop
+        image: oaisoftwarealliance/oai-nr-ue:develop
         privileged: true
         container_name: "l2sim-oai-nr-ue0"
         network_mode: "host"
diff --git a/ci-scripts/yaml_files/5g_rfsimulator/README.md b/ci-scripts/yaml_files/5g_rfsimulator/README.md
index 901aa37f78..1e2cb638eb 100644
--- a/ci-scripts/yaml_files/5g_rfsimulator/README.md
+++ b/ci-scripts/yaml_files/5g_rfsimulator/README.md
@@ -47,13 +47,6 @@ $ docker pull oaisoftwarealliance/oai-gnb:develop
 $ docker pull oaisoftwarealliance/oai-nr-ue:develop
 ```
 
-And **re-tag** them for tutorials' docker-compose file to work.
-
-```bash
-$ docker image tag oaisoftwarealliance/oai-gnb:develop oai-gnb:develop
-$ docker image tag oaisoftwarealliance/oai-nr-ue:develop oai-nr-ue:develop
-```
-
 ```bash
 $ docker logout
 ```
diff --git a/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml
index ab78b35ab5..bc271e0643 100644
--- a/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml
@@ -163,7 +163,7 @@ services:
             timeout: 5s
             retries: 5
     oai-gnb:
-        image: oai-gnb:develop
+        image: oaisoftwarealliance/oai-gnb:develop
         privileged: true
         container_name: rfsim5g-oai-gnb
         environment:
@@ -193,7 +193,7 @@ services:
             timeout: 5s
             retries: 5
     oai-nr-ue:
-        image: oai-nr-ue:develop
+        image: oaisoftwarealliance/oai-nr-ue:develop
         privileged: true
         container_name: rfsim5g-oai-nr-ue
         environment: 
@@ -216,7 +216,7 @@ services:
             retries: 5
 
     oai-nr-ue2:
-        image: oai-nr-ue:develop
+        image: oaisoftwarealliance/oai-nr-ue:develop
         privileged: true
         container_name: rfsim5g-oai-nr-ue2
         environment: 
diff --git a/ci-scripts/yaml_files/5g_rfsimulator_24prb/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator_24prb/docker-compose.yaml
index 64a507e4f6..a298c21748 100644
--- a/ci-scripts/yaml_files/5g_rfsimulator_24prb/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_rfsimulator_24prb/docker-compose.yaml
@@ -163,7 +163,7 @@ services:
             timeout: 5s
             retries: 5
     oai-gnb:
-        image: oai-gnb:develop
+        image: oaisoftwarealliance/oai-gnb:develop
         privileged: true
         container_name: rfsim5g-oai-gnb
         environment:
@@ -183,7 +183,7 @@ services:
             timeout: 5s
             retries: 5
     oai-nr-ue:
-        image: oai-nr-ue:develop
+        image: oaisoftwarealliance/oai-nr-ue:develop
         privileged: true
         container_name: rfsim5g-oai-nr-ue
         environment:
diff --git a/ci-scripts/yaml_files/5g_rfsimulator_2x2/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator_2x2/docker-compose.yaml
index 06f1dcc80e..d33738e2f7 100644
--- a/ci-scripts/yaml_files/5g_rfsimulator_2x2/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_rfsimulator_2x2/docker-compose.yaml
@@ -163,7 +163,7 @@ services:
             timeout: 5s
             retries: 5
     oai-gnb:
-        image: oai-gnb:develop
+        image: oaisoftwarealliance/oai-gnb:develop
         privileged: true
         container_name: rfsim5g-oai-gnb
         environment:
@@ -184,7 +184,7 @@ services:
             retries: 5
 
     oai-nr-ue:
-        image: oai-nr-ue:develop
+        image: oaisoftwarealliance/oai-nr-ue:develop
         privileged: true
         container_name: rfsim5g-oai-nr-ue
         environment:
diff --git a/ci-scripts/yaml_files/5g_rfsimulator_fdd_phytest/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator_fdd_phytest/docker-compose.yaml
index 1487aa26c0..dbab2002a7 100644
--- a/ci-scripts/yaml_files/5g_rfsimulator_fdd_phytest/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_rfsimulator_fdd_phytest/docker-compose.yaml
@@ -1,7 +1,7 @@
 version: '3.8'
 services:
     oai-gnb:
-        image: oai-gnb:develop
+        image: oaisoftwarealliance/oai-gnb:develop
         privileged: true
         container_name: rfsim5g-oai-gnb
         environment:
@@ -21,7 +21,7 @@ services:
             retries: 5
 
     oai-nr-ue:
-        image: oai-nr-ue:develop
+        image: oaisoftwarealliance/oai-nr-ue:develop
         privileged: true
         container_name: rfsim5g-oai-nr-ue
         environment:
diff --git a/ci-scripts/yaml_files/5g_rfsimulator_fr2_32prb/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator_fr2_32prb/docker-compose.yaml
index 11264e5348..2705a69f10 100644
--- a/ci-scripts/yaml_files/5g_rfsimulator_fr2_32prb/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_rfsimulator_fr2_32prb/docker-compose.yaml
@@ -1,7 +1,7 @@
 version: '3.8'
 services:
     oai-gnb:
-        image: oai-gnb:develop
+        image: oaisoftwarealliance/oai-gnb:develop
         privileged: true
         container_name: rfsim5g-oai-gnb
         environment:
@@ -21,7 +21,7 @@ services:
             retries: 5
 
     oai-nr-ue:
-        image: oai-nr-ue:develop
+        image: oaisoftwarealliance/oai-nr-ue:develop
         privileged: true
         container_name: rfsim5g-oai-nr-ue
         environment:
diff --git a/ci-scripts/yaml_files/5g_rfsimulator_tdd_dora/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator_tdd_dora/docker-compose.yaml
index 9f080478c7..2afa9027f3 100644
--- a/ci-scripts/yaml_files/5g_rfsimulator_tdd_dora/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_rfsimulator_tdd_dora/docker-compose.yaml
@@ -1,7 +1,7 @@
 version: '3.8'
 services:
     oai-gnb:
-        image: oai-gnb:develop
+        image: oaisoftwarealliance/oai-gnb:develop
         privileged: true
         container_name: rfsim5g-oai-gnb
         environment:
@@ -21,7 +21,7 @@ services:
             retries: 5
 
     oai-nr-ue:
-        image: oai-nr-ue:develop
+        image: oaisoftwarealliance/oai-nr-ue:develop
         privileged: true
         container_name: rfsim5g-oai-nr-ue
         environment:
diff --git a/ci-scripts/yaml_files/5g_rfsimulator_u0_25prb/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator_u0_25prb/docker-compose.yaml
index 51d21efc60..e6e525389b 100644
--- a/ci-scripts/yaml_files/5g_rfsimulator_u0_25prb/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_rfsimulator_u0_25prb/docker-compose.yaml
@@ -163,7 +163,7 @@ services:
             timeout: 5s
             retries: 5
     oai-gnb:
-        image: oai-gnb:develop
+        image: oaisoftwarealliance/oai-gnb:develop
         privileged: true
         container_name: rfsim5g-oai-gnb
         environment:
@@ -184,7 +184,7 @@ services:
             retries: 5
 
     oai-nr-ue:
-        image: oai-nr-ue:develop
+        image: oaisoftwarealliance/oai-nr-ue:develop
         privileged: true
         container_name: rfsim5g-oai-nr-ue
         environment:

From 43a2ae004094a12b5820294f54c537ebfc2c1032 Mon Sep 17 00:00:00 2001
From: Raphael Defosseux 
Date: Fri, 3 Feb 2023 10:24:55 +0100
Subject: [PATCH 04/36] style(ci): using and debugging the new LocalCmd class

Signed-off-by: Raphael Defosseux 
---
 ci-scripts/cls_cmd.py          |  17 +--
 ci-scripts/cls_containerize.py | 253 +++++++++++++++------------------
 2 files changed, 124 insertions(+), 146 deletions(-)

diff --git a/ci-scripts/cls_cmd.py b/ci-scripts/cls_cmd.py
index 12eb75e7da..cd7716bc16 100644
--- a/ci-scripts/cls_cmd.py
+++ b/ci-scripts/cls_cmd.py
@@ -74,32 +74,27 @@ class Cmd(metaclass=abc.ABCMeta):
 class LocalCmd(Cmd):
 	def __init__(self, d = None):
 		self.cwd = d
+		if self.cwd is not None:
+			logging.debug(f'Working dir will be {self.cwd}')
 		self.cp = sp.CompletedProcess(args='', returncode=0, stdout='')
 
 	def run(self, line, timeout=300, silent=False, reportNonZero=True):
-		if type(line) is str:
-			line = [s for s in line.split(' ') if len(s) > 0]
 		if not silent:
-			logging.debug(' '.join(line))
+			logging.info(line)
 		try:
-			ret = sp.run(line, cwd=self.cwd, stdout=sp.PIPE, stderr=sp.STDOUT, timeout=timeout)
+			ret = sp.run(line, shell=True, cwd=self.cwd, stdout=sp.PIPE, stderr=sp.STDOUT, timeout=timeout)
 		except Exception as e:
 			ret = sp.CompletedProcess(args=line, returncode=255, stdout=f'Exception: {str(e)}'.encode('utf-8'))
 		if ret.stdout is None:
 			ret.stdout = b''
 		ret.stdout = ret.stdout.decode('utf-8').strip()
 		if reportNonZero and ret.returncode != 0:
-			cmd = ' '.join(ret.args)
-			logging.warning(f'command "{cmd}" returned non-zero returncode {ret.returncode}: output:\n{ret.stdout}')
+			logging.warning(f'command "{ret.args}" returned non-zero returncode {ret.returncode}: output:\n{ret.stdout}')
 		self.cp = ret
 		return ret
 
 	def command(self, commandline, expectedline=None, timeout=300, silent=False, resync=False):
-		line = [s for s in commandline.split(' ') if len(s) > 0]
-		if line[0] == 'cd':
-			self.cd(line[1], silent)
-		else:
-			self.run(line, timeout, silent)
+		self.run(commandline, timeout, silent)
 		return 0
 
 	def close(self):
diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py
index ca98b967a0..44c90c994f 100644
--- a/ci-scripts/cls_containerize.py
+++ b/ci-scripts/cls_containerize.py
@@ -40,6 +40,7 @@ import subprocess
 import time
 import pyshark
 import threading
+import cls_cmd
 from multiprocessing import Process, Lock, SimpleQueue
 from zipfile import ZipFile
 
@@ -732,57 +733,42 @@ class Containerize():
 			sys.exit('Insufficient Parameter')
 		if lIpAddr != 'none':
 			logging.debug('Pulling images onto server: ' + lIpAddr)
-			mySSH = SSH.SSHConnection()
-			mySSH.open(lIpAddr, lUserName, lPassWord)
+			myCmd = cls_cmd.RemoteCmd(lIpAddr)
 		else:
 			logging.debug('Pulling images locally')
+			myCmd = cls_cmd.LocalCmd()
 
 		cmd = 'docker login -u oaicicd -p oaicicd porcepix.sboai.cs.eurecom.fr'
-		if lIpAddr != 'none':
-			mySSH.command(cmd, '\$', 5)
-			response = mySSH.getBefore()
-		else:
-			response = self.run_cmd_local_host(cmd)
-		if re.search('Login Succeeded', response) is None:
+		response = myCmd.run(cmd)
+		if re.search('Login Succeeded', response.stdout) is None:
 			msg = 'Could not log into local registry'
 			logging.error(msg)
-			if lIpAddr != 'none':
-				mySSH.close()
+			myCmd.close()
 			HTML.CreateHtmlTestRow(msg, 'KO', CONST.ALL_PROCESSES_OK)
 			return False
 
 		for image in self.imageToPull:
 			tagToUse = self.ImageTagToUse(image)
 			cmd = f'docker pull {tagToUse}'
-			if lIpAddr != 'none':
-				mySSH.command(cmd, '\$', 120)
-				response = mySSH.getBefore()
-			else:
-				response = self.run_cmd_local_host(cmd)
-			if re.search('Status: Downloaded newer image for |Status: Image is up to date for', response) is None:
+			response = myCmd.run(cmd, timeout=120)
+			if re.search('Status: Downloaded newer image for |Status: Image is up to date for', response.stdout) is None:
 				logging.debug(response)
 				msg = f'Could not pull {image} from local registry : {tagToUse}'
 				logging.error(msg)
-				if lIpAddr != 'none':
-					mySSH.close()
+				myCmd.close()
 				HTML.CreateHtmlTestRow('msg', 'KO', CONST.ALL_PROCESSES_OK)
 				return False
 
 		cmd = 'docker logout porcepix.sboai.cs.eurecom.fr'
-		if lIpAddr != 'none':
-			mySSH.command(cmd, '\$', 5)
-			response = mySSH.getBefore()
-		else:
-			response = self.run_cmd_local_host(cmd)
-		if re.search('Removing login credentials', response) is None:
+		response = myCmd.run(cmd)
+		if re.search('Removing login credentials', response.stdout) is None:
 			msg = 'Could not log off from local registry'
 			logging.error(msg)
-			mySSH.close()
+			myCmd.close()
 			HTML.CreateHtmlTestRow(msg, 'KO', CONST.ALL_PROCESSES_OK)
 			return False
 
-		if lIpAddr != 'none':
-			mySSH.close()
+		myCmd.close()
 		HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
 		return True
 
@@ -809,21 +795,17 @@ class Containerize():
 			sys.exit('Insufficient Parameter')
 		if lIpAddr != 'none':
 			logging.debug('Removing test images from server: ' + lIpAddr)
-			mySSH = SSH.SSHConnection()
-			mySSH.open(lIpAddr, lUserName, lPassWord)
+			myCmd = cls_cmd.RemoteCmd(lIpAddr)
 		else:
 			logging.debug('Removing test images locally')
+			myCmd = cls_cmd.LocalCmd()
 
 		imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru']
 		for image in imageNames:
-			cmd = f'docker rmi {self.ImageTagToUse(image)} || true'
-			if lIpAddr != 'none':
-				mySSH.command(cmd, '\$', 5)
-			else:
-				self.run_cmd_local_host(cmd)
+			cmd = f'docker rmi {self.ImageTagToUse(image)}'
+			myCmd.run(cmd, reportNonZero=False)
 
-		if lIpAddr != 'none':
-			mySSH.close()
+		myCmd.close()
 		HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
 		return True
 
@@ -1046,42 +1028,45 @@ class Containerize():
 	def DeployGenObject(self, HTML, RAN, UE):
 		self.exitStatus = 0
 		logging.debug('\u001B[1m Checking Services to deploy\u001B[0m')
-		cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose config --services'
-		try:
-			listServices = self.run_cmd_local_host(cmd)
-		except Exception as e:
+		# Implicitly we are running locally
+		myCmd = cls_cmd.LocalCmd(d = self.yamlPath[0])
+		cmd = 'docker-compose config --services'
+		listServices = myCmd.run(cmd)
+		if listServices.returncode != 0:
+			myCmd.close()
 			self.exitStatus = 1
 			HTML.CreateHtmlTestRow('SVC not Found', 'KO', CONST.ALL_PROCESSES_OK)
 			return
 		for reqSvc in self.services[0].split(' '):
-			res = re.search(reqSvc, listServices)
+			res = re.search(reqSvc, listServices.stdout)
 			if res is None:
 				logging.error(reqSvc + ' not found in specified docker-compose')
 				self.exitStatus = 1
 		if (self.exitStatus == 1):
+			myCmd.close()
 			HTML.CreateHtmlTestRow('SVC not Found', 'KO', CONST.ALL_PROCESSES_OK)
 			return
 
-		cmd = 'cd ' + self.yamlPath[0] + ' && cp docker-compose.y*ml docker-compose-ci.yml'
-		self.run_cmd_local_host(cmd, silent=self.displayedNewTags)
+		cmd = 'cp docker-compose.y*ml docker-compose-ci.yml'
+		myCmd.command(cmd, silent=self.displayedNewTags)
 		imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru']
 		for image in imageNames:
 			tagToUse = self.ImageTagToUse(image)
-			cmd = f'cd {self.yamlPath[0]} && sed -i -e "s@oaisoftwarealliance/{image}:develop@{tagToUse}@" docker-compose-ci.yml'
-			self.run_cmd_local_host(cmd, silent=self.displayedNewTags)
-		silent=self.displayedNewTags = True
+			cmd = f'sed -i -e "s@oaisoftwarealliance/{image}:develop@{tagToUse}@" docker-compose-ci.yml'
+			myCmd.command(cmd, silent=self.displayedNewTags)
+		self.displayedNewTags = True
 
-		cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml up -d ' + self.services[0]
-		try:
-			deployStatus = self.run_cmd_local_host(cmd, 100)
-		except Exception as e:
+		cmd = 'docker-compose -f docker-compose-ci.yml up -d ' + self.services[0]
+		deployStatus = myCmd.run(cmd, timeout=100)
+		if deployStatus.returncode != 0:
+			myCmd.close()
 			self.exitStatus = 1
 			logging.error('Could not deploy')
 			HTML.CreateHtmlTestRow('Could not deploy', 'KO', CONST.ALL_PROCESSES_OK)
 			return
 
 		logging.debug('\u001B[1m Checking if all deployed healthy\u001B[0m')
-		cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps -a'
+		cmd = 'docker-compose -f docker-compose-ci.yml ps -a'
 		count = 0
 		healthy = 0
 		restarting = 0
@@ -1089,10 +1074,10 @@ class Containerize():
 		while (count < 10):
 			count += 1
 			containerStatus = []
-			deployStatus = self.run_cmd_local_host(cmd, 30, silent=True)
+			deployStatus = myCmd.run(cmd, 30, silent=True)
 			healthy = 0
 			restarting = 0
-			for state in deployStatus.split('\n'):
+			for state in deployStatus.stdout.split('\n'):
 				state = state.strip()
 				res = re.search('Name|NAME|----------', state)
 				if res is not None:
@@ -1112,7 +1097,7 @@ class Containerize():
 				if re.search('\(healthy\)', state) is not None:
 					healthy += 1
 				if re.search('rfsim4g-db-init.*Exit 0', state) is not None or re.search('rfsim4g-db-init.*Exited \(0\)', state) is not None:
-					self.run_cmd_local_host('docker rm -f rfsim4g-db-init || true', 30, silent=True)
+					myCmd.run('docker rm -f rfsim4g-db-init', timeout=30, silent=True, reportNonZero=False)
 				if re.search('Restarting', state) is None:
 					containerStatus.append(state)
 				else:
@@ -1127,10 +1112,12 @@ class Containerize():
 			if newCont == 'rfsim4g-db-init':
 				continue
 			cmd = 'docker inspect -f "{{.Config.Image}}" ' + newCont
-			imageName = self.run_cmd_local_host(cmd, 30, silent=True)
-			imageName = str(imageName).strip()
+			imageInspect = myCmd.run(cmd, timeout=30, silent=True)
+			imageName = str(imageInspect.stdout).strip()
 			cmd = 'docker image inspect --format "{{.RepoTags}}\t{{.Size}} bytes\t{{.Created}}\t{{.Id}}" ' + imageName
-			imagesInfo += self.run_cmd_local_host(cmd, 30, silent=True)
+			imageInspect = myCmd.run(cmd, 30, silent=True)
+			imagesInfo += imageInspect.stdout.strip()
+		myCmd.close()
 
 		html_queue = SimpleQueue()
 		html_cell = '
\n'
@@ -1168,8 +1155,10 @@ class Containerize():
 			pass
 
 	def CaptureOnDockerNetworks(self):
-		cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml config | grep com.docker.network.bridge.name | sed -e "s@^.*name: @@"'
-		networkNames = self.run_cmd_local_host(cmd, silent=True)
+		myCmd = cls_cmd.LocalCmd(d = self.yamlPath[0])
+		cmd = 'docker-compose -f docker-compose-ci.yml config | grep com.docker.network.bridge.name | sed -e "s@^.*name: @@"'
+		networkNames = myCmd.run(cmd, silent=True)
+		myCmd.close()
 		if re.search('4g.*rfsimulator', self.yamlPath[0]) is not None:
 			# Excluding any traffic from LTE-UE container (192.168.61.30)
 			# From the trf-gen, keeping only PING traffic
@@ -1183,7 +1172,7 @@ class Containerize():
 		else:
 			return
 		interfaces = []
-		for name in networkNames.split('\n'):
+		for name in networkNames.stdout.split('\n'):
 			if re.search('rfsim', name) is not None or re.search('l2sim', name) is not None:
 				interfaces.append(name)
 		ymlPath = self.yamlPath[0].split('/')
@@ -1195,28 +1184,30 @@ class Containerize():
 
 	def UndeployGenObject(self, HTML, RAN, UE):
 		self.exitStatus = 0
+		# Implicitly we are running locally
 		ymlPath = self.yamlPath[0].split('/')
 		logPath = '../cmake_targets/log/' + ymlPath[1]
+		myCmd = cls_cmd.LocalCmd(d = self.yamlPath[0])
 
-		cmd = 'cd ' + self.yamlPath[0] + ' && cp docker-compose.y*ml docker-compose-ci.yml'
-		self.run_cmd_local_host(cmd, silent=self.displayedNewTags)
+		cmd = 'cp docker-compose.y*ml docker-compose-ci.yml'
+		myCmd.command(cmd, silent=self.displayedNewTags)
 		imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru']
 		for image in imageNames:
 			tagToUse = self.ImageTagToUse(image)
-			cmd = f'cd {self.yamlPath[0]} && sed -i -e "s@oaisoftwarealliance/{image}:develop@{tagToUse}@" docker-compose-ci.yml'
-			self.run_cmd_local_host(cmd, silent=self.displayedNewTags)
-		silent=self.displayedNewTags = True
+			cmd = f'sed -i -e "s@oaisoftwarealliance/{image}:develop@{tagToUse}@" docker-compose-ci.yml'
+			myCmd.command(cmd, silent=self.displayedNewTags)
+		self.displayedNewTags = True
 
 		# check which containers are running for log recovery later
-		cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps --all'
-		deployStatusLogs = self.run_cmd_local_host(cmd, 30)
+		cmd = 'docker-compose -f docker-compose-ci.yml ps --all'
+		deployStatusLogs = myCmd.run(cmd, timeout=30)
 
 		# Stop the containers to shut down objects
 		logging.debug('\u001B[1m Stopping containers \u001B[0m')
-		cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml stop -t3'
-		try:
-			deployStatus = self.run_cmd_local_host(cmd, 100)
-		except Exception as e:
+		cmd = 'docker-compose -f docker-compose-ci.yml stop -t3'
+		deployStatus = myCmd.run(cmd, timeout=100)
+		if deployStatus.returncode != 0:
+			myCmd.close()
 			self.exitStatus = 1
 			logging.error('Could not stop containers')
 			HTML.CreateHtmlTestRow('Could not stop', 'KO', CONST.ALL_PROCESSES_OK)
@@ -1224,7 +1215,12 @@ class Containerize():
 			return
 
 		anyLogs = False
-		for state in deployStatusLogs.split('\n'):
+		logging.debug('Working dir is now . (ie ci-scripts)')
+		myCmd.cwd = '.'
+		myCmd.command(f'mkdir -p {logPath}')
+		logging.debug(f'Working dir is now {logPath}')
+		myCmd.cwd = logPath
+		for state in deployStatusLogs.stdout.split('\n'):
 			res = re.search('Name|NAME|----------', state)
 			if res is not None:
 				continue
@@ -1234,33 +1230,26 @@ class Containerize():
 			if res is not None:
 				anyLogs = True
 				cName = res.group('container_name')
-				cmd = 'cd ' + self.yamlPath[0] + ' && docker logs ' + cName + ' > ' + cName + '.log 2>&1'
-				self.run_cmd_local_host(cmd, 30)
+				cmd = 'docker logs ' + cName + ' > ' + cName + '.log 2>&1'
+				myCmd.run(cmd, timeout=30, reportNonZero=False)
 				if re.search('magma-mme', cName) is not None:
-					cmd = 'cd ' + self.yamlPath[0] + ' && docker cp -L ' + cName + ':/var/log/mme.log ' + cName + '-full.log'
-					self.run_cmd_local_host(cmd, 30)
+					cmd = 'docker cp -L ' + cName + ':/var/log/mme.log ' + cName + '-full.log'
+					myCmd.run(cmd, timeout=30, reportNonZero=False)
 		fullStatus = True
 		if anyLogs:
-			cmd = 'mkdir -p '+ logPath + ' && cp ' + self.yamlPath[0] + '/*.log ' + logPath
-			deployStatus = self.run_cmd_local_host(cmd)
-
 			# Analyzing log file(s)!
 			listOfPossibleRanContainers = ['enb', 'gnb', 'cu', 'du']
 			for container in listOfPossibleRanContainers:
-				filenames = self.yamlPath[0] + '/*-oai-' + container + '.log'
+				filenames = './*-oai-' + container + '.log'
 				cmd = 'ls ' + filenames
-				containerStatus = True
-				try:
-					lsStatus = self.run_cmd_local_host(cmd, silent=True)
-					filenames = str(lsStatus).strip()
-				except:
-					containerStatus = False
-				if not containerStatus:
+				lsStatus = myCmd.run(cmd, silent=True, reportNonZero=False)
+				if lsStatus.returncode != 0:
 					continue
+				filenames = str(lsStatus.stdout).strip()
 
 				for filename in filenames.split('\n'):
 					logging.debug('\u001B[1m Analyzing xNB logfile ' + filename + ' \u001B[0m')
-					logStatus = RAN.AnalyzeLogFile_eNB(filename, HTML, self.ran_checkers)
+					logStatus = RAN.AnalyzeLogFile_eNB(f'{logPath}/{filename}', HTML, self.ran_checkers)
 					if (logStatus < 0):
 						fullStatus = False
 						self.exitStatus = 1
@@ -1270,42 +1259,40 @@ class Containerize():
 
 			listOfPossibleUeContainers = ['lte-ue*', 'nr-ue*']
 			for container in listOfPossibleUeContainers:
-				filenames = self.yamlPath[0] + '/*-oai-' + container + '.log'
+				filenames = './*-oai-' + container + '.log'
 				cmd = 'ls ' + filenames
 				containerStatus = True
-				try:
-					lsStatus = self.run_cmd_local_host(cmd, silent=True)
-					filenames = str(lsStatus).strip()
-				except:
-					containerStatus = False
-				if not containerStatus:
+				lsStatus = myCmd.run(cmd, silent=True, reportNonZero=False)
+				if lsStatus.returncode != 0:
 					continue
+				filenames = str(lsStatus.stdout).strip()
 
 				for filename in filenames.split('\n'):
 					logging.debug('\u001B[1m Analyzing UE logfile ' + filename + ' \u001B[0m')
-					logStatus = UE.AnalyzeLogFile_UE(filename, HTML, RAN)
+					logStatus = UE.AnalyzeLogFile_UE(f'{logPath}/{filename}', HTML, RAN)
 					if (logStatus < 0):
 						fullStatus = False
 						HTML.CreateHtmlTestRow('UE log Analysis', 'KO', logStatus)
 					else:
 						HTML.CreateHtmlTestRow('UE log Analysis', 'OK', CONST.ALL_PROCESSES_OK)
 
-			cmd = 'rm ' + self.yamlPath[0] + '/*.log'
-			deployStatus = self.run_cmd_local_host(cmd)
 			if self.tsharkStarted:
 				self.tsharkStarted = True
-				cmd = 'killall tshark || true'
-				self.run_cmd_local_host(cmd)
+				cmd = 'killall tshark'
+				myCmd.run(cmd, reportNonZero=False)
 				ymlPath = self.yamlPath[0].split('/')
-				cmd = 'mv /tmp/capture_' + ymlPath[1] + '.pcap ' + logPath + ' || true'
-				copyStatus = self.run_cmd_local_host(cmd, 100)
+				# The working dir is still logPath
+				cmd = 'mv /tmp/capture_' + ymlPath[1] + '.pcap .'
+				myCmd.run(cmd, timeout=100, reportNonZero=False)
 				self.tsharkStarted = False
 
 		logging.debug('\u001B[1m Undeploying \u001B[0m')
-		cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml down'
-		try:
-			deployStatus = self.run_cmd_local_host(cmd, 100)
-		except Exception as e:
+		logging.debug(f'Working dir is back {self.yamlPath[0]}')
+		myCmd.cwd = self.yamlPath[0]
+		cmd = 'docker-compose -f docker-compose-ci.yml down'
+		deployStatus = myCmd.run(cmd, timeout=100)
+		if deployStatus.returncode != 0:
+			myCmd.close()
 			self.exitStatus = 1
 			logging.error('Could not undeploy')
 			HTML.CreateHtmlTestRow('Could not undeploy', 'KO', CONST.ALL_PROCESSES_OK)
@@ -1314,8 +1301,9 @@ class Containerize():
 
 		self.deployedContainers = []
 		# Cleaning any created tmp volume
-		cmd = 'docker volume prune --force || true'
-		deployStatus = self.run_cmd_local_host(cmd, 100)
+		cmd = 'docker volume prune --force'
+		deployStatus = myCmd.run(cmd, timeout=100, reportNonZero=False)
+		myCmd.close()
 
 		if fullStatus:
 			HTML.CreateHtmlTestRow('n/a', 'OK', CONST.ALL_PROCESSES_OK)
@@ -1330,11 +1318,12 @@ class Containerize():
 		logPath = '../cmake_targets/log/' + ymlPath[1]
 
 		# if the containers are running, recover the logs!
-		cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps --all'
-		deployStatus = self.run_cmd_local_host(cmd, 30)
+		myCmd = cls_cmd.LocalCmd(d = self.yamlPath[0])
+		cmd = 'docker-compose -f docker-compose-ci.yml ps --all'
+		deployStatus = myCmd.run(cmd, timeout=30)
 		cmd = 'docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}" '
 		anyLogs = False
-		for state in deployStatus.split('\n'):
+		for state in deployStatus.stdout.split('\n'):
 			res = re.search('Name|NAME|----------', state)
 			if res is not None:
 				continue
@@ -1346,10 +1335,11 @@ class Containerize():
 				cmd += res.group('container_name') + ' '
 		message = ''
 		if anyLogs:
-			stats = self.run_cmd_local_host(cmd, 30)
-			for statLine in stats.split('\n'):
+			stats = myCmd.run(cmd, timeout=30)
+			for statLine in stats.stdout.split('\n'):
 				logging.debug(statLine)
 				message += statLine + '\n'
+		myCmd.close()
 
 		html_queue = SimpleQueue()
 		html_cell = '
\n' + message + '
' @@ -1357,17 +1347,18 @@ class Containerize(): HTML.CreateHtmlTestRowQueue(self.pingOptions, 'OK', 1, html_queue) def PingFromContainer(self, HTML, RAN, UE): + myCmd = cls_cmd.LocalCmd() self.exitStatus = 0 ymlPath = self.yamlPath[0].split('/') logPath = '../cmake_targets/log/' + ymlPath[1] cmd = 'mkdir -p ' + logPath - deployStatus = self.run_cmd_local_host(cmd, silent=True) + myCmd.run(cmd, silent=True) - cmd = 'docker exec ' + self.pingContName + ' /bin/bash -c "ping ' + self.pingOptions + '" 2>&1 | tee ' + logPath + '/ping_' + HTML.testCase_id + '.log || true' + cmd = 'docker exec ' + self.pingContName + ' /bin/bash -c "ping ' + self.pingOptions + '" 2>&1 | tee ' + logPath + '/ping_' + HTML.testCase_id + '.log' + pingStatus = myCmd.run(cmd, timeout=100, reportNonZero=False) + myCmd.close() - deployStatus = self.run_cmd_local_host(cmd, 100) - - result = re.search(', (?P[0-9\.]+)% packet loss, time [0-9\.]+ms', deployStatus) + result = re.search(', (?P[0-9\.]+)% packet loss, time [0-9\.]+ms', pingStatus.stdout) if result is None: self.PingExit(HTML, RAN, UE, False, 'Packet Loss Not Found') return @@ -1377,7 +1368,7 @@ class Containerize(): self.PingExit(HTML, RAN, UE, False, 'Packet Loss is 100%') return - result = re.search('rtt min\/avg\/max\/mdev = (?P[0-9\.]+)\/(?P[0-9\.]+)\/(?P[0-9\.]+)\/[0-9\.]+ ms', deployStatus) + result = re.search('rtt min\/avg\/max\/mdev = (?P[0-9\.]+)\/(?P[0-9\.]+)\/(?P[0-9\.]+)\/[0-9\.]+ ms', pingStatus.stdout) if result is None: self.PingExit(HTML, RAN, UE, False, 'Ping RTT_Min RTT_Avg RTT_Max Not Found!') return @@ -1430,35 +1421,37 @@ class Containerize(): self.exitStatus = 1 def IperfFromContainer(self, HTML, RAN, UE): + myCmd = cls_cmd.LocalCmd() self.exitStatus = 0 ymlPath = self.yamlPath[0].split('/') logPath = '../cmake_targets/log/' + ymlPath[1] cmd = 'mkdir -p ' + logPath - logStatus = self.run_cmd_local_host(cmd, silent=True) + myCmd.run(cmd, silent=True) # Start the server process cmd = f'docker exec -d {self.svrContName} /bin/bash -c "nohup iperf {self.svrOptions} > /tmp/iperf_server.log 2>&1"' - self.run_cmd_local_host(cmd) + myCmd.run(cmd, reportNonZero=False) time.sleep(3) # Start the client process cmd = f'docker exec {self.cliContName} /bin/bash -c "iperf {self.cliOptions}" 2>&1 | tee {logPath}/iperf_client_{HTML.testCase_id}.log' - clientStatus = self.run_cmd_local_host(cmd, 100) + clientStatus = myCmd.run(cmd, timeout=100) # Stop the server process cmd = f'docker exec {self.svrContName} /bin/bash -c "pkill iperf"' - self.run_cmd_local_host(cmd) + myCmd.run(cmd) time.sleep(3) serverStatusFilename = f'{logPath}/iperf_server_{HTML.testCase_id}.log' cmd = f'docker cp {self.svrContName}:/tmp/iperf_server.log {serverStatusFilename}' - self.run_cmd_local_host(cmd, 30) + myCmd.run(cmd, timeout=60) + myCmd.close() # clientStatus was retrieved above. The serverStatus was # written in the background, then copied to the local machine with open(serverStatusFilename, 'r') as f: serverStatus = f.read() - (iperfStatus, msg) = AnalyzeIperf(self.cliOptions, clientStatus, serverStatus) + (iperfStatus, msg) = AnalyzeIperf(self.cliOptions, clientStatus.stdout, serverStatus) if iperfStatus: logging.info('\u001B[1m Iperf Test PASS\u001B[0m') else: @@ -1594,13 +1587,3 @@ class Containerize(): if result is None: mySSH.command('echo ' + password + ' | sudo -S iptables -P FORWARD ACCEPT', '\$', 10) mySSH.close() - - def run_cmd_local_host(self, lCmd, lTimeout=10, silent=False): - if not silent: - logging.info(lCmd) - result = subprocess.run(lCmd, shell=True, check=True, - universal_newlines=True, - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - timeout=lTimeout) - return str(result.stdout) From a03d2746763bf6e0237a4f94bb530c6327e0337e Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 3 Feb 2023 10:26:05 +0100 Subject: [PATCH 05/36] chore(ci): after upgrade of CN5G version on porcepix Signed-off-by: Raphael Defosseux --- ci-scripts/epc.py | 14 +++++++------- ci-scripts/xml_files/sa_cn5g_asue_start.xml | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ci-scripts/epc.py b/ci-scripts/epc.py index 8ee4a0a5e6..867236f97e 100644 --- a/ci-scripts/epc.py +++ b/ci-scripts/epc.py @@ -43,7 +43,7 @@ from multiprocessing import Process, Lock, SimpleQueue #----------------------------------------------------------- # OAI Testing modules #----------------------------------------------------------- -import sshconnection as SSH +import sshconnection as SSH import helpreadme as HELP import constants as CONST @@ -66,8 +66,8 @@ class EPCManagement(): self.mmeConfFile = 'mme.conf' self.yamlPath = '' self.isMagmaUsed = False - self.cfgDeploy = '--type start-mini --fqdn yes --scenario 1 --capture /tmp/oai-cn5g-v1.3.pcap' #from xml, 'mini' is default normal for docker-network.py - self.cfgUnDeploy = '--type stop-mini --fqdn yes --scenario 1' #from xml, 'mini' is default normal for docker-network.py + self.cfgDeploy = '--type start-mini --fqdn yes --scenario 1 --capture /tmp/oai-cn5g-v1.5.pcap' #from xml, 'mini' is default normal for docker-network.py + self.cfgUnDeploy = '--type stop-mini --fqdn yes --scenario 1' #from xml, 'mini' is default normal for docker-network.py #----------------------------------------------------------- @@ -253,7 +253,7 @@ class EPCManagement(): logging.debug('Starting OAI CN5G') mySSH.command('if [ -d ' + self.SourceCodePath + '/scripts ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/scripts ; fi', '\$', 5) mySSH.command('mkdir -p ' + self.SourceCodePath + '/scripts', '\$', 5) - mySSH.command('cd /opt/oai-cn5g-fed-v1.4/docker-compose', '\$', 5) + mySSH.command('cd /opt/oai-cn5g-fed-v1.5/docker-compose', '\$', 5) mySSH.command('python3 ./core-network.py '+self.cfgDeploy, '\$', 60) if re.search('start-mini-as-ue', self.cfgDeploy): dFile = 'docker-compose-mini-nrf-asue.yaml' @@ -537,11 +537,11 @@ class EPCManagement(): mySSH.command('docker logs ' + c + ' > ' + self.SourceCodePath + '/logs/' + c + '.log', '\$', 5) logging.debug('Terminating OAI CN5G') - mySSH.command('cd /opt/oai-cn5g-fed-v1.4/docker-compose', '\$', 5) + mySSH.command('cd /opt/oai-cn5g-fed-v1.5/docker-compose', '\$', 5) mySSH.command('python3 ./core-network.py '+self.cfgUnDeploy, '\$', 60) mySSH.command('docker volume prune --force || true', '\$', 60) time.sleep(2) - mySSH.command('tshark -r /tmp/oai-cn5g-v1.3.pcap | egrep --colour=never "Tracking area update" ','\$', 30) + mySSH.command('tshark -r /tmp/oai-cn5g-v1.5.pcap | egrep --colour=never "Tracking area update" ','\$', 30) result = re.search('Tracking area update request', mySSH.getBefore()) if result is not None: message = 'UE requested ' + str(mySSH.getBefore().count('Tracking area update request')) + 'Tracking area update request(s)' @@ -828,7 +828,7 @@ class EPCManagement(): mySSH.command('zip mme.log.zip mme_check_run.*', '\$', 60) elif re.match('OAICN5G', self.Type, re.IGNORECASE): mySSH.command('cd ' + self.SourceCodePath + '/logs','\$', 5) - mySSH.command('cp -f /tmp/oai-cn5g-v1.3.pcap .','\$', 30) + mySSH.command('cp -f /tmp/oai-cn5g-v1.5.pcap .','\$', 30) mySSH.command('zip mme.log.zip oai-amf.log oai-nrf.log oai-cn5g*.pcap','\$', 30) mySSH.command('mv mme.log.zip ' + self.SourceCodePath + '/scripts','\$', 30) elif re.match('OAI', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE): diff --git a/ci-scripts/xml_files/sa_cn5g_asue_start.xml b/ci-scripts/xml_files/sa_cn5g_asue_start.xml index 740022b1c9..0b402f69f1 100644 --- a/ci-scripts/xml_files/sa_cn5g_asue_start.xml +++ b/ci-scripts/xml_files/sa_cn5g_asue_start.xml @@ -33,7 +33,7 @@ Initialize_5GCN Initialize 5G Core - --type start-mini-as-ue --fqdn yes --scenario 1 --capture /tmp/oai-cn5g-v1.3.pcap + --type start-mini-as-ue --fqdn yes --scenario 1 --capture /tmp/oai-cn5g-v1.5.pcap From f516d7ab4ff2ff52c965f0abaf883413223e2c75 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 3 Feb 2023 10:34:08 +0100 Subject: [PATCH 06/36] fix(ci): typo found per review Signed-off-by: Raphael Defosseux --- .../yaml_files/4g_rfsimulator_fdd_05MHz_noS1/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz_noS1/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz_noS1/docker-compose.yml index 39c9394769..02bc3c56f2 100644 --- a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz_noS1/docker-compose.yml +++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz_noS1/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.8' services: oai_enb0: - image: ioaisoftwarealliance/oai-enb:develop + image: oaisoftwarealliance/oai-enb:develop privileged: true container_name: rfsim4g-oai-enb networks: From 19ffb7be485d36f0c3f407350ef3e4bb76e2c634 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 3 Feb 2023 11:47:11 +0100 Subject: [PATCH 07/36] fix(ci): proxy repo has no develop branch Signed-off-by: Raphael Defosseux --- ci-scripts/cls_containerize.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index 44c90c994f..f8fc84a8d1 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -65,7 +65,8 @@ def CreateWorkspace(sshSession, sourcePath, ranRepository, ranCommitID, ranTarge sshSession.command('mkdir -p ' + sourcePath, '\$', 5) sshSession.command('cd ' + sourcePath, '\$', 5) # Recent version of git (>2.20?) should handle missing .git extension # without problems - sshSession.command(f'git clone --filter=blob:none -n -b develop {ranRepository} .', '\$', 60) + baseBranch = re.sub('origin/', '', ranTargetBranch) + sshSession.command(f'git clone --filter=blob:none -n -b {baseBranch} {ranRepository} .', '\$', 60) if sshSession.getBefore().count('error') > 0 or sshSession.getBefore().count('error') > 0: sys.exit('error during clone') sshSession.command('git config user.email "jenkins@openairinterface.org"', '\$', 5) @@ -550,14 +551,17 @@ class Containerize(): oldRanCommidID = self.ranCommitID oldRanRepository = self.ranRepository oldRanAllowMerge = self.ranAllowMerge + oldRanTargetBranch = self.ranTargetBranch self.ranCommitID = self.proxyCommit self.ranRepository = 'https://github.com/EpiSci/oai-lte-5g-multi-ue-proxy.git' self.ranAllowMerge = False + self.ranTargetBranch = 'master' CreateWorkspace(mySSH, lSourcePath, self.ranRepository, self.ranCommitID, self.ranTargetBranch, self.ranAllowMerge) # to prevent accidentally overwriting data that might be used later self.ranCommitID = oldRanCommidID self.ranRepository = oldRanRepository self.ranAllowMerge = oldRanAllowMerge + self.ranTargetBranch = oldRanTargetBranch # Let's remove any previous run artifacts if still there mySSH.command(self.cli + ' image prune --force', '\$', 30) @@ -574,6 +578,7 @@ class Containerize(): # Note: at this point, OAI images are flattened, but we cannot do this # here, as the flatten script is not in the proxy repo mySSH.command(self.cli + ' image inspect --format=\'Size = {{.Size}} bytes\' proxy:' + tag, '\$', 5) + mySSH.command(self.cli + ' image prune --force || true','\$', 15) if mySSH.getBefore().count('o such image') != 0: logging.error('\u001B[1m Build of L2sim proxy failed\u001B[0m') mySSH.close() @@ -1098,6 +1103,8 @@ class Containerize(): healthy += 1 if re.search('rfsim4g-db-init.*Exit 0', state) is not None or re.search('rfsim4g-db-init.*Exited \(0\)', state) is not None: myCmd.run('docker rm -f rfsim4g-db-init', timeout=30, silent=True, reportNonZero=False) + if re.search('l2sim4g-db-init.*Exit 0', state) is not None or re.search('l2sim4g-db-init.*Exited \(0\)', state) is not None: + myCmd.run('docker rm -f l2sim4g-db-init', timeout=30, silent=True, reportNonZero=False) if re.search('Restarting', state) is None: containerStatus.append(state) else: From 00ef792d4799a7eb7ce293b676e939cf90ddbf40 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 3 Feb 2023 14:03:40 +0100 Subject: [PATCH 08/36] chore(ci): post-review changes Signed-off-by: Raphael Defosseux --- ci-scripts/cls_cmd.py | 8 +++-- ci-scripts/cls_containerize.py | 65 +++++++++++++++++++--------------- 2 files changed, 42 insertions(+), 31 deletions(-) diff --git a/ci-scripts/cls_cmd.py b/ci-scripts/cls_cmd.py index cd7716bc16..8694502fe2 100644 --- a/ci-scripts/cls_cmd.py +++ b/ci-scripts/cls_cmd.py @@ -75,7 +75,7 @@ class LocalCmd(Cmd): def __init__(self, d = None): self.cwd = d if self.cwd is not None: - logging.debug(f'Working dir will be {self.cwd}') + logging.debug(f'Working dir is {self.cwd}') self.cp = sp.CompletedProcess(args='', returncode=0, stdout='') def run(self, line, timeout=300, silent=False, reportNonZero=True): @@ -94,7 +94,11 @@ class LocalCmd(Cmd): return ret def command(self, commandline, expectedline=None, timeout=300, silent=False, resync=False): - self.run(commandline, timeout, silent) + line = [s for s in commandline.split(' ') if len(s) > 0] + if line[0] == 'cd': + self.cd(line[1], silent) + else: + self.run(line, timeout, silent) return 0 def close(self): diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index f8fc84a8d1..8312802aa9 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -745,7 +745,7 @@ class Containerize(): cmd = 'docker login -u oaicicd -p oaicicd porcepix.sboai.cs.eurecom.fr' response = myCmd.run(cmd) - if re.search('Login Succeeded', response.stdout) is None: + if response.returncode != 0: msg = 'Could not log into local registry' logging.error(msg) myCmd.close() @@ -756,7 +756,7 @@ class Containerize(): tagToUse = self.ImageTagToUse(image) cmd = f'docker pull {tagToUse}' response = myCmd.run(cmd, timeout=120) - if re.search('Status: Downloaded newer image for |Status: Image is up to date for', response.stdout) is None: + if response.returncode != 0: logging.debug(response) msg = f'Could not pull {image} from local registry : {tagToUse}' logging.error(msg) @@ -766,7 +766,7 @@ class Containerize(): cmd = 'docker logout porcepix.sboai.cs.eurecom.fr' response = myCmd.run(cmd) - if re.search('Removing login credentials', response.stdout) is None: + if response.returncode != 0: msg = 'Could not log off from local registry' logging.error(msg) myCmd.close() @@ -1053,15 +1053,15 @@ class Containerize(): return cmd = 'cp docker-compose.y*ml docker-compose-ci.yml' - myCmd.command(cmd, silent=self.displayedNewTags) + myCmd.run(cmd, silent=self.displayedNewTags) imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru'] for image in imageNames: tagToUse = self.ImageTagToUse(image) cmd = f'sed -i -e "s@oaisoftwarealliance/{image}:develop@{tagToUse}@" docker-compose-ci.yml' - myCmd.command(cmd, silent=self.displayedNewTags) + myCmd.run(cmd, silent=self.displayedNewTags) self.displayedNewTags = True - cmd = 'docker-compose -f docker-compose-ci.yml up -d ' + self.services[0] + cmd = f'docker-compose -f docker-compose-ci.yml up -d {self.services[0]}' deployStatus = myCmd.run(cmd, timeout=100) if deployStatus.returncode != 0: myCmd.close() @@ -1156,6 +1156,12 @@ class Containerize(): self.UndeployGenObject(HTML, RAN, UE) self.exitStatus = 1 + # pyshark livecapture launches 2 processes: + # * One using dumpcap -i lIfs -w - (ie redirecting the packets to STDOUT) + # * One using tshark -i - -w loFile (ie capturing from STDIN from previous process) + # but in fact the packets are read by the following loop before being in fact + # really written to loFile. + # So it is mandatory to keep the loop def LaunchPySharkCapture(self, lIfs, lFilter, loFile): capture = pyshark.LiveCapture(interface=lIfs, bpf_filter=lFilter, output_file=loFile, debug=False) for packet in capture.sniff_continuously(): @@ -1197,12 +1203,12 @@ class Containerize(): myCmd = cls_cmd.LocalCmd(d = self.yamlPath[0]) cmd = 'cp docker-compose.y*ml docker-compose-ci.yml' - myCmd.command(cmd, silent=self.displayedNewTags) + myCmd.run(cmd, silent=self.displayedNewTags) imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru'] for image in imageNames: tagToUse = self.ImageTagToUse(image) cmd = f'sed -i -e "s@oaisoftwarealliance/{image}:develop@{tagToUse}@" docker-compose-ci.yml' - myCmd.command(cmd, silent=self.displayedNewTags) + myCmd.run(cmd, silent=self.displayedNewTags) self.displayedNewTags = True # check which containers are running for log recovery later @@ -1223,10 +1229,9 @@ class Containerize(): anyLogs = False logging.debug('Working dir is now . (ie ci-scripts)') - myCmd.cwd = '.' - myCmd.command(f'mkdir -p {logPath}') - logging.debug(f'Working dir is now {logPath}') - myCmd.cwd = logPath + myCmd2 = cls_cmd.LocalCmd() + myCmd2.run(f'mkdir -p {logPath}') + myCmd2.cd(logPath) for state in deployStatusLogs.stdout.split('\n'): res = re.search('Name|NAME|----------', state) if res is not None: @@ -1237,19 +1242,19 @@ class Containerize(): if res is not None: anyLogs = True cName = res.group('container_name') - cmd = 'docker logs ' + cName + ' > ' + cName + '.log 2>&1' - myCmd.run(cmd, timeout=30, reportNonZero=False) + cmd = f'docker logs {cName} > {cName}.log 2>&1' + myCmd2.run(cmd, timeout=30, reportNonZero=False) if re.search('magma-mme', cName) is not None: - cmd = 'docker cp -L ' + cName + ':/var/log/mme.log ' + cName + '-full.log' - myCmd.run(cmd, timeout=30, reportNonZero=False) + cmd = f'docker cp -L {cName}:/var/log/mme.log {cName}-full.log' + myCmd2.run(cmd, timeout=30, reportNonZero=False) fullStatus = True if anyLogs: # Analyzing log file(s)! listOfPossibleRanContainers = ['enb', 'gnb', 'cu', 'du'] for container in listOfPossibleRanContainers: filenames = './*-oai-' + container + '.log' - cmd = 'ls ' + filenames - lsStatus = myCmd.run(cmd, silent=True, reportNonZero=False) + cmd = f'ls {filenames}' + lsStatus = myCmd2.run(cmd, silent=True, reportNonZero=False) if lsStatus.returncode != 0: continue filenames = str(lsStatus.stdout).strip() @@ -1267,9 +1272,8 @@ class Containerize(): listOfPossibleUeContainers = ['lte-ue*', 'nr-ue*'] for container in listOfPossibleUeContainers: filenames = './*-oai-' + container + '.log' - cmd = 'ls ' + filenames - containerStatus = True - lsStatus = myCmd.run(cmd, silent=True, reportNonZero=False) + cmd = f'ls {filenames}' + lsStatus = myCmd2.run(cmd, silent=True, reportNonZero=False) if lsStatus.returncode != 0: continue filenames = str(lsStatus.stdout).strip() @@ -1286,16 +1290,19 @@ class Containerize(): if self.tsharkStarted: self.tsharkStarted = True cmd = 'killall tshark' - myCmd.run(cmd, reportNonZero=False) + myCmd2.run(cmd, reportNonZero=False) + cmd = 'killall dumpcap' + myCmd2.run(cmd, reportNonZero=False) + time.sleep(5) ymlPath = self.yamlPath[0].split('/') # The working dir is still logPath - cmd = 'mv /tmp/capture_' + ymlPath[1] + '.pcap .' - myCmd.run(cmd, timeout=100, reportNonZero=False) + cmd = f'mv /tmp/capture_{ymlPath[1]}.pcap .' + myCmd2.run(cmd, timeout=100, reportNonZero=False) self.tsharkStarted = False + myCmd2.close() logging.debug('\u001B[1m Undeploying \u001B[0m') logging.debug(f'Working dir is back {self.yamlPath[0]}') - myCmd.cwd = self.yamlPath[0] cmd = 'docker-compose -f docker-compose-ci.yml down' deployStatus = myCmd.run(cmd, timeout=100) if deployStatus.returncode != 0: @@ -1358,10 +1365,10 @@ class Containerize(): self.exitStatus = 0 ymlPath = self.yamlPath[0].split('/') logPath = '../cmake_targets/log/' + ymlPath[1] - cmd = 'mkdir -p ' + logPath + cmd = f'mkdir -p {logPath}' myCmd.run(cmd, silent=True) - cmd = 'docker exec ' + self.pingContName + ' /bin/bash -c "ping ' + self.pingOptions + '" 2>&1 | tee ' + logPath + '/ping_' + HTML.testCase_id + '.log' + cmd = f'docker exec {self.pingContName} /bin/bash -c "ping {self.pingOptions}" 2>&1 | tee {logPath}/ping_{HTML.testCase_id}.log' pingStatus = myCmd.run(cmd, timeout=100, reportNonZero=False) myCmd.close() @@ -1433,12 +1440,12 @@ class Containerize(): ymlPath = self.yamlPath[0].split('/') logPath = '../cmake_targets/log/' + ymlPath[1] - cmd = 'mkdir -p ' + logPath + cmd = f'mkdir -p {logPath}' myCmd.run(cmd, silent=True) # Start the server process cmd = f'docker exec -d {self.svrContName} /bin/bash -c "nohup iperf {self.svrOptions} > /tmp/iperf_server.log 2>&1"' - myCmd.run(cmd, reportNonZero=False) + myCmd.run(cmd) time.sleep(3) # Start the client process From 8a388f4b0ed32d2b4d48cef9cef75c0b6ef993df Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Mon, 6 Feb 2023 11:22:31 +0100 Subject: [PATCH 09/36] fix(ci): for old versions of python3, pyshark live-capture is buggy Signed-off-by: Raphael Defosseux --- ci-scripts/cls_containerize.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index 8312802aa9..4a897d066b 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -1185,12 +1185,22 @@ class Containerize(): else: return interfaces = [] + iInterfaces = '' for name in networkNames.stdout.split('\n'): if re.search('rfsim', name) is not None or re.search('l2sim', name) is not None: interfaces.append(name) + iInterfaces += f'-i {name} ' ymlPath = self.yamlPath[0].split('/') output_file = f'/tmp/capture_{ymlPath[1]}.pcap' self.tsharkStarted = True + # On old systems (ubuntu 18), pyshark live-capture is buggy. + # Going back to old method + if sys.version_info < (3, 7): + cmd = f'nohup tshark -f "{capture_filter}" {iInterfaces} -w {output_file} > /tmp/tshark.log 2>&1 &' + myCmd = cls_cmd.LocalCmd() + myCmd.run(cmd, timeout=5, reportNonZero=False) + myCmd.close() + return x = threading.Thread(target = self.LaunchPySharkCapture, args = (interfaces,capture_filter,output_file,)) x.daemon = True x.start() From 9c6f07dbc807d186da92ba682ae5626621923e03 Mon Sep 17 00:00:00 2001 From: Roberto Louro Magueta Date: Mon, 23 Jan 2023 20:23:08 +0000 Subject: [PATCH 10/36] Avoid saturation in PUSCH for UL channel estimation --- .../NR_ESTIMATION/nr_ul_channel_estimation.c | 75 +++---------------- openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h | 4 +- .../PHY/NR_TRANSPORT/nr_transport_proto.h | 3 +- .../PHY/NR_TRANSPORT/nr_ulsch_demodulation.c | 71 ++++++++++-------- 4 files changed, 55 insertions(+), 98 deletions(-) diff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c index e7ca3c99db..53ca4bf762 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c +++ b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c @@ -106,10 +106,10 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, unsigned char symbol, int ul_id, unsigned short bwp_start_subcarrier, - nfapi_nr_pusch_pdu_t *pusch_pdu) { - c16_t pilot[3280] __attribute__((aligned(16))); - int16_t *fdcl, *fdcr, *fdclh, *fdcrh; + nfapi_nr_pusch_pdu_t *pusch_pdu, + int *max_ch) { + c16_t pilot[3280] __attribute__((aligned(16))); const int chest_freq = gNB->chest_freq; #ifdef DEBUG_CH @@ -137,31 +137,6 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, k0, symbol); - switch (nushift) { - case 0: - fdcl = filt8_dcl0; - fdcr = filt8_dcr0; - fdclh = filt8_dcl0_h; - fdcrh = filt8_dcr0_h; - break; - - case 1: - fdcl = filt8_dcl1; - fdcr = filt8_dcr1; - fdclh = filt8_dcl1_h; - fdcrh = filt8_dcr1_h; - break; - - default: -#ifdef DEBUG_CH - if (debug_ch_est) - fclose(debug_ch_est); - -#endif - return(-1); - break; - } - //------------------generate DMRS------------------// if(pusch_pdu->ul_dmrs_scrambling_id != gNB->pusch_gold_init[pusch_pdu->scid]) { @@ -232,6 +207,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, } c16_t ch16= {.r=(int16_t)ch.r, .i=(int16_t)ch.i}; + *max_ch = max(*max_ch, max(abs(ch.r), abs(ch.i))); // Channel interpolation for (int k_line = 0; k_line <= 1; k_line++) { @@ -259,39 +235,6 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, } } - // check if PRB crosses DC and improve estimates around DC - if ((bwp_start_subcarrier < symbolSize) && (bwp_start_subcarrier+nb_rb_pusch*12 >= symbolSize)) { - ul_ch = &ul_ch_estimates[p*gNB->frame_parms.nb_antennas_rx+aarx][ch_offset]; - const uint16_t idxDC = symbolSize - bwp_start_subcarrier; - re_offset = k0; - pil = pilot + idxDC / 2 - 1; - ul_ch += idxDC - 2 ; - ul_ch = memset(ul_ch, 0, sizeof(*ul_ch)*5); - re_offset = (re_offset + idxDC - 2) % symbolSize; - const c16_t ch=c16mulShift(*pil, - rxdataF[soffset+nushift+re_offset], - 15); - - // for proper alignment of SIMD vectors - if((gNB->frame_parms.N_RB_UL&1)==0) { - c16multaddVectRealComplex(fdcl, &ch, ul_ch-2, 8); - pil += 2; - re_offset = (re_offset+4) % symbolSize; - const c16_t ch_tmp=c16mulShift(*pil, - rxdataF[nushift+re_offset], - 15); - c16multaddVectRealComplex(fdcr, &ch_tmp, ul_ch-2, 8); - } else { - c16multaddVectRealComplex(fdclh, &ch, ul_ch, 8); - pil += 2; - re_offset = (re_offset+4) % symbolSize; - const c16_t ch_tmp=c16mulShift(*pil, - rxdataF[soffset+nushift+re_offset], - 15); - c16multaddVectRealComplex(fdcrh, &ch_tmp, ul_ch, 8); - } - } - #ifdef DEBUG_PUSCH ul_ch = &ul_ch_estimates[p*gNB->frame_parms.nb_antennas_rx+aarx][ch_offset]; @@ -304,8 +247,8 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, printf("\n"); } - #endif + } else if (pusch_pdu->dmrs_config_type == pusch_dmrs_type2 && chest_freq == 0) { //pusch_dmrs_type2 |p_r,p_l,d,d,d,d,p_r,p_l,d,d,d,d| LOG_D(PHY,"PUSCH estimation DMRS type 2, Freq-domain interpolation"); c16_t *pil = pilot; @@ -332,6 +275,8 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, multadd_real_four_symbols_vector_complex_scalar(filt8_ml2, &ch_l, ul_ch); + *max_ch = max(*max_ch, max(abs(ch_l.r), abs(ch_l.i))); + re_offset = (re_offset+5)%symbolSize; ch_r=c16mulShift(*pil, rxdataF[soffset+nushift+re_offset], @@ -339,6 +284,8 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, multadd_real_four_symbols_vector_complex_scalar(filt8_mr2, &ch_r, ul_ch); + *max_ch = max(*max_ch, max(abs(ch_r.r), abs(ch_r.i))); + //for (int re_idx = 0; re_idx < 8; re_idx += 2) //printf("ul_ch = %d + j*%d\n", ul_ch[re_idx], ul_ch[re_idx+1]); ul_ch += 4; @@ -391,6 +338,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, for (int pilot_cnt=6; pilot_cnt<6*(nb_rb_pusch-1); pilot_cnt += 6) { ch=c32x16cumulVectVectWithSteps(pilot, &pil_offset, 1, rxF, &re_offset, 2, symbolSize, 6); + *max_ch = max(*max_ch, max(abs(ch.r), abs(ch.i))); #if NO_INTERP for (c16_t *end=ul_ch+12; ul_chofdm_symbol_size*2)]); rxF_ext_index +=2; } - + ul_ch0_ext[ul_ch0_ext_index] = ul_ch0[ul_ch0_index]; ul_ch0_ext_index++; @@ -402,41 +402,42 @@ void nr_ulsch_scale_channel(int **ul_ch_estimates_ext, uint8_t is_dmrs_symbol, uint32_t len, uint8_t nrOfLayers, - unsigned short nb_rb) + unsigned short nb_rb, + int shift_ch_ext) { #if defined(__x86_64__)||defined(__i386__) - short rb, ch_amp; - unsigned char aarx,aatx; - __m128i *ul_ch128, ch_amp128; - - uint32_t nb_rb_0 = len/12 + ((len%12)?1:0); - // Determine scaling amplitude based the symbol + int b = 3; + short ch_amp = 1024 * 8; + if (shift_ch_ext > 3) { + b = 0; + ch_amp >>= (shift_ch_ext - 3); + if (ch_amp == 0) { + ch_amp = 1; + } + } else { + b -= shift_ch_ext; + } + __m128i ch_amp128 = _mm_set1_epi16(ch_amp); // Q3.13 + LOG_D(PHY, "Scaling PUSCH Chest in OFDM symbol %d by %d, pilots %d nb_rb %d NCP %d symbol %d\n", symbol, ch_amp, is_dmrs_symbol, nb_rb, frame_parms->Ncp, symbol); - ch_amp = 1024*8; - - LOG_D(PHY,"Scaling PUSCH Chest in OFDM symbol %d by %d, pilots %d nb_rb %d NCP %d symbol %d\n", symbol, ch_amp, is_dmrs_symbol, nb_rb, frame_parms->Ncp, symbol); - // printf("Scaling PUSCH Chest in OFDM symbol %d by %d\n",symbol_mod,ch_amp); - - ch_amp128 = _mm_set1_epi16(ch_amp); // Q3.13 - - int off = ((nb_rb&1) == 1)? 4:0; - - for (aatx = 0; aatx < nrOfLayers; aatx++) { - for (aarx=0; aarx < frame_parms->nb_antennas_rx; aarx++) { - ul_ch128 = (__m128i *)&ul_ch_estimates_ext[aatx*frame_parms->nb_antennas_rx+aarx][symbol*(off+(nb_rb*NR_NB_SC_PER_RB))]; - for (rb=0;rb < nb_rb_0;rb++) { + uint32_t nb_rb_0 = len / 12 + ((len % 12) ? 1 : 0); + int off = ((nb_rb & 1) == 1) ? 4 : 0; + for (int aatx = 0; aatx < nrOfLayers; aatx++) { + for (int aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++) { + __m128i *ul_ch128 = (__m128i *)&ul_ch_estimates_ext[aatx * frame_parms->nb_antennas_rx + aarx][symbol * (off + (nb_rb * NR_NB_SC_PER_RB))]; + for (int rb = 0; rb < nb_rb_0; rb++) { ul_ch128[0] = _mm_mulhi_epi16(ul_ch128[0], ch_amp128); - ul_ch128[0] = _mm_slli_epi16(ul_ch128[0], 3); + ul_ch128[0] = _mm_slli_epi16(ul_ch128[0], b); ul_ch128[1] = _mm_mulhi_epi16(ul_ch128[1], ch_amp128); - ul_ch128[1] = _mm_slli_epi16(ul_ch128[1], 3); + ul_ch128[1] = _mm_slli_epi16(ul_ch128[1], b); ul_ch128[2] = _mm_mulhi_epi16(ul_ch128[2], ch_amp128); - ul_ch128[2] = _mm_slli_epi16(ul_ch128[2], 3); - ul_ch128+=3; + ul_ch128[2] = _mm_slli_epi16(ul_ch128[2], b); + ul_ch128 += 3; } } } @@ -1902,6 +1903,7 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB, //--------------------- Channel estimation --------------------- //---------------------------------------------------------- start_meas(&gNB->ulsch_channel_estimation_stats); + int max_ch = 0; for(uint8_t symbol = rel15_ul->start_symbol_index; symbol < (rel15_ul->start_symbol_index + rel15_ul->nr_of_symbols); symbol++) { uint8_t dmrs_symbol_flag = (rel15_ul->ul_dmrs_symb_pos >> symbol) & 0x01; LOG_D(PHY, "symbol %d, dmrs_symbol_flag :%d\n", symbol, dmrs_symbol_flag); @@ -1918,7 +1920,8 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB, symbol, ulsch_id, bwp_start_subcarrier, - rel15_ul); + rel15_ul, + &max_ch); } nr_gnb_measurements(gNB, ulsch_id, harq_pid, symbol,rel15_ul->nrOfLayers); @@ -1960,6 +1963,7 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB, int off = ((rel15_ul->rb_size&1) == 1)? 4:0; uint32_t rxdataF_ext_offset = 0; + uint8_t shift_ch_ext = rel15_ul->nrOfLayers > 1 ? log2_approx(max_ch >> 11) : 0; uint8_t ad_shift = 1 + log2_approx(frame_parms->nb_antennas_rx >> 2) + (rel15_ul->nrOfLayers == 2); for(uint8_t symbol = rel15_ul->start_symbol_index; symbol < (rel15_ul->start_symbol_index + rel15_ul->nr_of_symbols); symbol++) { @@ -2005,13 +2009,14 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB, //--------------------- Channel Scaling -------------------- //---------------------------------------------------------- nr_ulsch_scale_channel(gNB->pusch_vars[ulsch_id]->ul_ch_estimates_ext, - frame_parms, - gNB->ulsch[ulsch_id], - symbol, - dmrs_symbol_flag, - nb_re_pusch, - rel15_ul->nrOfLayers, - rel15_ul->rb_size); + frame_parms, + gNB->ulsch[ulsch_id], + symbol, + dmrs_symbol_flag, + nb_re_pusch, + rel15_ul->nrOfLayers, + rel15_ul->rb_size, + shift_ch_ext); if (gNB->pusch_vars[ulsch_id]->cl_done==0) { nr_ulsch_channel_level(gNB->pusch_vars[ulsch_id]->ul_ch_estimates_ext, From eca08df8577a4430bbb24b74c329f92700828803 Mon Sep 17 00:00:00 2001 From: Dorovskikh Date: Thu, 9 Feb 2023 16:09:50 +0000 Subject: [PATCH 11/36] 5G UE IMEISV 16 digits reading 5G UE IMEISV from config file Signed-off-by: Dorovskikh --- openair3/NAS/COMMON/IES/FGSMobileIdentity.c | 19 ++++++++++-- openair3/NAS/COMMON/IES/FGSMobileIdentity.h | 22 ++++++++++++- openair3/NAS/NR_UE/nr_nas_msg_sim.c | 34 +++++++++++++++++---- openair3/UICC/usim_interface.c | 28 +++++++++++++++-- openair3/UICC/usim_interface.h | 2 ++ 5 files changed, 92 insertions(+), 13 deletions(-) diff --git a/openair3/NAS/COMMON/IES/FGSMobileIdentity.c b/openair3/NAS/COMMON/IES/FGSMobileIdentity.c index 5f920105f9..3bdddc3619 100644 --- a/openair3/NAS/COMMON/IES/FGSMobileIdentity.c +++ b/openair3/NAS/COMMON/IES/FGSMobileIdentity.c @@ -235,10 +235,23 @@ static int encode_suci_5gs_mobile_identity(Suci5GSMobileIdentity_t *suci, uint8_ static int encode_imeisv_5gs_mobile_identity(Imeisv5GSMobileIdentity_t *imeisv, uint8_t *buffer) { uint32_t encoded = 0; - *(buffer + encoded) = 0x00 | (imeisv->digit1 << 4) | (imeisv->oddeven << 3) | (imeisv->typeofidentity); + *(buffer + encoded) = 0x00 | (imeisv->digittac01 << 4) | (imeisv->oddeven << 3) | (imeisv->typeofidentity); encoded++; - - *(buffer + encoded) = 0x00 | (imeisv->digitp1 << 4) | (imeisv->digitp); + *(buffer + encoded) = 0x00 | (imeisv->digittac03 << 4) | (imeisv->digittac02); + encoded++; + *(buffer + encoded) = 0x00 | (imeisv->digittac05 << 4) | (imeisv->digittac04); + encoded++; + *(buffer + encoded) = 0x00 | (imeisv->digittac07 << 4) | (imeisv->digittac06); + encoded++; + *(buffer + encoded) = 0x00 | (imeisv->digit09 << 4) | (imeisv->digittac08); + encoded++; + *(buffer + encoded) = 0x00 | (imeisv->digit11 << 4) | (imeisv->digit10); + encoded++; + *(buffer + encoded) = 0x00 | (imeisv->digit13 << 4) | (imeisv->digit12); + encoded++; + *(buffer + encoded) = 0x00 | (imeisv->digitsv1 << 4) | (imeisv->digit14); + encoded++; + *(buffer + encoded) = 0x00 | (imeisv->spare << 4) | (imeisv->digitsv2); encoded++; return encoded; diff --git a/openair3/NAS/COMMON/IES/FGSMobileIdentity.h b/openair3/NAS/COMMON/IES/FGSMobileIdentity.h index 7968bc3300..82d943fd19 100644 --- a/openair3/NAS/COMMON/IES/FGSMobileIdentity.h +++ b/openair3/NAS/COMMON/IES/FGSMobileIdentity.h @@ -92,7 +92,27 @@ typedef struct { uint8_t digitp:4; } Imei5GSMobileIdentity_t; -typedef Imei5GSMobileIdentity_t Imeisv5GSMobileIdentity_t; +typedef struct { + uint8_t digittac01:4; + uint8_t oddeven:1; + uint8_t typeofidentity:3; + uint8_t digittac02:4; + uint8_t digittac03:4; + uint8_t digittac04:4; + uint8_t digittac05:4; + uint8_t digittac06:4; + uint8_t digittac07:4; + uint8_t digittac08:4; + uint8_t digit09:4; + uint8_t digit10:4; + uint8_t digit11:4; + uint8_t digit12:4; + uint8_t digit13:4; + uint8_t digit14:4; + uint8_t digitsv1:4; + uint8_t digitsv2:4; + uint8_t spare:4; +} Imeisv5GSMobileIdentity_t; typedef struct { diff --git a/openair3/NAS/NR_UE/nr_nas_msg_sim.c b/openair3/NAS/NR_UE/nr_nas_msg_sim.c index 8a600e0cf9..47d84516bf 100644 --- a/openair3/NAS/NR_UE/nr_nas_msg_sim.c +++ b/openair3/NAS/NR_UE/nr_nas_msg_sim.c @@ -25,6 +25,8 @@ * \email yoshio.inoue@fujitsu.com,masayuki.harada@fujitsu.com * \date 2020 * \version 0.1 + * + * 2023.01.27 Vladimir Dorovskikh 16 digits IMEISV */ @@ -523,6 +525,31 @@ int nas_itti_kgnb_refresh_req(const uint8_t kgnb[32], int instance) { return itti_send_msg_to_task(TASK_RRC_NRUE, instance, message_p); } +static int addImeisv(int Mod_id,MM_msg *mm_msg) +{ + int i=0; + mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.typeofidentity = FGS_MOBILE_IDENTITY_IMEISV; + mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.digittac01 = getImeisvDigit(Mod_id,i++); + mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.digittac02 = getImeisvDigit(Mod_id,i++); + mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.digittac03 = getImeisvDigit(Mod_id,i++); + mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.digittac04 = getImeisvDigit(Mod_id,i++); + mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.digittac05 = getImeisvDigit(Mod_id,i++); + mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.digittac06 = getImeisvDigit(Mod_id,i++); + mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.digittac07 = getImeisvDigit(Mod_id,i++); + mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.digittac08 = getImeisvDigit(Mod_id,i++); + mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.digit09 = getImeisvDigit(Mod_id,i++); + mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.digit10 = getImeisvDigit(Mod_id,i++); + mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.digit11 = getImeisvDigit(Mod_id,i++); + mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.digit12 = getImeisvDigit(Mod_id,i++); + mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.digit13 = getImeisvDigit(Mod_id,i++); + mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.digit14 = getImeisvDigit(Mod_id,i++); + mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.digitsv1 = getImeisvDigit(Mod_id,i++); + mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.digitsv2 = getImeisvDigit(Mod_id,i++); + mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.spare = 0x0f; + mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.oddeven = 1; + return 19; +} + static void generateSecurityModeComplete(int Mod_id,as_nas_info_t *initialNasMsg) { int size = sizeof(mm_msg_header_t); @@ -552,12 +579,7 @@ static void generateSecurityModeComplete(int Mod_id,as_nas_info_t *initialNasMsg mm_msg->fgs_security_mode_complete.messagetype = FGS_SECURITY_MODE_COMPLETE; size += 1; - mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.typeofidentity = FGS_MOBILE_IDENTITY_IMEISV; - mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.digit1 = 1; - mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.digitp1 = 1; - mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.digitp = 1; - mm_msg->fgs_security_mode_complete.fgsmobileidentity.imeisv.oddeven = 0; - size += 5; + size += addImeisv(Mod_id, mm_msg); mm_msg->fgs_security_mode_complete.fgsnasmessagecontainer.nasmessagecontainercontents.value = registration_request_buf; mm_msg->fgs_security_mode_complete.fgsnasmessagecontainer.nasmessagecontainercontents.length = registration_request_len; diff --git a/openair3/UICC/usim_interface.c b/openair3/UICC/usim_interface.c index 78a3f1ee0a..36285ee468 100644 --- a/openair3/UICC/usim_interface.c +++ b/openair3/UICC/usim_interface.c @@ -27,10 +27,12 @@ extern uint16_t NB_UE_INST; #define UICC_SECTION "uicc" +#define IMEISV_STR_MAX_LENGTH 16 #define UICC_CONFIG_HELP_OPTIONS " list of comma separated options to interface a simulated (real UICC to be developped). Available options: \n"\ " imsi: user imsi\n"\ " key: cyphering key\n"\ - " opc: cyphering OPc\n" + " opc: cyphering OPc\n"\ + " imiesv: string with IMEISV value\n" /*-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ /* configuration parameters for the rfsimulator device */ /* optname helpstr paramflags XXXptr defXXXval type numelt */ @@ -45,6 +47,7 @@ extern uint16_t NB_UE_INST; {"dnn", "UE dnn (apn)\n", 0, strptr:&uicc->dnnStr, defstrval:"oai", TYPE_STRING, 0 }, \ {"nssai_sst", "UE nssai\n", 0, iptr:&uicc->nssai_sst, defintval:1, TYPE_INT, 0 }, \ {"nssai_sd", "UE nssai\n", 0, iptr:&uicc->nssai_sd, defintval:0xffffff, TYPE_INT, 0 }, \ + {"imeisv", "IMEISV\n", 0, strptr:&uicc->imeisvStr, defstrval:"6754567890123413", TYPE_STRING, 0 }, \ }; static uicc_t** uiccArray=NULL; @@ -74,8 +77,8 @@ uicc_t *init_uicc(char *sectionName) { int ret = config_get( uicc_params,sizeof(uicc_params)/sizeof(paramdef_t),sectionName); AssertFatal(ret >= 0, "configuration couldn't be performed for uicc name: %s", sectionName); LOG_I(SIM, - "UICC simulation: IMSI=%s, Ki=%s, OPc=%s, DNN=%s, SST=0x%02x, SD=0x%06x\n", - uicc->imsiStr, uicc->keyStr, uicc->opcStr, + "UICC simulation: IMSI=%s, IMEISV=%s, Ki=%s, OPc=%s, DNN=%s, SST=0x%02x, SD=0x%06x\n", + uicc->imsiStr, uicc->imeisvStr, uicc->keyStr, uicc->opcStr, uicc->dnnStr, uicc->nssai_sst, uicc->nssai_sd); to_hex(uicc->keyStr,uicc->key, sizeof(uicc->key) ); to_hex(uicc->opcStr,uicc->opc, sizeof(uicc->opc) ); @@ -112,3 +115,22 @@ uicc_t * checkUicc(int Mod_id) { } return (uicc_t*) uiccArray[Mod_id]; } + +uint8_t getImeisvDigit(int Mod_id,uint8_t i) +{ + uicc_t * uicc=checkUicc(Mod_id); + uint8_t r = 0; + uint8_t l = strlen(uicc->imeisvStr); + if (l > IMEISV_STR_MAX_LENGTH) { + l=IMEISV_STR_MAX_LENGTH; + } + if((uicc->imeisvStr!=NULL) && (iimeisvStr[i]; + if (isdigit(c)) + { + r=c-'0'; + } + } + return (0x0f & r); +} \ No newline at end of file diff --git a/openair3/UICC/usim_interface.h b/openair3/UICC/usim_interface.h index eb32a6bfc1..4c779f5a7f 100644 --- a/openair3/UICC/usim_interface.h +++ b/openair3/UICC/usim_interface.h @@ -45,6 +45,7 @@ So, RES can be either milenage res, or received response, so hash of milenage re typedef struct { char *imsiStr; + char *imeisvStr; char *keyStr; char *opcStr; char *amfStr; @@ -73,4 +74,5 @@ uicc_t *checkUicc(int Mod_id); uicc_t *init_uicc(char *sectionName); void uicc_milenage_generate(uint8_t * autn, uicc_t *uicc); uicc_t * checkUicc(int Mod_id); +uint8_t getImeisvDigit(int Mod_id,uint8_t i); #endif From 801dc4cc6c683895ede60f32f99db67df7a93941 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Mon, 13 Feb 2023 11:07:17 +0100 Subject: [PATCH 12/36] fix(ci): fdqn is no longer an option for OAI-CN5G launch script Signed-off-by: Raphael Defosseux --- ci-scripts/epc.py | 8 ++++---- ci-scripts/xml_files/sa_cn5g_asue_closure.xml | 2 +- ci-scripts/xml_files/sa_cn5g_asue_start.xml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ci-scripts/epc.py b/ci-scripts/epc.py index 867236f97e..64074fdd6a 100644 --- a/ci-scripts/epc.py +++ b/ci-scripts/epc.py @@ -66,8 +66,8 @@ class EPCManagement(): self.mmeConfFile = 'mme.conf' self.yamlPath = '' self.isMagmaUsed = False - self.cfgDeploy = '--type start-mini --fqdn yes --scenario 1 --capture /tmp/oai-cn5g-v1.5.pcap' #from xml, 'mini' is default normal for docker-network.py - self.cfgUnDeploy = '--type stop-mini --fqdn yes --scenario 1' #from xml, 'mini' is default normal for docker-network.py + self.cfgDeploy = '--type start-mini --scenario 1 --capture /tmp/oai-cn5g-v1.5.pcap' #from xml, 'mini' is default normal for docker-network.py + self.cfgUnDeploy = '--type stop-mini --scenario 1' #from xml, 'mini' is default normal for docker-network.py #----------------------------------------------------------- @@ -259,12 +259,12 @@ class EPCManagement(): dFile = 'docker-compose-mini-nrf-asue.yaml' else: dFile = 'docker-compose-mini-nrf.yaml' - mySSH.command('docker-compose -p 5gcn -f ' + dFile + ' ps -a', '\$', 60) + mySSH.command('docker-compose -f ' + dFile + ' ps -a', '\$', 60) if mySSH.getBefore().count('Up (healthy)') != 6: logging.error('Not all container healthy') else: logging.debug('OK --> all containers are healthy') - mySSH.command('docker-compose -p 5gcn -f ' + dFile + ' config | grep --colour=never image', '\$', 10) + mySSH.command('docker-compose -f ' + dFile + ' config | grep --colour=never image', '\$', 10) listOfImages = mySSH.getBefore() for imageLine in listOfImages.split('\\r\\n'): res1 = re.search('image: (?P[a-zA-Z0-9\-/]+):(?P[a-zA-Z0-9\-]+)', str(imageLine)) diff --git a/ci-scripts/xml_files/sa_cn5g_asue_closure.xml b/ci-scripts/xml_files/sa_cn5g_asue_closure.xml index b856134e36..f0448d528d 100644 --- a/ci-scripts/xml_files/sa_cn5g_asue_closure.xml +++ b/ci-scripts/xml_files/sa_cn5g_asue_closure.xml @@ -32,7 +32,7 @@ Terminate_5GCN Terminate 5G Core - --type stop-mini-as-ue --fqdn yes --scenario 1 + --type stop-mini-as-ue --scenario 1 diff --git a/ci-scripts/xml_files/sa_cn5g_asue_start.xml b/ci-scripts/xml_files/sa_cn5g_asue_start.xml index 0b402f69f1..da2ae56114 100644 --- a/ci-scripts/xml_files/sa_cn5g_asue_start.xml +++ b/ci-scripts/xml_files/sa_cn5g_asue_start.xml @@ -33,7 +33,7 @@ Initialize_5GCN Initialize 5G Core - --type start-mini-as-ue --fqdn yes --scenario 1 --capture /tmp/oai-cn5g-v1.5.pcap + --type start-mini-as-ue --scenario 1 --capture /tmp/oai-cn5g-v1.5.pcap From a51cb67cb04d4015ae2d8938ba5fee130444f58d Mon Sep 17 00:00:00 2001 From: francescomani Date: Mon, 13 Feb 2023 11:41:13 +0100 Subject: [PATCH 13/36] fixes in limiting MCS and number of PRB while handling PHR --- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c index 4321d4f949..4fd2e8ac8c 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c @@ -1373,7 +1373,7 @@ void nr_ue_max_mcs_min_rb(int mu, int ph_limit, NR_sched_pusch_t *sched_pusch, N sched_pusch->dmrs_info.N_PRB_DMRS*sched_pusch->dmrs_info.num_dmrs_symb, deltaMCS); - while (ph_limit < tx_power && *Rb >= minRb) { + while (ph_limit < tx_power && *Rb > minRb) { (*Rb)--; tbs_bits = nr_compute_tbs(Qm, R, *Rb, sched_pusch->tda_info.nrOfSymbols, @@ -1390,7 +1390,7 @@ void nr_ue_max_mcs_min_rb(int mu, int ph_limit, NR_sched_pusch_t *sched_pusch, N deltaMCS); } - while (ph_limit < tx_power && *mcs > 6) { + while (ph_limit < tx_power && *mcs > 0) { (*mcs)--; update_ul_ue_R_Qm(*mcs, ul_bwp->mcs_table, ul_bwp->pusch_Config, &R, &Qm); tbs_bits = nr_compute_tbs(Qm, R, *Rb, From 8d91453b521a9a4439658e70b5117cda0dfd848e Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Tue, 14 Feb 2023 15:23:55 +0100 Subject: [PATCH 14/36] chore(ci): updating the new E1 scenario for CN5G v1.5 Signed-off-by: Raphael Defosseux --- .../5g_rfsimulator_e1/docker-compose.yaml | 124 ++++-------------- 1 file changed, 26 insertions(+), 98 deletions(-) diff --git a/ci-scripts/yaml_files/5g_rfsimulator_e1/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator_e1/docker-compose.yaml index 3d4689e912..7abfb7b915 100644 --- a/ci-scripts/yaml_files/5g_rfsimulator_e1/docker-compose.yaml +++ b/ci-scripts/yaml_files/5g_rfsimulator_e1/docker-compose.yaml @@ -2,28 +2,16 @@ version: '3.8' services: oai-nrf: container_name: "rfsim5g-oai-nrf" - image: oai-nrf:august-dev + image: oaisoftwarealliance/oai-nrf:v1.5.0 environment: - NRF_INTERFACE_NAME_FOR_SBI=eth0 - - NRF_INTERFACE_PORT_FOR_SBI=80 - - NRF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 - - NRF_API_VERSION=v1 - - INSTANCE=0 - - PID_DIRECTORY=/var/run + - TZ=Europe/Paris networks: core_net: ipv4_address: 192.168.71.130 - volumes: - - ../5g_rfsimulator/nrf-healthcheck.sh:/openair-nrf/bin/nrf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-nrf/bin/nrf-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 - mysql: container_name: "rfsim5g-mysql" - image: mysql:5.7 + image: mysql:8.0 volumes: - ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh @@ -37,18 +25,15 @@ services: test: /bin/bash -c "/tmp/mysql-healthcheck.sh" interval: 10s timeout: 5s - retries: 5 + retries: 30 networks: core_net: ipv4_address: 192.168.71.131 - oai-amf: container_name: "rfsim5g-oai-amf" - image: oai-amf:august-dev + image: oaisoftwarealliance/oai-amf:v1.5.0 environment: - TZ=Europe/paris - - INSTANCE=0 - - PID_DIRECTORY=/var/run - MCC=208 - MNC=99 - REGION_ID=128 @@ -64,134 +49,85 @@ services: - PLMN_SUPPORT_MCC=208 - PLMN_SUPPORT_MNC=99 - PLMN_SUPPORT_TAC=0x0001 + # Only one slice is defined (1, 0xFFFFFF). - SST_0=1 - - SD_0=0xffffff - - SST_1=1 - - SD_1=1 - AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0 + # One single SMF instance - SMF_INSTANCE_ID_0=1 - SMF_FQDN_0=oai-smf - - SMF_IPV4_ADDR_0=0.0.0.0 - - SMF_HTTP_VERSION_0=v1 + - SMF_IPV4_ADDR_0=192.168.71.133 - SELECTED_0=true - - SMF_INSTANCE_ID_1=2 - - SMF_FQDN_1=oai-smf - - SMF_IPV4_ADDR_1=0.0.0.0 - - SMF_HTTP_VERSION_1=v1 - - SELECTED_1=false + # mysql definition in AMF is mandatory in mini deployment. - MYSQL_SERVER=192.168.71.131 - MYSQL_USER=root - MYSQL_PASS=linux - MYSQL_DB=oai_db - - OPERATOR_KEY=c42449363bbad02b66d16bc975d77cc1 + # NF registration - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 + - NRF_FQDN=oai-nrf - NF_REGISTRATION=yes - SMF_SELECTION=yes - USE_FQDN_DNS=yes - - NRF_API_VERSION=v1 - - NRF_FQDN=oai-nrf - - EXTERNAL_AUSF=no - - AUSF_IPV4_ADDRESS=0.0.0.0 - - AUSF_PORT=80 - - AUSF_API_VERSION=v1 - - AUSF_FQDN=localhost + - USE_HTTP2=no depends_on: - oai-nrf - mysql - volumes: - - ../5g_rfsimulator/amf-healthcheck.sh:/openair-amf/bin/amf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-amf/bin/amf-healthcheck.sh" - interval: 10s - timeout: 15s - retries: 5 networks: core_net: ipv4_address: 192.168.71.132 - oai-smf: container_name: "rfsim5g-oai-smf" - image: oai-smf:august-dev + image: oaisoftwarealliance/oai-smf:v1.5.0 environment: - TZ=Europe/Paris - - INSTANCE=0 - - PID_DIRECTORY=/var/run - SMF_INTERFACE_NAME_FOR_N4=eth0 - SMF_INTERFACE_NAME_FOR_SBI=eth0 - - SMF_INTERFACE_PORT_FOR_SBI=80 - - SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 - - SMF_API_VERSION=v1 - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 - - AMF_IPV4_ADDRESS=0.0.0.0 - - AMF_PORT=80 - - AMF_API_VERSION=v1 + - AMF_IPV4_ADDRESS=192.168.71.132 - AMF_FQDN=oai-amf - - UDM_IPV4_ADDRESS=127.0.0.1 - - UDM_PORT=80 - - UDM_API_VERSION=v1 - - UDM_FQDN=localhost - UPF_IPV4_ADDRESS=192.168.71.134 - UPF_FQDN_0=oai-spgwu - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 - - NRF_API_VERSION=v1 - NRF_FQDN=oai-nrf - REGISTER_NRF=yes - DISCOVER_UPF=yes - USE_FQDN_DNS=yes + - USE_LOCAL_SUBSCRIPTION_INFO=yes + - UE_MTU=1500 + # Only one slice is defined (1, 0xFFFFFF) - DNN_NI0=oai - TYPE0=IPv4 - DNN_RANGE0=12.1.1.2 - 12.1.1.127 - NSSAI_SST0=1 - - NSSAI_SD0=0xFFFFFF - SESSION_AMBR_UL0=200Mbps - SESSION_AMBR_DL0=400Mbps - - DNN_NI2=oai.ipv4 + - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1 + - ENABLE_USAGE_REPORTING=no depends_on: - oai-nrf - oai-amf - volumes: - - ../5g_rfsimulator/smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 networks: core_net: ipv4_address: 192.168.71.133 - oai-spgwu: container_name: "rfsim5g-oai-spgwu" - image: oai-spgwu-tiny:august-dev + image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 environment: - TZ=Europe/Paris - - PID_DIRECTORY=/var/run - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 - SGW_INTERFACE_NAME_FOR_SX=eth0 - PGW_INTERFACE_NAME_FOR_SGI=eth0 - NETWORK_UE_NAT_OPTION=yes - NETWORK_UE_IP=12.1.1.0/24 - - SPGWC0_IP_ADDRESS=192.168.71.133 - - BYPASS_UL_PFCP_RULES=no - - MCC=208 - - MNC=99 - - MNC03=099 - - TAC=1 - - GTP_EXTENSION_HEADER_PRESENT=yes - - GW_ID=1 - - REALM=openairinterface.org - ENABLE_5G_FEATURES=yes - REGISTER_NRF=yes - USE_FQDN_NRF=yes - UPF_FQDN_5G=oai-spgwu - NRF_IPV4_ADDRESS=192.168.71.130 - - NRF_PORT=80 - - NRF_API_VERSION=v1 - NRF_FQDN=oai-nrf + # Only one slice is defined (1, 0xFFFFFF) - NSSAI_SST_0=1 - NSSAI_SD_0=0xffffff - DNN_0=oai @@ -204,13 +140,6 @@ services: cap_drop: - ALL privileged: true - volumes: - - ../5g_rfsimulator/spgwu-healthcheck.sh:/openair-spgwu-tiny/bin/spgwu-healthcheck.sh - healthcheck: - test: /bin/bash -c "/openair-spgwu-tiny/bin/spgwu-healthcheck.sh" - interval: 10s - timeout: 5s - retries: 5 networks: core_net: ipv4_address: 192.168.71.134 @@ -218,11 +147,10 @@ services: ipv4_address: 192.168.73.134 oai-ext-dn: - image: ubuntu:bionic privileged: true container_name: rfsim5g-oai-ext-dn + image: oaisoftwarealliance/trf-gen-cn5g:latest entrypoint: /bin/bash -c \ - "apt update; apt install -y procps iptables iproute2 iperf iputils-ping;"\ "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "ip route add 12.1.1.0/24 via 192.168.73.134 dev eth0; sleep infinity" depends_on: @@ -237,7 +165,7 @@ services: retries: 5 oai-cucp: - image: oai-gnb:develop + image: oaisoftwarealliance/oai-gnb:develop privileged: true container_name: rfsim5g-oai-cucp environment: @@ -259,7 +187,7 @@ services: retries: 5 oai-cuup: - image: oai-nr-cuup:develop + image: oaisoftwarealliance/oai-nr-cuup:develop privileged: true container_name: rfsim5g-oai-cuup environment: @@ -282,7 +210,7 @@ services: retries: 5 oai-du: - image: oai-gnb:develop + image: oaisoftwarealliance/oai-gnb:develop privileged: true container_name: rfsim5g-oai-du environment: @@ -301,7 +229,7 @@ services: retries: 5 oai-nr-ue: - image: oai-nr-ue:develop + image: oaisoftwarealliance/oai-nr-ue:develop privileged: true container_name: rfsim5g-oai-nr-ue environment: From 31d6a5e9bdcb5a4962549ceb771c49b076dff3a4 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Tue, 14 Feb 2023 15:25:05 +0100 Subject: [PATCH 15/36] chore(ci): pushing oai-nr-cuup new image to docker-hub Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-push-registry | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci-scripts/Jenkinsfile-push-registry b/ci-scripts/Jenkinsfile-push-registry index 273b3876be..d05c167f6f 100644 --- a/ci-scripts/Jenkinsfile-push-registry +++ b/ci-scripts/Jenkinsfile-push-registry @@ -77,7 +77,7 @@ pipeline { withCredentials([ [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.DH_Credentials}", usernameVariable: 'DH_Username', passwordVariable: 'DH_Password'] ]) { - def listOfImages = ["oai-enb", "oai-gnb", "oai-lte-ue", "oai-nr-ue"] + def listOfImages = ["oai-enb", "oai-gnb", "oai-lte-ue", "oai-nr-ue", "oai-nr-cuup"] // Logging in on both registries sh "docker login -u ${DH_Username} -p ${DH_Password} > /dev/null 2>&1" sh "docker login -u oaicicd -p oaicicd porcepix.sboai.cs.eurecom.fr > /dev/null 2>&1" From ef1d5079f2f0e39157ce8ef45960b9a913db5a66 Mon Sep 17 00:00:00 2001 From: laurent Date: Tue, 15 Nov 2022 09:46:46 +0100 Subject: [PATCH 16/36] stats display with 5G flag --- executables/lte-enb.c | 91 +++++++++----------- executables/lte-ru.c | 23 +++--- executables/lte-softmodem.c | 8 -- executables/lte-softmodem.h | 8 -- openair1/PHY/LTE_TRANSPORT/dlsch_coding.c | 4 - openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c | 39 ++++----- openair1/SCHED/phy_procedures_lte_eNb.c | 92 +++++---------------- openair1/SIMULATION/LTE_PHY/dlsim.c | 7 -- openair1/SIMULATION/LTE_PHY/mbmssim.c | 8 -- openair1/SIMULATION/LTE_PHY/ulsim.c | 17 ++-- openair2/LAYER2/MAC/mac_extern.h | 1 + openair2/LAYER2/MAC/mac_proto.h | 4 - openair2/LAYER2/MAC/main.c | 71 +++++++++------- 13 files changed, 137 insertions(+), 236 deletions(-) diff --git a/executables/lte-enb.c b/executables/lte-enb.c index 67189815cb..b9f0816764 100644 --- a/executables/lte-enb.c +++ b/executables/lte-enb.c @@ -313,7 +313,6 @@ static inline int rxtx(PHY_VARS_eNB *eNB, return(0); } - static void *L1_thread_tx(void *param) { L1_proc_t *eNB_proc = (L1_proc_t *)param; L1_rxtx_proc_t *proc = &eNB_proc->L1_proc_tx; @@ -811,35 +810,19 @@ static void *eNB_thread_prach_br( void *param ) { return &eNB_thread_prach_status; } - -extern void init_td_thread(PHY_VARS_eNB *); -extern void init_te_thread(PHY_VARS_eNB *); -extern void kill_td_thread(PHY_VARS_eNB *); -extern void kill_te_thread(PHY_VARS_eNB *); - - +static void print_opp_meas(PHY_VARS_eNB *eNB); +static void reset_opp_meas(PHY_VARS_eNB *eNB); static void *process_stats_thread(void *param) { PHY_VARS_eNB *eNB = (PHY_VARS_eNB *)param; wait_sync("process_stats_thread"); - + reset_opp_meas(eNB); while (!oai_exit) { sleep(1); - - if (opp_enabled == 1) { - if ( eNB->ulsch_decoding_stats.trials>0) - print_meas(&eNB->ulsch_decoding_stats,"ulsch_decoding",NULL,NULL); - - if (eNB->dlsch_encoding_stats.trials >0) { - print_meas(&eNB->dlsch_turbo_encoding_preperation_stats,"dlsch_coding_crc",NULL,NULL); - print_meas(&eNB->dlsch_turbo_encoding_segmentation_stats,"dlsch_segmentation",NULL,NULL); - print_meas(&eNB->dlsch_encoding_stats,"dlsch_encoding",NULL,NULL); - print_meas(&eNB->dlsch_turbo_encoding_stats,"turbo_encoding",NULL,NULL); - print_meas(&eNB->dlsch_interleaving_stats,"turbo_interleaving",NULL,NULL); - print_meas(&eNB->dlsch_rate_matching_stats,"turbo_rate_matching",NULL,NULL); - } - - print_meas(&eNB->dlsch_modulation_stats,"dlsch_modulation",NULL,NULL); - } + print_opp_meas(eNB); + if (RC.mac) + lte_dump_mac_stats(RC.mac[0], stdout); + if (time(NULL) % 10) + reset_opp_meas(eNB); } return(NULL); @@ -918,11 +901,6 @@ void init_eNB_proc(int inst) { pthread_cond_init( &proc->cond_prach_br, NULL); pthread_attr_init( &proc->attr_prach_br); - if(get_thread_worker_conf() == WORKER_ENABLE) { - init_te_thread(eNB); - init_td_thread(eNB); - } - LOG_I(PHY,"eNB->single_thread_flag:%d\n", eNB->single_thread_flag); if ((get_thread_parallel_conf() == PARALLEL_RU_L1_SPLIT) && NFAPI_MODE!=NFAPI_MODE_VNF) { @@ -954,8 +932,10 @@ void init_eNB_proc(int inst) { AssertFatal(proc->instance_cnt_prach == -1,"instance_cnt_prach = %d\n",proc->instance_cnt_prach); - if (opp_enabled == 1) pthread_create(&proc->process_stats_thread,NULL,process_stats_thread,(void *)eNB); - pthread_create(&proc->L1_stats_thread,NULL,L1_stats_thread,(void*)eNB); + if (opp_enabled == 1) + threadCreate(&proc->process_stats_thread, process_stats_thread, (void *)eNB, "opp stats", -1, sched_get_priority_min(SCHED_OAI)); + if (!IS_SOFTMODEM_NOSTATS_BIT) + threadCreate(&proc->L1_stats_thread, L1_stats_thread, (void *)eNB, "L1 stats", -1, sched_get_priority_min(SCHED_OAI)); } //for multiple CCs: setup master and slaves @@ -997,11 +977,6 @@ void kill_eNB_proc(int inst) { L1_proc = &proc->L1_proc; L1_proc_tx = &proc->L1_proc_tx; - if(get_thread_worker_conf() == WORKER_ENABLE) { - kill_td_thread(eNB); - kill_te_thread(eNB); - } - LOG_I(PHY, "Killing TX CC_id %d inst %d\n", CC_id, inst ); if ((get_thread_parallel_conf() == PARALLEL_RU_L1_SPLIT || get_thread_parallel_conf() == PARALLEL_RU_L1_TRX_SPLIT) && NFAPI_MODE!=NFAPI_MODE_VNF) { @@ -1060,30 +1035,43 @@ void kill_eNB_proc(int inst) { } } - -void reset_opp_meas(void) { - int sfn; +static void reset_opp_meas(PHY_VARS_eNB *eNB) +{ reset_meas(&softmodem_stats_mt); reset_meas(&softmodem_stats_hw); - - for (sfn=0; sfn < 10; sfn++) { - reset_meas(&softmodem_stats_rxtx_sf); - reset_meas(&softmodem_stats_rx_sf); - } + reset_meas(&softmodem_stats_rxtx_sf); + reset_meas(&softmodem_stats_rx_sf); + reset_meas(&eNB->ulsch_decoding_stats); + reset_meas(&eNB->dlsch_turbo_encoding_preperation_stats); + reset_meas(&eNB->dlsch_turbo_encoding_segmentation_stats); + reset_meas(&eNB->dlsch_encoding_stats); + reset_meas(&eNB->dlsch_turbo_encoding_stats); + reset_meas(&eNB->dlsch_interleaving_stats); + reset_meas(&eNB->dlsch_rate_matching_stats); + reset_meas(&eNB->dlsch_modulation_stats); } - -void print_opp_meas(void) { - int sfn=0; +static void print_opp_meas(PHY_VARS_eNB *eNB) +{ print_meas(&softmodem_stats_mt, "Main ENB Thread", NULL, NULL); print_meas(&softmodem_stats_hw, "HW Acquisation", NULL, NULL); - for (sfn=0; sfn < 10; sfn++) { print_meas(&softmodem_stats_rxtx_sf,"[eNB][total_phy_proc_rxtx]",NULL, NULL); print_meas(&softmodem_stats_rx_sf,"[eNB][total_phy_proc_rx]",NULL,NULL); - } -} + if (eNB->ulsch_decoding_stats.trials > 0) + print_meas(&eNB->ulsch_decoding_stats, "ulsch_decoding", NULL, NULL); + if (eNB->dlsch_encoding_stats.trials > 0) { + print_meas(&eNB->dlsch_turbo_encoding_preperation_stats, "dlsch_coding_crc", NULL, NULL); + print_meas(&eNB->dlsch_turbo_encoding_segmentation_stats, "dlsch_segmentation", NULL, NULL); + print_meas(&eNB->dlsch_encoding_stats, "dlsch_encoding", NULL, NULL); + print_meas(&eNB->dlsch_turbo_encoding_stats, "turbo_encoding", NULL, NULL); + print_meas(&eNB->dlsch_interleaving_stats, "turbo_interleaving", NULL, NULL); + print_meas(&eNB->dlsch_rate_matching_stats, "turbo_rate_matching", NULL, NULL); + } + + print_meas(&eNB->dlsch_modulation_stats, "dlsch_modulation", NULL, NULL); +} void free_transport(PHY_VARS_eNB *eNB) { for (int i=0; iprach_energy_counter = 0; } } - LOG_I(PHY,"[lte-softmodem.c] eNB structure allocated\n"); } diff --git a/executables/lte-ru.c b/executables/lte-ru.c index 80a4162f00..11468615d8 100644 --- a/executables/lte-ru.c +++ b/executables/lte-ru.c @@ -2335,17 +2335,18 @@ void init_RU_proc(RU_t *ru) { init_feptx_thread(ru, NULL); } - if (opp_enabled == 1) pthread_create(&ru->ru_stats_thread,NULL,ru_stats_thread,(void *)ru); -/* - if (ru->function == eNodeB_3GPP) { - usleep(10000); - LOG_I(PHY, "Signaling main thread that RU %d (is_slave %d,send_dmrs %d) is ready in state %s\n",ru->idx,ru->is_slave,ru->generate_dmrs_sync,ru_states[ru->state]); - AssertFatal((ret=pthread_mutex_lock(ru->ru_mutex))==0,"mutex_lock returns %d\n",ret); - *ru->ru_mask &= ~(1<idx); - pthread_cond_signal(ru->ru_cond); - AssertFatal((ret=pthread_mutex_unlock(ru->ru_mutex))==0,"mutex_unlock returns %d\n",ret); - } - */ + if (opp_enabled == 1) + pthread_create(&ru->ru_stats_thread, NULL, ru_stats_thread, (void *)ru); + /* + if (ru->function == eNodeB_3GPP) { + usleep(10000); + LOG_I(PHY, "Signaling main thread that RU %d (is_slave %d,send_dmrs %d) is ready in state %s\n",ru->idx,ru->is_slave,ru->generate_dmrs_sync,ru_states[ru->state]); + AssertFatal((ret=pthread_mutex_lock(ru->ru_mutex))==0,"mutex_lock returns %d\n",ret); + *ru->ru_mask &= ~(1<idx); + pthread_cond_signal(ru->ru_cond); + AssertFatal((ret=pthread_mutex_unlock(ru->ru_mutex))==0,"mutex_unlock returns %d\n",ret); + } + */ } diff --git a/executables/lte-softmodem.c b/executables/lte-softmodem.c index be5416c7fd..dfdf8fa6f4 100644 --- a/executables/lte-softmodem.c +++ b/executables/lte-softmodem.c @@ -156,10 +156,6 @@ void sendFs6Ulharq(enum pckType type, int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI * RU_t **RCconfig_RU(int nb_RU,int nb_L1_inst,PHY_VARS_eNB ***eNB,uint64_t *ru_mask,pthread_mutex_t *ru_mutex,pthread_cond_t *ru_cond); -extern void reset_opp_meas(void); -extern void print_opp_meas(void); - - RU_t **RCconfig_RU(int nb_RU,int nb_L1_inst,PHY_VARS_eNB ***eNB,uint64_t *ru_mask,pthread_mutex_t *ru_mutex,pthread_cond_t *ru_cond); int transmission_mode=1; @@ -452,10 +448,6 @@ int main ( int argc, char **argv ) set_taus_seed (0); printf("configuring for RAU/RRU\n"); - if (opp_enabled ==1) { - reset_opp_meas(); - } - cpuf=get_cpu_freq_GHz(); printf("ITTI init, useMME: %i\n",EPC_MODE_ENABLED); itti_init(TASK_MAX, tasks_info); diff --git a/executables/lte-softmodem.h b/executables/lte-softmodem.h index 7f347bbee5..e9fc35ed1a 100644 --- a/executables/lte-softmodem.h +++ b/executables/lte-softmodem.h @@ -179,14 +179,6 @@ extern void init_UE(int nb_inst, extern void init_thread(int sched_runtime, int sched_deadline, int sched_fifo, cpu_set_t *cpuset, char *name); -extern void reset_opp_meas(void); -extern void print_opp_meas(void); - -extern void init_td_thread(PHY_VARS_eNB *); -extern void init_te_thread(PHY_VARS_eNB *); -extern void kill_td_thread(PHY_VARS_eNB *); -extern void kill_te_thread(PHY_VARS_eNB *); - extern void init_ocm(void); extern void init_ue_devices(PHY_VARS_UE *); diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c index 8032a2f0ba..5099a63439 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c @@ -241,10 +241,6 @@ void clean_eNb_dlsch(LTE_eNB_DLSCH_t *dlsch) { } } -void *te_thread(void *param) { - return(NULL); -} - static void TPencode(void * arg) { turboEncode_t * rdata=(turboEncode_t *) arg; unsigned char harq_pid = rdata->harq_pid; diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c index 4168962046..dc59093983 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c @@ -248,6 +248,7 @@ void processULSegment(void * arg) { if(ulsch_harq->repetition_number == 1) { memset(ulsch_harq->pusch_rep_buffer[r],0,(sizeof(int32_t)*3*(6144+64))) ; // reset the buffer every new repetitions } + if(ulsch_harq->total_number_of_repetitions > 1) { if (ulsch_harq->rvidx==1) { LOG_E(PHY,"Adding HARQ data for segment: %d\n", r); @@ -267,28 +268,21 @@ void processULSegment(void * arg) { soft_bits+96, ulsch_harq->w[r]); stop_meas(&eNB->ulsch_deinterleaving_stats); - rdata->decodeIterations = rdata->function( soft_bits+96, - NULL, - rdata->decoded_bytes, - NULL, - rdata->Kr, - rdata->maxIterations, - rdata->nbSegments == 1 ? CRC24_A: CRC24_B, - rdata->Fbits, - &eNB->ulsch_tc_init_stats, - &eNB->ulsch_tc_alpha_stats, - &eNB->ulsch_tc_beta_stats, - &eNB->ulsch_tc_gamma_stats, - &eNB->ulsch_tc_ext_stats, - &eNB->ulsch_tc_intl1_stats, - &eNB->ulsch_tc_intl2_stats); - stop_meas(&eNB->ulsch_turbo_decoding_stats); - -} - -void *td_thread(void *param) { - - return(NULL); + rdata->decodeIterations = rdata->function(soft_bits + 96, + NULL, + rdata->decoded_bytes, + NULL, + rdata->Kr, + rdata->maxIterations, + rdata->nbSegments == 1 ? CRC24_A : CRC24_B, + rdata->Fbits, + &eNB->ulsch_tc_init_stats, + &eNB->ulsch_tc_alpha_stats, + &eNB->ulsch_tc_beta_stats, + &eNB->ulsch_tc_gamma_stats, + &eNB->ulsch_tc_ext_stats, + &eNB->ulsch_tc_intl1_stats, + &eNB->ulsch_tc_intl2_stats); } int ulsch_decoding_data(PHY_VARS_eNB *eNB, L1_rxtx_proc_t *proc, @@ -1097,6 +1091,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB, LOG_D(PHY,"frame %d subframe %d O_ACK:%d o_ACK[]=%d:%d:%d:%d\n",frame,subframe,ulsch_harq->O_ACK,ulsch_harq->o_ACK[0],ulsch_harq->o_ACK[1],ulsch_harq->o_ACK[2],ulsch_harq->o_ACK[3]); // Do ULSCH Decoding for data portion + start_meas(&eNB->ulsch_turbo_decoding_stats); ret = ulsch_decoding_data(eNB, proc, UE_id, harq_pid, llr8_flag); return(ret); } diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index 759162eda4..28e311e202 100644 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -1447,23 +1447,23 @@ void pusch_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) { rx_ulsch(eNB,proc, i); stop_meas(&eNB->ulsch_demodulation_stats); start_meas(&eNB->ulsch_decoding_stats); - ulsch_decoding(eNB,proc, - i, - 0, // control_only_flag - ulsch_harq->V_UL_DAI, - ulsch_harq->nb_rb>20 ? 1 : 0); - stop_meas(&eNB->ulsch_decoding_stats); -/* - int ulsch_id=-1; - for (ulsch_id=0;ulsch_idrnti == eNB->ulsch_stats[ulsch_id].rnti) break; - AssertFatal(ulsch_id>=0,"no ulsch_id found\n"); + ulsch_decoding(eNB, + proc, + i, + 0, // control_only_flag + ulsch_harq->V_UL_DAI, + ulsch_harq->nb_rb > 20 ? 1 : 0); + /* + int ulsch_id=-1; + for (ulsch_id=0;ulsch_idrnti == eNB->ulsch_stats[ulsch_id].rnti) break; + AssertFatal(ulsch_id>=0,"no ulsch_id found\n"); - if (eNB->ulsch_stats[ulsch_id].round_trials[0]>100) { - dump_ulsch(eNB,frame,subframe,i,ulsch_harq->round); - AssertFatal(1==0,"exiting\n"); - } -*/ + if (eNB->ulsch_stats[ulsch_id].round_trials[0]>100) { + dump_ulsch(eNB,frame,subframe,i,ulsch_harq->round); + AssertFatal(1==0,"exiting\n"); + } + */ } else if ((ulsch) && (ulsch->rnti>0) && @@ -1478,7 +1478,8 @@ void pusch_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) { LOG_W (PHY, "Removing stale ULSCH config for UE %x harq_pid %d (harq_mask is now 0x%2.2x)\n", ulsch->rnti, harq_pid, ulsch->harq_mask); } } // for (i=0; inbDecode; while (proc->nbDecode > 0) { notifiedFIFO_elt_t *req=pullTpool(proc->respDecode, proc->threadPool); if (req == NULL) @@ -1486,62 +1487,13 @@ void pusch_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) { postDecode(proc, req); delNotifiedFIFO_elt(req); } -} - -extern int oai_exit; - -extern void *td_thread (void *); - -void init_td_thread(PHY_VARS_eNB *eNB) { - /* - L1_proc_t *proc = &eNB->proc; - proc->tdp.eNB = eNB; - proc->instance_cnt_td = -1; - threadCreate(&proc->pthread_td, td_thread, (void *)&proc->tdp, "TD", -1, OAI_PRIORITY_RT); - */ -} - -void kill_td_thread(PHY_VARS_eNB *eNB) { - /* - L1_proc_t *proc = &eNB->proc; - proc->instance_cnt_td = 0; - pthread_cond_signal(&proc->cond_td); - pthread_join(proc->pthread_td, NULL); - pthread_mutex_destroy( &proc->mutex_td ); - pthread_cond_destroy( &proc->cond_td ); - */ -} - -extern void *te_thread (void *); - -void init_te_thread(PHY_VARS_eNB *eNB) { - /* - L1_proc_t *proc = &eNB->proc; - - for(int i=0; i<3 ; i++) { - proc->tep[i].eNB = eNB; - proc->tep[i].instance_cnt_te = -1; - LOG_I(PHY,"Creating te_thread %d\n",i); - char txt[128]; - sprintf(txt,"TE_%d", i); - threadCreate(&proc->tep[i].pthread_te, te_thread, (void *)&proc->tep[i], txt, -1, OAI_PRIORITY_RT); + if (decode) { + stop_meas(&eNB->ulsch_decoding_stats); + stop_meas(&eNB->ulsch_turbo_decoding_stats); } - */ } -void kill_te_thread(PHY_VARS_eNB *eNB) { - /* - L1_proc_t *proc = &eNB->proc; - - for(int i=0; i<3 ; i++) { - proc->tep[i].instance_cnt_te = 0; - pthread_cond_signal(&proc->tep[i].cond_te); - pthread_join(proc->tep[i].pthread_te, NULL); - pthread_mutex_destroy( &proc->tep[i].mutex_te); - pthread_cond_destroy( &proc->tep[i].cond_te); - } - */ -} +extern int oai_exit; void fill_rx_indication(PHY_VARS_eNB *eNB, int ULSCH_id, diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 3823fae4d7..e6bcfe4cc8 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -990,13 +990,6 @@ int main(int argc, char **argv) { eNB->mac_enabled=1; - if(get_thread_worker_conf() == WORKER_ENABLE) { - extern void init_td_thread(PHY_VARS_eNB *); - extern void init_te_thread(PHY_VARS_eNB *); - init_td_thread(eNB); - init_te_thread(eNB); - } - // callback functions required for phy_procedures_tx // eNB_id_i = UE->n_connected_eNB; printf("Setting mcs1 = %d\n",mcs1); diff --git a/openair1/SIMULATION/LTE_PHY/mbmssim.c b/openair1/SIMULATION/LTE_PHY/mbmssim.c index 390bf8c73f..33d9a58def 100644 --- a/openair1/SIMULATION/LTE_PHY/mbmssim.c +++ b/openair1/SIMULATION/LTE_PHY/mbmssim.c @@ -1109,14 +1109,6 @@ int main(int argc, char **argv) { eNB->frame_parms.Nid_cell_mbsfn=0; #endif - - if(get_thread_worker_conf() == WORKER_ENABLE) { - extern void init_td_thread(PHY_VARS_eNB *); - extern void init_te_thread(PHY_VARS_eNB *); - init_td_thread(eNB); - init_te_thread(eNB); - } - // callback functions required for phy_procedures_tx // eNB_id_i = UE->n_connected_eNB; printf("Setting mcs1 = %d\n",mcs1); diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c index 7c75c27378..b9228ca0d2 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsim.c +++ b/openair1/SIMULATION/LTE_PHY/ulsim.c @@ -744,9 +744,7 @@ int main(int argc, char **argv) { if(get_thread_worker_conf() == WORKER_ENABLE) { extern void init_fep_thread(RU_t *, pthread_attr_t *); - extern void init_td_thread(PHY_VARS_eNB *); - init_fep_thread(ru,NULL); - init_td_thread(eNB); + init_fep_thread(ru, NULL); } // Create transport channel structures for 2 transport blocks (MIMO) @@ -1379,13 +1377,12 @@ int main(int argc, char **argv) { printStatIndent2(&eNB->ulsch_deinterleaving_stats,"sub-block interleaving" ); printStatIndent2(&eNB->ulsch_demultiplexing_stats,"sub-block demultiplexing" ); printStatIndent2(&eNB->ulsch_rate_unmatching_stats,"sub-block rate-matching" ); - printf(" |__ turbo_decoder(%d bits), avg iterations: %.1f %.2f us (%d cycles, %d trials)\n", - eNB->ulsch[0]->harq_processes[harq_pid]->Cminus ? - eNB->ulsch[0]->harq_processes[harq_pid]->Kminus : - eNB->ulsch[0]->harq_processes[harq_pid]->Kplus, - eNB->ulsch_tc_intl1_stats.trials/(double)eNB->ulsch_tc_init_stats.trials, - (double)eNB->ulsch_turbo_decoding_stats.diff/eNB->ulsch_turbo_decoding_stats.trials*timeBase, - (int)((double)eNB->ulsch_turbo_decoding_stats.diff/eNB->ulsch_turbo_decoding_stats.trials), + printf(" |__ harqID: %d turbo_decoder(%d bits), avg iterations: %.1f %.2f us (%d cycles, %d trials)\n", + harq_pid, + eNB->ulsch[0]->harq_processes[harq_pid]->Cminus ? eNB->ulsch[0]->harq_processes[harq_pid]->Kminus : eNB->ulsch[0]->harq_processes[harq_pid]->Kplus, + eNB->ulsch_tc_intl1_stats.trials / (double)eNB->ulsch_tc_init_stats.trials, + (double)eNB->ulsch_turbo_decoding_stats.diff / eNB->ulsch_turbo_decoding_stats.trials * timeBase, + (int)((double)eNB->ulsch_turbo_decoding_stats.diff / eNB->ulsch_turbo_decoding_stats.trials), eNB->ulsch_turbo_decoding_stats.trials); printStatIndent3(&eNB->ulsch_tc_init_stats,"init"); printStatIndent3(&eNB->ulsch_tc_alpha_stats,"alpha"); diff --git a/openair2/LAYER2/MAC/mac_extern.h b/openair2/LAYER2/MAC/mac_extern.h index 3d6bba1550..085df928ca 100644 --- a/openair2/LAYER2/MAC/mac_extern.h +++ b/openair2/LAYER2/MAC/mac_extern.h @@ -56,6 +56,7 @@ extern eNB_UE_STATS pre_scd_eNB_UE_stats[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; extern mac_rlc_am_muilist_t rlc_am_mui; extern SCHEDULER_MODES global_scheduler_mode; +void lte_dump_mac_stats(eNB_MAC_INST *mac, FILE *fd); #include "common/ran_context.h" extern RAN_CONTEXT_t RC; diff --git a/openair2/LAYER2/MAC/mac_proto.h b/openair2/LAYER2/MAC/mac_proto.h index abb6ba0ec3..61da3510b0 100644 --- a/openair2/LAYER2/MAC/mac_proto.h +++ b/openair2/LAYER2/MAC/mac_proto.h @@ -1025,10 +1025,6 @@ uint8_t ul_subframe2_k_phich(COMMON_channels_t *cc, sub_frame_t ul_subframe); unsigned char ul_ACK_subframe2M(LTE_TDD_Config_t *tdd_Config,unsigned char subframe); -int to_rbg(int dl_Bandwidth); - -int to_prb(int dl_Bandwidth); - uint8_t get_Msg3harqpid(COMMON_channels_t *cc, frame_t frame, sub_frame_t current_subframe); diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c index 4c46238b6c..8de14a13ab 100644 --- a/openair2/LAYER2/MAC/main.c +++ b/openair2/LAYER2/MAC/main.c @@ -45,41 +45,38 @@ extern RAN_CONTEXT_t RC; extern int oai_exit; -void *mac_stats_thread(void *param) { - eNB_MAC_INST *mac = (eNB_MAC_INST *)param; - FILE *fd; - UE_info_t *UE_info = &(mac->UE_info); +void lte_dump_mac_stats(eNB_MAC_INST *mac, FILE *fd) +{ + UE_info_t *UE_info = &(mac->UE_info); - while (!oai_exit) { - sleep(1); - fd=fopen("MAC_stats.log","w+"); - AssertFatal(fd!=NULL,"Cannot open MAC_stats.log\n"); + for (int UE_id = 0; UE_id < MAX_MOBILES_PER_ENB; UE_id++) { + if (UE_info->active[UE_id]) { + int rnti = UE_RNTI(mac->Mod_id, UE_id); + int CC_id = UE_PCCID(mac->Mod_id, UE_id); + UE_sched_ctrl_t *UE_scheduling_control = &(UE_info->UE_sched_ctrl[UE_id]); - for (int UE_id = 0; UE_id < MAX_MOBILES_PER_ENB; UE_id++) { - if (UE_info->active[UE_id]) { - int rnti = UE_RNTI(mac->Mod_id, UE_id); - int CC_id = UE_PCCID(mac->Mod_id, UE_id); - UE_sched_ctrl_t *UE_scheduling_control = &(UE_info->UE_sched_ctrl[UE_id]); - - double total_bler; - if(UE_scheduling_control->pusch_rx_num[CC_id] == 0 && UE_scheduling_control->pusch_rx_error_num[CC_id] == 0) { - total_bler = 0; - } - else { - total_bler = (double)UE_scheduling_control->pusch_rx_error_num[CC_id] / (double)(UE_scheduling_control->pusch_rx_error_num[CC_id] + UE_scheduling_control->pusch_rx_num[CC_id]) * 100; - } - fprintf(fd,"MAC UE rnti %x : %s, PHR %d DLCQI %d PUSCH %d PUCCH %d RLC disc %d UL-stat rcv %lu err %lu bler %lf (%lf/%lf) total_bler %lf mcsoff %d pre_allocated nb_rb %d, mcs %d, bsr %u sched %u tbs %lu cnt %u , DL-stat tbs %lu cnt %u rb %u buf %u 1st %u ret %u ri %d inactivity timer %d\n", + double total_bler; + if (UE_scheduling_control->pusch_rx_num[CC_id] == 0 && UE_scheduling_control->pusch_rx_error_num[CC_id] == 0) { + total_bler = 0; + } else { + total_bler = (double)UE_scheduling_control->pusch_rx_error_num[CC_id] / (double)(UE_scheduling_control->pusch_rx_error_num[CC_id] + UE_scheduling_control->pusch_rx_num[CC_id]) * 100; + } + fprintf(fd, + "MAC UE rnti %x : %s, PHR %d DLCQI %d PUSCH %d PUCCH %d RLC disc %d UL-stat rcv %lu err %lu bler %lf (%lf/%lf) total_bler %lf mcsoff %d pre_allocated nb_rb %d, mcs %d, bsr %u sched %u " + "tbs %lu cnt %u , DL-stat tbs %lu cnt %u rb %u buf %u 1st %u ret %u ri %d inactivity timer %d\n", rnti, UE_scheduling_control->ul_out_of_sync == 0 ? "in synch" : "out of sync", UE_info->UE_template[CC_id][UE_id].phr_info, UE_scheduling_control->dl_cqi[CC_id], - UE_scheduling_control->pusch_snr/*_avg*/[CC_id], + UE_scheduling_control->pusch_snr /*_avg*/[CC_id], UE_scheduling_control->pucch1_snr[CC_id], UE_scheduling_control->rlc_out_of_resources_cnt, UE_scheduling_control->pusch_rx_num[CC_id], UE_scheduling_control->pusch_rx_error_num[CC_id], UE_scheduling_control->pusch_bler[CC_id], - mac->bler_lower,mac->bler_upper,total_bler, + mac->bler_lower, + mac->bler_upper, + total_bler, UE_scheduling_control->mcs_offset[CC_id], UE_info->UE_template[CC_id][UE_id].pre_allocated_nb_rb_ul, UE_info->UE_template[CC_id][UE_id].pre_assigned_mcs_ul, @@ -98,8 +95,7 @@ void *mac_stats_thread(void *param) { UE_scheduling_control->first_cnt[CC_id], UE_scheduling_control->ret_cnt[CC_id], UE_scheduling_control->aperiodic_ri_received[CC_id], - UE_scheduling_control->ul_inactivity_timer - ); + UE_scheduling_control->ul_inactivity_timer); fprintf(fd," ULSCH rounds %d/%d/%d/%d, DLSCH rounds %d/%d/%d/%d, ULSCH errors %d, DLSCH errors %d\n", UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[0], UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[1], @@ -111,13 +107,24 @@ void *mac_stats_thread(void *param) { UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[3], UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_errors, UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_errors); - - - } } + } + return; +} + +void *mac_stats_thread(void *param) +{ + eNB_MAC_INST *mac = (eNB_MAC_INST *)param; + FILE *fd; + + while (!oai_exit) { + sleep(1); + fd = fopen("MAC_stats.log", "w+"); + AssertFatal(fd != NULL, "Cannot open MAC_stats.log\n"); + lte_dump_mac_stats(mac, fd); fclose(fd); } - return(NULL); + return NULL; } void init_UE_info(UE_info_t *UE_info) @@ -206,8 +213,8 @@ void mac_top_init_eNB(void) rrc_init_global_param(); - for (i=0;imac_stats_thread,NULL,mac_stats_thread,(void*)mac[i]); - + for (i = 0; i < RC.nb_macrlc_inst; i++) + threadCreate(&mac[i]->mac_stats_thread, mac_stats_thread, (void *)mac[i], "mac stats", -1, sched_get_priority_min(SCHED_OAI)); } void mac_init_cell_params(int Mod_idP, int CC_idP) From d3d76080f70d36ae1d04d9bf10c6e14777a24223 Mon Sep 17 00:00:00 2001 From: laurent Date: Tue, 22 Nov 2022 14:31:17 +0100 Subject: [PATCH 17/36] minor fixes --- executables/lte-ru.c | 6 +++--- openair2/LAYER2/MAC/eNB_scheduler_primitives.c | 2 +- openair2/RRC/LTE/MESSAGES/asn1_msg.c | 3 +-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/executables/lte-ru.c b/executables/lte-ru.c index 11468615d8..9652b74214 100644 --- a/executables/lte-ru.c +++ b/executables/lte-ru.c @@ -1472,11 +1472,11 @@ static void *ru_stats_thread(void *param) { sleep(1); if (opp_enabled) { - if (ru->feprx) print_meas(&ru->ofdm_demod_stats,"feprx",NULL,NULL); + if (ru->feprx) print_meas(&ru->ofdm_demod_stats,"feprx_ru",NULL,NULL); - if (ru->feptx_ofdm) print_meas(&ru->ofdm_mod_stats,"feptx_ofdm",NULL,NULL); + if (ru->feptx_ofdm) print_meas(&ru->ofdm_mod_stats,"feptx_ofdm_ru",NULL,NULL); - if (ru->fh_north_asynch_in) print_meas(&ru->rx_fhaul,"rx_fhaul",NULL,NULL); + if (ru->fh_north_asynch_in) print_meas(&ru->rx_fhaul,"rx_fhaul_ru",NULL,NULL); if (ru->fh_north_out) { print_meas(&ru->tx_fhaul,"tx_fhaul",NULL,NULL); diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c index b896e4777a..3aa9d946ce 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c @@ -2445,7 +2445,7 @@ get_tmode(module_id_t module_idP, return (cc->p_eNB); } - AssertFatal(1 == 0, "Shouldn't be here\n"); + AssertFatal(false, "Shouldn't be here, antenna info: %p, %d cc:%d, ue:%d active: %d; \n", physicalConfigDedicated->antennaInfo, physicalConfigDedicated->antennaInfo->present,CC_idP, UE_idP, is_UE_active( module_idP,UE_idP ) ); return 0; } diff --git a/openair2/RRC/LTE/MESSAGES/asn1_msg.c b/openair2/RRC/LTE/MESSAGES/asn1_msg.c index 8b3d4d6070..6b431ecfcd 100644 --- a/openair2/RRC/LTE/MESSAGES/asn1_msg.c +++ b/openair2/RRC/LTE/MESSAGES/asn1_msg.c @@ -2462,7 +2462,6 @@ do_RRCConnectionSetup( struct LTE_SRB_ToAddMod__rlc_Config *SRB1_rlc_config = NULL; struct LTE_SRB_ToAddMod__logicalChannelConfig *SRB1_lchan_config = NULL; struct LTE_LogicalChannelConfig__ul_SpecificParameters *SRB1_ul_SpecificParameters = NULL; - LTE_PhysicalConfigDedicated_t *physicalConfigDedicated2 = NULL; LTE_DL_CCCH_Message_t dl_ccch_msg; LTE_RRCConnectionSetup_t *rrcConnectionSetup = NULL; LTE_DL_FRAME_PARMS *frame_parms = &RC.eNB[ctxt_pP->module_id][CC_id]->frame_parms; @@ -2509,7 +2508,7 @@ do_RRCConnectionSetup( SRB1_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup; asn1cSeqAdd(&(*SRB_configList)->list,SRB1_config); // PhysicalConfigDedicated - physicalConfigDedicated2 = CALLOC(1,sizeof(*physicalConfigDedicated2)); + LTE_PhysicalConfigDedicated_t *physicalConfigDedicated2 = CALLOC(1,sizeof(*physicalConfigDedicated2)); *physicalConfigDedicated = physicalConfigDedicated2; physicalConfigDedicated2->pdsch_ConfigDedicated = CALLOC(1,sizeof(*physicalConfigDedicated2->pdsch_ConfigDedicated)); physicalConfigDedicated2->pucch_ConfigDedicated = CALLOC(1,sizeof(*physicalConfigDedicated2->pucch_ConfigDedicated)); From 9f8a468d947247cc58795e6668cb36750be1935e Mon Sep 17 00:00:00 2001 From: laurent Date: Mon, 28 Nov 2022 15:22:52 +0100 Subject: [PATCH 18/36] remove eNB threads for RRC and MAC, MAC thread was only for DRX config (useless) and RRC thread has many race conditions with MAC+PHY --- common/utils/ocp_itti/intertask_interface.h | 97 ++- executables/create_tasks.c | 13 +- executables/lte-softmodem.c | 1 + openair2/ENB_APP/enb_config.c | 545 +++++++------- openair2/ENB_APP/enb_config.h | 4 +- openair2/ENB_APP/enb_config_SL.c | 200 +++--- openair2/ENB_APP/enb_config_eMTC.c | 668 +++++++++--------- openair2/F1AP/f1ap_du_rrc_message_transfer.c | 7 +- openair2/LAYER2/MAC/eNB_scheduler.c | 2 +- openair2/LAYER2/MAC/eNB_scheduler_RA.c | 12 +- openair2/LAYER2/MAC/eNB_scheduler_fairRR.c | 6 +- .../LAYER2/MAC/eNB_scheduler_primitives.c | 4 +- openair2/LAYER2/MAC/main.c | 45 +- openair2/RRC/LTE/rrc_eNB.c | 195 ++--- 14 files changed, 832 insertions(+), 967 deletions(-) diff --git a/common/utils/ocp_itti/intertask_interface.h b/common/utils/ocp_itti/intertask_interface.h index 2b17c7e3ef..3874d52829 100644 --- a/common/utils/ocp_itti/intertask_interface.h +++ b/common/utils/ocp_itti/intertask_interface.h @@ -296,55 +296,54 @@ typedef struct { //TASK_DEF(TASK_GTPV1_U, TASK_PRIORITY_MED, 1000,NULL, NULL) //TASK_DEF(TASK_UDP, TASK_PRIORITY_MED, 1000, NULL, NULL) void *rrc_enb_process_msg(void *); -#define FOREACH_TASK(TASK_DEF) \ - TASK_DEF(TASK_UNKNOWN, TASK_PRIORITY_MED, 50, NULL, NULL) \ - TASK_DEF(TASK_TIMER, TASK_PRIORITY_MED, 10, NULL, NULL) \ - TASK_DEF(TASK_L2L1, TASK_PRIORITY_MAX, 200, NULL, NULL) \ - TASK_DEF(TASK_BM, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_PHY_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_MAC_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_MAC_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_RLC_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_RRC_ENB_NB_IoT, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_PDCP_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_PDCP_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_DATA_FORWARDING, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_END_MARKER, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_RRC_ENB, TASK_PRIORITY_MED, 200, NULL,NULL)\ - TASK_DEF(TASK_RRC_GNB, TASK_PRIORITY_MED, 200, NULL,NULL)\ - TASK_DEF(TASK_RAL_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_S1AP, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_NGAP, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_X2AP, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_M2AP_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_M2AP_MCE, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_M3AP, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_M3AP_MME, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_M3AP_MCE, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_SCTP, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_ENB_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_GNB_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_MCE_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_MME_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_PHY_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_MAC_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_RLC_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_PDCP_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_RRC_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_RRC_NRUE, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_NAS_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_RAL_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_GTPV1_U, TASK_PRIORITY_MED, 1000,NULL, NULL)\ - TASK_DEF(TASK_CU_F1, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_DU_F1, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_CUCP_E1, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_CUUP_E1, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_RRC_UE_SIM, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_RRC_GNB_SIM, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_RRC_NSA_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_RRC_NSA_NRUE, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_NAS_NRUE, TASK_PRIORITY_MED, 200, NULL, NULL) \ - TASK_DEF(TASK_MAX, TASK_PRIORITY_MED, 200, NULL, NULL) +#define FOREACH_TASK(TASK_DEF) \ + TASK_DEF(TASK_UNKNOWN, TASK_PRIORITY_MED, 50, NULL, NULL) \ + TASK_DEF(TASK_TIMER, TASK_PRIORITY_MED, 10, NULL, NULL) \ + TASK_DEF(TASK_L2L1, TASK_PRIORITY_MAX, 200, NULL, NULL) \ + TASK_DEF(TASK_BM, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_PHY_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_MAC_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_RLC_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_RRC_ENB_NB_IoT, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_PDCP_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_PDCP_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_DATA_FORWARDING, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_END_MARKER, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_RRC_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_RRC_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_RAL_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_S1AP, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_NGAP, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_X2AP, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_M2AP_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_M2AP_MCE, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_M3AP, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_M3AP_MME, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_M3AP_MCE, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_SCTP, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_ENB_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_GNB_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_MCE_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_MME_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_PHY_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_MAC_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_RLC_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_PDCP_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_RRC_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_RRC_NRUE, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_NAS_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_RAL_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_GTPV1_U, TASK_PRIORITY_MED, 1000, NULL, NULL) \ + TASK_DEF(TASK_CU_F1, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_DU_F1, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_CUCP_E1, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_CUUP_E1, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_RRC_UE_SIM, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_RRC_GNB_SIM, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_RRC_NSA_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_RRC_NSA_NRUE, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_NAS_NRUE, TASK_PRIORITY_MED, 200, NULL, NULL) \ + TASK_DEF(TASK_MAX, TASK_PRIORITY_MED, 200, NULL, NULL) #define TASK_DEF(TaskID, pRIO, qUEUEsIZE, FuNc, ThreadFunc) { pRIO, qUEUEsIZE, #TaskID, FuNc, ThreadFunc }, diff --git a/executables/create_tasks.c b/executables/create_tasks.c index 12504f55d5..4bbda1e876 100644 --- a/executables/create_tasks.c +++ b/executables/create_tasks.c @@ -53,11 +53,8 @@ int create_tasks(uint32_t enb_nb) { LOG_I(ENB_APP, "Creating ENB_APP eNB Task\n"); rc = itti_create_task (TASK_ENB_APP, eNB_app_task, NULL); AssertFatal(rc >= 0, "Create task for eNB APP failed\n"); - - LOG_I(RRC,"Creating RRC eNB Task\n"); - rc = itti_create_task (TASK_RRC_ENB, rrc_enb_task, NULL); - AssertFatal(rc >= 0, "Create task for RRC eNB failed\n"); - + rrc_enb_init(); + itti_mark_task_ready(TASK_RRC_ENB); if (get_softmodem_params()->emulate_l1 || (EPC_MODE_ENABLED && split73 != SPLIT73_DU)) { rc = itti_create_task(TASK_SCTP, sctp_eNB_task, NULL); AssertFatal(rc >= 0, "Create task for SCTP failed\n"); @@ -89,11 +86,5 @@ int create_tasks(uint32_t enb_nb) { AssertFatal(rc >= 0, "Create task for GTPV1U failed\n"); } - if (!NODE_IS_CU(type)) { - LOG_I(MAC,"Creating MAC eNB Task\n"); - rc = itti_create_task(TASK_MAC_ENB, mac_enb_task, NULL); - AssertFatal(rc >= 0, "Create task for MAC eNB failed\n"); - } - return 0; } diff --git a/executables/lte-softmodem.c b/executables/lte-softmodem.c index dfdf8fa6f4..a01fcf6a04 100644 --- a/executables/lte-softmodem.c +++ b/executables/lte-softmodem.c @@ -482,6 +482,7 @@ int main ( int argc, char **argv ) MessageDef *msg_p = itti_alloc_new_message (TASK_ENB_APP, 0, RRC_CONFIGURATION_REQ); RRC_CONFIGURATION_REQ(msg_p) = RC.rrc[enb_id]->configuration; itti_send_msg_to_task (TASK_RRC_ENB, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p); + rrc_enb_process_itti_msg(NULL); } node_type = RC.rrc[0]->node_type; } diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index 776c89c02b..c37581d04a 100644 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -265,8 +265,8 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { int nb_cc = 0; int32_t offsetMaxLimit = 0; int32_t cycleNb = 0; - - MessageDef *msg_p = itti_alloc_new_message(TASK_RRC_ENB, 0, RRC_CONFIGURATION_REQ); + + RrcConfigurationReq *RRCcfg = &rrc->configuration; ccparams_lte_t ccparams_lte; ccparams_sidelink_t SLconfig; ccparams_eMTC_t eMTCconfig; @@ -369,9 +369,9 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { PLMNParams[I].chkPptr = &(config_check_PLMNParams[I]); // In the configuration file it is in seconds. For RRC it has to be in milliseconds - RRC_CONFIGURATION_REQ (msg_p).rrc_inactivity_timer_thres = (*ENBParamList.paramarray[i][ENB_RRC_INACTIVITY_THRES_IDX].uptr) * 1000; - RRC_CONFIGURATION_REQ (msg_p).cell_identity = enb_id; - RRC_CONFIGURATION_REQ (msg_p).tac = *ENBParamList.paramarray[i][ENB_TRACKING_AREA_CODE_IDX].uptr; + RRCcfg->rrc_inactivity_timer_thres = (*ENBParamList.paramarray[i][ENB_RRC_INACTIVITY_THRES_IDX].uptr) * 1000; + RRCcfg->cell_identity = enb_id; + RRCcfg->tac = *ENBParamList.paramarray[i][ENB_TRACKING_AREA_CODE_IDX].uptr; AssertFatal(!ENBParamList.paramarray[i][ENB_MOBILE_COUNTRY_CODE_IDX_OLD].strptr && !ENBParamList.paramarray[i][ENB_MOBILE_NETWORK_CODE_IDX_OLD].strptr, "It seems that you use an old configuration file. Please change the existing\n" @@ -387,41 +387,38 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { AssertFatal(0, "The number of PLMN IDs must be in [1,6], but is %d\n", PLMNParamList.numelt); - RRC_CONFIGURATION_REQ(msg_p).num_plmn = PLMNParamList.numelt; + RRCcfg->num_plmn = PLMNParamList.numelt; for (int l = 0; l < PLMNParamList.numelt; ++l) { - RRC_CONFIGURATION_REQ(msg_p).mcc[l] = *PLMNParamList.paramarray[l][ENB_MOBILE_COUNTRY_CODE_IDX].uptr; - RRC_CONFIGURATION_REQ(msg_p).mnc[l] = *PLMNParamList.paramarray[l][ENB_MOBILE_NETWORK_CODE_IDX].uptr; - RRC_CONFIGURATION_REQ(msg_p).mnc_digit_length[l] = *PLMNParamList.paramarray[l][ENB_MNC_DIGIT_LENGTH].u8ptr; - AssertFatal(RRC_CONFIGURATION_REQ(msg_p).mnc_digit_length[l] == 3 - || RRC_CONFIGURATION_REQ(msg_p).mnc[l] < 100, - "MNC %d cannot be encoded in two digits as requested (change mnc_digit_length to 3)\n", - RRC_CONFIGURATION_REQ(msg_p).mnc[l]); + RRCcfg->mcc[l] = *PLMNParamList.paramarray[l][ENB_MOBILE_COUNTRY_CODE_IDX].uptr; + RRCcfg->mnc[l] = *PLMNParamList.paramarray[l][ENB_MOBILE_NETWORK_CODE_IDX].uptr; + RRCcfg->mnc_digit_length[l] = *PLMNParamList.paramarray[l][ENB_MNC_DIGIT_LENGTH].u8ptr; + AssertFatal(RRCcfg->mnc_digit_length[l] == 3 || RRCcfg->mnc[l] < 100, "MNC %d cannot be encoded in two digits as requested (change mnc_digit_length to 3)\n", RRCcfg->mnc[l]); } /* measurement reports enabled? */ if (ENBParamList.paramarray[i][ENB_ENABLE_MEASUREMENT_REPORTS].strptr != NULL && *(ENBParamList.paramarray[i][ENB_ENABLE_MEASUREMENT_REPORTS].strptr) != NULL && !strcmp(*(ENBParamList.paramarray[i][ENB_ENABLE_MEASUREMENT_REPORTS].strptr), "yes")) - RRC_CONFIGURATION_REQ (msg_p).enable_measurement_reports = 1; + RRCcfg->enable_measurement_reports = 1; else - RRC_CONFIGURATION_REQ (msg_p).enable_measurement_reports = 0; + RRCcfg->enable_measurement_reports = 0; /* x2 enabled? */ if (ENBParamList.paramarray[i][ENB_ENABLE_X2].strptr != NULL && *(ENBParamList.paramarray[i][ENB_ENABLE_X2].strptr) != NULL && !strcmp(*(ENBParamList.paramarray[i][ENB_ENABLE_X2].strptr), "yes")) - RRC_CONFIGURATION_REQ (msg_p).enable_x2 = 1; + RRCcfg->enable_x2 = 1; else - RRC_CONFIGURATION_REQ (msg_p).enable_x2 = 0; + RRCcfg->enable_x2 = 0; /* m2 enabled */ if (ENBParamList.paramarray[i][ENB_ENABLE_ENB_M2].strptr != NULL && *(ENBParamList.paramarray[i][ENB_ENABLE_ENB_M2].strptr) != NULL && !strcmp(*(ENBParamList.paramarray[i][ENB_ENABLE_ENB_M2].strptr), "yes")) - RRC_CONFIGURATION_REQ (msg_p).eMBMS_M2_configured = 1; + RRCcfg->eMBMS_M2_configured = 1; else - RRC_CONFIGURATION_REQ (msg_p).eMBMS_M2_configured = 0; + RRCcfg->eMBMS_M2_configured = 0; // Parse optional physical parameters config_getlist( &CCsParamList,NULL,0,enbpath); @@ -437,11 +434,11 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { //printf("Component carrier %d\n",component_carrier); nb_cc++; // Cell params, MIB/SIB1 in DU - RRC_CONFIGURATION_REQ (msg_p).tdd_config[j] = ccparams_lte.tdd_config; + RRCcfg->tdd_config[j] = ccparams_lte.tdd_config; AssertFatal (ccparams_lte.tdd_config <= LTE_TDD_Config__subframeAssignment_sa6, "Failed to parse eNB configuration file %s, enb %u illegal tdd_config %d (should be 0-%d)!", RC.config_file_name, i, ccparams_lte.tdd_config, LTE_TDD_Config__subframeAssignment_sa6); - RRC_CONFIGURATION_REQ (msg_p).tdd_config_s[j] = ccparams_lte.tdd_config_s; + RRCcfg->tdd_config_s[j] = ccparams_lte.tdd_config_s; AssertFatal (ccparams_lte.tdd_config_s <= LTE_TDD_Config__specialSubframePatterns_ssp8, "Failed to parse eNB configuration file %s, enb %u illegal tdd_config_s %d (should be 0-%d)!", RC.config_file_name, i, ccparams_lte.tdd_config_s, LTE_TDD_Config__specialSubframePatterns_ssp8); @@ -451,9 +448,9 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u define %s: NORMAL,EXTENDED!\n", RC.config_file_name, i, ENB_CONFIG_STRING_PREFIX_TYPE); else if (strcmp(ccparams_lte.prefix_type, "NORMAL") == 0) { - RRC_CONFIGURATION_REQ (msg_p).prefix_type[j] = NORMAL; + RRCcfg->prefix_type[j] = NORMAL; } else if (strcmp(ccparams_lte.prefix_type, "EXTENDED") == 0) { - RRC_CONFIGURATION_REQ (msg_p).prefix_type[j] = EXTENDED; + RRCcfg->prefix_type[j] = EXTENDED; } else { AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for prefix_type choice: NORMAL or EXTENDED !\n", @@ -465,19 +462,19 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u define %s: TRUE,FALSE!\n", RC.config_file_name, i, ENB_CONFIG_STRING_PBCH_REPETITION); else if (strcmp(ccparams_lte.pbch_repetition, "TRUE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).pbch_repetition[j] = 1; + RRCcfg->pbch_repetition[j] = 1; } else if (strcmp(ccparams_lte.pbch_repetition, "FALSE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).pbch_repetition[j] = 0; + RRCcfg->pbch_repetition[j] = 0; } else { AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pbch_repetition choice: TRUE or FALSE !\n", RC.config_file_name, i, ccparams_lte.pbch_repetition); } - RRC_CONFIGURATION_REQ (msg_p).eutra_band[j] = ccparams_lte.eutra_band; - RRC_CONFIGURATION_REQ (msg_p).downlink_frequency[j] = (uint32_t) ccparams_lte.downlink_frequency; - RRC_CONFIGURATION_REQ (msg_p).uplink_frequency_offset[j] = (unsigned int) ccparams_lte.uplink_frequency_offset; - RRC_CONFIGURATION_REQ (msg_p).Nid_cell[j]= ccparams_lte.Nid_cell; + RRCcfg->eutra_band[j] = ccparams_lte.eutra_band; + RRCcfg->downlink_frequency[j] = (uint32_t)ccparams_lte.downlink_frequency; + RRCcfg->uplink_frequency_offset[j] = (unsigned int)ccparams_lte.uplink_frequency_offset; + RRCcfg->Nid_cell[j] = ccparams_lte.Nid_cell; if (ccparams_lte.Nid_cell>503) { AssertFatal (0, @@ -485,7 +482,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { RC.config_file_name, i, ccparams_lte.Nid_cell); } - RRC_CONFIGURATION_REQ (msg_p).N_RB_DL[j]= ccparams_lte.N_RB_DL; + RRCcfg->N_RB_DL[j] = ccparams_lte.N_RB_DL; if ((ccparams_lte.N_RB_DL!=6) && (ccparams_lte.N_RB_DL!=15) && @@ -499,20 +496,16 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { } if (strcmp(ccparams_lte.frame_type, "FDD") == 0) { - RRC_CONFIGURATION_REQ (msg_p).frame_type[j] = FDD; + RRCcfg->frame_type[j] = FDD; } else if (strcmp(ccparams_lte.frame_type, "TDD") == 0) { - RRC_CONFIGURATION_REQ (msg_p).frame_type[j] = TDD; + RRCcfg->frame_type[j] = TDD; } else { AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for frame_type choice: FDD or TDD !\n", RC.config_file_name, i, ccparams_lte.frame_type); } - if (config_check_band_frequencies(j, - RRC_CONFIGURATION_REQ (msg_p).eutra_band[j], - RRC_CONFIGURATION_REQ (msg_p).downlink_frequency[j], - RRC_CONFIGURATION_REQ (msg_p).uplink_frequency_offset[j], - RRC_CONFIGURATION_REQ (msg_p).frame_type[j])) { + if (config_check_band_frequencies(j, RRCcfg->eutra_band[j], RRCcfg->downlink_frequency[j], RRCcfg->uplink_frequency_offset[j], RRCcfg->frame_type[j])) { AssertFatal(0, "error calling enb_check_band_frequencies\n"); } @@ -521,18 +514,18 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for nb_antenna_ports choice: 1..2 !\n", RC.config_file_name, i, ccparams_lte.nb_antenna_ports); - RRC_CONFIGURATION_REQ (msg_p).nb_antenna_ports[j] = ccparams_lte.nb_antenna_ports; + RRCcfg->nb_antenna_ports[j] = ccparams_lte.nb_antenna_ports; if (!NODE_IS_DU(rrc->node_type)) { //this is CU or eNB, SIB2-20 in CU // Radio Resource Configuration (SIB2) - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].prach_root = ccparams_lte.prach_root; + RRCcfg->radioresourceconfig[j].prach_root = ccparams_lte.prach_root; if ((ccparams_lte.prach_root <0) || (ccparams_lte.prach_root > 1023)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for prach_root choice: 0..1023 !\n", RC.config_file_name, i, ccparams_lte.prach_root); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].prach_config_index = ccparams_lte.prach_config_index; + RRCcfg->radioresourceconfig[j].prach_config_index = ccparams_lte.prach_config_index; if ((ccparams_lte.prach_config_index <0) || (ccparams_lte.prach_config_index > 63)) AssertFatal (0, @@ -544,15 +537,15 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u define %s: ENABLE,DISABLE!\n", RC.config_file_name, i, ENB_CONFIG_STRING_PRACH_HIGH_SPEED); else if (strcmp(ccparams_lte.prach_high_speed, "ENABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].prach_high_speed = true; + RRCcfg->radioresourceconfig[j].prach_high_speed = true; } else if (strcmp(ccparams_lte.prach_high_speed, "DISABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].prach_high_speed = false; + RRCcfg->radioresourceconfig[j].prach_high_speed = false; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for prach_config choice: ENABLE,DISABLE !\n", RC.config_file_name, i, ccparams_lte.prach_high_speed); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].prach_zero_correlation = ccparams_lte.prach_zero_correlation; + RRCcfg->radioresourceconfig[j].prach_zero_correlation = ccparams_lte.prach_zero_correlation; if ((ccparams_lte.prach_zero_correlation <0) || (ccparams_lte.prach_zero_correlation > 15)) @@ -560,7 +553,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for prach_zero_correlation choice: 0..15!\n", RC.config_file_name, i, ccparams_lte.prach_zero_correlation); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].prach_freq_offset = ccparams_lte.prach_freq_offset; + RRCcfg->radioresourceconfig[j].prach_freq_offset = ccparams_lte.prach_freq_offset; if ((ccparams_lte.prach_freq_offset <0) || (ccparams_lte.prach_freq_offset > 94)) @@ -568,7 +561,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for prach_freq_offset choice: 0..94!\n", RC.config_file_name, i, ccparams_lte.prach_freq_offset); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_delta_shift = ccparams_lte.pucch_delta_shift-1; + RRCcfg->radioresourceconfig[j].pucch_delta_shift = ccparams_lte.pucch_delta_shift - 1; if ((ccparams_lte.pucch_delta_shift <1) || (ccparams_lte.pucch_delta_shift > 3)) @@ -576,7 +569,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pucch_delta_shift choice: 1..3!\n", RC.config_file_name, i, ccparams_lte.pucch_delta_shift); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_nRB_CQI = ccparams_lte.pucch_nRB_CQI; + RRCcfg->radioresourceconfig[j].pucch_nRB_CQI = ccparams_lte.pucch_nRB_CQI; if ((ccparams_lte.pucch_nRB_CQI <0) || (ccparams_lte.pucch_nRB_CQI > 98)) @@ -584,7 +577,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pucch_nRB_CQI choice: 0..98!\n", RC.config_file_name, i, ccparams_lte.pucch_nRB_CQI); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_nCS_AN = ccparams_lte.pucch_nCS_AN; + RRCcfg->radioresourceconfig[j].pucch_nCS_AN = ccparams_lte.pucch_nCS_AN; if ((ccparams_lte.pucch_nCS_AN <0) || (ccparams_lte.pucch_nCS_AN > 7)) @@ -592,7 +585,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pucch_nCS_AN choice: 0..7!\n", RC.config_file_name, i, ccparams_lte.pucch_nCS_AN); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_n1_AN = ccparams_lte.pucch_n1_AN; + RRCcfg->radioresourceconfig[j].pucch_n1_AN = ccparams_lte.pucch_n1_AN; if ((ccparams_lte.pucch_n1_AN <0) || (ccparams_lte.pucch_n1_AN > 2047)) @@ -600,7 +593,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pucch_n1_AN choice: 0..2047!\n", RC.config_file_name, i, ccparams_lte.pucch_n1_AN); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pdsch_referenceSignalPower = ccparams_lte.pdsch_referenceSignalPower; + RRCcfg->radioresourceconfig[j].pdsch_referenceSignalPower = ccparams_lte.pdsch_referenceSignalPower; if ((ccparams_lte.pdsch_referenceSignalPower <-60) || (ccparams_lte.pdsch_referenceSignalPower > 50)) @@ -608,7 +601,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pdsch_referenceSignalPower choice:-60..50!\n", RC.config_file_name, i, ccparams_lte.pdsch_referenceSignalPower); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pdsch_p_b = ccparams_lte.pdsch_p_b; + RRCcfg->radioresourceconfig[j].pdsch_p_b = ccparams_lte.pdsch_p_b; if ((ccparams_lte.pdsch_p_b <0) || (ccparams_lte.pdsch_p_b > 3)) @@ -616,7 +609,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pdsch_p_b choice: 0..3!\n", RC.config_file_name, i, ccparams_lte.pdsch_p_b); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_n_SB = ccparams_lte.pusch_n_SB; + RRCcfg->radioresourceconfig[j].pusch_n_SB = ccparams_lte.pusch_n_SB; if ((ccparams_lte.pusch_n_SB <1) || (ccparams_lte.pusch_n_SB > 4)) @@ -629,15 +622,15 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u define %s: interSubframe,intraAndInterSubframe!\n", RC.config_file_name, i, ENB_CONFIG_STRING_PUSCH_HOPPINGMODE); else if (strcmp(ccparams_lte.pusch_hoppingMode,"interSubFrame")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_hoppingMode = LTE_PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_interSubFrame; + RRCcfg->radioresourceconfig[j].pusch_hoppingMode = LTE_PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_interSubFrame; } else if (strcmp(ccparams_lte.pusch_hoppingMode,"intraAndInterSubFrame")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_hoppingMode = LTE_PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_intraAndInterSubFrame; + RRCcfg->radioresourceconfig[j].pusch_hoppingMode = LTE_PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_intraAndInterSubFrame; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pusch_hoppingMode choice: interSubframe,intraAndInterSubframe!\n", RC.config_file_name, i, ccparams_lte.pusch_hoppingMode); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_hoppingOffset = ccparams_lte.pusch_hoppingOffset; + RRCcfg->radioresourceconfig[j].pusch_hoppingOffset = ccparams_lte.pusch_hoppingOffset; if ((ccparams_lte.pusch_hoppingOffset<0) || (ccparams_lte.pusch_hoppingOffset>98)) @@ -650,9 +643,9 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u define %s: ENABLE,DISABLE!\n", RC.config_file_name, i, ENB_CONFIG_STRING_PUSCH_ENABLE64QAM); else if (strcmp(ccparams_lte.pusch_enable64QAM, "ENABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_enable64QAM = true; + RRCcfg->radioresourceconfig[j].pusch_enable64QAM = true; } else if (strcmp(ccparams_lte.pusch_enable64QAM, "DISABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_enable64QAM = false; + RRCcfg->radioresourceconfig[j].pusch_enable64QAM = false; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pusch_enable64QAM choice: ENABLE,DISABLE!\n", @@ -663,15 +656,15 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u define %s: ENABLE,DISABLE!\n", RC.config_file_name, i, ENB_CONFIG_STRING_PUSCH_GROUP_HOPPING_EN); else if (strcmp(ccparams_lte.pusch_groupHoppingEnabled, "ENABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_groupHoppingEnabled = true; + RRCcfg->radioresourceconfig[j].pusch_groupHoppingEnabled = true; } else if (strcmp(ccparams_lte.pusch_groupHoppingEnabled, "DISABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_groupHoppingEnabled= false; + RRCcfg->radioresourceconfig[j].pusch_groupHoppingEnabled = false; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pusch_groupHoppingEnabled choice: ENABLE,DISABLE!\n", RC.config_file_name, i, ccparams_lte.pusch_groupHoppingEnabled); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_groupAssignment = ccparams_lte.pusch_groupAssignment; + RRCcfg->radioresourceconfig[j].pusch_groupAssignment = ccparams_lte.pusch_groupAssignment; if ((ccparams_lte.pusch_groupAssignment<0)|| (ccparams_lte.pusch_groupAssignment>29)) @@ -684,15 +677,15 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u define %s: ENABLE,DISABLE!\n", RC.config_file_name, i, ENB_CONFIG_STRING_PUSCH_SEQUENCE_HOPPING_EN); else if (strcmp(ccparams_lte.pusch_sequenceHoppingEnabled, "ENABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_sequenceHoppingEnabled = true; + RRCcfg->radioresourceconfig[j].pusch_sequenceHoppingEnabled = true; } else if (strcmp(ccparams_lte.pusch_sequenceHoppingEnabled, "DISABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_sequenceHoppingEnabled = false; + RRCcfg->radioresourceconfig[j].pusch_sequenceHoppingEnabled = false; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pusch_sequenceHoppingEnabled choice: ENABLE,DISABLE!\n", RC.config_file_name, i, ccparams_lte.pusch_sequenceHoppingEnabled); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_nDMRS1= ccparams_lte.pusch_nDMRS1; //cyclic_shift in RRC! + RRCcfg->radioresourceconfig[j].pusch_nDMRS1 = ccparams_lte.pusch_nDMRS1; // cyclic_shift in RRC! if ((ccparams_lte.pusch_nDMRS1 <0) || (ccparams_lte.pusch_nDMRS1>7)) @@ -701,49 +694,51 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { RC.config_file_name, i, ccparams_lte.pusch_nDMRS1); if (strcmp(ccparams_lte.phich_duration,"NORMAL")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].phich_duration= LTE_PHICH_Config__phich_Duration_normal; + RRCcfg->radioresourceconfig[j].phich_duration = LTE_PHICH_Config__phich_Duration_normal; } else if (strcmp(ccparams_lte.phich_duration,"EXTENDED")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].phich_duration= LTE_PHICH_Config__phich_Duration_extended; + RRCcfg->radioresourceconfig[j].phich_duration = LTE_PHICH_Config__phich_Duration_extended; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for phich_duration choice: NORMAL,EXTENDED!\n", RC.config_file_name, i, ccparams_lte.phich_duration); if (strcmp(ccparams_lte.phich_resource,"ONESIXTH")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].phich_resource= LTE_PHICH_Config__phich_Resource_oneSixth ; + RRCcfg->radioresourceconfig[j].phich_resource = LTE_PHICH_Config__phich_Resource_oneSixth; } else if (strcmp(ccparams_lte.phich_resource,"HALF")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].phich_resource= LTE_PHICH_Config__phich_Resource_half; + RRCcfg->radioresourceconfig[j].phich_resource = LTE_PHICH_Config__phich_Resource_half; } else if (strcmp(ccparams_lte.phich_resource,"ONE")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].phich_resource= LTE_PHICH_Config__phich_Resource_one; + RRCcfg->radioresourceconfig[j].phich_resource = LTE_PHICH_Config__phich_Resource_one; } else if (strcmp(ccparams_lte.phich_resource,"TWO")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].phich_resource= LTE_PHICH_Config__phich_Resource_two; + RRCcfg->radioresourceconfig[j].phich_resource = LTE_PHICH_Config__phich_Resource_two; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for phich_resource choice: ONESIXTH,HALF,ONE,TWO!\n", RC.config_file_name, i, ccparams_lte.phich_resource); printf("phich.resource %ld (%s), phich.duration %ld (%s)\n", - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].phich_resource,ccparams_lte.phich_resource, - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].phich_duration,ccparams_lte.phich_duration); + RRCcfg->radioresourceconfig[j].phich_resource, + ccparams_lte.phich_resource, + RRCcfg->radioresourceconfig[j].phich_duration, + ccparams_lte.phich_duration); if (strcmp(ccparams_lte.srs_enable, "ENABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].srs_enable= true; + RRCcfg->radioresourceconfig[j].srs_enable = true; } else if (strcmp(ccparams_lte.srs_enable, "DISABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].srs_enable= false; + RRCcfg->radioresourceconfig[j].srs_enable = false; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for srs_BandwidthConfig choice: ENABLE,DISABLE !\n", RC.config_file_name, i, ccparams_lte.srs_enable); - if (RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].srs_enable== true) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].srs_BandwidthConfig= ccparams_lte.srs_BandwidthConfig; + if (RRCcfg->radioresourceconfig[j].srs_enable == true) { + RRCcfg->radioresourceconfig[j].srs_BandwidthConfig = ccparams_lte.srs_BandwidthConfig; if ((ccparams_lte.srs_BandwidthConfig < 0) || (ccparams_lte.srs_BandwidthConfig >7)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value %d for srs_BandwidthConfig choice: 0...7\n", RC.config_file_name, i, ccparams_lte.srs_BandwidthConfig); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].srs_SubframeConfig= ccparams_lte.srs_SubframeConfig; + RRCcfg->radioresourceconfig[j].srs_SubframeConfig = ccparams_lte.srs_SubframeConfig; if ((ccparams_lte.srs_SubframeConfig<0) || (ccparams_lte.srs_SubframeConfig>15)) @@ -752,25 +747,25 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { RC.config_file_name, i, ccparams_lte.srs_SubframeConfig); if (strcmp(ccparams_lte.srs_ackNackST, "ENABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].srs_ackNackST= true; + RRCcfg->radioresourceconfig[j].srs_ackNackST = true; } else if (strcmp(ccparams_lte.srs_ackNackST, "DISABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].srs_ackNackST= false; + RRCcfg->radioresourceconfig[j].srs_ackNackST = false; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for srs_BandwidthConfig choice: ENABLE,DISABLE !\n", RC.config_file_name, i, ccparams_lte.srs_ackNackST); if (strcmp(ccparams_lte.srs_MaxUpPts, "ENABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].srs_MaxUpPts= true; + RRCcfg->radioresourceconfig[j].srs_MaxUpPts = true; } else if (strcmp(ccparams_lte.srs_MaxUpPts, "DISABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].srs_MaxUpPts= false; + RRCcfg->radioresourceconfig[j].srs_MaxUpPts = false; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for srs_MaxUpPts choice: ENABLE,DISABLE !\n", RC.config_file_name, i, ccparams_lte.srs_MaxUpPts); } - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_p0_Nominal= ccparams_lte.pusch_p0_Nominal; + RRCcfg->radioresourceconfig[j].pusch_p0_Nominal = ccparams_lte.pusch_p0_Nominal; if ((ccparams_lte.pusch_p0_Nominal<-126) || (ccparams_lte.pusch_p0_Nominal>24)) @@ -779,27 +774,27 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { RC.config_file_name, i, ccparams_lte.pusch_p0_Nominal); if (strcmp(ccparams_lte.pusch_alpha,"AL0")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_alpha= LTE_Alpha_r12_al0; + RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al0; } else if (strcmp(ccparams_lte.pusch_alpha,"AL04")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_alpha= LTE_Alpha_r12_al04; + RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al04; } else if (strcmp(ccparams_lte.pusch_alpha,"AL05")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_alpha= LTE_Alpha_r12_al05; + RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al05; } else if (strcmp(ccparams_lte.pusch_alpha,"AL06")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_alpha= LTE_Alpha_r12_al06; + RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al06; } else if (strcmp(ccparams_lte.pusch_alpha,"AL07")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_alpha= LTE_Alpha_r12_al07; + RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al07; } else if (strcmp(ccparams_lte.pusch_alpha,"AL08")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_alpha= LTE_Alpha_r12_al08; + RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al08; } else if (strcmp(ccparams_lte.pusch_alpha,"AL09")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_alpha= LTE_Alpha_r12_al09; + RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al09; } else if (strcmp(ccparams_lte.pusch_alpha,"AL1")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pusch_alpha= LTE_Alpha_r12_al1; + RRCcfg->radioresourceconfig[j].pusch_alpha = LTE_Alpha_r12_al1; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pucch_Alpha choice: AL0,AL04,AL05,AL06,AL07,AL08,AL09,AL1!\n", RC.config_file_name, i, ccparams_lte.pusch_alpha); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_p0_Nominal= ccparams_lte.pucch_p0_Nominal; + RRCcfg->radioresourceconfig[j].pucch_p0_Nominal = ccparams_lte.pucch_p0_Nominal; if ((ccparams_lte.pucch_p0_Nominal<-127) || (ccparams_lte.pucch_p0_Nominal>-96)) @@ -807,7 +802,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for pucch_p0_Nominal choice: -127..-96 !\n", RC.config_file_name, i, ccparams_lte.pucch_p0_Nominal); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].msg3_delta_Preamble= ccparams_lte.msg3_delta_Preamble; + RRCcfg->radioresourceconfig[j].msg3_delta_Preamble = ccparams_lte.msg3_delta_Preamble; if ((ccparams_lte.msg3_delta_Preamble<-1) || (ccparams_lte.msg3_delta_Preamble>6)) @@ -816,63 +811,63 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { RC.config_file_name, i, ccparams_lte.msg3_delta_Preamble); if (strcmp(ccparams_lte.pucch_deltaF_Format1,"deltaF_2")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_deltaF_Format1= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF_2; + RRCcfg->radioresourceconfig[j].pucch_deltaF_Format1 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF_2; } else if (strcmp(ccparams_lte.pucch_deltaF_Format1,"deltaF0")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_deltaF_Format1= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF0; + RRCcfg->radioresourceconfig[j].pucch_deltaF_Format1 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF0; } else if (strcmp(ccparams_lte.pucch_deltaF_Format1,"deltaF2")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_deltaF_Format1= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF2; + RRCcfg->radioresourceconfig[j].pucch_deltaF_Format1 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF2; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pucch_deltaF_Format1 choice: deltaF_2,dltaF0,deltaF2!\n", RC.config_file_name, i, ccparams_lte.pucch_deltaF_Format1); if (strcmp(ccparams_lte.pucch_deltaF_Format1b,"deltaF1")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_deltaF_Format1b= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF1; + RRCcfg->radioresourceconfig[j].pucch_deltaF_Format1b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF1; } else if (strcmp(ccparams_lte.pucch_deltaF_Format1b,"deltaF3")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_deltaF_Format1b= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF3; + RRCcfg->radioresourceconfig[j].pucch_deltaF_Format1b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF3; } else if (strcmp(ccparams_lte.pucch_deltaF_Format1b,"deltaF5")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_deltaF_Format1b= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF5; + RRCcfg->radioresourceconfig[j].pucch_deltaF_Format1b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF5; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pucch_deltaF_Format1b choice: deltaF1,dltaF3,deltaF5!\n", RC.config_file_name, i, ccparams_lte.pucch_deltaF_Format1b); if (strcmp(ccparams_lte.pucch_deltaF_Format2,"deltaF_2")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_deltaF_Format2= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF_2; + RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF_2; } else if (strcmp(ccparams_lte.pucch_deltaF_Format2,"deltaF0")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_deltaF_Format2= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF0; + RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF0; } else if (strcmp(ccparams_lte.pucch_deltaF_Format2,"deltaF1")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_deltaF_Format2= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF1; + RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF1; } else if (strcmp(ccparams_lte.pucch_deltaF_Format2,"deltaF2")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_deltaF_Format2= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF2; + RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF2; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pucch_deltaF_Format2 choice: deltaF_2,dltaF0,deltaF1,deltaF2!\n", RC.config_file_name, i, ccparams_lte.pucch_deltaF_Format2); if (strcmp(ccparams_lte.pucch_deltaF_Format2a,"deltaF_2")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_deltaF_Format2a= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF_2; + RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2a = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF_2; } else if (strcmp(ccparams_lte.pucch_deltaF_Format2a,"deltaF0")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_deltaF_Format2a= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF0; + RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2a = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF0; } else if (strcmp(ccparams_lte.pucch_deltaF_Format2a,"deltaF2")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_deltaF_Format2a= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF2; + RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2a = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF2; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pucch_deltaF_Format2a choice: deltaF_2,dltaF0,deltaF2!\n", RC.config_file_name, i, ccparams_lte.pucch_deltaF_Format2a); if (strcmp(ccparams_lte.pucch_deltaF_Format2b,"deltaF_2")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_deltaF_Format2b= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF_2; + RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF_2; } else if (strcmp(ccparams_lte.pucch_deltaF_Format2b,"deltaF0")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_deltaF_Format2b= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF0; + RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF0; } else if (strcmp(ccparams_lte.pucch_deltaF_Format2b,"deltaF2")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pucch_deltaF_Format2b= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF2; + RRCcfg->radioresourceconfig[j].pucch_deltaF_Format2b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF2; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pucch_deltaF_Format2b choice: deltaF_2,dltaF0,deltaF2!\n", RC.config_file_name, i, ccparams_lte.pucch_deltaF_Format2b); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_numberOfRA_Preambles= (ccparams_lte.rach_numberOfRA_Preambles/4)-1; + RRCcfg->radioresourceconfig[j].rach_numberOfRA_Preambles = (ccparams_lte.rach_numberOfRA_Preambles / 4) - 1; if ((ccparams_lte.rach_numberOfRA_Preambles <4) || (ccparams_lte.rach_numberOfRA_Preambles>64) || @@ -882,8 +877,8 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { RC.config_file_name, i, ccparams_lte.rach_numberOfRA_Preambles); if (strcmp(ccparams_lte.rach_preamblesGroupAConfig, "ENABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_preamblesGroupAConfig= true; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_sizeOfRA_PreamblesGroupA= (ccparams_lte.rach_sizeOfRA_PreamblesGroupA/4)-1; + RRCcfg->radioresourceconfig[j].rach_preamblesGroupAConfig = true; + RRCcfg->radioresourceconfig[j].rach_sizeOfRA_PreamblesGroupA = (ccparams_lte.rach_sizeOfRA_PreamblesGroupA / 4) - 1; if ((ccparams_lte.rach_numberOfRA_Preambles <4) || (ccparams_lte.rach_numberOfRA_Preambles>60) || @@ -894,19 +889,19 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { switch (ccparams_lte.rach_messageSizeGroupA) { case 56: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_messageSizeGroupA= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b56; + RRCcfg->radioresourceconfig[j].rach_messageSizeGroupA = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b56; break; case 144: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_messageSizeGroupA= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b144; + RRCcfg->radioresourceconfig[j].rach_messageSizeGroupA = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b144; break; case 208: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_messageSizeGroupA= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b208; + RRCcfg->radioresourceconfig[j].rach_messageSizeGroupA = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b208; break; case 256: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_messageSizeGroupA= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b256; + RRCcfg->radioresourceconfig[j].rach_messageSizeGroupA = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b256; break; default: @@ -917,33 +912,33 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { } if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"minusinfinity")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_messagePowerOffsetGroupB= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_minusinfinity; + RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_minusinfinity; } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB0")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_messagePowerOffsetGroupB= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB0; + RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB0; } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB5")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_messagePowerOffsetGroupB= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB5; + RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB5; } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB8")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_messagePowerOffsetGroupB= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB8; + RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB8; } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB10")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_messagePowerOffsetGroupB= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB10; + RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB10; } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB12")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_messagePowerOffsetGroupB= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB12; + RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB12; } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB15")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_messagePowerOffsetGroupB= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB15; + RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB15; } else if (strcmp(ccparams_lte.rach_messagePowerOffsetGroupB,"dB18")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_messagePowerOffsetGroupB= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB18; + RRCcfg->radioresourceconfig[j].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB18; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for rach_messagePowerOffsetGroupB choice: minusinfinity,dB0,dB5,dB8,dB10,dB12,dB15,dB18!\n", RC.config_file_name, i, ccparams_lte.rach_messagePowerOffsetGroupB); } else if (strcmp(ccparams_lte.rach_preamblesGroupAConfig, "DISABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_preamblesGroupAConfig= false; + RRCcfg->radioresourceconfig[j].rach_preamblesGroupAConfig = false; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for rach_preamblesGroupAConfig choice: ENABLE,DISABLE !\n", RC.config_file_name, i, ccparams_lte.rach_preamblesGroupAConfig); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_preambleInitialReceivedTargetPower= (ccparams_lte.rach_preambleInitialReceivedTargetPower+120)/2; + RRCcfg->radioresourceconfig[j].rach_preambleInitialReceivedTargetPower = (ccparams_lte.rach_preambleInitialReceivedTargetPower + 120) / 2; if ((ccparams_lte.rach_preambleInitialReceivedTargetPower<-120) || (ccparams_lte.rach_preambleInitialReceivedTargetPower>-90) || @@ -952,7 +947,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_preambleInitialReceivedTargetPower choice: -120,-118,...,-90 !\n", RC.config_file_name, i, ccparams_lte.rach_preambleInitialReceivedTargetPower); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_powerRampingStep= ccparams_lte.rach_powerRampingStep/2; + RRCcfg->radioresourceconfig[j].rach_powerRampingStep = ccparams_lte.rach_powerRampingStep / 2; if ((ccparams_lte.rach_powerRampingStep<0) || (ccparams_lte.rach_powerRampingStep>6) || @@ -963,47 +958,47 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { switch (ccparams_lte.rach_preambleTransMax) { case 3: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_preambleTransMax= LTE_PreambleTransMax_n3; + RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n3; break; case 4: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_preambleTransMax= LTE_PreambleTransMax_n4; + RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n4; break; case 5: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_preambleTransMax= LTE_PreambleTransMax_n5; + RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n5; break; case 6: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_preambleTransMax= LTE_PreambleTransMax_n6; + RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n6; break; case 7: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_preambleTransMax= LTE_PreambleTransMax_n7; + RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n7; break; case 8: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_preambleTransMax= LTE_PreambleTransMax_n8; + RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n8; break; case 10: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_preambleTransMax= LTE_PreambleTransMax_n10; + RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n10; break; case 20: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_preambleTransMax= LTE_PreambleTransMax_n20; + RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n20; break; case 50: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_preambleTransMax= LTE_PreambleTransMax_n50; + RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n50; break; case 100: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_preambleTransMax= LTE_PreambleTransMax_n100; + RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n100; break; case 200: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_preambleTransMax= LTE_PreambleTransMax_n200; + RRCcfg->radioresourceconfig[j].rach_preambleTransMax = LTE_PreambleTransMax_n200; break; default: @@ -1013,7 +1008,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { break; } - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_raResponseWindowSize= (ccparams_lte.rach_raResponseWindowSize==10)?7:ccparams_lte.rach_raResponseWindowSize-2; + RRCcfg->radioresourceconfig[j].rach_raResponseWindowSize = (ccparams_lte.rach_raResponseWindowSize == 10) ? 7 : ccparams_lte.rach_raResponseWindowSize - 2; if ((ccparams_lte.rach_raResponseWindowSize<0)|| (ccparams_lte.rach_raResponseWindowSize==9)|| @@ -1022,7 +1017,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_raResponseWindowSize choice: 2,3,4,5,6,7,8,10!\n", RC.config_file_name, i, ccparams_lte.rach_preambleTransMax); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_macContentionResolutionTimer= (ccparams_lte.rach_macContentionResolutionTimer/8)-1; + RRCcfg->radioresourceconfig[j].rach_macContentionResolutionTimer = (ccparams_lte.rach_macContentionResolutionTimer / 8) - 1; if ((ccparams_lte.rach_macContentionResolutionTimer<8) || (ccparams_lte.rach_macContentionResolutionTimer>64) || @@ -1031,7 +1026,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for rach_macContentionResolutionTimer choice: 8,16,...,56,64!\n", RC.config_file_name, i, ccparams_lte.rach_preambleTransMax); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].rach_maxHARQ_Msg3Tx= ccparams_lte.rach_maxHARQ_Msg3Tx; + RRCcfg->radioresourceconfig[j].rach_maxHARQ_Msg3Tx = ccparams_lte.rach_maxHARQ_Msg3Tx; if ((ccparams_lte.rach_maxHARQ_Msg3Tx<0) || (ccparams_lte.rach_maxHARQ_Msg3Tx>8)) @@ -1041,19 +1036,19 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { switch (ccparams_lte.pcch_defaultPagingCycle) { case 32: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pcch_defaultPagingCycle= LTE_PCCH_Config__defaultPagingCycle_rf32; + RRCcfg->radioresourceconfig[j].pcch_defaultPagingCycle = LTE_PCCH_Config__defaultPagingCycle_rf32; break; case 64: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pcch_defaultPagingCycle= LTE_PCCH_Config__defaultPagingCycle_rf64; + RRCcfg->radioresourceconfig[j].pcch_defaultPagingCycle = LTE_PCCH_Config__defaultPagingCycle_rf64; break; case 128: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pcch_defaultPagingCycle= LTE_PCCH_Config__defaultPagingCycle_rf128; + RRCcfg->radioresourceconfig[j].pcch_defaultPagingCycle = LTE_PCCH_Config__defaultPagingCycle_rf128; break; case 256: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pcch_defaultPagingCycle= LTE_PCCH_Config__defaultPagingCycle_rf256; + RRCcfg->radioresourceconfig[j].pcch_defaultPagingCycle = LTE_PCCH_Config__defaultPagingCycle_rf256; break; default: @@ -1064,21 +1059,21 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { } if (strcmp(ccparams_lte.pcch_nB, "fourT") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pcch_nB= LTE_PCCH_Config__nB_fourT; + RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_fourT; } else if (strcmp(ccparams_lte.pcch_nB, "twoT") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pcch_nB= LTE_PCCH_Config__nB_twoT; + RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_twoT; } else if (strcmp(ccparams_lte.pcch_nB, "oneT") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pcch_nB= LTE_PCCH_Config__nB_oneT; + RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_oneT; } else if (strcmp(ccparams_lte.pcch_nB, "halfT") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pcch_nB= LTE_PCCH_Config__nB_halfT; + RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_halfT; } else if (strcmp(ccparams_lte.pcch_nB, "quarterT") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pcch_nB= LTE_PCCH_Config__nB_quarterT; + RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_quarterT; } else if (strcmp(ccparams_lte.pcch_nB, "oneEighthT") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pcch_nB= LTE_PCCH_Config__nB_oneEighthT; + RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_oneEighthT; } else if (strcmp(ccparams_lte.pcch_nB, "oneSixteenthT") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pcch_nB= LTE_PCCH_Config__nB_oneSixteenthT; + RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_oneSixteenthT; } else if (strcmp(ccparams_lte.pcch_nB, "oneThirtySecondT") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].pcch_nB= LTE_PCCH_Config__nB_oneThirtySecondT; + RRCcfg->radioresourceconfig[j].pcch_nB = LTE_PCCH_Config__nB_oneThirtySecondT; } else { AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for pcch_nB choice: fourT,twoT,oneT,halfT,quarterT,oneighthT,oneSixteenthT,oneThirtySecondT !\n", RC.config_file_name, @@ -1087,11 +1082,11 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { } if (strcmp(ccparams_lte.drx_Config_present, "prNothing") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_Config_present = LTE_DRX_Config_PR_NOTHING; + RRCcfg->radioresourceconfig[j].drx_Config_present = LTE_DRX_Config_PR_NOTHING; } else if (strcmp(ccparams_lte.drx_Config_present, "prRelease") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_Config_present = LTE_DRX_Config_PR_release; + RRCcfg->radioresourceconfig[j].drx_Config_present = LTE_DRX_Config_PR_release; } else if (strcmp(ccparams_lte.drx_Config_present, "prSetup") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_Config_present = LTE_DRX_Config_PR_setup; + RRCcfg->radioresourceconfig[j].drx_Config_present = LTE_DRX_Config_PR_setup; } else { AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for drx_Config_present choice: prNothing, prRelease, prSetup!\n", @@ -1099,37 +1094,37 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { } if (strcmp(ccparams_lte.drx_onDurationTimer, "psf1") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_onDurationTimer = (long) LTE_DRX_Config__setup__onDurationTimer_psf1; + RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf1; } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf2") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_onDurationTimer = (long) LTE_DRX_Config__setup__onDurationTimer_psf2; + RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf2; } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf3") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_onDurationTimer = (long) LTE_DRX_Config__setup__onDurationTimer_psf3; + RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf3; } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf4") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_onDurationTimer = (long) LTE_DRX_Config__setup__onDurationTimer_psf4; + RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf4; } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf5") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_onDurationTimer = (long) LTE_DRX_Config__setup__onDurationTimer_psf5; + RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf5; } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf6") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_onDurationTimer = (long) LTE_DRX_Config__setup__onDurationTimer_psf6; + RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf6; } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf8") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_onDurationTimer = (long) LTE_DRX_Config__setup__onDurationTimer_psf8; + RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf8; } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf10") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_onDurationTimer = (long) LTE_DRX_Config__setup__onDurationTimer_psf10; + RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf10; } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf20") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_onDurationTimer = (long) LTE_DRX_Config__setup__onDurationTimer_psf20; + RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf20; } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf30") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_onDurationTimer = (long) LTE_DRX_Config__setup__onDurationTimer_psf30; + RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf30; } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf40") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_onDurationTimer = (long) LTE_DRX_Config__setup__onDurationTimer_psf40; + RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf40; } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf50") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_onDurationTimer = (long) LTE_DRX_Config__setup__onDurationTimer_psf50; + RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf50; } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf60") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_onDurationTimer = (long) LTE_DRX_Config__setup__onDurationTimer_psf60; + RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf60; } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf80") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_onDurationTimer = (long) LTE_DRX_Config__setup__onDurationTimer_psf80; + RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf80; } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf100") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_onDurationTimer = (long) LTE_DRX_Config__setup__onDurationTimer_psf100; + RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf100; } else if (strcmp(ccparams_lte.drx_onDurationTimer, "psf200") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_onDurationTimer = (long) LTE_DRX_Config__setup__onDurationTimer_psf200; + RRCcfg->radioresourceconfig[j].drx_onDurationTimer = (long)LTE_DRX_Config__setup__onDurationTimer_psf200; } else { AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for drx_onDurationTimer choice !\n", @@ -1138,69 +1133,69 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { } if (strcmp(ccparams_lte.drx_InactivityTimer, "psf1") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf1; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf1; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf2") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf2; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf2; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf3") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf3; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf3; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf4") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf4; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf4; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf5") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf5; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf5; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf6") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf6; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf6; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf8") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf8; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf8; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf10") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf10; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf10; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf20") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf20; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf20; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf30") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf30; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf30; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf40") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf40; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf40; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf50") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf50; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf50; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf60") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf60; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf60; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf80") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf80; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf80; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf100") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf100; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf100; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf200") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf200; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf200; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf300") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf300; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf300; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf500") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf500; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf500; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf750") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf750; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf750; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf1280") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf1280; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf1280; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf1920") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf1920; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf1920; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf2560") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf2560; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf2560; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "psf0-v1020") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_psf0_v1020; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_psf0_v1020; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare9") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_spare9; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare9; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare8") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_spare8; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare8; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare7") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_spare7; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare7; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare6") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_spare6; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare6; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare5") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_spare5; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare5; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare4") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_spare4; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare4; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare3") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_spare3; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare3; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare2") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_spare2; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare2; } else if (strcmp(ccparams_lte.drx_InactivityTimer, "spare1") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_InactivityTimer = (long) LTE_DRX_Config__setup__drx_InactivityTimer_spare1; + RRCcfg->radioresourceconfig[j].drx_InactivityTimer = (long)LTE_DRX_Config__setup__drx_InactivityTimer_spare1; } else { AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for drx_InactivityTimer choice !\n", @@ -1208,16 +1203,16 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { break; } - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_multiple_max= ccparams_lte.ue_multiple_max; + RRCcfg->radioresourceconfig[j].ue_multiple_max = ccparams_lte.ue_multiple_max; if (!ccparams_lte.mbms_dedicated_serving_cell) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u define %s: TRUE,FALSE!\n", RC.config_file_name, i, ENB_CONFIG_STRING_MBMS_DEDICATED_SERVING_CELL); else if (strcmp(ccparams_lte.mbms_dedicated_serving_cell, "ENABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].mbms_dedicated_serving_cell = true; + RRCcfg->radioresourceconfig[j].mbms_dedicated_serving_cell = true; } else if (strcmp(ccparams_lte.mbms_dedicated_serving_cell, "DISABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].mbms_dedicated_serving_cell = false; + RRCcfg->radioresourceconfig[j].mbms_dedicated_serving_cell = false; } else { AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for mbms_dedicated_serving_cell choice: TRUE or FALSE !\n", @@ -1260,21 +1255,21 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { } if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf1") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_RetransmissionTimer = (long) LTE_DRX_Config__setup__drx_RetransmissionTimer_psf1; + RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf1; } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf2") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_RetransmissionTimer = (long) LTE_DRX_Config__setup__drx_RetransmissionTimer_psf2; + RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf2; } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf4") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_RetransmissionTimer = (long) LTE_DRX_Config__setup__drx_RetransmissionTimer_psf4; + RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf4; } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf6") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_RetransmissionTimer = (long) LTE_DRX_Config__setup__drx_RetransmissionTimer_psf6; + RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf6; } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf8") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_RetransmissionTimer = (long) LTE_DRX_Config__setup__drx_RetransmissionTimer_psf8; + RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf8; } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf16") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_RetransmissionTimer = (long) LTE_DRX_Config__setup__drx_RetransmissionTimer_psf16; + RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf16; } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf24") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_RetransmissionTimer = (long) LTE_DRX_Config__setup__drx_RetransmissionTimer_psf24; + RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf24; } else if (strcmp(ccparams_lte.drx_RetransmissionTimer, "psf33") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_RetransmissionTimer = (long) LTE_DRX_Config__setup__drx_RetransmissionTimer_psf33; + RRCcfg->radioresourceconfig[j].drx_RetransmissionTimer = (long)LTE_DRX_Config__setup__drx_RetransmissionTimer_psf33; } else { AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%s\" for drx_RetransmissionTimer choice !\n", @@ -1283,55 +1278,55 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { } if (ccparams_lte.drx_longDrx_CycleStartOffset_present == NULL || strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prNothing") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_NOTHING; + RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_NOTHING; } else { if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf10") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf10; + RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf10; offsetMaxLimit = 10; } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf20") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf20; + RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf20; offsetMaxLimit = 20; } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf32") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf32; + RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf32; offsetMaxLimit = 32; } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf40") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf40; + RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf40; offsetMaxLimit = 40; } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf64") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf64; + RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf64; offsetMaxLimit = 64; } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf80") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf80; + RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf80; offsetMaxLimit = 80; } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf128") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf128; + RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf128; offsetMaxLimit = 128; } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf160") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf160; + RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf160; offsetMaxLimit = 160; } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf256") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf256; + RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf256; offsetMaxLimit = 256; } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf320") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf320; + RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf320; offsetMaxLimit = 320; } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf512") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf512; + RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf512; offsetMaxLimit = 512; } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf640") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf640; + RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf640; offsetMaxLimit = 640; } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf1024") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf1024; + RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf1024; offsetMaxLimit = 1024; } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf1280") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf1280; + RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf1280; offsetMaxLimit = 1280; } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf2048") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf2048; + RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf2048; offsetMaxLimit = 2048; } else if (strcmp(ccparams_lte.drx_longDrx_CycleStartOffset_present, "prSf2560") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf2560; + RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset_present = LTE_DRX_Config__setup__longDRX_CycleStartOffset_PR_sf2560; offsetMaxLimit = 2560; } else { AssertFatal (0, @@ -1340,7 +1335,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { } if (ccparams_lte.drx_longDrx_CycleStartOffset >= 0 && ccparams_lte.drx_longDrx_CycleStartOffset < offsetMaxLimit) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_longDrx_CycleStartOffset = ccparams_lte.drx_longDrx_CycleStartOffset; + RRCcfg->radioresourceconfig[j].drx_longDrx_CycleStartOffset = ccparams_lte.drx_longDrx_CycleStartOffset; } else { AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u incoherent value \"%d\" for drx_longDrx_CycleStartOffset !\n", @@ -1354,58 +1349,58 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { "Failed to parse eNB configuration file %s, enb %u incoherent values \"%s\" - \"%d\" for drx_shortDrx_Cycle or drx_shortDrx_ShortCycleTimer choice !\n", RC.config_file_name, i, ccparams_lte.drx_shortDrx_Cycle, ccparams_lte.drx_shortDrx_ShortCycleTimer); } else { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_shortDrx_Cycle = -1; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_shortDrx_ShortCycleTimer = 0; + RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = -1; + RRCcfg->radioresourceconfig[j].drx_shortDrx_ShortCycleTimer = 0; } } else { if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf2") == 0) { cycleNb = 2; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf2; + RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf2; } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf5") == 0) { cycleNb = 5; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf5; + RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf5; } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf8") == 0) { cycleNb = 8; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf8; + RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf8; } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf10") == 0) { cycleNb = 10; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf10; + RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf10; } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf16") == 0) { cycleNb = 16; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf16; + RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf16; } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf20") == 0) { cycleNb = 20; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf20; + RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf20; } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf32") == 0) { cycleNb = 32; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf32; + RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf32; } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf40") == 0) { cycleNb = 40; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf40; + RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf40; } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf64") == 0) { cycleNb = 64; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf64; + RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf64; } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf80") == 0) { cycleNb = 80; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf80; + RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf80; } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf128") == 0) { cycleNb = 128; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf128; + RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf128; } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf160") == 0) { cycleNb = 160; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf160; + RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf160; } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf256") == 0) { cycleNb = 256; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf256; + RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf256; } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf320") == 0) { cycleNb = 320; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf320; + RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf320; } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf512") == 0) { cycleNb = 512; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf512; + RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf512; } else if (strcmp(ccparams_lte.drx_shortDrx_Cycle, "sf640") == 0) { cycleNb = 640; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf640; + RRCcfg->radioresourceconfig[j].drx_shortDrx_Cycle = LTE_DRX_Config__setup__shortDRX__shortDRX_Cycle_sf640; } else { AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u incoherent value \"%s\" for drx_shortDrx_Cycle !\n", @@ -1419,7 +1414,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { } if (ccparams_lte.drx_shortDrx_ShortCycleTimer >= 1 && ccparams_lte.drx_shortDrx_ShortCycleTimer <= 16 ) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].drx_shortDrx_ShortCycleTimer = ccparams_lte.drx_shortDrx_ShortCycleTimer; + RRCcfg->radioresourceconfig[j].drx_shortDrx_ShortCycleTimer = ccparams_lte.drx_shortDrx_ShortCycleTimer; } else { AssertFatal (0, "Failed to parse eNB configuration file %s, enb %u unknown value \"%d\" for drx_shortDrx_ShortCycleTimer choice !\n", @@ -1429,19 +1424,19 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { switch (ccparams_lte.bcch_modificationPeriodCoeff) { case 2: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].bcch_modificationPeriodCoeff= LTE_BCCH_Config__modificationPeriodCoeff_n2; + RRCcfg->radioresourceconfig[j].bcch_modificationPeriodCoeff = LTE_BCCH_Config__modificationPeriodCoeff_n2; break; case 4: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].bcch_modificationPeriodCoeff= LTE_BCCH_Config__modificationPeriodCoeff_n4; + RRCcfg->radioresourceconfig[j].bcch_modificationPeriodCoeff = LTE_BCCH_Config__modificationPeriodCoeff_n4; break; case 8: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].bcch_modificationPeriodCoeff= LTE_BCCH_Config__modificationPeriodCoeff_n8; + RRCcfg->radioresourceconfig[j].bcch_modificationPeriodCoeff = LTE_BCCH_Config__modificationPeriodCoeff_n8; break; case 16: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].bcch_modificationPeriodCoeff= LTE_BCCH_Config__modificationPeriodCoeff_n16; + RRCcfg->radioresourceconfig[j].bcch_modificationPeriodCoeff = LTE_BCCH_Config__modificationPeriodCoeff_n16; break; default: @@ -1451,40 +1446,40 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { break; } - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TimersAndConstants_t300= ccparams_lte.ue_TimersAndConstants_t300; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TimersAndConstants_t301= ccparams_lte.ue_TimersAndConstants_t301; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TimersAndConstants_t310= ccparams_lte.ue_TimersAndConstants_t310; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TimersAndConstants_t311= ccparams_lte.ue_TimersAndConstants_t311; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TimersAndConstants_n310= ccparams_lte.ue_TimersAndConstants_n310; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TimersAndConstants_n311= ccparams_lte.ue_TimersAndConstants_n311; + RRCcfg->radioresourceconfig[j].ue_TimersAndConstants_t300 = ccparams_lte.ue_TimersAndConstants_t300; + RRCcfg->radioresourceconfig[j].ue_TimersAndConstants_t301 = ccparams_lte.ue_TimersAndConstants_t301; + RRCcfg->radioresourceconfig[j].ue_TimersAndConstants_t310 = ccparams_lte.ue_TimersAndConstants_t310; + RRCcfg->radioresourceconfig[j].ue_TimersAndConstants_t311 = ccparams_lte.ue_TimersAndConstants_t311; + RRCcfg->radioresourceconfig[j].ue_TimersAndConstants_n310 = ccparams_lte.ue_TimersAndConstants_n310; + RRCcfg->radioresourceconfig[j].ue_TimersAndConstants_n311 = ccparams_lte.ue_TimersAndConstants_n311; switch (ccparams_lte.ue_TransmissionMode) { case 1: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TransmissionMode= LTE_AntennaInfoDedicated__transmissionMode_tm1; + RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm1; break; case 2: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TransmissionMode= LTE_AntennaInfoDedicated__transmissionMode_tm2; + RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm2; break; case 3: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TransmissionMode= LTE_AntennaInfoDedicated__transmissionMode_tm3; + RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm3; break; case 4: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TransmissionMode= LTE_AntennaInfoDedicated__transmissionMode_tm4; + RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm4; break; case 5: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TransmissionMode= LTE_AntennaInfoDedicated__transmissionMode_tm5; + RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm5; break; case 6: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TransmissionMode= LTE_AntennaInfoDedicated__transmissionMode_tm6; + RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm6; break; case 7: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_TransmissionMode= LTE_AntennaInfoDedicated__transmissionMode_tm7; + RRCcfg->radioresourceconfig[j].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm7; break; default: @@ -1494,7 +1489,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { break; } - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[j].ue_multiple_max= ccparams_lte.ue_multiple_max; + RRCcfg->radioresourceconfig[j].ue_multiple_max = ccparams_lte.ue_multiple_max; switch (ccparams_lte.N_RB_DL) { case 25: @@ -1532,15 +1527,16 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { } // eMBMS configuration - RRC_CONFIGURATION_REQ(msg_p).eMBMS_configured = 0; + RRCcfg->eMBMS_configured = 0; printf("No eMBMS configuration, skipping it\n"); // eMTC configuration char brparamspath[MAX_OPTNAME_SIZE*2 + 160]; sprintf(brparamspath,"%s.%s", ccspath, ENB_CONFIG_STRING_EMTC_PARAMETERS); config_get(eMTCParams, sizeof(eMTCParams)/sizeof(paramdef_t), brparamspath); - RRC_CONFIGURATION_REQ(msg_p).eMTC_configured = eMTCconfig.eMTC_configured&1; + RRCcfg->eMTC_configured = eMTCconfig.eMTC_configured & 1; - if (eMTCconfig.eMTC_configured > 0) fill_eMTC_configuration(msg_p,&eMTCconfig, i,j,RC.config_file_name,brparamspath); + if (eMTCconfig.eMTC_configured > 0) + fill_eMTC_configuration(RRCcfg, &eMTCconfig, i, j, RC.config_file_name, brparamspath); else printf("No eMTC configuration, skipping it\n"); // Sidelink configuration @@ -1548,14 +1544,15 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { sprintf(SLparamspath,"%s.%s", ccspath, ENB_CONFIG_STRING_SL_PARAMETERS); config_get( SLParams, sizeof(SLParams)/sizeof(paramdef_t), SLparamspath); // Sidelink Resource pool information - RRC_CONFIGURATION_REQ (msg_p).SL_configured=SLconfig.sidelink_configured&1; + RRCcfg->SL_configured = SLconfig.sidelink_configured & 1; - if (SLconfig.sidelink_configured==1) fill_SL_configuration(msg_p,&SLconfig,i,j,RC.config_file_name); + if (SLconfig.sidelink_configured == 1) + fill_SL_configuration(RRCcfg, &SLconfig, i, j, RC.config_file_name); else printf("No SL configuration skipping it\n"); } // !NODE_IS_DU(node_type) } - RRC_CONFIGURATION_REQ (msg_p).nr_scg_ssb_freq = ccparams_lte.nr_scg_ssb_freq; + RRCcfg->nr_scg_ssb_freq = ccparams_lte.nr_scg_ssb_freq; if (!NODE_IS_DU(rrc->node_type)) { char srb1path[MAX_OPTNAME_SIZE*2 + 8]; @@ -1861,8 +1858,6 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { } } } - - memcpy(&rrc->configuration, &RRC_CONFIGURATION_REQ(msg_p), sizeof(RRC_CONFIGURATION_REQ(msg_p))); } LOG_I(RRC,"Node type %d \n ", rrc->node_type); diff --git a/openair2/ENB_APP/enb_config.h b/openair2/ENB_APP/enb_config.h index c7f65f1d0e..904ace1b73 100644 --- a/openair2/ENB_APP/enb_config.h +++ b/openair2/ENB_APP/enb_config.h @@ -116,8 +116,8 @@ void read_config_and_init(void); int RCconfig_X2(MessageDef *msg_p, uint32_t i); int RCconfig_M2(MessageDef *msg_p, uint32_t i); -void fill_SL_configuration(MessageDef *msg_p, ccparams_sidelink_t *SLconfig,int cell_idx,int cc_idx,char *config_fname); -void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, int cell_idx,int cc_idx,char *config_fname,char *brparamspath); +void fill_SL_configuration(RrcConfigurationReq *RRCcfg, ccparams_sidelink_t *SLconfig, int cell_idx, int cc_idx, char *config_fname); +void fill_eMTC_configuration(RrcConfigurationReq *RRCcfg, ccparams_eMTC_t *eMTCconfig, int cell_idx, int cc_idx, char *config_fname, char *brparamspath); int RCconfig_DU_F1(MessageDef *msg_p, uint32_t i); void handle_f1ap_setup_resp(f1ap_setup_resp_t *resp); diff --git a/openair2/ENB_APP/enb_config_SL.c b/openair2/ENB_APP/enb_config_SL.c index aecede2db8..64c31d7397 100644 --- a/openair2/ENB_APP/enb_config_SL.c +++ b/openair2/ENB_APP/enb_config_SL.c @@ -40,254 +40,254 @@ #include "enb_paramdef.h" #include "enb_paramdef_sidelink.h" -void fill_SL_configuration(MessageDef *msg_p, ccparams_sidelink_t *SLconfig,int cell_idx,int cc_idx,char *config_fname) { - +void fill_SL_configuration(RrcConfigurationReq *RRCcfg, ccparams_sidelink_t *SLconfig, int cell_idx, int cc_idx, char *config_fname) +{ printf("Configuring SL\n"); //SIB18 if (strcmp(SLconfig->rxPool_sc_CP_Len,"normal")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_CP_Len[cc_idx] = LTE_SL_CP_Len_r12_normal; + RRCcfg->rxPool_sc_CP_Len[cc_idx] = LTE_SL_CP_Len_r12_normal; } else if (strcmp(SLconfig->rxPool_sc_CP_Len,"extended")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_CP_Len[cc_idx] = LTE_SL_CP_Len_r12_extended; + RRCcfg->rxPool_sc_CP_Len[cc_idx] = LTE_SL_CP_Len_r12_extended; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for rxPool_sc_CP_Len choice: normal,extended!\n", config_fname, cell_idx, SLconfig->rxPool_sc_CP_Len); if (strcmp(SLconfig->rxPool_sc_Period,"sf40")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_sf40; + RRCcfg->rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_sf40; } else if (strcmp(SLconfig->rxPool_sc_Period,"sf60")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_sf60; + RRCcfg->rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_sf60; } else if (strcmp(SLconfig->rxPool_sc_Period,"sf70")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_sf70; + RRCcfg->rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_sf70; } else if (strcmp(SLconfig->rxPool_sc_Period,"sf80")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_sf80; + RRCcfg->rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_sf80; } else if (strcmp(SLconfig->rxPool_sc_Period,"sf120")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_sf120; + RRCcfg->rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_sf120; } else if (strcmp(SLconfig->rxPool_sc_Period,"sf140")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_sf140; + RRCcfg->rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_sf140; } else if (strcmp(SLconfig->rxPool_sc_Period,"sf160")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_sf160; + RRCcfg->rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_sf160; } else if (strcmp(SLconfig->rxPool_sc_Period,"sf240")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_sf240; + RRCcfg->rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_sf240; } else if (strcmp(SLconfig->rxPool_sc_Period,"sf280")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_sf280; + RRCcfg->rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_sf280; } else if (strcmp(SLconfig->rxPool_sc_Period,"sf320")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_sf320; + RRCcfg->rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_sf320; } else if (strcmp(SLconfig->rxPool_sc_Period,"spare6")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_spare6; + RRCcfg->rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_spare6; } else if (strcmp(SLconfig->rxPool_sc_Period,"spare5")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_spare5; + RRCcfg->rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_spare5; } else if (strcmp(SLconfig->rxPool_sc_Period,"spare4")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_spare4; + RRCcfg->rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_spare4; } else if (strcmp(SLconfig->rxPool_sc_Period,"spare3")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_spare3; + RRCcfg->rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_spare3; } else if (strcmp(SLconfig->rxPool_sc_Period,"spare2")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_spare2; + RRCcfg->rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_spare2; } else if (strcmp(SLconfig->rxPool_sc_Period,"spare")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_spare; + RRCcfg->rxPool_sc_Period[cc_idx] = LTE_SL_PeriodComm_r12_spare; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for rxPool_sc_Period choice: sf40,sf60,sf70,sf80,sf120,sf140,sf160,sf240,sf280,sf320,spare6,spare5,spare4,spare3,spare2,spare!\n", config_fname, cell_idx, SLconfig->rxPool_sc_Period); if (strcmp(SLconfig->rxPool_data_CP_Len,"normal")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_data_CP_Len[cc_idx] = LTE_SL_CP_Len_r12_normal; + RRCcfg->rxPool_data_CP_Len[cc_idx] = LTE_SL_CP_Len_r12_normal; } else if (strcmp(SLconfig->rxPool_data_CP_Len,"extended")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_data_CP_Len[cc_idx] = LTE_SL_CP_Len_r12_extended; + RRCcfg->rxPool_data_CP_Len[cc_idx] = LTE_SL_CP_Len_r12_extended; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for rxPool_data_CP_Len choice: normal,extended!\n", config_fname, cell_idx, SLconfig->rxPool_data_CP_Len); - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_prb_Num[cc_idx] = SLconfig->rxPool_ResourceConfig_prb_Num; - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_prb_Start[cc_idx] = SLconfig->rxPool_ResourceConfig_prb_Start; - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_prb_End[cc_idx] = SLconfig->rxPool_ResourceConfig_prb_End; + RRCcfg->rxPool_ResourceConfig_prb_Num[cc_idx] = SLconfig->rxPool_ResourceConfig_prb_Num; + RRCcfg->rxPool_ResourceConfig_prb_Start[cc_idx] = SLconfig->rxPool_ResourceConfig_prb_Start; + RRCcfg->rxPool_ResourceConfig_prb_End[cc_idx] = SLconfig->rxPool_ResourceConfig_prb_End; if (strcmp(SLconfig->rxPool_ResourceConfig_offsetIndicator_present,"prNothing")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_offsetIndicator_present[cc_idx] = LTE_SL_OffsetIndicator_r12_PR_NOTHING; + RRCcfg->rxPool_ResourceConfig_offsetIndicator_present[cc_idx] = LTE_SL_OffsetIndicator_r12_PR_NOTHING; } else if (strcmp(SLconfig->rxPool_ResourceConfig_offsetIndicator_present,"prSmall")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_offsetIndicator_present[cc_idx] = LTE_SL_OffsetIndicator_r12_PR_small_r12; + RRCcfg->rxPool_ResourceConfig_offsetIndicator_present[cc_idx] = LTE_SL_OffsetIndicator_r12_PR_small_r12; } else if (strcmp(SLconfig->rxPool_ResourceConfig_offsetIndicator_present,"prLarge")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_offsetIndicator_present[cc_idx] = LTE_SL_OffsetIndicator_r12_PR_large_r12; + RRCcfg->rxPool_ResourceConfig_offsetIndicator_present[cc_idx] = LTE_SL_OffsetIndicator_r12_PR_large_r12; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for rxPool_ResourceConfig_offsetIndicator_present choice: prNothing,prSmal,prLarge!\n", config_fname, cell_idx, SLconfig->rxPool_ResourceConfig_offsetIndicator_present); - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_offsetIndicator_choice[cc_idx] = SLconfig->rxPool_ResourceConfig_offsetIndicator_choice; + RRCcfg->rxPool_ResourceConfig_offsetIndicator_choice[cc_idx] = SLconfig->rxPool_ResourceConfig_offsetIndicator_choice; if (strcmp(SLconfig->rxPool_ResourceConfig_subframeBitmap_present,"prNothing")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_NOTHING; + RRCcfg->rxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_NOTHING; } else if (strcmp(SLconfig->rxPool_ResourceConfig_subframeBitmap_present,"prBs4")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs4_r12; + RRCcfg->rxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs4_r12; } else if (strcmp(SLconfig->rxPool_ResourceConfig_subframeBitmap_present,"prBs8")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs8_r12; + RRCcfg->rxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs8_r12; } else if (strcmp(SLconfig->rxPool_ResourceConfig_subframeBitmap_present,"prBs12")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs12_r12; + RRCcfg->rxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs12_r12; } else if (strcmp(SLconfig->rxPool_ResourceConfig_subframeBitmap_present,"prBs16")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs16_r12; + RRCcfg->rxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs16_r12; } else if (strcmp(SLconfig->rxPool_ResourceConfig_subframeBitmap_present,"prBs30")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs30_r12; + RRCcfg->rxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs30_r12; } else if (strcmp(SLconfig->rxPool_ResourceConfig_subframeBitmap_present,"prBs40")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs40_r12; + RRCcfg->rxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs40_r12; } else if (strcmp(SLconfig->rxPool_ResourceConfig_subframeBitmap_present,"prBs42")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs42_r12; + RRCcfg->rxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs42_r12; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for rxPool_ResourceConfig_subframeBitmap_present choice: prNothing,prBs4,prBs8,prBs12,prBs16,prBs30,prBs40,prBs42!\n", config_fname, cell_idx, SLconfig->rxPool_ResourceConfig_subframeBitmap_present); - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_choice_bs_buf[cc_idx] = SLconfig->rxPool_ResourceConfig_subframeBitmap_choice_bs_buf; - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_choice_bs_size[cc_idx] = SLconfig->rxPool_ResourceConfig_subframeBitmap_choice_bs_size; - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused[cc_idx] = SLconfig->rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused; + RRCcfg->rxPool_ResourceConfig_subframeBitmap_choice_bs_buf[cc_idx] = SLconfig->rxPool_ResourceConfig_subframeBitmap_choice_bs_buf; + RRCcfg->rxPool_ResourceConfig_subframeBitmap_choice_bs_size[cc_idx] = SLconfig->rxPool_ResourceConfig_subframeBitmap_choice_bs_size; + RRCcfg->rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused[cc_idx] = SLconfig->rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused; //SIB19 - for discRxPool if (strcmp(SLconfig->discRxPool_cp_Len,"normal")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_cp_Len[cc_idx] = LTE_SL_CP_Len_r12_normal; + RRCcfg->discRxPool_cp_Len[cc_idx] = LTE_SL_CP_Len_r12_normal; } else if (strcmp(SLconfig->discRxPool_cp_Len,"extended")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_cp_Len[cc_idx] = LTE_SL_CP_Len_r12_extended; + RRCcfg->discRxPool_cp_Len[cc_idx] = LTE_SL_CP_Len_r12_extended; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPool_cp_Len choice: normal,extended!\n", config_fname, cell_idx, SLconfig->discRxPool_cp_Len); if (strcmp(SLconfig->discRxPool_discPeriod,"rf32")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf32; + RRCcfg->discRxPool_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf32; } else if (strcmp(SLconfig->discRxPool_discPeriod,"rf64")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf64; + RRCcfg->discRxPool_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf64; } else if (strcmp(SLconfig->discRxPool_discPeriod,"rf128")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf128; + RRCcfg->discRxPool_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf128; } else if (strcmp(SLconfig->discRxPool_discPeriod,"rf256")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf256; + RRCcfg->discRxPool_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf256; } else if (strcmp(SLconfig->discRxPool_discPeriod,"rf512")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf512; + RRCcfg->discRxPool_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf512; } else if (strcmp(SLconfig->discRxPool_discPeriod,"rf1024")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf1024; + RRCcfg->discRxPool_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf1024; } else if (strcmp(SLconfig->discRxPool_discPeriod,"rf16")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf16_v1310; + RRCcfg->discRxPool_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf16_v1310; } else if (strcmp(SLconfig->discRxPool_discPeriod,"spare")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_spare; + RRCcfg->discRxPool_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_spare; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPool_discPeriod choice: rf32,rf64,rf128,rf512,rf1024,rf16,spare!\n", config_fname, cell_idx, SLconfig->discRxPool_discPeriod); - RRC_CONFIGURATION_REQ (msg_p).discRxPool_numRetx[cc_idx] = SLconfig->discRxPool_numRetx; - RRC_CONFIGURATION_REQ (msg_p).discRxPool_numRepetition[cc_idx] = SLconfig->discRxPool_numRepetition; - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_prb_Num[cc_idx] = SLconfig->discRxPool_ResourceConfig_prb_Num; - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_prb_Start[cc_idx] = SLconfig->discRxPool_ResourceConfig_prb_Start; - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_prb_End[cc_idx] = SLconfig->discRxPool_ResourceConfig_prb_End; + RRCcfg->discRxPool_numRetx[cc_idx] = SLconfig->discRxPool_numRetx; + RRCcfg->discRxPool_numRepetition[cc_idx] = SLconfig->discRxPool_numRepetition; + RRCcfg->discRxPool_ResourceConfig_prb_Num[cc_idx] = SLconfig->discRxPool_ResourceConfig_prb_Num; + RRCcfg->discRxPool_ResourceConfig_prb_Start[cc_idx] = SLconfig->discRxPool_ResourceConfig_prb_Start; + RRCcfg->discRxPool_ResourceConfig_prb_End[cc_idx] = SLconfig->discRxPool_ResourceConfig_prb_End; if (strcmp(SLconfig->discRxPool_ResourceConfig_offsetIndicator_present,"prNothing")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_offsetIndicator_present[cc_idx] = LTE_SL_OffsetIndicator_r12_PR_NOTHING; + RRCcfg->discRxPool_ResourceConfig_offsetIndicator_present[cc_idx] = LTE_SL_OffsetIndicator_r12_PR_NOTHING; } else if (strcmp(SLconfig->discRxPool_ResourceConfig_offsetIndicator_present,"prSmall")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_offsetIndicator_present[cc_idx] = LTE_SL_OffsetIndicator_r12_PR_small_r12; + RRCcfg->discRxPool_ResourceConfig_offsetIndicator_present[cc_idx] = LTE_SL_OffsetIndicator_r12_PR_small_r12; } else if (strcmp(SLconfig->discRxPool_ResourceConfig_offsetIndicator_present,"prLarge")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_offsetIndicator_present[cc_idx] = LTE_SL_OffsetIndicator_r12_PR_large_r12; + RRCcfg->discRxPool_ResourceConfig_offsetIndicator_present[cc_idx] = LTE_SL_OffsetIndicator_r12_PR_large_r12; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPool_ResourceConfig_offsetIndicator_present choice: prNothing,prSmal,prLarge!\n", config_fname, cell_idx, SLconfig->discRxPool_ResourceConfig_offsetIndicator_present); - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_offsetIndicator_choice[cc_idx] = SLconfig->discRxPool_ResourceConfig_offsetIndicator_choice; + RRCcfg->discRxPool_ResourceConfig_offsetIndicator_choice[cc_idx] = SLconfig->discRxPool_ResourceConfig_offsetIndicator_choice; if (strcmp(SLconfig->discRxPool_ResourceConfig_subframeBitmap_present,"prNothing")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_NOTHING; + RRCcfg->discRxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_NOTHING; } else if (strcmp(SLconfig->discRxPool_ResourceConfig_subframeBitmap_present,"prBs4")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs4_r12; + RRCcfg->discRxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs4_r12; } else if (strcmp(SLconfig->discRxPool_ResourceConfig_subframeBitmap_present,"prBs8")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs8_r12; + RRCcfg->discRxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs8_r12; } else if (strcmp(SLconfig->discRxPool_ResourceConfig_subframeBitmap_present,"prBs12")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs12_r12; + RRCcfg->discRxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs12_r12; } else if (strcmp(SLconfig->discRxPool_ResourceConfig_subframeBitmap_present,"prBs16")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs16_r12; + RRCcfg->discRxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs16_r12; } else if (strcmp(SLconfig->discRxPool_ResourceConfig_subframeBitmap_present,"prBs30")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs30_r12; + RRCcfg->discRxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs30_r12; } else if (strcmp(SLconfig->discRxPool_ResourceConfig_subframeBitmap_present,"prBs40")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs40_r12; + RRCcfg->discRxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs40_r12; } else if (strcmp(SLconfig->discRxPool_ResourceConfig_subframeBitmap_present,"prBs42")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs42_r12; + RRCcfg->discRxPool_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs42_r12; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPool_ResourceConfig_subframeBitmap_present choice: prNothing,prBs4,prBs8,prBs12,prBs16,prBs30,prBs40,prBs42!\n", config_fname, cell_idx, SLconfig->discRxPool_ResourceConfig_subframeBitmap_present); - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf[cc_idx] = SLconfig->discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf; - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_choice_bs_size[cc_idx] = SLconfig->discRxPool_ResourceConfig_subframeBitmap_choice_bs_size; - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused[cc_idx] = SLconfig->discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused; + RRCcfg->discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf[cc_idx] = SLconfig->discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf; + RRCcfg->discRxPool_ResourceConfig_subframeBitmap_choice_bs_size[cc_idx] = SLconfig->discRxPool_ResourceConfig_subframeBitmap_choice_bs_size; + RRCcfg->discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused[cc_idx] = SLconfig->discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused; //SIB19 - For discRxPoolPS if (strcmp(SLconfig->discRxPoolPS_cp_Len,"normal")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_cp_Len[cc_idx] = LTE_SL_CP_Len_r12_normal; + RRCcfg->discRxPoolPS_cp_Len[cc_idx] = LTE_SL_CP_Len_r12_normal; } else if (strcmp(SLconfig->discRxPoolPS_cp_Len,"extended")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_cp_Len[cc_idx] = LTE_SL_CP_Len_r12_extended; + RRCcfg->discRxPoolPS_cp_Len[cc_idx] = LTE_SL_CP_Len_r12_extended; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPoolPS_cp_Len choice: normal,extended!\n", config_fname, cell_idx, SLconfig->discRxPoolPS_cp_Len); if (strcmp(SLconfig->discRxPoolPS_discPeriod,"rf32")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf32; + RRCcfg->discRxPoolPS_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf32; } else if (strcmp(SLconfig->discRxPoolPS_discPeriod,"rf64")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf64; + RRCcfg->discRxPoolPS_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf64; } else if (strcmp(SLconfig->discRxPoolPS_discPeriod,"rf128")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf128; + RRCcfg->discRxPoolPS_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf128; } else if (strcmp(SLconfig->discRxPoolPS_discPeriod,"rf256")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf256; + RRCcfg->discRxPoolPS_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf256; } else if (strcmp(SLconfig->discRxPoolPS_discPeriod,"rf512")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf512; + RRCcfg->discRxPoolPS_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf512; } else if (strcmp(SLconfig->discRxPoolPS_discPeriod,"rf1024")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf1024; + RRCcfg->discRxPoolPS_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf1024; } else if (strcmp(SLconfig->discRxPoolPS_discPeriod,"rf16")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf16_v1310; + RRCcfg->discRxPoolPS_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_rf16_v1310; } else if (strcmp(SLconfig->discRxPoolPS_discPeriod,"spare")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_spare; + RRCcfg->discRxPoolPS_discPeriod[cc_idx] = LTE_SL_DiscResourcePool_r12__discPeriod_r12_spare; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPoolPS_discPeriod choice: rf32,rf64,rf128,rf512,rf1024,rf16,spare!\n", config_fname, cell_idx, SLconfig->discRxPoolPS_discPeriod); - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_numRetx[cc_idx] = SLconfig->discRxPoolPS_numRetx; - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_numRepetition[cc_idx] = SLconfig->discRxPoolPS_numRepetition; - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_prb_Num[cc_idx] = SLconfig->discRxPoolPS_ResourceConfig_prb_Num; - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_prb_Start[cc_idx] = SLconfig->discRxPoolPS_ResourceConfig_prb_Start; - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_prb_End[cc_idx] = SLconfig->discRxPoolPS_ResourceConfig_prb_End; + RRCcfg->discRxPoolPS_numRetx[cc_idx] = SLconfig->discRxPoolPS_numRetx; + RRCcfg->discRxPoolPS_numRepetition[cc_idx] = SLconfig->discRxPoolPS_numRepetition; + RRCcfg->discRxPoolPS_ResourceConfig_prb_Num[cc_idx] = SLconfig->discRxPoolPS_ResourceConfig_prb_Num; + RRCcfg->discRxPoolPS_ResourceConfig_prb_Start[cc_idx] = SLconfig->discRxPoolPS_ResourceConfig_prb_Start; + RRCcfg->discRxPoolPS_ResourceConfig_prb_End[cc_idx] = SLconfig->discRxPoolPS_ResourceConfig_prb_End; if (strcmp(SLconfig->discRxPoolPS_ResourceConfig_offsetIndicator_present,"prNothing")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_offsetIndicator_present[cc_idx] = LTE_SL_OffsetIndicator_r12_PR_NOTHING; + RRCcfg->discRxPoolPS_ResourceConfig_offsetIndicator_present[cc_idx] = LTE_SL_OffsetIndicator_r12_PR_NOTHING; } else if (strcmp(SLconfig->discRxPoolPS_ResourceConfig_offsetIndicator_present,"prSmall")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_offsetIndicator_present[cc_idx] = LTE_SL_OffsetIndicator_r12_PR_small_r12; + RRCcfg->discRxPoolPS_ResourceConfig_offsetIndicator_present[cc_idx] = LTE_SL_OffsetIndicator_r12_PR_small_r12; } else if (strcmp(SLconfig->discRxPoolPS_ResourceConfig_offsetIndicator_present,"prLarge")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_offsetIndicator_present[cc_idx] = LTE_SL_OffsetIndicator_r12_PR_large_r12; + RRCcfg->discRxPoolPS_ResourceConfig_offsetIndicator_present[cc_idx] = LTE_SL_OffsetIndicator_r12_PR_large_r12; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPoolPS_ResourceConfig_offsetIndicator_present choice: prNothing,prSmal,prLarge!\n", config_fname, cell_idx, SLconfig->discRxPoolPS_ResourceConfig_offsetIndicator_present); - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_offsetIndicator_choice[cc_idx] = SLconfig->discRxPoolPS_ResourceConfig_offsetIndicator_choice; + RRCcfg->discRxPoolPS_ResourceConfig_offsetIndicator_choice[cc_idx] = SLconfig->discRxPoolPS_ResourceConfig_offsetIndicator_choice; if (strcmp(SLconfig->discRxPoolPS_ResourceConfig_subframeBitmap_present,"prNothing")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_NOTHING; + RRCcfg->discRxPoolPS_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_NOTHING; } else if (strcmp(SLconfig->discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs4")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs4_r12; + RRCcfg->discRxPoolPS_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs4_r12; } else if (strcmp(SLconfig->discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs8")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs8_r12; + RRCcfg->discRxPoolPS_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs8_r12; } else if (strcmp(SLconfig->discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs12")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs12_r12; + RRCcfg->discRxPoolPS_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs12_r12; } else if (strcmp(SLconfig->discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs16")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs16_r12; + RRCcfg->discRxPoolPS_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs16_r12; } else if (strcmp(SLconfig->discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs30")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs30_r12; + RRCcfg->discRxPoolPS_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs30_r12; } else if (strcmp(SLconfig->discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs40")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs40_r12; + RRCcfg->discRxPoolPS_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs40_r12; } else if (strcmp(SLconfig->discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs42")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs42_r12; + RRCcfg->discRxPoolPS_ResourceConfig_subframeBitmap_present[cc_idx] = LTE_SubframeBitmapSL_r12_PR_bs42_r12; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPoolPS_ResourceConfig_subframeBitmap_present choice: prNothing,prBs4,prBs8,prBs12,prBs16,prBs30,prBs40,prBs42!\n", config_fname, cell_idx, SLconfig->discRxPoolPS_ResourceConfig_subframeBitmap_present); - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_buf[cc_idx] = SLconfig->discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_buf; - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_size[cc_idx] = SLconfig->discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_size; - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_bits_unused[cc_idx] = SLconfig->discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_bits_unused; + RRCcfg->discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_buf[cc_idx] = SLconfig->discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_buf; + RRCcfg->discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_size[cc_idx] = SLconfig->discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_size; + RRCcfg->discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_bits_unused[cc_idx] = SLconfig->discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_bits_unused; } // sidelink_configured==1 diff --git a/openair2/ENB_APP/enb_config_eMTC.c b/openair2/ENB_APP/enb_config_eMTC.c index e4ff458886..26eff60460 100644 --- a/openair2/ENB_APP/enb_config_eMTC.c +++ b/openair2/ENB_APP/enb_config_eMTC.c @@ -39,8 +39,8 @@ #include "RRC_config_tools.h" #include "enb_paramdef.h" -void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, int cell_idx,int cc_idx,char *config_fname,char *brparamspath) { - +void fill_eMTC_configuration(RrcConfigurationReq *RRCcfg, ccparams_eMTC_t *eMTCconfig, int cell_idx, int cc_idx, char *config_fname, char *brparamspath) +{ paramdef_t schedulingInfoBrParams[] = SI_INFO_BR_DESC(eMTCconfig); paramlist_def_t schedulingInfoBrParamList = {ENB_CONFIG_STRING_SCHEDULING_INFO_BR, NULL, 0}; paramdef_t rachcelevelParams[] = RACH_CE_LEVELINFOLIST_R13_DESC(eMTCconfig); @@ -57,96 +57,88 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in printf("Found parameters for eMTC from %s : %s\n",config_fname,brparamspath); - RRC_CONFIGURATION_REQ(msg_p).schedulingInfoSIB1_BR_r13[cc_idx] = eMTCconfig->schedulingInfoSIB1_BR_r13; - + RRCcfg->schedulingInfoSIB1_BR_r13[cc_idx] = eMTCconfig->schedulingInfoSIB1_BR_r13; if (!strcmp(eMTCconfig->cellSelectionInfoCE_r13, "ENABLE")) { - RRC_CONFIGURATION_REQ(msg_p).cellSelectionInfoCE_r13[cc_idx] = true; - RRC_CONFIGURATION_REQ(msg_p).q_RxLevMinCE_r13[cc_idx]= eMTCconfig->q_RxLevMinCE_r13; - // RRC_CONFIGURATION_REQ(msg_p).q_QualMinRSRQ_CE_r13[cc_idx]= calloc(1, sizeof(long)); - // *RRC_CONFIGURATION_REQ(msg_p).q_QualMinRSRQ_CE_r13[cc_idx]= q_QualMinRSRQ_CE_r13; + RRCcfg->cellSelectionInfoCE_r13[cc_idx] = true; + RRCcfg->q_RxLevMinCE_r13[cc_idx] = eMTCconfig->q_RxLevMinCE_r13; + // RRCcfg->q_QualMinRSRQ_CE_r13[cc_idx]= calloc(1, sizeof(long)); + // *RRCcfg->q_QualMinRSRQ_CE_r13[cc_idx]= q_QualMinRSRQ_CE_r13; } else { - RRC_CONFIGURATION_REQ(msg_p).cellSelectionInfoCE_r13[cc_idx] = false; + RRCcfg->cellSelectionInfoCE_r13[cc_idx] = false; } if (!strcmp(eMTCconfig->bandwidthReducedAccessRelatedInfo_r13, "ENABLE")) { - RRC_CONFIGURATION_REQ(msg_p).bandwidthReducedAccessRelatedInfo_r13[cc_idx] = true; - - + RRCcfg->bandwidthReducedAccessRelatedInfo_r13[cc_idx] = true; if (!strcmp(eMTCconfig->si_WindowLength_BR_r13, "ms20")) { - RRC_CONFIGURATION_REQ(msg_p).si_WindowLength_BR_r13[cc_idx] = 0; + RRCcfg->si_WindowLength_BR_r13[cc_idx] = 0; } else if (!strcmp(eMTCconfig->si_WindowLength_BR_r13, "ms40")) { - RRC_CONFIGURATION_REQ(msg_p).si_WindowLength_BR_r13[cc_idx] = 1; + RRCcfg->si_WindowLength_BR_r13[cc_idx] = 1; } else if (!strcmp(eMTCconfig->si_WindowLength_BR_r13, "ms60")) { - RRC_CONFIGURATION_REQ(msg_p).si_WindowLength_BR_r13[cc_idx] = 2; + RRCcfg->si_WindowLength_BR_r13[cc_idx] = 2; } else if (!strcmp(eMTCconfig->si_WindowLength_BR_r13, "ms80")) { - RRC_CONFIGURATION_REQ(msg_p).si_WindowLength_BR_r13[cc_idx] = 3; + RRCcfg->si_WindowLength_BR_r13[cc_idx] = 3; } else if (!strcmp(eMTCconfig->si_WindowLength_BR_r13, "ms120")) { - RRC_CONFIGURATION_REQ(msg_p).si_WindowLength_BR_r13[cc_idx] = 4; + RRCcfg->si_WindowLength_BR_r13[cc_idx] = 4; } else if (!strcmp(eMTCconfig->si_WindowLength_BR_r13, "ms160")) { - RRC_CONFIGURATION_REQ(msg_p).si_WindowLength_BR_r13[cc_idx] = 5; + RRCcfg->si_WindowLength_BR_r13[cc_idx] = 5; } else if (!strcmp(eMTCconfig->si_WindowLength_BR_r13, "ms200")) { - RRC_CONFIGURATION_REQ(msg_p).si_WindowLength_BR_r13[cc_idx] = 6; + RRCcfg->si_WindowLength_BR_r13[cc_idx] = 6; } else if (!strcmp(eMTCconfig->si_WindowLength_BR_r13, "spare")) { - RRC_CONFIGURATION_REQ(msg_p).si_WindowLength_BR_r13[cc_idx] = 7; + RRCcfg->si_WindowLength_BR_r13[cc_idx] = 7; } if (!strcmp(eMTCconfig->si_RepetitionPattern_r13, "everyRF")) { - RRC_CONFIGURATION_REQ(msg_p).si_RepetitionPattern_r13[cc_idx] = 0; + RRCcfg->si_RepetitionPattern_r13[cc_idx] = 0; } else if (!strcmp(eMTCconfig->si_RepetitionPattern_r13, "every2ndRF")) { - RRC_CONFIGURATION_REQ(msg_p).si_RepetitionPattern_r13[cc_idx] = 1; + RRCcfg->si_RepetitionPattern_r13[cc_idx] = 1; } else if (!strcmp(eMTCconfig->si_RepetitionPattern_r13, "every4thRF")) { - RRC_CONFIGURATION_REQ(msg_p).si_RepetitionPattern_r13[cc_idx] = 2; + RRCcfg->si_RepetitionPattern_r13[cc_idx] = 2; } else if (!strcmp(eMTCconfig->si_RepetitionPattern_r13, "every8thRF")) { - RRC_CONFIGURATION_REQ(msg_p).si_RepetitionPattern_r13[cc_idx] = 3; + RRCcfg->si_RepetitionPattern_r13[cc_idx] = 3; } } else { - RRC_CONFIGURATION_REQ(msg_p).bandwidthReducedAccessRelatedInfo_r13[cc_idx] = false; + RRCcfg->bandwidthReducedAccessRelatedInfo_r13[cc_idx] = false; } char schedulingInfoBrPath[MAX_OPTNAME_SIZE * 2]; config_getlist(&schedulingInfoBrParamList, NULL, 0, brparamspath); - RRC_CONFIGURATION_REQ (msg_p).scheduling_info_br_size[cc_idx] = schedulingInfoBrParamList.numelt; + RRCcfg->scheduling_info_br_size[cc_idx] = schedulingInfoBrParamList.numelt; int siInfoindex; for (siInfoindex = 0; siInfoindex < schedulingInfoBrParamList.numelt; siInfoindex++) { sprintf(schedulingInfoBrPath, "%s.%s.[%i]", brparamspath, ENB_CONFIG_STRING_EMTC_PARAMETERS, siInfoindex); config_get(schedulingInfoBrParams, sizeof(schedulingInfoBrParams) / sizeof(paramdef_t), schedulingInfoBrPath); - RRC_CONFIGURATION_REQ (msg_p).si_Narrowband_r13[cc_idx][siInfoindex] = eMTCconfig->si_Narrowband_r13; - RRC_CONFIGURATION_REQ (msg_p).si_TBS_r13[cc_idx][siInfoindex] = eMTCconfig->si_TBS_r13; + RRCcfg->si_Narrowband_r13[cc_idx][siInfoindex] = eMTCconfig->si_Narrowband_r13; + RRCcfg->si_TBS_r13[cc_idx][siInfoindex] = eMTCconfig->si_TBS_r13; } + // RRCcfg->radioresourceconfig[cc_idx].system_info_value_tag_SI_size[cc_idx] = 0; - - // RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig[cc_idx].system_info_value_tag_SI_size[cc_idx] = 0; - - - RRC_CONFIGURATION_REQ(msg_p).fdd_DownlinkOrTddSubframeBitmapBR_r13[cc_idx] = CALLOC(1, sizeof(BOOLEAN_t)); + RRCcfg->fdd_DownlinkOrTddSubframeBitmapBR_r13[cc_idx] = CALLOC(1, sizeof(BOOLEAN_t)); if (!strcmp(eMTCconfig->fdd_DownlinkOrTddSubframeBitmapBR_r13, "subframePattern40-r13")) { - *RRC_CONFIGURATION_REQ(msg_p).fdd_DownlinkOrTddSubframeBitmapBR_r13[cc_idx] = false; - RRC_CONFIGURATION_REQ(msg_p).fdd_DownlinkOrTddSubframeBitmapBR_val_r13[cc_idx] = eMTCconfig->fdd_DownlinkOrTddSubframeBitmapBR_val_r13; + *RRCcfg->fdd_DownlinkOrTddSubframeBitmapBR_r13[cc_idx] = false; + RRCcfg->fdd_DownlinkOrTddSubframeBitmapBR_val_r13[cc_idx] = eMTCconfig->fdd_DownlinkOrTddSubframeBitmapBR_val_r13; } else { - *RRC_CONFIGURATION_REQ(msg_p).fdd_DownlinkOrTddSubframeBitmapBR_r13[cc_idx] = true; - RRC_CONFIGURATION_REQ(msg_p).fdd_DownlinkOrTddSubframeBitmapBR_val_r13[cc_idx] = eMTCconfig->fdd_DownlinkOrTddSubframeBitmapBR_val_r13; + *RRCcfg->fdd_DownlinkOrTddSubframeBitmapBR_r13[cc_idx] = true; + RRCcfg->fdd_DownlinkOrTddSubframeBitmapBR_val_r13[cc_idx] = eMTCconfig->fdd_DownlinkOrTddSubframeBitmapBR_val_r13; } - RRC_CONFIGURATION_REQ(msg_p).startSymbolBR_r13[cc_idx] = eMTCconfig->startSymbolBR_r13; - + RRCcfg->startSymbolBR_r13[cc_idx] = eMTCconfig->startSymbolBR_r13; if (!strcmp(eMTCconfig->si_HoppingConfigCommon_r13, "off")) { - RRC_CONFIGURATION_REQ(msg_p).si_HoppingConfigCommon_r13[cc_idx] = 1; + RRCcfg->si_HoppingConfigCommon_r13[cc_idx] = 1; } else if (!strcmp(eMTCconfig->si_HoppingConfigCommon_r13, "on")) { - RRC_CONFIGURATION_REQ(msg_p).si_HoppingConfigCommon_r13[cc_idx] = 0; + RRCcfg->si_HoppingConfigCommon_r13[cc_idx] = 0; } - - RRC_CONFIGURATION_REQ(msg_p).si_ValidityTime_r13[cc_idx] = calloc(1, sizeof(long)); + RRCcfg->si_ValidityTime_r13[cc_idx] = calloc(1, sizeof(long)); if (!strcmp(eMTCconfig->si_ValidityTime_r13, "true")) { - *RRC_CONFIGURATION_REQ(msg_p).si_ValidityTime_r13[cc_idx] = 0; + *RRCcfg->si_ValidityTime_r13[cc_idx] = 0; } else { AssertFatal(0, "Failed to parse eNB configuration file %s, enb %d si_ValidityTime_r13 unknown value!\n", @@ -156,107 +148,100 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in if (!strcmp(eMTCconfig->freqHoppingParametersDL_r13, "ENABLE")) { - RRC_CONFIGURATION_REQ(msg_p).freqHoppingParametersDL_r13[cc_idx] = true; + RRCcfg->freqHoppingParametersDL_r13[cc_idx] = true; - if (!strcmp(eMTCconfig->interval_DLHoppingConfigCommonModeA_r13, "interval-TDD-r13")) - RRC_CONFIGURATION_REQ(msg_p).interval_DLHoppingConfigCommonModeA_r13[cc_idx] = false; - else - RRC_CONFIGURATION_REQ(msg_p).interval_DLHoppingConfigCommonModeA_r13[cc_idx] = true; - RRC_CONFIGURATION_REQ(msg_p).interval_DLHoppingConfigCommonModeA_r13_val[cc_idx] = eMTCconfig->interval_DLHoppingConfigCommonModeA_r13_val; + if (!strcmp(eMTCconfig->interval_DLHoppingConfigCommonModeA_r13, "interval-TDD-r13")) + RRCcfg->interval_DLHoppingConfigCommonModeA_r13[cc_idx] = false; + else + RRCcfg->interval_DLHoppingConfigCommonModeA_r13[cc_idx] = true; + RRCcfg->interval_DLHoppingConfigCommonModeA_r13_val[cc_idx] = eMTCconfig->interval_DLHoppingConfigCommonModeA_r13_val; - if (!strcmp(eMTCconfig->interval_DLHoppingConfigCommonModeB_r13, "interval-TDD-r13")) - RRC_CONFIGURATION_REQ(msg_p).interval_DLHoppingConfigCommonModeB_r13[cc_idx] = false; - else - RRC_CONFIGURATION_REQ(msg_p).interval_DLHoppingConfigCommonModeB_r13[cc_idx] = true; - RRC_CONFIGURATION_REQ(msg_p).interval_DLHoppingConfigCommonModeB_r13_val[cc_idx] = eMTCconfig->interval_DLHoppingConfigCommonModeB_r13_val; + if (!strcmp(eMTCconfig->interval_DLHoppingConfigCommonModeB_r13, "interval-TDD-r13")) + RRCcfg->interval_DLHoppingConfigCommonModeB_r13[cc_idx] = false; + else + RRCcfg->interval_DLHoppingConfigCommonModeB_r13[cc_idx] = true; + RRCcfg->interval_DLHoppingConfigCommonModeB_r13_val[cc_idx] = eMTCconfig->interval_DLHoppingConfigCommonModeB_r13_val; - RRC_CONFIGURATION_REQ(msg_p).mpdcch_pdsch_HoppingNB_r13[cc_idx] = calloc(1, sizeof(long)); - if (!strcmp(eMTCconfig->mpdcch_pdsch_HoppingNB_r13, "nb2")) { - *RRC_CONFIGURATION_REQ(msg_p).mpdcch_pdsch_HoppingNB_r13[cc_idx] = 0; + RRCcfg->mpdcch_pdsch_HoppingNB_r13[cc_idx] = calloc(1, sizeof(long)); + if (!strcmp(eMTCconfig->mpdcch_pdsch_HoppingNB_r13, "nb2")) { + *RRCcfg->mpdcch_pdsch_HoppingNB_r13[cc_idx] = 0; } else if (!strcmp(eMTCconfig->mpdcch_pdsch_HoppingNB_r13, "nb4")) { - *RRC_CONFIGURATION_REQ(msg_p).mpdcch_pdsch_HoppingNB_r13[cc_idx] = 1; + *RRCcfg->mpdcch_pdsch_HoppingNB_r13[cc_idx] = 1; } else { AssertFatal(0, "Failed to parse eNB configuration file %s, enb %d mpdcch_pdsch_HoppingNB_r13 unknown value!\n", config_fname, cell_idx); } - - RRC_CONFIGURATION_REQ(msg_p).mpdcch_pdsch_HoppingOffset_r13[cc_idx] = calloc(1, sizeof(long)); - *RRC_CONFIGURATION_REQ(msg_p).mpdcch_pdsch_HoppingOffset_r13[cc_idx] = eMTCconfig->mpdcch_pdsch_HoppingOffset_r13; + RRCcfg->mpdcch_pdsch_HoppingOffset_r13[cc_idx] = calloc(1, sizeof(long)); + *RRCcfg->mpdcch_pdsch_HoppingOffset_r13[cc_idx] = eMTCconfig->mpdcch_pdsch_HoppingOffset_r13; } else { - RRC_CONFIGURATION_REQ(msg_p).freqHoppingParametersDL_r13[cc_idx] = false; + RRCcfg->freqHoppingParametersDL_r13[cc_idx] = false; } /** ------------------------------SIB2/3 BR------------------------------------------ */ + RRCcfg->radioresourceconfig_BR[cc_idx].prach_root = eMTCconfig->ccparams.prach_root; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].prach_root = eMTCconfig->ccparams.prach_root; + if ((eMTCconfig->ccparams.prach_root < 0) || (eMTCconfig->ccparams.prach_root > 1023)) + AssertFatal(0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_root choice: 0..1023 !\n", config_fname, cell_idx, eMTCconfig->ccparams.prach_root); - if ((eMTCconfig->ccparams.prach_root <0) || (eMTCconfig->ccparams.prach_root > 1023)) - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_root choice: 0..1023 !\n", - config_fname, cell_idx,eMTCconfig->ccparams.prach_root); + RRCcfg->radioresourceconfig_BR[cc_idx].prach_config_index = eMTCconfig->ccparams.prach_config_index; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].prach_config_index = eMTCconfig->ccparams.prach_config_index; + if ((eMTCconfig->ccparams.prach_config_index < 0) || (eMTCconfig->ccparams.prach_config_index > 63)) + AssertFatal( + 0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_config_index choice: 0..1023 !\n", config_fname, cell_idx, eMTCconfig->ccparams.prach_config_index); - if ((eMTCconfig->ccparams.prach_config_index <0) || (eMTCconfig->ccparams.prach_config_index > 63)) - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_config_index choice: 0..1023 !\n", - config_fname, cell_idx,eMTCconfig->ccparams.prach_config_index); - - if (!eMTCconfig->ccparams.prach_high_speed) - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d define %s: ENABLE,DISABLE!\n", - config_fname, cell_idx,ENB_CONFIG_STRING_PRACH_HIGH_SPEED); - else if (strcmp(eMTCconfig->ccparams.prach_high_speed, "ENABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].prach_high_speed = true; + if (!eMTCconfig->ccparams.prach_high_speed) + AssertFatal(0, "Failed to parse eNB configuration file %s, enb %d define %s: ENABLE,DISABLE!\n", config_fname, cell_idx, ENB_CONFIG_STRING_PRACH_HIGH_SPEED); + else if (strcmp(eMTCconfig->ccparams.prach_high_speed, "ENABLE") == 0) { + RRCcfg->radioresourceconfig_BR[cc_idx].prach_high_speed = true; } else if (strcmp(eMTCconfig->ccparams.prach_high_speed, "DISABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].prach_high_speed = false; + RRCcfg->radioresourceconfig_BR[cc_idx].prach_high_speed = false; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for prach_config choice: ENABLE,DISABLE !\n", config_fname, cell_idx,eMTCconfig->ccparams.prach_high_speed); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].prach_zero_correlation = eMTCconfig->ccparams.prach_zero_correlation; + RRCcfg->radioresourceconfig_BR[cc_idx].prach_zero_correlation = eMTCconfig->ccparams.prach_zero_correlation; if ((eMTCconfig->ccparams.prach_zero_correlation <0) || (eMTCconfig->ccparams.prach_zero_correlation > 15)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_zero_correlation choice: 0..15!\n", config_fname, cell_idx,eMTCconfig->ccparams.prach_zero_correlation); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].prach_freq_offset = eMTCconfig->ccparams.prach_freq_offset; + RRCcfg->radioresourceconfig_BR[cc_idx].prach_freq_offset = eMTCconfig->ccparams.prach_freq_offset; if ((eMTCconfig->ccparams.prach_freq_offset <0) || (eMTCconfig->ccparams.prach_freq_offset > 94)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_freq_offset choice: 0..94!\n", config_fname, cell_idx,eMTCconfig->ccparams.prach_freq_offset); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_delta_shift = eMTCconfig->ccparams.pucch_delta_shift-1; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_delta_shift = eMTCconfig->ccparams.pucch_delta_shift - 1; if ((eMTCconfig->ccparams.pucch_delta_shift <1) || (eMTCconfig->ccparams.pucch_delta_shift > 3)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pucch_delta_shift choice: 1..3!\n", config_fname, cell_idx,eMTCconfig->ccparams.pucch_delta_shift); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_nRB_CQI = eMTCconfig->ccparams.pucch_nRB_CQI; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_nRB_CQI = eMTCconfig->ccparams.pucch_nRB_CQI; if ((eMTCconfig->ccparams.pucch_nRB_CQI <0) || (eMTCconfig->ccparams.pucch_nRB_CQI > 98)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pucch_nRB_CQI choice: 0..98!\n", config_fname, cell_idx,eMTCconfig->ccparams.pucch_nRB_CQI); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_nCS_AN = eMTCconfig->ccparams.pucch_nCS_AN; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_nCS_AN = eMTCconfig->ccparams.pucch_nCS_AN; if ((eMTCconfig->ccparams.pucch_nCS_AN <0) || (eMTCconfig->ccparams.pucch_nCS_AN > 7)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pucch_nCS_AN choice: 0..7!\n", config_fname, cell_idx,eMTCconfig->ccparams.pucch_nCS_AN); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_n1_AN = eMTCconfig->ccparams.pucch_n1_AN; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_n1_AN = eMTCconfig->ccparams.pucch_n1_AN; if ((eMTCconfig->ccparams.pucch_n1_AN <0) || (eMTCconfig->ccparams.pucch_n1_AN > 2047)) AssertFatal (0, @@ -264,21 +249,21 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in config_fname, cell_idx,eMTCconfig->ccparams.pucch_n1_AN); //#endif - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pdsch_referenceSignalPower = eMTCconfig->ccparams.pdsch_referenceSignalPower; + RRCcfg->radioresourceconfig_BR[cc_idx].pdsch_referenceSignalPower = eMTCconfig->ccparams.pdsch_referenceSignalPower; if ((eMTCconfig->ccparams.pdsch_referenceSignalPower <-60) || (eMTCconfig->ccparams.pdsch_referenceSignalPower > 50)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pdsch_referenceSignalPower choice:-60..50!\n", config_fname, cell_idx,eMTCconfig->ccparams.pdsch_referenceSignalPower); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pdsch_p_b = eMTCconfig->ccparams.pdsch_p_b; + RRCcfg->radioresourceconfig_BR[cc_idx].pdsch_p_b = eMTCconfig->ccparams.pdsch_p_b; if ((eMTCconfig->ccparams.pdsch_p_b <0) || (eMTCconfig->ccparams.pdsch_p_b > 3)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pdsch_p_b choice: 0..3!\n", config_fname, cell_idx,eMTCconfig->ccparams.pdsch_p_b); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_n_SB = eMTCconfig->ccparams.pusch_n_SB; + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_n_SB = eMTCconfig->ccparams.pusch_n_SB; if ((eMTCconfig->ccparams.pusch_n_SB <1) || (eMTCconfig->ccparams.pusch_n_SB > 4)) AssertFatal (0, @@ -290,15 +275,15 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in "Failed to parse eNB configuration file %s, enb %d define %s: interSubframe,intraAndInterSubframe!\n", config_fname, cell_idx,ENB_CONFIG_STRING_PUSCH_HOPPINGMODE); else if (strcmp(eMTCconfig->ccparams.pusch_hoppingMode,"interSubFrame")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_hoppingMode = LTE_PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_interSubFrame; + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_hoppingMode = LTE_PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_interSubFrame; } else if (strcmp(eMTCconfig->ccparams.pusch_hoppingMode,"intraAndInterSubFrame")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_hoppingMode = LTE_PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_intraAndInterSubFrame; + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_hoppingMode = LTE_PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_intraAndInterSubFrame; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pusch_hoppingMode choice: interSubframe,intraAndInterSubframe!\n", config_fname, cell_idx,eMTCconfig->ccparams.pusch_hoppingMode); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_hoppingOffset = eMTCconfig->ccparams.pusch_hoppingOffset; + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_hoppingOffset = eMTCconfig->ccparams.pusch_hoppingOffset; if ((eMTCconfig->ccparams.pusch_hoppingOffset<0) || (eMTCconfig->ccparams.pusch_hoppingOffset>98)) AssertFatal (0, @@ -310,9 +295,9 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in "Failed to parse eNB configuration file %s, enb %d define %s: ENABLE,DISABLE!\n", config_fname, cell_idx,ENB_CONFIG_STRING_PUSCH_ENABLE64QAM); else if (strcmp(eMTCconfig->ccparams.pusch_enable64QAM, "ENABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_enable64QAM = true; + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_enable64QAM = true; } else if (strcmp(eMTCconfig->ccparams.pusch_enable64QAM, "DISABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_enable64QAM = false; + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_enable64QAM = false; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pusch_enable64QAM choice: ENABLE,DISABLE!\n", @@ -323,15 +308,15 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in "Failed to parse eNB configuration file %s, enb %d define %s: ENABLE,DISABLE!\n", config_fname, cell_idx,ENB_CONFIG_STRING_PUSCH_GROUP_HOPPING_EN); else if (strcmp(eMTCconfig->ccparams.pusch_groupHoppingEnabled, "ENABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_groupHoppingEnabled = true; + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_groupHoppingEnabled = true; } else if (strcmp(eMTCconfig->ccparams.pusch_groupHoppingEnabled, "DISABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_groupHoppingEnabled= false; + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_groupHoppingEnabled = false; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pusch_groupHoppingEnabled choice: ENABLE,DISABLE!\n", config_fname, cell_idx,eMTCconfig->ccparams.pusch_groupHoppingEnabled); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_groupAssignment = eMTCconfig->ccparams.pusch_groupAssignment; + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_groupAssignment = eMTCconfig->ccparams.pusch_groupAssignment; if ((eMTCconfig->ccparams.pusch_groupAssignment<0)||(eMTCconfig->ccparams.pusch_groupAssignment>29)) AssertFatal (0, @@ -343,15 +328,15 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in "Failed to parse eNB configuration file %s, enb %d define %s: ENABLE,DISABLE!\n", config_fname, cell_idx,ENB_CONFIG_STRING_PUSCH_SEQUENCE_HOPPING_EN); else if (strcmp(eMTCconfig->ccparams.pusch_sequenceHoppingEnabled, "ENABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_sequenceHoppingEnabled = true; + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_sequenceHoppingEnabled = true; } else if (strcmp(eMTCconfig->ccparams.pusch_sequenceHoppingEnabled, "DISABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_sequenceHoppingEnabled = false; + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_sequenceHoppingEnabled = false; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pusch_sequenceHoppingEnabled choice: ENABLE,DISABLE!\n", config_fname, cell_idx,eMTCconfig->ccparams.pusch_sequenceHoppingEnabled); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_nDMRS1= eMTCconfig->ccparams.pusch_nDMRS1; //cyclic_shift in RRC! + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_nDMRS1 = eMTCconfig->ccparams.pusch_nDMRS1; // cyclic_shift in RRC! if ((eMTCconfig->ccparams.pusch_nDMRS1 <0) || (eMTCconfig->ccparams.pusch_nDMRS1>7)) AssertFatal (0, @@ -359,48 +344,50 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in config_fname, cell_idx,eMTCconfig->ccparams.pusch_nDMRS1); if (strcmp(eMTCconfig->ccparams.phich_duration,"NORMAL")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].phich_duration= LTE_PHICH_Config__phich_Duration_normal; + RRCcfg->radioresourceconfig_BR[cc_idx].phich_duration = LTE_PHICH_Config__phich_Duration_normal; } else if (strcmp(eMTCconfig->ccparams.phich_duration,"EXTENDED")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].phich_duration= LTE_PHICH_Config__phich_Duration_extended; + RRCcfg->radioresourceconfig_BR[cc_idx].phich_duration = LTE_PHICH_Config__phich_Duration_extended; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for phich_duration choice: NORMAL,EXTENDED!\n", config_fname, cell_idx,eMTCconfig->ccparams.phich_duration); if (strcmp(eMTCconfig->ccparams.phich_resource,"ONESIXTH")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].phich_resource= LTE_PHICH_Config__phich_Resource_oneSixth ; + RRCcfg->radioresourceconfig_BR[cc_idx].phich_resource = LTE_PHICH_Config__phich_Resource_oneSixth; } else if (strcmp(eMTCconfig->ccparams.phich_resource,"HALF")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].phich_resource= LTE_PHICH_Config__phich_Resource_half; + RRCcfg->radioresourceconfig_BR[cc_idx].phich_resource = LTE_PHICH_Config__phich_Resource_half; } else if (strcmp(eMTCconfig->ccparams.phich_resource,"ONE")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].phich_resource= LTE_PHICH_Config__phich_Resource_one; + RRCcfg->radioresourceconfig_BR[cc_idx].phich_resource = LTE_PHICH_Config__phich_Resource_one; } else if (strcmp(eMTCconfig->ccparams.phich_resource,"TWO")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].phich_resource= LTE_PHICH_Config__phich_Resource_two; + RRCcfg->radioresourceconfig_BR[cc_idx].phich_resource = LTE_PHICH_Config__phich_Resource_two; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for phich_resource choice: ONESIXTH,HALF,ONE,TWO!\n", config_fname, cell_idx,eMTCconfig->ccparams.phich_resource); printf("phich.resource eMTC %ld (%s), phich.duration eMTC %ld (%s)\n", - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].phich_resource,eMTCconfig->ccparams.phich_resource, - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].phich_duration,eMTCconfig->ccparams.phich_duration); + RRCcfg->radioresourceconfig_BR[cc_idx].phich_resource, + eMTCconfig->ccparams.phich_resource, + RRCcfg->radioresourceconfig_BR[cc_idx].phich_duration, + eMTCconfig->ccparams.phich_duration); if (strcmp(eMTCconfig->ccparams.srs_enable, "ENABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].srs_enable= true; + RRCcfg->radioresourceconfig_BR[cc_idx].srs_enable = true; } else if (strcmp(eMTCconfig->ccparams.srs_enable, "DISABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].srs_enable= false; + RRCcfg->radioresourceconfig_BR[cc_idx].srs_enable = false; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for srs_BandwidthConfig choice: ENABLE,DISABLE !\n", config_fname, cell_idx,eMTCconfig->ccparams.srs_enable); - if (RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].srs_enable== true) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].srs_BandwidthConfig= eMTCconfig->ccparams.srs_BandwidthConfig; + if (RRCcfg->radioresourceconfig_BR[cc_idx].srs_enable == true) { + RRCcfg->radioresourceconfig_BR[cc_idx].srs_BandwidthConfig = eMTCconfig->ccparams.srs_BandwidthConfig; if ((eMTCconfig->ccparams.srs_BandwidthConfig < 0) || (eMTCconfig->ccparams.srs_BandwidthConfig >7)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value %d for srs_BandwidthConfig choice: 0...7\n", config_fname, cell_idx,eMTCconfig->ccparams.srs_BandwidthConfig); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].srs_SubframeConfig= eMTCconfig->ccparams.srs_SubframeConfig; + RRCcfg->radioresourceconfig_BR[cc_idx].srs_SubframeConfig = eMTCconfig->ccparams.srs_SubframeConfig; if ((eMTCconfig->ccparams.srs_SubframeConfig<0) || (eMTCconfig->ccparams.srs_SubframeConfig>15)) AssertFatal (0, @@ -408,25 +395,25 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in config_fname, cell_idx,eMTCconfig->ccparams.srs_SubframeConfig); if (strcmp(eMTCconfig->ccparams.srs_ackNackST, "ENABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].srs_ackNackST= true; + RRCcfg->radioresourceconfig_BR[cc_idx].srs_ackNackST = true; } else if (strcmp(eMTCconfig->ccparams.srs_ackNackST, "DISABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].srs_ackNackST= false; + RRCcfg->radioresourceconfig_BR[cc_idx].srs_ackNackST = false; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for srs_BandwidthConfig choice: ENABLE,DISABLE !\n", config_fname, cell_idx,eMTCconfig->ccparams.srs_ackNackST); if (strcmp(eMTCconfig->ccparams.srs_MaxUpPts, "ENABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].srs_MaxUpPts= true; + RRCcfg->radioresourceconfig_BR[cc_idx].srs_MaxUpPts = true; } else if (strcmp(eMTCconfig->ccparams.srs_MaxUpPts, "DISABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].srs_MaxUpPts= false; + RRCcfg->radioresourceconfig_BR[cc_idx].srs_MaxUpPts = false; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for srs_MaxUpPts choice: ENABLE,DISABLE !\n", config_fname, cell_idx,eMTCconfig->ccparams.srs_MaxUpPts); } - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_p0_Nominal= eMTCconfig->ccparams.pusch_p0_Nominal; + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_p0_Nominal = eMTCconfig->ccparams.pusch_p0_Nominal; if ((eMTCconfig->ccparams.pusch_p0_Nominal<-126) || (eMTCconfig->ccparams.pusch_p0_Nominal>24)) AssertFatal (0, @@ -434,21 +421,21 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in config_fname, cell_idx,eMTCconfig->ccparams.pusch_p0_Nominal); if (strcmp(eMTCconfig->ccparams.pusch_alpha,"AL0")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_alpha= LTE_Alpha_r12_al0; + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_alpha = LTE_Alpha_r12_al0; } else if (strcmp(eMTCconfig->ccparams.pusch_alpha,"AL04")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_alpha= LTE_Alpha_r12_al04; + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_alpha = LTE_Alpha_r12_al04; } else if (strcmp(eMTCconfig->ccparams.pusch_alpha,"AL05")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_alpha= LTE_Alpha_r12_al05; + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_alpha = LTE_Alpha_r12_al05; } else if (strcmp(eMTCconfig->ccparams.pusch_alpha,"AL06")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_alpha= LTE_Alpha_r12_al06; + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_alpha = LTE_Alpha_r12_al06; } else if (strcmp(eMTCconfig->ccparams.pusch_alpha,"AL07")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_alpha= LTE_Alpha_r12_al07; + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_alpha = LTE_Alpha_r12_al07; } else if (strcmp(eMTCconfig->ccparams.pusch_alpha,"AL08")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_alpha= LTE_Alpha_r12_al08; + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_alpha = LTE_Alpha_r12_al08; } else if (strcmp(eMTCconfig->ccparams.pusch_alpha,"AL09")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_alpha= LTE_Alpha_r12_al09; + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_alpha = LTE_Alpha_r12_al09; } else if (strcmp(eMTCconfig->ccparams.pusch_alpha,"AL1")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pusch_alpha= LTE_Alpha_r12_al1; + RRCcfg->radioresourceconfig_BR[cc_idx].pusch_alpha = LTE_Alpha_r12_al1; } else @@ -456,14 +443,14 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pucch_Alpha choice: AL0,AL04,AL05,AL06,AL07,AL08,AL09,AL1!\n", config_fname, cell_idx,eMTCconfig->ccparams.pusch_alpha); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_p0_Nominal= eMTCconfig->ccparams.pucch_p0_Nominal; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_p0_Nominal = eMTCconfig->ccparams.pucch_p0_Nominal; if ((eMTCconfig->ccparams.pucch_p0_Nominal<-127) || (eMTCconfig->ccparams.pucch_p0_Nominal>-96)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pucch_p0_Nominal choice: -127..-96 !\n", config_fname, cell_idx,eMTCconfig->ccparams.pucch_p0_Nominal); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].msg3_delta_Preamble= eMTCconfig->ccparams.msg3_delta_Preamble; + RRCcfg->radioresourceconfig_BR[cc_idx].msg3_delta_Preamble = eMTCconfig->ccparams.msg3_delta_Preamble; if ((eMTCconfig->ccparams.msg3_delta_Preamble<-1) || (eMTCconfig->ccparams.msg3_delta_Preamble>6)) AssertFatal (0, @@ -471,63 +458,63 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in config_fname, cell_idx,eMTCconfig->ccparams.msg3_delta_Preamble); if (strcmp(eMTCconfig->ccparams.pucch_deltaF_Format1,"deltaF_2")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_deltaF_Format1= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF_2; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_deltaF_Format1 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF_2; } else if (strcmp(eMTCconfig->ccparams.pucch_deltaF_Format1,"deltaF0")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_deltaF_Format1= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF0; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_deltaF_Format1 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF0; } else if (strcmp(eMTCconfig->ccparams.pucch_deltaF_Format1,"deltaF2")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_deltaF_Format1= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF2; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_deltaF_Format1 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF2; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pucch_deltaF_Format1 choice: deltaF_2,dltaF0,deltaF2!\n", config_fname, cell_idx,eMTCconfig->ccparams.pucch_deltaF_Format1); if (strcmp(eMTCconfig->ccparams.pucch_deltaF_Format1b,"deltaF1")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_deltaF_Format1b= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF1; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_deltaF_Format1b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF1; } else if (strcmp(eMTCconfig->ccparams.pucch_deltaF_Format1b,"deltaF3")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_deltaF_Format1b= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF3; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_deltaF_Format1b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF3; } else if (strcmp(eMTCconfig->ccparams.pucch_deltaF_Format1b,"deltaF5")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_deltaF_Format1b= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF5; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_deltaF_Format1b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF5; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pucch_deltaF_Format1b choice: deltaF1,dltaF3,deltaF5!\n", config_fname, cell_idx,eMTCconfig->ccparams.pucch_deltaF_Format1b); if (strcmp(eMTCconfig->ccparams.pucch_deltaF_Format2,"deltaF_2")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_deltaF_Format2= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF_2; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_deltaF_Format2 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF_2; } else if (strcmp(eMTCconfig->ccparams.pucch_deltaF_Format2,"deltaF0")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_deltaF_Format2= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF0; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_deltaF_Format2 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF0; } else if (strcmp(eMTCconfig->ccparams.pucch_deltaF_Format2,"deltaF1")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_deltaF_Format2= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF1; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_deltaF_Format2 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF1; } else if (strcmp(eMTCconfig->ccparams.pucch_deltaF_Format2,"deltaF2")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_deltaF_Format2= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF2; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_deltaF_Format2 = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF2; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pucch_deltaF_Format2 choice: deltaF_2,dltaF0,deltaF1,deltaF2!\n", config_fname, cell_idx,eMTCconfig->ccparams.pucch_deltaF_Format2); if (strcmp(eMTCconfig->ccparams.pucch_deltaF_Format2a,"deltaF_2")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_deltaF_Format2a= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF_2; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_deltaF_Format2a = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF_2; } else if (strcmp(eMTCconfig->ccparams.pucch_deltaF_Format2a,"deltaF0")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_deltaF_Format2a= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF0; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_deltaF_Format2a = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF0; } else if (strcmp(eMTCconfig->ccparams.pucch_deltaF_Format2a,"deltaF2")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_deltaF_Format2a= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF2; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_deltaF_Format2a = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF2; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pucch_deltaF_Format2a choice: deltaF_2,dltaF0,deltaF2!\n", config_fname, cell_idx,eMTCconfig->ccparams.pucch_deltaF_Format2a); if (strcmp(eMTCconfig->ccparams.pucch_deltaF_Format2b,"deltaF_2")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_deltaF_Format2b= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF_2; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_deltaF_Format2b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF_2; } else if (strcmp(eMTCconfig->ccparams.pucch_deltaF_Format2b,"deltaF0")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_deltaF_Format2b= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF0; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_deltaF_Format2b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF0; } else if (strcmp(eMTCconfig->ccparams.pucch_deltaF_Format2b,"deltaF2")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pucch_deltaF_Format2b= LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF2; + RRCcfg->radioresourceconfig_BR[cc_idx].pucch_deltaF_Format2b = LTE_DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF2; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pucch_deltaF_Format2b choice: deltaF_2,dltaF0,deltaF2!\n", config_fname, cell_idx,eMTCconfig->ccparams.pucch_deltaF_Format2b); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_numberOfRA_Preambles= (eMTCconfig->ccparams.rach_numberOfRA_Preambles/4)-1; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_numberOfRA_Preambles = (eMTCconfig->ccparams.rach_numberOfRA_Preambles / 4) - 1; if ((eMTCconfig->ccparams.rach_numberOfRA_Preambles <4) || (eMTCconfig->ccparams.rach_numberOfRA_Preambles >64) || ((eMTCconfig->ccparams.rach_numberOfRA_Preambles&3)!=0)) AssertFatal (0, @@ -535,8 +522,8 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in config_fname, cell_idx,eMTCconfig->ccparams.rach_numberOfRA_Preambles); if (strcmp(eMTCconfig->ccparams.rach_preamblesGroupAConfig, "ENABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_preamblesGroupAConfig= true; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_sizeOfRA_PreamblesGroupA= (eMTCconfig->ccparams.rach_sizeOfRA_PreamblesGroupA/4)-1; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_preamblesGroupAConfig = true; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_sizeOfRA_PreamblesGroupA = (eMTCconfig->ccparams.rach_sizeOfRA_PreamblesGroupA / 4) - 1; if ((eMTCconfig->ccparams.rach_numberOfRA_Preambles <4) || (eMTCconfig->ccparams.rach_numberOfRA_Preambles>60) || ((eMTCconfig->ccparams.rach_numberOfRA_Preambles&3)!=0)) AssertFatal (0, @@ -545,19 +532,19 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in switch (eMTCconfig->ccparams.rach_messageSizeGroupA) { case 56: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_messageSizeGroupA= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b56; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_messageSizeGroupA = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b56; break; case 144: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_messageSizeGroupA= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b144; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_messageSizeGroupA = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b144; break; case 208: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_messageSizeGroupA= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b208; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_messageSizeGroupA = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b208; break; case 256: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_messageSizeGroupA= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b256; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_messageSizeGroupA = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b256; break; default: @@ -568,40 +555,40 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in } if (strcmp(eMTCconfig->ccparams.rach_messagePowerOffsetGroupB,"minusinfinity")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_messagePowerOffsetGroupB= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_minusinfinity; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_minusinfinity; } else if (strcmp(eMTCconfig->ccparams.rach_messagePowerOffsetGroupB,"dB0")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_messagePowerOffsetGroupB= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB0; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB0; } else if (strcmp(eMTCconfig->ccparams.rach_messagePowerOffsetGroupB,"dB5")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_messagePowerOffsetGroupB= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB5; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB5; } else if (strcmp(eMTCconfig->ccparams.rach_messagePowerOffsetGroupB,"dB8")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_messagePowerOffsetGroupB= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB8; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB8; } else if (strcmp(eMTCconfig->ccparams.rach_messagePowerOffsetGroupB,"dB10")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_messagePowerOffsetGroupB= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB10; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB10; } else if (strcmp(eMTCconfig->ccparams.rach_messagePowerOffsetGroupB,"dB12")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_messagePowerOffsetGroupB= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB12; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB12; } else if (strcmp(eMTCconfig->ccparams.rach_messagePowerOffsetGroupB,"dB15")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_messagePowerOffsetGroupB= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB15; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB15; } else if (strcmp(eMTCconfig->ccparams.rach_messagePowerOffsetGroupB,"dB18")==0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_messagePowerOffsetGroupB= LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB18; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_messagePowerOffsetGroupB = LTE_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB18; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for rach_messagePowerOffsetGroupB choice: minusinfinity,dB0,dB5,dB8,dB10,dB12,dB15,dB18!\n", config_fname, cell_idx,eMTCconfig->ccparams.rach_messagePowerOffsetGroupB); } else if (strcmp(eMTCconfig->ccparams.rach_preamblesGroupAConfig, "DISABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_preamblesGroupAConfig= false; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_preamblesGroupAConfig = false; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for rach_preamblesGroupAConfig choice: ENABLE,DISABLE !\n", config_fname, cell_idx,eMTCconfig->ccparams.rach_preamblesGroupAConfig); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_preambleInitialReceivedTargetPower= (eMTCconfig->ccparams.rach_preambleInitialReceivedTargetPower+120)/2; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_preambleInitialReceivedTargetPower = (eMTCconfig->ccparams.rach_preambleInitialReceivedTargetPower + 120) / 2; if ((eMTCconfig->ccparams.rach_preambleInitialReceivedTargetPower<-120) || (eMTCconfig->ccparams.rach_preambleInitialReceivedTargetPower>-90) || ((eMTCconfig->ccparams.rach_preambleInitialReceivedTargetPower&1)!=0)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for rach_preambleInitialReceivedTargetPower choice: -120,-118,...,-90 !\n", config_fname, cell_idx,eMTCconfig->ccparams.rach_preambleInitialReceivedTargetPower); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_powerRampingStep= eMTCconfig->ccparams.rach_powerRampingStep/2; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_powerRampingStep = eMTCconfig->ccparams.rach_powerRampingStep / 2; if ((eMTCconfig->ccparams.rach_powerRampingStep<0) || (eMTCconfig->ccparams.rach_powerRampingStep>6) || ((eMTCconfig->ccparams.rach_powerRampingStep&1)!=0)) AssertFatal (0, @@ -610,47 +597,47 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in switch (eMTCconfig->ccparams.rach_preambleTransMax) { case 3: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_preambleTransMax= LTE_PreambleTransMax_n3; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_preambleTransMax = LTE_PreambleTransMax_n3; break; case 4: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_preambleTransMax= LTE_PreambleTransMax_n4; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_preambleTransMax = LTE_PreambleTransMax_n4; break; case 5: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_preambleTransMax= LTE_PreambleTransMax_n5; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_preambleTransMax = LTE_PreambleTransMax_n5; break; case 6: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_preambleTransMax= LTE_PreambleTransMax_n6; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_preambleTransMax = LTE_PreambleTransMax_n6; break; case 7: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_preambleTransMax= LTE_PreambleTransMax_n7; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_preambleTransMax = LTE_PreambleTransMax_n7; break; case 8: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_preambleTransMax= LTE_PreambleTransMax_n8; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_preambleTransMax = LTE_PreambleTransMax_n8; break; case 10: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_preambleTransMax= LTE_PreambleTransMax_n10; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_preambleTransMax = LTE_PreambleTransMax_n10; break; case 20: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_preambleTransMax= LTE_PreambleTransMax_n20; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_preambleTransMax = LTE_PreambleTransMax_n20; break; case 50: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_preambleTransMax= LTE_PreambleTransMax_n50; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_preambleTransMax = LTE_PreambleTransMax_n50; break; case 100: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_preambleTransMax= LTE_PreambleTransMax_n100; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_preambleTransMax = LTE_PreambleTransMax_n100; break; case 200: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_preambleTransMax= LTE_PreambleTransMax_n200; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_preambleTransMax = LTE_PreambleTransMax_n200; break; default: @@ -660,21 +647,21 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in break; } - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_raResponseWindowSize= (eMTCconfig->ccparams.rach_raResponseWindowSize==10)?7:eMTCconfig->ccparams.rach_raResponseWindowSize-2; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_raResponseWindowSize = (eMTCconfig->ccparams.rach_raResponseWindowSize == 10) ? 7 : eMTCconfig->ccparams.rach_raResponseWindowSize - 2; if ((eMTCconfig->ccparams.rach_raResponseWindowSize<0)||(eMTCconfig->ccparams.rach_raResponseWindowSize==9)||(eMTCconfig->ccparams.rach_raResponseWindowSize>10)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for rach_raResponseWindowSize choice: 2,3,4,5,6,7,8,10!\n", config_fname, cell_idx,eMTCconfig->ccparams.rach_raResponseWindowSize); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_macContentionResolutionTimer= (eMTCconfig->ccparams.rach_macContentionResolutionTimer/8)-1; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_macContentionResolutionTimer = (eMTCconfig->ccparams.rach_macContentionResolutionTimer / 8) - 1; if ((eMTCconfig->ccparams.rach_macContentionResolutionTimer<8) || (eMTCconfig->ccparams.rach_macContentionResolutionTimer>64) || ((eMTCconfig->ccparams.rach_macContentionResolutionTimer&7)!=0)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for rach_macContentionResolutionTimer choice: 8,16,...,56,64!\n", config_fname, cell_idx,eMTCconfig->ccparams.rach_macContentionResolutionTimer); - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].rach_maxHARQ_Msg3Tx= eMTCconfig->ccparams.rach_maxHARQ_Msg3Tx; + RRCcfg->radioresourceconfig_BR[cc_idx].rach_maxHARQ_Msg3Tx = eMTCconfig->ccparams.rach_maxHARQ_Msg3Tx; if ((eMTCconfig->ccparams.rach_maxHARQ_Msg3Tx<0) || (eMTCconfig->ccparams.rach_maxHARQ_Msg3Tx>8)) AssertFatal (0, @@ -683,47 +670,47 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in switch (eMTCconfig->preambleTransMax_CE_r13) { case 3: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13= LTE_PreambleTransMax_n3; + RRCcfg->radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13 = LTE_PreambleTransMax_n3; break; case 4: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13= LTE_PreambleTransMax_n4; + RRCcfg->radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13 = LTE_PreambleTransMax_n4; break; case 5: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13= LTE_PreambleTransMax_n5; + RRCcfg->radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13 = LTE_PreambleTransMax_n5; break; case 6: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13= LTE_PreambleTransMax_n6; + RRCcfg->radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13 = LTE_PreambleTransMax_n6; break; case 7: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13= LTE_PreambleTransMax_n7; + RRCcfg->radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13 = LTE_PreambleTransMax_n7; break; case 8: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13= LTE_PreambleTransMax_n8; + RRCcfg->radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13 = LTE_PreambleTransMax_n8; break; case 10: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13= LTE_PreambleTransMax_n10; + RRCcfg->radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13 = LTE_PreambleTransMax_n10; break; case 20: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13= LTE_PreambleTransMax_n20; + RRCcfg->radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13 = LTE_PreambleTransMax_n20; break; case 50: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13= LTE_PreambleTransMax_n50; + RRCcfg->radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13 = LTE_PreambleTransMax_n50; break; case 100: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13= LTE_PreambleTransMax_n100; + RRCcfg->radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13 = LTE_PreambleTransMax_n100; break; case 200: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13= LTE_PreambleTransMax_n200; + RRCcfg->radioresourceconfig_BR[cc_idx].preambleTransMax_CE_r13 = LTE_PreambleTransMax_n200; break; default: @@ -735,19 +722,19 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in switch (eMTCconfig->ccparams.pcch_defaultPagingCycle) { case 32: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pcch_defaultPagingCycle= LTE_PCCH_Config__defaultPagingCycle_rf32; + RRCcfg->radioresourceconfig_BR[cc_idx].pcch_defaultPagingCycle = LTE_PCCH_Config__defaultPagingCycle_rf32; break; case 64: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pcch_defaultPagingCycle= LTE_PCCH_Config__defaultPagingCycle_rf64; + RRCcfg->radioresourceconfig_BR[cc_idx].pcch_defaultPagingCycle = LTE_PCCH_Config__defaultPagingCycle_rf64; break; case 128: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pcch_defaultPagingCycle= LTE_PCCH_Config__defaultPagingCycle_rf128; + RRCcfg->radioresourceconfig_BR[cc_idx].pcch_defaultPagingCycle = LTE_PCCH_Config__defaultPagingCycle_rf128; break; case 256: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pcch_defaultPagingCycle= LTE_PCCH_Config__defaultPagingCycle_rf256; + RRCcfg->radioresourceconfig_BR[cc_idx].pcch_defaultPagingCycle = LTE_PCCH_Config__defaultPagingCycle_rf256; break; default: @@ -758,21 +745,21 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in } if (strcmp(eMTCconfig->ccparams.pcch_nB, "fourT") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pcch_nB= LTE_PCCH_Config__nB_fourT; + RRCcfg->radioresourceconfig_BR[cc_idx].pcch_nB = LTE_PCCH_Config__nB_fourT; } else if (strcmp(eMTCconfig->ccparams.pcch_nB, "twoT") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pcch_nB= LTE_PCCH_Config__nB_twoT; + RRCcfg->radioresourceconfig_BR[cc_idx].pcch_nB = LTE_PCCH_Config__nB_twoT; } else if (strcmp(eMTCconfig->ccparams.pcch_nB, "oneT") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pcch_nB= LTE_PCCH_Config__nB_oneT; + RRCcfg->radioresourceconfig_BR[cc_idx].pcch_nB = LTE_PCCH_Config__nB_oneT; } else if (strcmp(eMTCconfig->ccparams.pcch_nB, "halfT") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pcch_nB= LTE_PCCH_Config__nB_halfT; + RRCcfg->radioresourceconfig_BR[cc_idx].pcch_nB = LTE_PCCH_Config__nB_halfT; } else if (strcmp(eMTCconfig->ccparams.pcch_nB, "quarterT") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pcch_nB= LTE_PCCH_Config__nB_quarterT; + RRCcfg->radioresourceconfig_BR[cc_idx].pcch_nB = LTE_PCCH_Config__nB_quarterT; } else if (strcmp(eMTCconfig->ccparams.pcch_nB, "oneEighthT") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pcch_nB= LTE_PCCH_Config__nB_oneEighthT; + RRCcfg->radioresourceconfig_BR[cc_idx].pcch_nB = LTE_PCCH_Config__nB_oneEighthT; } else if (strcmp(eMTCconfig->ccparams.pcch_nB, "oneSixteenthT") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pcch_nB= LTE_PCCH_Config__nB_oneSixteenthT; + RRCcfg->radioresourceconfig_BR[cc_idx].pcch_nB = LTE_PCCH_Config__nB_oneSixteenthT; } else if (strcmp(eMTCconfig->ccparams.pcch_nB, "oneThirtySecondT") == 0) { - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].pcch_nB= LTE_PCCH_Config__nB_oneThirtySecondT; + RRCcfg->radioresourceconfig_BR[cc_idx].pcch_nB = LTE_PCCH_Config__nB_oneThirtySecondT; } else AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pcch_nB choice: fourT,twoT,oneT,halfT,quarterT,oneighthT,oneSixteenthT,oneThirtySecondT !\n", @@ -780,19 +767,19 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in switch (eMTCconfig->ccparams.bcch_modificationPeriodCoeff) { case 2: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].bcch_modificationPeriodCoeff= LTE_BCCH_Config__modificationPeriodCoeff_n2; + RRCcfg->radioresourceconfig_BR[cc_idx].bcch_modificationPeriodCoeff = LTE_BCCH_Config__modificationPeriodCoeff_n2; break; case 4: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].bcch_modificationPeriodCoeff= LTE_BCCH_Config__modificationPeriodCoeff_n4; + RRCcfg->radioresourceconfig_BR[cc_idx].bcch_modificationPeriodCoeff = LTE_BCCH_Config__modificationPeriodCoeff_n4; break; case 8: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].bcch_modificationPeriodCoeff= LTE_BCCH_Config__modificationPeriodCoeff_n8; + RRCcfg->radioresourceconfig_BR[cc_idx].bcch_modificationPeriodCoeff = LTE_BCCH_Config__modificationPeriodCoeff_n8; break; case 16: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].bcch_modificationPeriodCoeff= LTE_BCCH_Config__modificationPeriodCoeff_n16; + RRCcfg->radioresourceconfig_BR[cc_idx].bcch_modificationPeriodCoeff = LTE_BCCH_Config__modificationPeriodCoeff_n16; break; default: @@ -802,40 +789,40 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in break; } - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].ue_TimersAndConstants_t300= eMTCconfig->ccparams.ue_TimersAndConstants_t300; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].ue_TimersAndConstants_t301= eMTCconfig->ccparams.ue_TimersAndConstants_t301; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].ue_TimersAndConstants_t310= eMTCconfig->ccparams.ue_TimersAndConstants_t310; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].ue_TimersAndConstants_t311= eMTCconfig->ccparams.ue_TimersAndConstants_t311; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].ue_TimersAndConstants_n310= eMTCconfig->ccparams.ue_TimersAndConstants_n310; - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].ue_TimersAndConstants_n311= eMTCconfig->ccparams.ue_TimersAndConstants_n311; + RRCcfg->radioresourceconfig_BR[cc_idx].ue_TimersAndConstants_t300 = eMTCconfig->ccparams.ue_TimersAndConstants_t300; + RRCcfg->radioresourceconfig_BR[cc_idx].ue_TimersAndConstants_t301 = eMTCconfig->ccparams.ue_TimersAndConstants_t301; + RRCcfg->radioresourceconfig_BR[cc_idx].ue_TimersAndConstants_t310 = eMTCconfig->ccparams.ue_TimersAndConstants_t310; + RRCcfg->radioresourceconfig_BR[cc_idx].ue_TimersAndConstants_t311 = eMTCconfig->ccparams.ue_TimersAndConstants_t311; + RRCcfg->radioresourceconfig_BR[cc_idx].ue_TimersAndConstants_n310 = eMTCconfig->ccparams.ue_TimersAndConstants_n310; + RRCcfg->radioresourceconfig_BR[cc_idx].ue_TimersAndConstants_n311 = eMTCconfig->ccparams.ue_TimersAndConstants_n311; switch (eMTCconfig->ccparams.ue_TransmissionMode) { case 1: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].ue_TransmissionMode= LTE_AntennaInfoDedicated__transmissionMode_tm1; + RRCcfg->radioresourceconfig_BR[cc_idx].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm1; break; case 2: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].ue_TransmissionMode= LTE_AntennaInfoDedicated__transmissionMode_tm2; + RRCcfg->radioresourceconfig_BR[cc_idx].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm2; break; case 3: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].ue_TransmissionMode= LTE_AntennaInfoDedicated__transmissionMode_tm3; + RRCcfg->radioresourceconfig_BR[cc_idx].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm3; break; case 4: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].ue_TransmissionMode= LTE_AntennaInfoDedicated__transmissionMode_tm4; + RRCcfg->radioresourceconfig_BR[cc_idx].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm4; break; case 5: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].ue_TransmissionMode= LTE_AntennaInfoDedicated__transmissionMode_tm5; + RRCcfg->radioresourceconfig_BR[cc_idx].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm5; break; case 6: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].ue_TransmissionMode= LTE_AntennaInfoDedicated__transmissionMode_tm6; + RRCcfg->radioresourceconfig_BR[cc_idx].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm6; break; case 7: - RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[cc_idx].ue_TransmissionMode= LTE_AntennaInfoDedicated__transmissionMode_tm7; + RRCcfg->radioresourceconfig_BR[cc_idx].ue_TransmissionMode = LTE_AntennaInfoDedicated__transmissionMode_tm7; break; default: @@ -847,79 +834,77 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in if (!strcmp(eMTCconfig->prach_ConfigCommon_v1310, "ENABLE")) { - RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[cc_idx].prach_ConfigCommon_v1310 = true; + RRCcfg->radioresourceconfig_BR[cc_idx].prach_ConfigCommon_v1310 = true; - RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13 = calloc(1, sizeof(BOOLEAN_t)); + RRCcfg->radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13 = calloc(1, sizeof(BOOLEAN_t)); if (!strcmp(eMTCconfig->mpdcch_startSF_CSS_RA_r13, "tdd-r13")) { - *RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13 = false; + *RRCcfg->radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13 = false; } else { - *RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13 = true; + *RRCcfg->radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13 = true; } if (!strcmp(eMTCconfig->mpdcch_startSF_CSS_RA_r13_val, "v1")) { - RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13_val = 0; + RRCcfg->radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13_val = 0; } else if (!strcmp(eMTCconfig->mpdcch_startSF_CSS_RA_r13_val, "v1dot5")) { - RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13_val = 1; + RRCcfg->radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13_val = 1; } else if (!strcmp(eMTCconfig->mpdcch_startSF_CSS_RA_r13_val, "v2")) { - RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13_val = 2; + RRCcfg->radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13_val = 2; } else if (!strcmp(eMTCconfig->mpdcch_startSF_CSS_RA_r13_val, "v2dot5")) { - RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13_val = 3; + RRCcfg->radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13_val = 3; } else if (!strcmp(eMTCconfig->mpdcch_startSF_CSS_RA_r13_val, "v4")) { - RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13_val = 4; + RRCcfg->radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13_val = 4; } else if (!strcmp(eMTCconfig->mpdcch_startSF_CSS_RA_r13_val, "v5")) { - RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13_val = 5; + RRCcfg->radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13_val = 5; } else if (!strcmp(eMTCconfig->mpdcch_startSF_CSS_RA_r13_val, "v8")) { - RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13_val = 6; + RRCcfg->radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13_val = 6; } else if (!strcmp(eMTCconfig->mpdcch_startSF_CSS_RA_r13_val, "10")) { - RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13_val = 7; + RRCcfg->radioresourceconfig_BR[cc_idx].mpdcch_startSF_CSS_RA_r13_val = 7; } else { AssertFatal(0, "Failed to parse eNB configuration file %s, enb %d mpdcch_startSF_CSS_RA_r13_val! Unknown Value !!\n", config_fname, cell_idx); } - RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[cc_idx].prach_HoppingOffset_r13 = calloc(1, sizeof(long)); - *RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[cc_idx].prach_HoppingOffset_r13 = eMTCconfig->prach_HoppingOffset_r13; + RRCcfg->radioresourceconfig_BR[cc_idx].prach_HoppingOffset_r13 = calloc(1, sizeof(long)); + *RRCcfg->radioresourceconfig_BR[cc_idx].prach_HoppingOffset_r13 = eMTCconfig->prach_HoppingOffset_r13; } else { - RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[cc_idx].prach_ConfigCommon_v1310 = false; + RRCcfg->radioresourceconfig_BR[cc_idx].prach_ConfigCommon_v1310 = false; } - - RRC_CONFIGURATION_REQ(msg_p).pdsch_maxNumRepetitionCEmodeA_r13[cc_idx] = CALLOC(1, sizeof(long)); + RRCcfg->pdsch_maxNumRepetitionCEmodeA_r13[cc_idx] = CALLOC(1, sizeof(long)); if (!strcmp(eMTCconfig->pdsch_maxNumRepetitionCEmodeA_r13, "r16")) { - *RRC_CONFIGURATION_REQ(msg_p).pdsch_maxNumRepetitionCEmodeA_r13[cc_idx] = 0; + *RRCcfg->pdsch_maxNumRepetitionCEmodeA_r13[cc_idx] = 0; } else if (!strcmp(eMTCconfig->pdsch_maxNumRepetitionCEmodeA_r13, "r32")) { - *RRC_CONFIGURATION_REQ(msg_p).pdsch_maxNumRepetitionCEmodeA_r13[cc_idx] = 1; + *RRCcfg->pdsch_maxNumRepetitionCEmodeA_r13[cc_idx] = 1; } else { AssertFatal (0, "Failed to parse eNB configuration file %s, pdsch_maxNumRepetitionCEmodeA_r13 unknown value!\n", config_fname); } - - RRC_CONFIGURATION_REQ(msg_p).pusch_maxNumRepetitionCEmodeA_r13[cc_idx] = CALLOC(1, sizeof(long)); + RRCcfg->pusch_maxNumRepetitionCEmodeA_r13[cc_idx] = CALLOC(1, sizeof(long)); if (!strcmp(eMTCconfig->pusch_maxNumRepetitionCEmodeA_r13, "r8")) { - *RRC_CONFIGURATION_REQ(msg_p).pusch_maxNumRepetitionCEmodeA_r13[cc_idx] = 0; + *RRCcfg->pusch_maxNumRepetitionCEmodeA_r13[cc_idx] = 0; } else if (!strcmp(eMTCconfig->pusch_maxNumRepetitionCEmodeA_r13, "r16")) { - *RRC_CONFIGURATION_REQ(msg_p).pusch_maxNumRepetitionCEmodeA_r13[cc_idx] = 1; + *RRCcfg->pusch_maxNumRepetitionCEmodeA_r13[cc_idx] = 1; } else if (!strcmp(eMTCconfig->pusch_maxNumRepetitionCEmodeA_r13, "r32")) { - *RRC_CONFIGURATION_REQ(msg_p).pusch_maxNumRepetitionCEmodeA_r13[cc_idx] = 2; + *RRCcfg->pusch_maxNumRepetitionCEmodeA_r13[cc_idx] = 2; } else { AssertFatal (0, "Failed to parse eNB configuration file %s, pusch_maxNumRepetitionCEmodeA_r13 unknown value!\n", config_fname); } - RRC_CONFIGURATION_REQ(msg_p).pusch_repetitionLevelCEmodeA_r13[cc_idx] = CALLOC(1, sizeof(long)); + RRCcfg->pusch_repetitionLevelCEmodeA_r13[cc_idx] = CALLOC(1, sizeof(long)); if (!strcmp(eMTCconfig->pusch_repetitionLevelCEmodeA_r13, "l1")) { - *RRC_CONFIGURATION_REQ(msg_p).pusch_repetitionLevelCEmodeA_r13[cc_idx] = 0; + *RRCcfg->pusch_repetitionLevelCEmodeA_r13[cc_idx] = 0; } else if (!strcmp(eMTCconfig->pusch_repetitionLevelCEmodeA_r13, "l2")) { - *RRC_CONFIGURATION_REQ(msg_p).pusch_repetitionLevelCEmodeA_r13[cc_idx] = 1; + *RRCcfg->pusch_repetitionLevelCEmodeA_r13[cc_idx] = 1; } else if (!strcmp(eMTCconfig->pusch_repetitionLevelCEmodeA_r13, "l3")) { - *RRC_CONFIGURATION_REQ(msg_p).pusch_repetitionLevelCEmodeA_r13[cc_idx] = 2; + *RRCcfg->pusch_repetitionLevelCEmodeA_r13[cc_idx] = 2; } else if (!strcmp(eMTCconfig->pusch_repetitionLevelCEmodeA_r13, "l4")) { - *RRC_CONFIGURATION_REQ(msg_p).pusch_repetitionLevelCEmodeA_r13[cc_idx] = 3; + *RRCcfg->pusch_repetitionLevelCEmodeA_r13[cc_idx] = 3; } else { AssertFatal (0, "Failed to parse eNB configuration file %s, pusch_repetitionLevelCEmodeA_r13 unknown value!\n", @@ -928,39 +913,39 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in char rachCELevelInfoListPath[MAX_OPTNAME_SIZE * 2]; config_getlist(&rachcelevellist, NULL, 0, brparamspath); - RRC_CONFIGURATION_REQ (msg_p).rach_CE_LevelInfoList_r13_size[cc_idx] = rachcelevellist.numelt; + RRCcfg->rach_CE_LevelInfoList_r13_size[cc_idx] = rachcelevellist.numelt; int rachCEInfoIndex; for (rachCEInfoIndex = 0; rachCEInfoIndex < rachcelevellist.numelt; rachCEInfoIndex++) { sprintf(rachCELevelInfoListPath, "%s.%s.[%i]", brparamspath, ENB_CONFIG_STRING_RACH_CE_LEVELINFOLIST_R13, rachCEInfoIndex); config_get(rachcelevelParams, sizeof(rachcelevelParams) / sizeof(paramdef_t), rachCELevelInfoListPath); - RRC_CONFIGURATION_REQ (msg_p).firstPreamble_r13[cc_idx][rachCEInfoIndex] = eMTCconfig->firstPreamble_r13; - RRC_CONFIGURATION_REQ (msg_p).lastPreamble_r13[cc_idx][rachCEInfoIndex] = eMTCconfig->lastPreamble_r13; + RRCcfg->firstPreamble_r13[cc_idx][rachCEInfoIndex] = eMTCconfig->firstPreamble_r13; + RRCcfg->lastPreamble_r13[cc_idx][rachCEInfoIndex] = eMTCconfig->lastPreamble_r13; switch (eMTCconfig->ra_ResponseWindowSize_r13) { case 20: - RRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindowSize_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf20; + RRCcfg->ra_ResponseWindowSize_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf20; break; case 50: - RRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindowSize_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf50; + RRCcfg->ra_ResponseWindowSize_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf50; break; case 80: - RRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindowSize_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf80; + RRCcfg->ra_ResponseWindowSize_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf80; break; case 120: - RRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindowSize_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf120; + RRCcfg->ra_ResponseWindowSize_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf120; break; case 180: - RRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindowSize_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf180; + RRCcfg->ra_ResponseWindowSize_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf180; break; case 240: - RRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindowSize_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf240; + RRCcfg->ra_ResponseWindowSize_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf240; break; case 320: - RRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindowSize_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf320; + RRCcfg->ra_ResponseWindowSize_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf320; break; case 400: - RRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindowSize_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf400; + RRCcfg->ra_ResponseWindowSize_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__ra_ResponseWindowSize_r13_sf400; break; default: AssertFatal(1==0, @@ -970,35 +955,35 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in switch(eMTCconfig->mac_ContentionResolutionTimer_r13) { case 80: - RRC_CONFIGURATION_REQ (msg_p).mac_ContentionResolutionTimer_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf80; + RRCcfg->mac_ContentionResolutionTimer_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf80; break; case 100: - RRC_CONFIGURATION_REQ (msg_p).mac_ContentionResolutionTimer_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf100; + RRCcfg->mac_ContentionResolutionTimer_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf100; break; case 120: - RRC_CONFIGURATION_REQ (msg_p).mac_ContentionResolutionTimer_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf120; + RRCcfg->mac_ContentionResolutionTimer_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf120; break; case 160: - RRC_CONFIGURATION_REQ (msg_p).mac_ContentionResolutionTimer_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf160; + RRCcfg->mac_ContentionResolutionTimer_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf160; break; case 200: - RRC_CONFIGURATION_REQ (msg_p).mac_ContentionResolutionTimer_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf200; + RRCcfg->mac_ContentionResolutionTimer_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf200; break; case 240: - RRC_CONFIGURATION_REQ (msg_p).mac_ContentionResolutionTimer_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf240; + RRCcfg->mac_ContentionResolutionTimer_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf240; break; case 480: - RRC_CONFIGURATION_REQ (msg_p).mac_ContentionResolutionTimer_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf480; + RRCcfg->mac_ContentionResolutionTimer_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf480; break; case 960: - RRC_CONFIGURATION_REQ (msg_p).mac_ContentionResolutionTimer_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf960; + RRCcfg->mac_ContentionResolutionTimer_r13[cc_idx][rachCEInfoIndex] = LTE_RACH_CE_LevelInfo_r13__mac_ContentionResolutionTimer_r13_sf960; break; default: AssertFatal(1==0,"Illegal mac_ContentionResolutionTimer_r13 %d\n", eMTCconfig->mac_ContentionResolutionTimer_r13); break; } - RRC_CONFIGURATION_REQ (msg_p).rar_HoppingConfig_r13[cc_idx][rachCEInfoIndex] = eMTCconfig->rar_HoppingConfig_r13; + RRCcfg->rar_HoppingConfig_r13[cc_idx][rachCEInfoIndex] = eMTCconfig->rar_HoppingConfig_r13; AssertFatal(eMTCconfig->rar_HoppingConfig_r13 == 1 , "illegal rar_HoppingConfig_r13 %d (should be 1 only for now, can be 0 when RAR frequency hopping is supported\n",eMTCconfig->rar_HoppingConfig_r13); @@ -1006,55 +991,53 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in char rsrpRangeListPath[MAX_OPTNAME_SIZE * 2]; config_getlist(&rsrprangelist, NULL, 0, brparamspath); - RRC_CONFIGURATION_REQ (msg_p).rsrp_range_list_size[cc_idx] = rsrprangelist.numelt; - + RRCcfg->rsrp_range_list_size[cc_idx] = rsrprangelist.numelt; int rsrprangeindex; for (rsrprangeindex = 0; rsrprangeindex < rsrprangelist.numelt; rsrprangeindex++) { sprintf(rsrpRangeListPath, "%s.%s.[%i]", brparamspath, ENB_CONFIG_STRING_RSRP_RANGE_LIST, rsrprangeindex); config_get(rsrprangeParams, sizeof(rsrprangeParams) / sizeof(paramdef_t), rsrpRangeListPath); - RRC_CONFIGURATION_REQ (msg_p).rsrp_range[cc_idx][rsrprangeindex] = eMTCconfig->rsrp_range_br; - + RRCcfg->rsrp_range[cc_idx][rsrprangeindex] = eMTCconfig->rsrp_range_br; } char prachparameterscePath[MAX_OPTNAME_SIZE * 2]; config_getlist(&prachParamslist, NULL, 0, brparamspath); - RRC_CONFIGURATION_REQ (msg_p).prach_parameters_list_size[cc_idx] = prachParamslist.numelt; + RRCcfg->prach_parameters_list_size[cc_idx] = prachParamslist.numelt; int prachparamsindex; for (prachparamsindex = 0; prachparamsindex < prachParamslist.numelt; prachparamsindex++) { sprintf(prachparameterscePath, "%s.%s.[%i]", brparamspath, ENB_CONFIG_STRING_PRACH_PARAMETERS_CE_R13, prachparamsindex); config_get(prachParams, sizeof(prachParams) / sizeof(paramdef_t), prachparameterscePath); - RRC_CONFIGURATION_REQ (msg_p).prach_config_index[cc_idx][prachparamsindex] = eMTCconfig->prach_config_index_br; - RRC_CONFIGURATION_REQ (msg_p).prach_freq_offset[cc_idx][prachparamsindex] = eMTCconfig->prach_freq_offset_br; + RRCcfg->prach_config_index[cc_idx][prachparamsindex] = eMTCconfig->prach_config_index_br; + RRCcfg->prach_freq_offset[cc_idx][prachparamsindex] = eMTCconfig->prach_freq_offset_br; - RRC_CONFIGURATION_REQ (msg_p).prach_StartingSubframe_r13[cc_idx][prachparamsindex] = calloc(1, sizeof(long)); + RRCcfg->prach_StartingSubframe_r13[cc_idx][prachparamsindex] = calloc(1, sizeof(long)); switch(eMTCconfig->prach_StartingSubframe_r13) { case 2: - *RRC_CONFIGURATION_REQ (msg_p).prach_StartingSubframe_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf2; + *RRCcfg->prach_StartingSubframe_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf2; break; case 4: - *RRC_CONFIGURATION_REQ (msg_p).prach_StartingSubframe_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf4; + *RRCcfg->prach_StartingSubframe_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf4; break; case 8: - *RRC_CONFIGURATION_REQ (msg_p).prach_StartingSubframe_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf8; + *RRCcfg->prach_StartingSubframe_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf8; break; case 16: - *RRC_CONFIGURATION_REQ (msg_p).prach_StartingSubframe_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf16; + *RRCcfg->prach_StartingSubframe_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf16; break; case 32: - *RRC_CONFIGURATION_REQ (msg_p).prach_StartingSubframe_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf32; + *RRCcfg->prach_StartingSubframe_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf32; break; case 64: - *RRC_CONFIGURATION_REQ (msg_p).prach_StartingSubframe_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf64; + *RRCcfg->prach_StartingSubframe_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf64; break; case 128: - *RRC_CONFIGURATION_REQ (msg_p).prach_StartingSubframe_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf128; + *RRCcfg->prach_StartingSubframe_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf128; break; case 256: - *RRC_CONFIGURATION_REQ (msg_p).prach_StartingSubframe_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf256; + *RRCcfg->prach_StartingSubframe_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__prach_StartingSubframe_r13_sf256; break; default: AssertFatal(1==0,"prach_StartingSubframe_r13 %d is illegal\n", @@ -1062,9 +1045,11 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in break; } - RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_r13[cc_idx][prachparamsindex] = calloc(1, sizeof(long)); - if (eMTCconfig->maxNumPreambleAttemptCE_r13==10) *RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_r13[cc_idx][prachparamsindex] = 6; - else *RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_r13[cc_idx][prachparamsindex] = eMTCconfig->maxNumPreambleAttemptCE_r13-3; + RRCcfg->maxNumPreambleAttemptCE_r13[cc_idx][prachparamsindex] = calloc(1, sizeof(long)); + if (eMTCconfig->maxNumPreambleAttemptCE_r13 == 10) + *RRCcfg->maxNumPreambleAttemptCE_r13[cc_idx][prachparamsindex] = 6; + else + *RRCcfg->maxNumPreambleAttemptCE_r13[cc_idx][prachparamsindex] = eMTCconfig->maxNumPreambleAttemptCE_r13 - 3; AssertFatal(eMTCconfig->maxNumPreambleAttemptCE_r13 > 2 && eMTCconfig->maxNumPreambleAttemptCE_r13 <11, "prachparamsindex %d: Illegal maxNumPreambleAttemptCE_r13 %d\n", prachparamsindex,eMTCconfig->maxNumPreambleAttemptCE_r13); @@ -1072,28 +1057,28 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in switch(eMTCconfig->numRepetitionPerPreambleAttempt_r13) { case 1: - RRC_CONFIGURATION_REQ (msg_p).numRepetitionPerPreambleAttempt_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n1; + RRCcfg->numRepetitionPerPreambleAttempt_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n1; break; case 2: - RRC_CONFIGURATION_REQ (msg_p).numRepetitionPerPreambleAttempt_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n2; + RRCcfg->numRepetitionPerPreambleAttempt_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n2; break; case 4: - RRC_CONFIGURATION_REQ (msg_p).numRepetitionPerPreambleAttempt_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n4; + RRCcfg->numRepetitionPerPreambleAttempt_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n4; break; case 8: - RRC_CONFIGURATION_REQ (msg_p).numRepetitionPerPreambleAttempt_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n8; + RRCcfg->numRepetitionPerPreambleAttempt_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n8; break; case 16: - RRC_CONFIGURATION_REQ (msg_p).numRepetitionPerPreambleAttempt_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n16; + RRCcfg->numRepetitionPerPreambleAttempt_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n16; break; case 32: - RRC_CONFIGURATION_REQ (msg_p).numRepetitionPerPreambleAttempt_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n32; + RRCcfg->numRepetitionPerPreambleAttempt_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n32; break; case 64: - RRC_CONFIGURATION_REQ (msg_p).numRepetitionPerPreambleAttempt_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n64; + RRCcfg->numRepetitionPerPreambleAttempt_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n64; break; case 128: - RRC_CONFIGURATION_REQ (msg_p).numRepetitionPerPreambleAttempt_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n128; + RRCcfg->numRepetitionPerPreambleAttempt_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__numRepetitionPerPreambleAttempt_r13_n128; break; default: AssertFatal(1==0, @@ -1103,32 +1088,32 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in } switch (eMTCconfig->mpdcch_NumRepetition_RA_r13) { case 1: - RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r1; - break; + RRCcfg->mpdcch_NumRepetition_RA_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r1; + break; case 2: - RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r2; - break; + RRCcfg->mpdcch_NumRepetition_RA_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r2; + break; case 4: - RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r4; - break; + RRCcfg->mpdcch_NumRepetition_RA_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r4; + break; case 8: - RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r8; - break; + RRCcfg->mpdcch_NumRepetition_RA_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r8; + break; case 16: - RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r16; - break; + RRCcfg->mpdcch_NumRepetition_RA_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r16; + break; case 32: - RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r32; - break; + RRCcfg->mpdcch_NumRepetition_RA_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r32; + break; case 64: - RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r64; - break; + RRCcfg->mpdcch_NumRepetition_RA_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r64; + break; case 128: - RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r128; - break; + RRCcfg->mpdcch_NumRepetition_RA_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r128; + break; case 256: - RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r256; - break; + RRCcfg->mpdcch_NumRepetition_RA_r13[cc_idx][prachparamsindex] = LTE_PRACH_ParametersCE_r13__mpdcch_NumRepetition_RA_r13_r256; + break; default: AssertFatal (1==0, "illegal mpdcch_NumRepeition_RA_r13 %d\n", @@ -1136,7 +1121,7 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in break; } - RRC_CONFIGURATION_REQ (msg_p).prach_HoppingConfig_r13[cc_idx][prachparamsindex] = eMTCconfig->prach_HoppingConfig_r13; + RRCcfg->prach_HoppingConfig_r13[cc_idx][prachparamsindex] = eMTCconfig->prach_HoppingConfig_r13; AssertFatal (eMTCconfig->prach_HoppingConfig_r13 >=0 && eMTCconfig->prach_HoppingConfig_r13 < 2, "Illegal prach_HoppingConfig_r13 %d\n",eMTCconfig->prach_HoppingConfig_r13); @@ -1144,22 +1129,22 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in int maxavailablenarrowband_count = prachParams[7].numelt; - RRC_CONFIGURATION_REQ (msg_p).max_available_narrow_band_size[cc_idx][prachparamsindex] = maxavailablenarrowband_count; + RRCcfg->max_available_narrow_band_size[cc_idx][prachparamsindex] = maxavailablenarrowband_count; int narrow_band_index; for (narrow_band_index = 0; narrow_band_index < maxavailablenarrowband_count; narrow_band_index++) { - RRC_CONFIGURATION_REQ (msg_p).max_available_narrow_band[cc_idx][prachparamsindex][narrow_band_index] = prachParams[7].iptr[narrow_band_index]; + RRCcfg->max_available_narrow_band[cc_idx][prachparamsindex][narrow_band_index] = prachParams[7].iptr[narrow_band_index]; } } char n1PUCCHInfoParamsPath[MAX_OPTNAME_SIZE * 2]; config_getlist(&n1PUCCHInfoList, NULL, 0, brparamspath); - RRC_CONFIGURATION_REQ (msg_p).pucch_info_value_size[cc_idx] = n1PUCCHInfoList.numelt; + RRCcfg->pucch_info_value_size[cc_idx] = n1PUCCHInfoList.numelt; int n1PUCCHinfolistindex; for (n1PUCCHinfolistindex = 0; n1PUCCHinfolistindex < n1PUCCHInfoList.numelt; n1PUCCHinfolistindex++) { sprintf(n1PUCCHInfoParamsPath, "%s.%s.[%i]", brparamspath, ENB_CONFIG_STRING_N1PUCCH_AN_INFOLIST_R13, n1PUCCHinfolistindex); config_get(n1PUCCH_ANR13Params, sizeof(n1PUCCH_ANR13Params) / sizeof(paramdef_t), n1PUCCHInfoParamsPath); - RRC_CONFIGURATION_REQ (msg_p).pucch_info_value[cc_idx][n1PUCCHinfolistindex] = eMTCconfig->pucch_info_value; + RRCcfg->pucch_info_value[cc_idx][n1PUCCHinfolistindex] = eMTCconfig->pucch_info_value; } char PCCHConfigv1310Path[MAX_OPTNAME_SIZE*2 + 16]; @@ -1169,9 +1154,9 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in /** PCCH CONFIG V1310 */ - RRC_CONFIGURATION_REQ(msg_p).pcch_config_v1310[cc_idx] = true; - RRC_CONFIGURATION_REQ(msg_p).paging_narrowbands_r13[cc_idx] = eMTCconfig->paging_narrowbands_r13; - RRC_CONFIGURATION_REQ(msg_p).mpdcch_numrepetition_paging_r13[cc_idx] = eMTCconfig->mpdcch_numrepetition_paging_r13; + RRCcfg->pcch_config_v1310[cc_idx] = true; + RRCcfg->paging_narrowbands_r13[cc_idx] = eMTCconfig->paging_narrowbands_r13; + RRCcfg->mpdcch_numrepetition_paging_r13[cc_idx] = eMTCconfig->mpdcch_numrepetition_paging_r13; AssertFatal (eMTCconfig->mpdcch_numrepetition_paging_r13 == 0 || eMTCconfig->mpdcch_numrepetition_paging_r13 == 1 || @@ -1186,31 +1171,29 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in "illegal mpdcch_numrepetition_paging_r13 %d\n", eMTCconfig->mpdcch_numrepetition_paging_r13); - // RRC_CONFIGURATION_REQ(msg_p).nb_v1310[cc_idx] = CALLOC(1, sizeof(long)); + // RRCcfg->nb_v1310[cc_idx] = CALLOC(1, sizeof(long)); // if (!strcmp(nb_v1310, "one64thT")) { - // *RRC_CONFIGURATION_REQ(msg_p).nb_v1310[cc_idx] = 0; + // *RRCcfg->nb_v1310[cc_idx] = 0; // } else if (!strcmp(nb_v1310, "one128thT")) { - // *RRC_CONFIGURATION_REQ(msg_p).nb_v1310[cc_idx] = 1; + // *RRCcfg->nb_v1310[cc_idx] = 1; // } else if (!strcmp(nb_v1310, "one256thT")) { - // *RRC_CONFIGURATION_REQ(msg_p).nb_v1310[cc_idx] = 2; + // *RRCcfg->nb_v1310[cc_idx] = 2; // } else { // AssertFatal(0, // "Failed to parse eNB configuration file %s, nb_v1310, unknown value !\n", // config_fname); // } - - - RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level0_r13[cc_idx] = CALLOC(1, sizeof(long)); + RRCcfg->pucch_NumRepetitionCE_Msg4_Level0_r13[cc_idx] = CALLOC(1, sizeof(long)); // ++cnt; // check this ,, the conter is up above if (!strcmp(eMTCconfig->pucch_NumRepetitionCE_Msg4_Level0_r13, "n1")) { - *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level0_r13[cc_idx] = 0; + *RRCcfg->pucch_NumRepetitionCE_Msg4_Level0_r13[cc_idx] = 0; } else if (!strcmp(eMTCconfig->pucch_NumRepetitionCE_Msg4_Level0_r13, "n2")) { - *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level0_r13[cc_idx] = 1; + *RRCcfg->pucch_NumRepetitionCE_Msg4_Level0_r13[cc_idx] = 1; } else if (!strcmp(eMTCconfig->pucch_NumRepetitionCE_Msg4_Level0_r13, "n4")) { - *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level0_r13[cc_idx] = 2; + *RRCcfg->pucch_NumRepetitionCE_Msg4_Level0_r13[cc_idx] = 2; } else if (!strcmp(eMTCconfig->pucch_NumRepetitionCE_Msg4_Level0_r13, "n8")) { - *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level0_r13[cc_idx] = 3; + *RRCcfg->pucch_NumRepetitionCE_Msg4_Level0_r13[cc_idx] = 3; } else { AssertFatal (0, "Failed to parse eNB configuration file %s, pucch_NumRepetitionCE_Msg4_Level0_r13 unknown value!\n", @@ -1220,29 +1203,28 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in /** SIB2 FREQ HOPPING PARAMETERS R13 */ - RRC_CONFIGURATION_REQ(msg_p).sib2_freq_hoppingParameters_r13_exists[cc_idx] = true; + RRCcfg->sib2_freq_hoppingParameters_r13_exists[cc_idx] = true; char sib2FreqHoppingParametersR13Path[MAX_OPTNAME_SIZE*2 + 16]; sprintf(sib2FreqHoppingParametersR13Path, "%s.%s", brparamspath, ENB_CONFIG_STRING_SIB2_FREQ_HOPPINGPARAMETERS_R13); config_get(sib2freqhoppingParams, sizeof(sib2freqhoppingParams)/sizeof(paramdef_t), sib2FreqHoppingParametersR13Path); - - RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13[cc_idx] = CALLOC(1, sizeof(long)); + RRCcfg->sib2_interval_ULHoppingConfigCommonModeA_r13[cc_idx] = CALLOC(1, sizeof(long)); if (!strcmp(eMTCconfig->sib2_interval_ULHoppingConfigCommonModeA_r13, "FDD")) { - *RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13[cc_idx] = 0; + *RRCcfg->sib2_interval_ULHoppingConfigCommonModeA_r13[cc_idx] = 0; switch(eMTCconfig->sib2_interval_ULHoppingConfigCommonModeA_r13_val) { case 1: - RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13_val[cc_idx] = 0; + RRCcfg->sib2_interval_ULHoppingConfigCommonModeA_r13_val[cc_idx] = 0; break; case 2: - RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13_val[cc_idx] = 1; + RRCcfg->sib2_interval_ULHoppingConfigCommonModeA_r13_val[cc_idx] = 1; break; case 4: - RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13_val[cc_idx] = 2; + RRCcfg->sib2_interval_ULHoppingConfigCommonModeA_r13_val[cc_idx] = 2; break; case 8: - RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13_val[cc_idx] = 3; + RRCcfg->sib2_interval_ULHoppingConfigCommonModeA_r13_val[cc_idx] = 3; break; default: AssertFatal(1==0, @@ -1250,19 +1232,19 @@ void fill_eMTC_configuration(MessageDef *msg_p, ccparams_eMTC_t *eMTCconfig, in eMTCconfig->sib2_interval_ULHoppingConfigCommonModeA_r13_val); } } else if (!strcmp(eMTCconfig->sib2_interval_ULHoppingConfigCommonModeA_r13, "TDD")) { - *RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13[cc_idx] = 1; + *RRCcfg->sib2_interval_ULHoppingConfigCommonModeA_r13[cc_idx] = 1; switch(eMTCconfig->sib2_interval_ULHoppingConfigCommonModeA_r13_val) { case 1: - RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13_val[cc_idx] = 0; + RRCcfg->sib2_interval_ULHoppingConfigCommonModeA_r13_val[cc_idx] = 0; break; case 5: - RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13_val[cc_idx] = 1; + RRCcfg->sib2_interval_ULHoppingConfigCommonModeA_r13_val[cc_idx] = 1; break; case 10: - RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13_val[cc_idx] = 2; + RRCcfg->sib2_interval_ULHoppingConfigCommonModeA_r13_val[cc_idx] = 2; break; case 20: - RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13_val[cc_idx] = 3; + RRCcfg->sib2_interval_ULHoppingConfigCommonModeA_r13_val[cc_idx] = 3; break; default: AssertFatal(1==0, diff --git a/openair2/F1AP/f1ap_du_rrc_message_transfer.c b/openair2/F1AP/f1ap_du_rrc_message_transfer.c index c3e1595f42..d7e32d9daf 100644 --- a/openair2/F1AP/f1ap_du_rrc_message_transfer.c +++ b/openair2/F1AP/f1ap_du_rrc_message_transfer.c @@ -353,12 +353,9 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance, if (mac_MainConfig->drx_Config == NULL) { LOG_W(F1AP, "drx_Configuration parameter is NULL, cannot configure local UE parameters or CDRX is deactivated\n"); } else { - MessageDef *message_p = NULL; + rrc_mac_drx_config_req_t req = {.rnti = ctxt.rntiMaybeUEid, .drx_Configuration = mac_MainConfig->drx_Config}; /* Send DRX configuration to MAC task to configure timers of local UE context */ - message_p = itti_alloc_new_message(TASK_DU_F1, 0, RRC_MAC_DRX_CONFIG_REQ); - RRC_MAC_DRX_CONFIG_REQ(message_p).rnti = ctxt.rntiMaybeUEid; - RRC_MAC_DRX_CONFIG_REQ(message_p).drx_Configuration = mac_MainConfig->drx_Config; - itti_send_msg_to_task(TASK_MAC_ENB, ctxt.instance, message_p); + eNB_Config_Local_DRX(instance, &req); LOG_D(F1AP, "DRX configured in MAC Main Configuration for RRC Connection Reconfiguration\n"); } diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c index 3b07b27442..cc30b29dc5 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler.c +++ b/openair2/LAYER2/MAC/eNB_scheduler.c @@ -470,7 +470,7 @@ check_ul_failure(module_id_t module_idP, int CC_id, int UE_id, if (UE_info->UE_sched_ctrl[UE_id].ul_failure_timer > 4000) { // note: probably ul_failure_timer should be less than UE radio link failure time(see T310/N310/N311) if (NODE_IS_DU(RC.rrc[module_idP]->node_type)) { - MessageDef *m = itti_alloc_new_message(TASK_MAC_ENB, 0, F1AP_UE_CONTEXT_RELEASE_REQ); + MessageDef *m = itti_alloc_new_message(TASK_PHY_ENB, 0, F1AP_UE_CONTEXT_RELEASE_REQ); F1AP_UE_CONTEXT_RELEASE_REQ(m).rnti = rnti; F1AP_UE_CONTEXT_RELEASE_REQ(m).cause = F1AP_CAUSE_RADIO_NETWORK; F1AP_UE_CONTEXT_RELEASE_REQ(m).cause_value = 1; // 1 = F1AP_CauseRadioNetwork_rl_failure diff --git a/openair2/LAYER2/MAC/eNB_scheduler_RA.c b/openair2/LAYER2/MAC/eNB_scheduler_RA.c index c659df8d31..12f37c3b68 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_RA.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_RA.c @@ -1396,10 +1396,16 @@ initiate_ra_proc(module_id_t module_idP, ra[i].RA_rnti = ra_rnti; ra[i].preamble_index = preamble_index; failure_cnt = 0; - LOG_D(MAC, + LOG_I(MAC, "[eNB %d][RAPROC] CC_id %d Frame %d Activating RAR generation in Frame %d, subframe %d for process %d, rnti %x, state %d\n", - module_idP, CC_id, frameP, ra[i].Msg2_frame, - ra[i].Msg2_subframe, i, ra[i].rnti, ra[i].state); + module_idP, + CC_id, + frameP, + ra[i].Msg2_frame, + ra[i].Msg2_subframe, + i, + ra[i].rnti, + ra[i].state); return; } } diff --git a/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c b/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c index 1cfc8ee838..fb113cbb5c 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c @@ -3206,11 +3206,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP, UE_template->nb_rb_ul[harq_pid] = rb_table[rb_table_index]; UE_template->first_rb_ul[harq_pid] = first_rb[CC_id]; UE_template->cqi_req[harq_pid] = cqi_req; - UE_sched_ctrl->ul_scheduled |= (1<list.head) - VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_SCHEDULED,UE_sched_ctrl->ul_scheduled); - + UE_sched_ctrl->ul_scheduled |= (1 << harq_pid); // adjust total UL buffer status by TBS, wait for UL sdus to do final update /*LOG_D(MAC,"[eNB %d] CC_id %d UE %d/%x : adjusting ul_total_buffer, old %d, TBS %d\n", module_idP,CC_id,UE_id,rnti,UE_template->ul_total_buffer,UE_template->TBS_UL[harq_pid]); if (UE_template->ul_total_buffer > UE_template->TBS_UL[harq_pid]) diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c index 3aa9d946ce..c2e51db3ef 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c @@ -1989,12 +1989,11 @@ find_UE_id(module_id_t mod_idP, rnti_t rntiP) //------------------------------------------------------------------------------ { - int UE_id; UE_info_t *UE_info = &RC.mac[mod_idP]->UE_info; if(!UE_info) return -1; - for (UE_id = 0; UE_id < MAX_MOBILES_PER_ENB; UE_id++) { + for (int UE_id = 0; UE_id < MAX_MOBILES_PER_ENB; UE_id++) { if (UE_info->active[UE_id] == true) { int CC_id = UE_PCCID(mod_idP, UE_id); if (CC_id>=0 && CC_idUE_template[CC_id][UE_id].rnti == rntiP) { @@ -2144,6 +2143,7 @@ inline void add_ue_list(UE_list_t *listP, int UE_id) { while (*cur >= 0) cur = &listP->next[*cur]; *cur = UE_id; + LOG_D(MAC, "added UE %d in UE list\n", UE_id); } //------------------------------------------------------------------------------ diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c index 8de14a13ab..36f258d06c 100644 --- a/openair2/LAYER2/MAC/main.c +++ b/openair2/LAYER2/MAC/main.c @@ -109,6 +109,7 @@ void lte_dump_mac_stats(eNB_MAC_INST *mac, FILE *fd) UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_errors); } } + fflush(fd); return; } @@ -270,47 +271,3 @@ int l2_init_eNB(void) return (1); } - -//----------------------------------------------------------------------------- -/* - * Main loop of MAC itti message handling - */ -void *mac_enb_task(void *arg) -//----------------------------------------------------------------------------- -{ - MessageDef *received_msg = NULL; - int result; - - itti_mark_task_ready(TASK_MAC_ENB); // void function 10/2019 - LOG_I(MAC,"Starting main loop of MAC message task\n"); - - while (1) { - itti_receive_msg(TASK_MAC_ENB, &received_msg); - - switch (ITTI_MSG_ID(received_msg)) { - case RRC_MAC_DRX_CONFIG_REQ: - LOG_I(MAC, "MAC Task Received RRC_MAC_DRX_CONFIG_REQ\n"); - /* Set timers and thresholds values in local MAC context of UE */ - eNB_Config_Local_DRX(ITTI_MSG_DESTINATION_INSTANCE(received_msg), &received_msg->ittiMsg.rrc_mac_drx_config_req); - break; - - case TERMINATE_MESSAGE: - LOG_W(MAC, " *** Exiting MAC thread\n"); - itti_exit_task(); - break; - - default: - LOG_E(MAC, "MAC instance received unhandled message: %d:%s\n", - ITTI_MSG_ID(received_msg), - ITTI_MSG_NAME(received_msg)); - break; - } // end switch - - result = itti_free(ITTI_MSG_ORIGIN_ID(received_msg), received_msg); - AssertFatal(result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); - - received_msg = NULL; - } // end while - - return NULL; -} diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c index 171e69ea59..ee90ee1862 100644 --- a/openair2/RRC/LTE/rrc_eNB.c +++ b/openair2/RRC/LTE/rrc_eNB.c @@ -971,48 +971,50 @@ void release_UE_in_freeList(module_id_t mod_id) { for(int ue_num = 0; ue_num < sizeofArray(eNB_MAC->UE_free_ctrl) ; ue_num++) { rnti_t rnti = eNB_MAC->UE_free_ctrl[ue_num].rnti; - - if(rnti != 0) { + if (!rnti) + continue; protocol_ctxt_t ctxt; - PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, mod_id, ENB_FLAG_YES, rnti, 0, 0,mod_id); + PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, mod_id, ENB_FLAG_YES, rnti, 0, 0, mod_id); for (int CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { eNB_PHY = RC.eNB[mod_id][CC_id]; int id; // clean ULSCH entries for rnti - id = find_ulsch(rnti,eNB_PHY,eNB_MAC->UE_free_ctrl[ue_num].raFlag ? SEARCH_EXIST_RA : SEARCH_EXIST); + id = find_ulsch(rnti, eNB_PHY, eNB_MAC->UE_free_ctrl[ue_num].raFlag ? SEARCH_EXIST_RA : SEARCH_EXIST); - if (id>=0) clean_eNb_ulsch(eNB_PHY->ulsch[id]); + if (id >= 0) + clean_eNb_ulsch(eNB_PHY->ulsch[id]); // clean DLSCH entries for rnti - id = find_dlsch(rnti,eNB_PHY,eNB_MAC->UE_free_ctrl[ue_num].raFlag ? SEARCH_EXIST_RA : SEARCH_EXIST); + id = find_dlsch(rnti, eNB_PHY, eNB_MAC->UE_free_ctrl[ue_num].raFlag ? SEARCH_EXIST_RA : SEARCH_EXIST); - if (id>=0) clean_eNb_dlsch(eNB_PHY->dlsch[id][0]); + if (id >= 0) + clean_eNb_dlsch(eNB_PHY->dlsch[id][0]); // clean UCI entries for rnti - for (int i=0; iuci_vars[i].rnti == rnti) { - LOG_I(MAC, "clean eNb uci_vars[%d] UE %x \n",i, rnti); - memset(&eNB_PHY->uci_vars[i],0,sizeof(LTE_eNB_UCI)); + for (int i = 0; i < NUMBER_OF_UCI_MAX; i++) { + if (eNB_PHY->uci_vars[i].rnti == rnti) { + LOG_I(MAC, "clean eNb uci_vars[%d] UE %x \n", i, rnti); + memset(&eNB_PHY->uci_vars[i], 0, sizeof(LTE_eNB_UCI)); } } for(int j = 0; j < 10; j++) { nfapi_ul_config_request_body_t *ul_req_tmp = &eNB_MAC->UL_req_tmp[CC_id][j].ul_config_request_body; - if(ul_req_tmp) { + if (ul_req_tmp) { int pdu_number = ul_req_tmp->number_of_pdus; - for(int pdu_index = pdu_number-1; pdu_index >= 0; pdu_index--) { - if((ul_req_tmp->ul_config_pdu_list[pdu_index].ulsch_pdu.ulsch_pdu_rel8.rnti == rnti) || - (ul_req_tmp->ul_config_pdu_list[pdu_index].uci_harq_pdu.ue_information.ue_information_rel8.rnti == rnti) || - (ul_req_tmp->ul_config_pdu_list[pdu_index].uci_cqi_pdu.ue_information.ue_information_rel8.rnti == rnti) || - (ul_req_tmp->ul_config_pdu_list[pdu_index].uci_sr_pdu.ue_information.ue_information_rel8.rnti == rnti) || - (ul_req_tmp->ul_config_pdu_list[pdu_index].srs_pdu.srs_pdu_rel8.rnti == rnti)) { + for (int pdu_index = pdu_number - 1; pdu_index >= 0; pdu_index--) { + if ((ul_req_tmp->ul_config_pdu_list[pdu_index].ulsch_pdu.ulsch_pdu_rel8.rnti == rnti) + || (ul_req_tmp->ul_config_pdu_list[pdu_index].uci_harq_pdu.ue_information.ue_information_rel8.rnti == rnti) + || (ul_req_tmp->ul_config_pdu_list[pdu_index].uci_cqi_pdu.ue_information.ue_information_rel8.rnti == rnti) + || (ul_req_tmp->ul_config_pdu_list[pdu_index].uci_sr_pdu.ue_information.ue_information_rel8.rnti == rnti) + || (ul_req_tmp->ul_config_pdu_list[pdu_index].srs_pdu.srs_pdu_rel8.rnti == rnti)) { LOG_I(RRC, "remove UE %x from ul_config_pdu_list %d/%d\n", rnti, pdu_index, pdu_number); - if(pdu_index < pdu_number -1) { - memcpy(&ul_req_tmp->ul_config_pdu_list[pdu_index], &ul_req_tmp->ul_config_pdu_list[pdu_index+1], (pdu_number-1-pdu_index) * sizeof(nfapi_ul_config_request_pdu_t)); + if (pdu_index < pdu_number - 1) { + memcpy(&ul_req_tmp->ul_config_pdu_list[pdu_index], &ul_req_tmp->ul_config_pdu_list[pdu_index + 1], (pdu_number - 1 - pdu_index) * sizeof(nfapi_ul_config_request_pdu_t)); } ul_req_tmp->number_of_pdus--; @@ -1049,7 +1051,6 @@ void release_UE_in_freeList(module_id_t mod_id) { LOG_I(RRC, "[release_UE_in_freeList] remove UE %x from freeList ra context: %d\n", rnti, eNB_MAC->UE_free_ctrl[ue_num].raFlag); eNB_MAC->UE_free_ctrl[ue_num].rnti = 0; } - } pthread_mutex_unlock(&lock_ue_freelist); } @@ -2658,7 +2659,6 @@ void rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t uint8_t buffer[RRC_BUF_SIZE]; uint16_t size; int i; - MessageDef *message_p = NULL; /* Configure SRB1/SRB2, PhysicalConfigDedicated, LTE_MAC_MainConfig for UE */ eNB_RRC_INST *rrc_inst = RC.rrc[ctxt_pP->module_id]; struct LTE_PhysicalConfigDedicated **physicalConfigDedicated = &ue_context_pP->ue_context.physicalConfigDedicated; @@ -2854,10 +2854,8 @@ void rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t LOG_W(RRC, "drx_Configuration parameter is NULL, cannot configure local UE parameters or CDRX is deactivated\n"); } else { /* Send DRX configuration to MAC task to configure timers of local UE context */ - message_p = itti_alloc_new_message(TASK_RRC_ENB, 0, RRC_MAC_DRX_CONFIG_REQ); - RRC_MAC_DRX_CONFIG_REQ(message_p).rnti = rnti; - RRC_MAC_DRX_CONFIG_REQ(message_p).drx_Configuration = mac_MainConfig->drx_Config; - itti_send_msg_to_task(TASK_MAC_ENB, module_id, message_p); + rrc_mac_drx_config_req_t req = {.rnti = rnti, .drx_Configuration = mac_MainConfig->drx_Config}; + eNB_Config_Local_DRX(module_id, &req); LOG_D(RRC, "DRX configured in MAC Main Configuration for RRC Connection Reconfiguration\n"); } } @@ -5952,7 +5950,7 @@ rrc_eNB_decode_ccch( } c_rnti = BIT_STRING_to_uint16(&rrcConnectionReestablishmentRequest->ue_Identity.c_RNTI); - LOG_D(RRC, "c_rnti is %x\n", c_rnti); + LOG_I(RRC, "reestablishment, previous c_rnti is %x (new is %x)\n", c_rnti, ctxt_pP->rnti); ue_context_p = rrc_eNB_get_ue_context(RC.rrc[ctxt_pP->module_id], c_rnti); if (ue_context_p == NULL) { @@ -6008,7 +6006,7 @@ rrc_eNB_decode_ccch( if((RC.mac[ctxt_pP->module_id]->UE_info.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer > 0) && (RC.mac[ctxt_pP->module_id]->UE_info.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer_thres > 20)) { LOG_E(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RCConnectionReestablishmentComplete(Previous) don't receive, delete the Previous UE\n", + PROTOCOL_RRC_CTXT_UE_FMT " RCConnectionReestablishmentComplete not received, but we get a new RRCConnectionReestablishmentRequest, we delete the Previous UE\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); RC.mac[ctxt_pP->module_id]->UE_info.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 1000; rrc_eNB_previous_SRB2(ue_context_p); @@ -6027,10 +6025,9 @@ rrc_eNB_decode_ccch( if(ue_context_p->ue_context.ue_reestablishment_timer > 0) { LOG_E(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RRRCConnectionReconfigurationComplete(Previous) don't receive, delete the Previous UE,\nprevious Status %d, new Status RRC_RECONFIGURED\n", + PROTOCOL_RRC_CTXT_UE_FMT " RRRCConnectionReconfigurationComplete not received, delete the Previous UE,\nprevious Status %d, new Status RRC_RECONFIGURED\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - ue_context_p->ue_context.StatusRrc - ); + ue_context_p->ue_context.StatusRrc); ue_context_p->ue_context.StatusRrc = RRC_RECONFIGURED; protocol_ctxt_t ctxt_old_p; PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt_old_p, @@ -8082,13 +8079,14 @@ void *rrc_enb_process_itti_msg(void *notUsed) { protocol_ctxt_t ctxt; memset(&ctxt, 0, sizeof(ctxt)); // Wait for a message - itti_receive_msg(TASK_RRC_ENB, &msg_p); + itti_poll_msg(TASK_RRC_ENB, &msg_p); + while (msg_p) { msg_name_p = ITTI_MSG_NAME(msg_p); instance = ITTI_MSG_DESTINATION_INSTANCE(msg_p); /* RRC_SUBFRAME_PROCESS is sent every subframe, do not log it */ if (ITTI_MSG_ID(msg_p) != RRC_SUBFRAME_PROCESS) - LOG_D(RRC,"Received message %s\n",msg_name_p); + LOG_D(RRC, "Received message %s\n", msg_name_p); switch (ITTI_MSG_ID(msg_p)) { case TERMINATE_MESSAGE: @@ -8102,51 +8100,28 @@ void *rrc_enb_process_itti_msg(void *notUsed) { /* Messages from MAC */ case RRC_MAC_CCCH_DATA_IND: - PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, - RRC_MAC_CCCH_DATA_IND(msg_p).enb_index, - ENB_FLAG_YES, - RRC_MAC_CCCH_DATA_IND(msg_p).rnti, - msg_p->ittiMsgHeader.lte_time.frame, - msg_p->ittiMsgHeader.lte_time.slot); - LOG_I(RRC,"Decoding CCCH : inst %ld, CC_id %d, ctxt %p, sib_info_p->Rx_buffer.payload_size %d\n", - instance, - RRC_MAC_CCCH_DATA_IND(msg_p).CC_id, - &ctxt, - RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size); + PROTOCOL_CTXT_SET_BY_INSTANCE( + &ctxt, RRC_MAC_CCCH_DATA_IND(msg_p).enb_index, ENB_FLAG_YES, RRC_MAC_CCCH_DATA_IND(msg_p).rnti, msg_p->ittiMsgHeader.lte_time.frame, msg_p->ittiMsgHeader.lte_time.slot); + LOG_I(RRC, "Decoding CCCH : inst %ld, CC_id %d, ctxt %p, sib_info_p->Rx_buffer.payload_size %d\n", instance, RRC_MAC_CCCH_DATA_IND(msg_p).CC_id, &ctxt, RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size); if (RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size >= CCCH_SDU_SIZE) { - LOG_I(RRC, "CCCH message has size %d > %d\n", - RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size,CCCH_SDU_SIZE); + LOG_I(RRC, "CCCH message has size %d > %d\n", RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size, CCCH_SDU_SIZE); break; } - rrc_eNB_decode_ccch(&ctxt, - (uint8_t *)RRC_MAC_CCCH_DATA_IND(msg_p).sdu, - RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size, - RRC_MAC_CCCH_DATA_IND(msg_p).CC_id); + rrc_eNB_decode_ccch(&ctxt, (uint8_t *)RRC_MAC_CCCH_DATA_IND(msg_p).sdu, RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size, RRC_MAC_CCCH_DATA_IND(msg_p).CC_id); break; /* Messages from PDCP */ case RRC_DCCH_DATA_IND: - PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, - instance, - ENB_FLAG_YES, - RRC_DCCH_DATA_IND(msg_p).rnti, - msg_p->ittiMsgHeader.lte_time.frame, - msg_p->ittiMsgHeader.lte_time.slot); - LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Received on DCCH %d %s\n", - PROTOCOL_RRC_CTXT_UE_ARGS(&ctxt), - RRC_DCCH_DATA_IND(msg_p).dcch_index, - msg_name_p); - rrc_eNB_decode_dcch(&ctxt, - RRC_DCCH_DATA_IND(msg_p).dcch_index, - RRC_DCCH_DATA_IND(msg_p).sdu_p, - RRC_DCCH_DATA_IND(msg_p).sdu_size); + PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, ENB_FLAG_YES, RRC_DCCH_DATA_IND(msg_p).rnti, msg_p->ittiMsgHeader.lte_time.frame, msg_p->ittiMsgHeader.lte_time.slot); + LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT " Received on DCCH %d %s\n", PROTOCOL_RRC_CTXT_UE_ARGS(&ctxt), RRC_DCCH_DATA_IND(msg_p).dcch_index, msg_name_p); + rrc_eNB_decode_dcch(&ctxt, RRC_DCCH_DATA_IND(msg_p).dcch_index, RRC_DCCH_DATA_IND(msg_p).sdu_p, RRC_DCCH_DATA_IND(msg_p).sdu_size); // Message buffer has been processed, free it now. result = itti_free(ITTI_MSG_ORIGIN_ID(msg_p), RRC_DCCH_DATA_IND(msg_p).sdu_p); if (result != EXIT_SUCCESS) { - LOG_I(RRC, "Failed to free memory (%d)!\n",result); + LOG_I(RRC, "Failed to free memory (%d)!\n", result); break; } @@ -8218,15 +8193,15 @@ void *rrc_enb_process_itti_msg(void *notUsed) { if (ue_context_p == NULL) { /* is it possible? */ - LOG_E(RRC, "could not find UE (rnti %x) while processing X2AP_HANDOVER_REQ_ACK\n", - X2AP_HANDOVER_REQ_ACK(msg_p).rnti); + LOG_E(RRC, "could not find UE (rnti %x) while processing X2AP_HANDOVER_REQ_ACK\n", X2AP_HANDOVER_REQ_ACK(msg_p).rnti); exit(1); } LOG_I(RRC, "[eNB %ld] source eNB receives the X2 HO ACK %s\n", instance, msg_name_p); DevAssert(ue_context_p != NULL); - if (ue_context_p->ue_context.handover_info->state != HO_REQUEST) abort(); + if (ue_context_p->ue_context.handover_info->state != HO_REQUEST) + abort(); hash_rc = hashtable_get(RC.gtpv1u_data_g->ue_mapping, ue_context_p->ue_context.rnti, (void **)>pv1u_ue_data_p); @@ -8242,26 +8217,22 @@ void *rrc_enb_process_itti_msg(void *notUsed) { nb_e_rabs_tobesetup = x2ap_handover_req_ack->nb_e_rabs_tobesetup; ue_context_p->ue_context.nb_x2u_e_rabs = nb_e_rabs_tobesetup; - for(int i=0; i< nb_e_rabs_tobesetup; i++) { + for (int i = 0; i < nb_e_rabs_tobesetup; i++) { ip_offset = 0; eps_bearer_id = x2ap_handover_req_ack->e_rabs_tobesetup[i].e_rab_id; ue_context_p->ue_context.enb_gtp_x2u_ebi[i] = eps_bearer_id; ue_context_p->ue_context.enb_gtp_x2u_teid[i] = x2ap_handover_req_ack->e_rabs_tobesetup[i].gtp_teid; gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_teNB = x2ap_handover_req_ack->e_rabs_tobesetup[i].gtp_teid; - if ((x2ap_handover_req_ack->e_rabs_tobesetup[i].eNB_addr.length == 4) || - (x2ap_handover_req_ack->e_rabs_tobesetup[i].eNB_addr.length == 20)) { + if ((x2ap_handover_req_ack->e_rabs_tobesetup[i].eNB_addr.length == 4) || (x2ap_handover_req_ack->e_rabs_tobesetup[i].eNB_addr.length == 20)) { in_addr = *((in_addr_t *)x2ap_handover_req_ack->e_rabs_tobesetup[i].eNB_addr.buffer); ip_offset = 4; gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].tenb_ip_addr = in_addr; ue_context_p->ue_context.enb_gtp_x2u_addrs[i] = x2ap_handover_req_ack->e_rabs_tobesetup[i].eNB_addr; } - if ((x2ap_handover_req_ack->e_rabs_tobesetup[i].eNB_addr.length == 16) || - (x2ap_handover_req_ack->e_rabs_tobesetup[i].eNB_addr.length == 20)) { - memcpy(gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].tenb_ip6_addr.s6_addr, - &x2ap_handover_req_ack->e_rabs_tobesetup[i].eNB_addr.buffer[ip_offset], - 16); + if ((x2ap_handover_req_ack->e_rabs_tobesetup[i].eNB_addr.length == 16) || (x2ap_handover_req_ack->e_rabs_tobesetup[i].eNB_addr.length == 20)) { + memcpy(gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].tenb_ip6_addr.s6_addr, &x2ap_handover_req_ack->e_rabs_tobesetup[i].eNB_addr.buffer[ip_offset], 16); } } } @@ -8277,7 +8248,8 @@ void *rrc_enb_process_itti_msg(void *notUsed) { LOG_I(RRC, "[eNB %ld] source eNB receives the X2 UE CONTEXT RELEASE %s\n", instance, msg_name_p); DevAssert(ue_context_p != NULL); - if (ue_context_p->ue_context.handover_info->state != HO_COMPLETE) abort(); + if (ue_context_p->ue_context.handover_info->state != HO_COMPLETE) + abort(); ue_context_p->ue_context.handover_info->state = HO_RELEASE; break; @@ -8303,13 +8275,8 @@ void *rrc_enb_process_itti_msg(void *notUsed) { ue_context_p = rrc_eNB_get_ue_context(RC.rrc[instance], X2AP_HANDOVER_CANCEL(msg_p).rnti); - if (ue_context_p != NULL && - ue_context_p->ue_context.handover_info != NULL) { - LOG_I(RRC, "[eNB %ld] eNB receives X2 HANDOVER CANCEL for rnti %x, cause %s [%s]\n", - instance, - X2AP_HANDOVER_CANCEL(msg_p).rnti, - cause, - msg_name_p); + if (ue_context_p != NULL && ue_context_p->ue_context.handover_info != NULL) { + LOG_I(RRC, "[eNB %ld] eNB receives X2 HANDOVER CANCEL for rnti %x, cause %s [%s]\n", instance, X2AP_HANDOVER_CANCEL(msg_p).rnti, cause, msg_name_p); if (X2AP_HANDOVER_CANCEL(msg_p).cause == X2AP_T_RELOC_PREP_TIMEOUT) { /* for prep timeout, simply return to normal state */ @@ -8330,8 +8297,7 @@ void *rrc_enb_process_itti_msg(void *notUsed) { else failure_cause = "UE not in handover"; - LOG_W(RRC, "[eNB %ld] cannot process (%s) X2 HANDOVER CANCEL for rnti %x, cause %s, ignoring\n", - instance, failure_cause, X2AP_HANDOVER_CANCEL(msg_p).rnti, cause); + LOG_W(RRC, "[eNB %ld] cannot process (%s) X2 HANDOVER CANCEL for rnti %x, cause %s, ignoring\n", instance, failure_cause, X2AP_HANDOVER_CANCEL(msg_p).rnti, cause); } break; @@ -8364,9 +8330,8 @@ void *rrc_enb_process_itti_msg(void *notUsed) { /* Messages from F1AP task */ case F1AP_SETUP_REQ: - AssertFatal(NODE_IS_CU(RC.rrc[instance]->node_type), - "should not receive F1AP_SETUP_REQUEST, need call by CU!\n"); - LOG_I(RRC,"[eNB %ld] Received %s : %p\n", instance, msg_name_p, &F1AP_SETUP_REQ(msg_p)); + AssertFatal(NODE_IS_CU(RC.rrc[instance]->node_type), "should not receive F1AP_SETUP_REQUEST, need call by CU!\n"); + LOG_I(RRC, "[eNB %ld] Received %s : %p\n", instance, msg_name_p, &F1AP_SETUP_REQ(msg_p)); handle_f1_setup_req(&F1AP_SETUP_REQ(msg_p)); break; @@ -8375,47 +8340,43 @@ void *rrc_enb_process_itti_msg(void *notUsed) { break; case M2AP_SETUP_RESP: - rrc_eNB_process_M2AP_SETUP_RESP(&ctxt,0/*CC_id*/,ENB_INSTANCE_TO_MODULE_ID(instance),&M2AP_SETUP_RESP(msg_p)); + rrc_eNB_process_M2AP_SETUP_RESP(&ctxt, 0 /*CC_id*/, ENB_INSTANCE_TO_MODULE_ID(instance), &M2AP_SETUP_RESP(msg_p)); break; case M2AP_MBMS_SCHEDULING_INFORMATION: - rrc_eNB_process_M2AP_MBMS_SCHEDULING_INFORMATION(&ctxt,0/*CC_id*/,ENB_INSTANCE_TO_MODULE_ID(instance),&M2AP_MBMS_SCHEDULING_INFORMATION(msg_p)); + rrc_eNB_process_M2AP_MBMS_SCHEDULING_INFORMATION(&ctxt, 0 /*CC_id*/, ENB_INSTANCE_TO_MODULE_ID(instance), &M2AP_MBMS_SCHEDULING_INFORMATION(msg_p)); break; case M2AP_MBMS_SESSION_START_REQ: - rrc_eNB_process_M2AP_MBMS_SESSION_START_REQ(&ctxt,0/*CC_id*/,ENB_INSTANCE_TO_MODULE_ID(instance),&M2AP_MBMS_SESSION_START_REQ(msg_p)); + rrc_eNB_process_M2AP_MBMS_SESSION_START_REQ(&ctxt, 0 /*CC_id*/, ENB_INSTANCE_TO_MODULE_ID(instance), &M2AP_MBMS_SESSION_START_REQ(msg_p)); break; case M2AP_MBMS_SESSION_STOP_REQ: - rrc_eNB_process_M2AP_MBMS_SESSION_STOP_REQ(&ctxt,&M2AP_MBMS_SESSION_STOP_REQ(msg_p)); + rrc_eNB_process_M2AP_MBMS_SESSION_STOP_REQ(&ctxt, &M2AP_MBMS_SESSION_STOP_REQ(msg_p)); break; case M2AP_RESET: - rrc_eNB_process_M2AP_RESET(&ctxt,&M2AP_RESET(msg_p)); + rrc_eNB_process_M2AP_RESET(&ctxt, &M2AP_RESET(msg_p)); break; case M2AP_ENB_CONFIGURATION_UPDATE_ACK: - rrc_eNB_process_M2AP_ENB_CONFIGURATION_UPDATE_ACK(&ctxt,&M2AP_ENB_CONFIGURATION_UPDATE_ACK(msg_p)); + rrc_eNB_process_M2AP_ENB_CONFIGURATION_UPDATE_ACK(&ctxt, &M2AP_ENB_CONFIGURATION_UPDATE_ACK(msg_p)); break; case M2AP_ERROR_INDICATION: - rrc_eNB_process_M2AP_ERROR_INDICATION(&ctxt,&M2AP_ERROR_INDICATION(msg_p)); + rrc_eNB_process_M2AP_ERROR_INDICATION(&ctxt, &M2AP_ERROR_INDICATION(msg_p)); break; case M2AP_MBMS_SERVICE_COUNTING_REQ: - rrc_eNB_process_M2AP_MBMS_SERVICE_COUNTING_REQ(&ctxt,&M2AP_MBMS_SERVICE_COUNTING_REQ(msg_p)); + rrc_eNB_process_M2AP_MBMS_SERVICE_COUNTING_REQ(&ctxt, &M2AP_MBMS_SERVICE_COUNTING_REQ(msg_p)); break; case M2AP_MCE_CONFIGURATION_UPDATE: - rrc_eNB_process_M2AP_MCE_CONFIGURATION_UPDATE(&ctxt,&M2AP_MCE_CONFIGURATION_UPDATE(msg_p)); + rrc_eNB_process_M2AP_MCE_CONFIGURATION_UPDATE(&ctxt, &M2AP_MCE_CONFIGURATION_UPDATE(msg_p)); break; case RLC_SDU_INDICATION: - process_rlc_sdu_indication(instance, - RLC_SDU_INDICATION(msg_p).rnti, - RLC_SDU_INDICATION(msg_p).is_successful, - RLC_SDU_INDICATION(msg_p).srb_id, - RLC_SDU_INDICATION(msg_p).message_id); + process_rlc_sdu_indication(instance, RLC_SDU_INDICATION(msg_p).rnti, RLC_SDU_INDICATION(msg_p).is_successful, RLC_SDU_INDICATION(msg_p).srb_id, RLC_SDU_INDICATION(msg_p).message_id); break; default: @@ -8426,32 +8387,11 @@ void *rrc_enb_process_itti_msg(void *notUsed) { result = itti_free(ITTI_MSG_ORIGIN_ID(msg_p), msg_p); if (result != EXIT_SUCCESS) { - LOG_I(RRC, "Failed to free memory (%d)!\n",result); - } - - msg_p = NULL; - return NULL; -} - -//----------------------------------------------------------------------------- -void * -rrc_enb_task( - void *args_p -) -//----------------------------------------------------------------------------- -{ - rrc_enb_init(); - itti_mark_task_ready(TASK_RRC_ENB); - LOG_I(RRC,"Entering main loop of RRC message task\n"); - - while (1) { - (void) rrc_enb_process_itti_msg(NULL); - { - //extern volatile int go_nr; - void rrc_go_nr(void); - //if (go_nr) rrc_go_nr(); + LOG_I(RRC, "Failed to free memory (%d)!\n", result); } + itti_poll_msg(TASK_RRC_ENB, &msg_p); } + return NULL; } /*------------------------------------------------------------------------------*/ @@ -8799,5 +8739,6 @@ rrc_rx_tx( RRC_SUBFRAME_PROCESS(message_p).ctxt = *ctxt_pP; RRC_SUBFRAME_PROCESS(message_p).CC_id = CC_id; itti_send_msg_to_task(TASK_RRC_ENB, ctxt_pP->module_id, message_p); + rrc_enb_process_itti_msg(NULL); return RRC_OK; } From 43b698f434995bdfaff039e90302a5333ec16993 Mon Sep 17 00:00:00 2001 From: laurent Date: Wed, 7 Dec 2022 16:59:13 +0100 Subject: [PATCH 19/36] fix race cond in mbms startup procedure --- executables/lte-softmodem.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/executables/lte-softmodem.c b/executables/lte-softmodem.c index a01fcf6a04..b0baa5a8d2 100644 --- a/executables/lte-softmodem.c +++ b/executables/lte-softmodem.c @@ -598,10 +598,11 @@ int main ( int argc, char **argv ) sync_var=0; pthread_cond_broadcast(&sync_cond); pthread_mutex_unlock(&sync_mutex); - config_check_unknown_cmdlineopt(CONFIG_CHECKALLSECTIONS); } create_tasks_mbms(1); + sleep(1); + config_check_unknown_cmdlineopt(CONFIG_CHECKALLSECTIONS); // wait for end of program LOG_UI(ENB_APP,"TYPE TO TERMINATE\n"); From 2a49e1fbdbf975e1be95d7a36c02abef26c8b923 Mon Sep 17 00:00:00 2001 From: laurent Date: Mon, 19 Dec 2022 12:03:49 +0100 Subject: [PATCH 20/36] rebase on develop --- openair2/RRC/LTE/rrc_eNB.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c index ee90ee1862..9f52682e87 100644 --- a/openair2/RRC/LTE/rrc_eNB.c +++ b/openair2/RRC/LTE/rrc_eNB.c @@ -5950,7 +5950,7 @@ rrc_eNB_decode_ccch( } c_rnti = BIT_STRING_to_uint16(&rrcConnectionReestablishmentRequest->ue_Identity.c_RNTI); - LOG_I(RRC, "reestablishment, previous c_rnti is %x (new is %x)\n", c_rnti, ctxt_pP->rnti); + LOG_I(RRC, "reestablishment, previous c_rnti is %x (new is %lx)\n", c_rnti, ctxt_pP->rntiMaybeUEid); ue_context_p = rrc_eNB_get_ue_context(RC.rrc[ctxt_pP->module_id], c_rnti); if (ue_context_p == NULL) { From 38a908a4ec712ac190dec0e560f76aef684d5739 Mon Sep 17 00:00:00 2001 From: laurent Date: Mon, 19 Dec 2022 21:25:11 +0100 Subject: [PATCH 21/36] code review comments --- executables/lte-ru.c | 10 - executables/lte-ue.c | 177 +----------- openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c | 1 - .../PHY/LTE_UE_TRANSPORT/dlsch_decoding.c | 259 +++--------------- .../PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c | 55 +++- openair1/PHY/MODULATION/slot_fep.c | 32 +-- openair1/PHY/MODULATION/slot_fep_mbsfn.c | 24 +- openair1/PHY/defs_UE.h | 8 + openair1/SCHED/phy_procedures_lte_eNb.c | 17 +- openair2/LAYER2/MAC/ue_procedures.c | 87 ++---- openair2/RRC/LTE/rrc_eNB.c | 53 +--- 11 files changed, 143 insertions(+), 580 deletions(-) diff --git a/executables/lte-ru.c b/executables/lte-ru.c index 9652b74214..8d5f4254ee 100644 --- a/executables/lte-ru.c +++ b/executables/lte-ru.c @@ -2337,16 +2337,6 @@ void init_RU_proc(RU_t *ru) { if (opp_enabled == 1) pthread_create(&ru->ru_stats_thread, NULL, ru_stats_thread, (void *)ru); - /* - if (ru->function == eNodeB_3GPP) { - usleep(10000); - LOG_I(PHY, "Signaling main thread that RU %d (is_slave %d,send_dmrs %d) is ready in state %s\n",ru->idx,ru->is_slave,ru->generate_dmrs_sync,ru_states[ru->state]); - AssertFatal((ret=pthread_mutex_lock(ru->ru_mutex))==0,"mutex_lock returns %d\n",ret); - *ru->ru_mask &= ~(1<idx); - pthread_cond_signal(ru->ru_cond); - AssertFatal((ret=pthread_mutex_unlock(ru->ru_mutex))==0,"mutex_unlock returns %d\n",ret); - } - */ } diff --git a/executables/lte-ue.c b/executables/lte-ue.c index bc44820444..60ca068d64 100644 --- a/executables/lte-ue.c +++ b/executables/lte-ue.c @@ -790,9 +790,7 @@ static void *UE_thread_rxn_txnp4(void *arg) { #endif } -#if UE_TIMING_TRACE - start_meas(&UE->generic_stat); -#endif + start_UE_TIMING(UE->generic_stat); if (UE->mac_enabled==1) { int ret = ue_scheduler(UE->Mod_id, @@ -810,9 +808,7 @@ static void *UE_thread_rxn_txnp4(void *arg) { } } -#if UE_TIMING_TRACE - stop_meas(&UE->generic_stat); -#endif + stop_UE_TIMING(UE->generic_stat); // Prepare the future Tx data @@ -1082,9 +1078,7 @@ static void *UE_phy_stub_standalone_pnf_task(void *arg) { for (ue_index = 0; ue_index < ue_num; ue_index++) { ue_Mod_id = ue_thread_id + NB_THREAD_INST * ue_index; // Always 0 in standalone pnf mode UE = PHY_vars_UE_g[ue_Mod_id][0]; -#if UE_TIMING_TRACE - start_meas(&UE->generic_stat); -#endif + start_UE_TIMING(UE->generic_stat); int rx_frame = NFAPI_SFNSF2SF(sfn_sf) < 4 ? (NFAPI_SFNSF2SFN(sfn_sf) + 1023) % 1024 : NFAPI_SFNSF2SFN(sfn_sf); // subtracting 4 from subframe_tx int rx_subframe = NFAPI_SFNSF2SF(sfn_sf) < 4 ? NFAPI_SFNSF2SF(sfn_sf) + 6 : NFAPI_SFNSF2SF(sfn_sf) - 4; LOG_D(MAC, "rx_frame %d rx_subframe %d\n", rx_frame, rx_subframe); @@ -1105,10 +1099,7 @@ static void *UE_phy_stub_standalone_pnf_task(void *arg) { } } -#if UE_TIMING_TRACE - stop_meas(&UE->generic_stat); -#endif - + stop_UE_TIMING(UE->generic_stat); // Prepare the future Tx data if ((subframe_select(&UE->frame_parms, NFAPI_SFNSF2SF(sfn_sf)) == SF_UL) || (UE->frame_parms.frame_type == FDD)) { @@ -1499,9 +1490,7 @@ static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) { phy_procedures_UE_SL_TX(UE,proc); } -#if UE_TIMING_TRACE - start_meas(&UE->generic_stat); -#endif + start_UE_TIMING(UE->generic_stat); if (UE->mac_enabled==1) { ret = ue_scheduler(ue_Mod_id, @@ -1519,10 +1508,7 @@ static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) { } } -#if UE_TIMING_TRACE - stop_meas(&UE->generic_stat); -#endif - + stop_UE_TIMING(UE->generic_stat); // Prepare the future Tx data if ((subframe_select( &UE->frame_parms, proc->subframe_tx) == SF_UL) || @@ -1699,160 +1685,13 @@ static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) { * \returns a pointer to an int. The storage is not on the heap and must not be freed. */ -static void *UE_phy_stub_thread_rxn_txnp4(void *arg) { -#if 0 - thread_top_init("UE_phy_stub_thread_rxn_txnp4",1,870000L,1000000L,1000000L); - module_id_t Mod_id = 0; - static __thread int UE_thread_rxtx_retval; - struct rx_tx_thread_data *rtd = arg; - UE_rxtx_proc_t *proc = rtd->proc; - PHY_VARS_UE *UE = rtd->UE; - phy_stub_ticking->ticking_var = -1; - proc->subframe_rx=proc->sub_frame_start; - // CAREFUL HERE! - wait_sync("UE_phy_stub_thread_rxn_txnp4"); - - while (!oai_exit) { - if (pthread_mutex_lock(&phy_stub_ticking->mutex_ticking) != 0) { - LOG_E( MAC, "[SCHED][UE] error locking mutex for UE RXTX\n" ); - exit_fun("nothing to add"); - } - - while (phy_stub_ticking->ticking_var < 0) { - // most of the time, the thread is waiting here - //pthread_cond_wait( &proc->cond_rxtx, &proc->mutex_rxtx ) - LOG_D(MAC,"Waiting for ticking_var\n"); - pthread_cond_wait( &phy_stub_ticking->cond_ticking, &phy_stub_ticking->mutex_ticking); - } - - phy_stub_ticking->ticking_var--; - - if (pthread_mutex_unlock(&phy_stub_ticking->mutex_ticking) != 0) { - LOG_E( MAC, "[SCHED][UE] error unlocking mutex for UE RXn_TXnp4\n" ); - exit_fun("nothing to add"); - } - - proc->subframe_rx=timer_subframe; - proc->frame_rx = timer_frame; - proc->subframe_tx=(timer_subframe+4)%10; - proc->frame_tx = proc->frame_rx + (proc->subframe_rx>5?1:0); - // Process Rx data for one sub-frame - lte_subframe_t sf_type = subframe_select( &UE->frame_parms, proc->subframe_rx); - - if ((sf_type == SF_DL) || - (UE->frame_parms.frame_type == FDD) || - (sf_type == SF_S)) { - if (UE->frame_parms.frame_type == TDD) { - LOG_D(PHY, "TDD%d,%s: calling UE_RX\n", - UE->frame_parms.tdd_config, - (sf_type==SF_DL? "SF_DL" : - (sf_type==SF_UL? "SF_UL" : - (sf_type==SF_S ? "SF_S" : "UNKNOWN_SF_TYPE")))); - } else { - LOG_D(PHY, "%s,%s: calling UE_RX\n", - (UE->frame_parms.frame_type==FDD? "FDD": - (UE->frame_parms.frame_type==TDD? "TDD":"UNKNOWN_DUPLEX_MODE")), - (sf_type==SF_DL? "SF_DL" : - (sf_type==SF_UL? "SF_UL" : - (sf_type==SF_S ? "SF_S" : "UNKNOWN_SF_TYPE")))); - } - - phy_procedures_UE_SL_RX(UE,proc); - oai_subframe_ind(timer_frame, timer_subframe); - - if(dl_config_req!= NULL) { - AssertFatal(0, "dl_config_req_UE_MAC() not handled\n"); - //dl_config_req_UE_MAC(dl_config_req, Mod_id); - } - - //if(UE_mac_inst[Mod_id].hi_dci0_req!= NULL){ - if (hi_dci0_req!=NULL && hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list!=NULL) { - AssertFatal(0, "hi_dci0_req_UE_MAC() not handled\n"); - //hi_dci0_req_UE_MAC(hi_dci0_req, Mod_id); - //if(UE_mac_inst[Mod_id].hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list!=NULL){ - free(hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list); - hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list = NULL; - //} - free(hi_dci0_req); - hi_dci0_req = NULL; - } else if(hi_dci0_req!=NULL) { - free(hi_dci0_req); - hi_dci0_req = NULL; - } - - if (NFAPI_MODE!=NFAPI_UE_STUB_PNF) - phy_procedures_UE_SL_TX(UE,proc); - } - -#if UE_TIMING_TRACE - start_meas(&UE->generic_stat); -#endif - - if (UE->mac_enabled==1) { - int ret = ue_scheduler(UE->Mod_id, - proc->frame_rx, - proc->subframe_rx, - proc->frame_tx, - proc->subframe_tx, - subframe_select(&UE->frame_parms,proc->subframe_tx), - 0, - 0); - - if (ret != CONNECTION_OK) - LOG_E( PHY, "[UE %"PRIu8"] Frame %"PRIu32", subframe %u %s\n", - UE->Mod_id, proc->frame_rx, proc->subframe_tx,get_connectionloss_errstr(ret) ); - } - -#if UE_TIMING_TRACE - stop_meas(&UE->generic_stat); -#endif - - // Prepare the future Tx data - - if ((subframe_select( &UE->frame_parms, proc->subframe_tx) == SF_UL) || - (UE->frame_parms.frame_type == FDD) ) - if ((UE_mac_inst[Mod_id].UE_mode[0] == PRACH) ) { - // check if we have PRACH opportunity - if (is_prach_subframe(&UE->frame_parms,proc->frame_tx, proc->subframe_tx)) { - PRACH_RESOURCES_t *prach_resources = ue_get_rach(Mod_id, 0, proc->frame_tx, 0, proc->subframe_tx); - - if(prach_resources!=NULL) { - fill_rach_indication_UE_MAC(Mod_id, proc->frame_tx,proc->subframe_tx, UL_INFO, prach_resources->ra_PreambleIndex, prach_resources->ra_RNTI); - Msg1_transmitted(Mod_id, 0, proc->frame_tx, 0); - UE_mac_inst[Mod_id].UE_mode[0] = RA_RESPONSE; - } - - //ue_prach_procedures(ue,proc,eNB_id,abstraction_flag,mode); - } - } // mode is PRACH - - // Substitute call to phy_procedures Tx with call to phy_stub functions in order to trigger - // UE Tx procedures directly at the MAC layer, based on the received ul_config requests from the vnf (eNB). - // Generate UL_indications which correspond to UL traffic. - if(ul_config_req!= NULL && ul_config_req->ul_config_request_body.ul_config_pdu_list != NULL) { - //LOG_I(MAC, "UE_phy_stub_thread_rxn_txnp4 ul_config_req is not NULL \n"); - ul_config_req_UE_MAC(ul_config_req, timer_frame, timer_subframe, Mod_id); - - if(ul_config_req->ul_config_request_body.ul_config_pdu_list != NULL) { - free(ul_config_req->ul_config_request_body.ul_config_pdu_list); - ul_config_req->ul_config_request_body.ul_config_pdu_list = NULL; - } - - free(ul_config_req); - ul_config_req = NULL; - } else if(ul_config_req!=NULL) { - free(ul_config_req); - ul_config_req = NULL; - } - } - -#endif // disabled +static void *UE_phy_stub_thread_rxn_txnp4(void *arg) +{ // thread finished free(arg); return NULL; //return &UE_thread_rxtx_retval; } - /*! * \brief This is the main UE thread. * This thread controls the other three UE threads: diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c index dc59093983..ebfdceefc3 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c @@ -1091,7 +1091,6 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB, LOG_D(PHY,"frame %d subframe %d O_ACK:%d o_ACK[]=%d:%d:%d:%d\n",frame,subframe,ulsch_harq->O_ACK,ulsch_harq->o_ACK[0],ulsch_harq->o_ACK[1],ulsch_harq->o_ACK[2],ulsch_harq->o_ACK[3]); // Do ULSCH Decoding for data portion - start_meas(&eNB->ulsch_turbo_decoding_stats); ret = ulsch_decoding_data(eNB, proc, UE_id, harq_pid, llr8_flag); return(ret); } diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_decoding.c b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_decoding.c index ca5d6d28de..129dcef447 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_decoding.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_decoding.c @@ -148,21 +148,17 @@ LTE_UE_DLSCH_t *new_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint8_ return(NULL); } -uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, - short *dlsch_llr, - LTE_DL_FRAME_PARMS *frame_parms, - LTE_UE_DLSCH_t *dlsch, - LTE_DL_UE_HARQ_t *harq_process, - uint32_t frame, - uint8_t subframe, - uint8_t harq_pid, - uint8_t is_crnti, - uint8_t llr8_flag) { -#if UE_TIMING_TRACE - time_stats_t *dlsch_rate_unmatching_stats=&phy_vars_ue->dlsch_rate_unmatching_stats; - time_stats_t *dlsch_turbo_decoding_stats=&phy_vars_ue->dlsch_turbo_decoding_stats; - time_stats_t *dlsch_deinterleaving_stats=&phy_vars_ue->dlsch_deinterleaving_stats; -#endif +uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, + short *dlsch_llr, + LTE_DL_FRAME_PARMS *frame_parms, + LTE_UE_DLSCH_t *dlsch, + LTE_DL_UE_HARQ_t *harq_process, + uint32_t frame, + uint8_t subframe, + uint8_t harq_pid, + uint8_t is_crnti, + uint8_t llr8_flag) +{ uint32_t A,E; uint32_t G; uint32_t ret,offset; @@ -174,27 +170,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, uint16_t i; #endif //#ifdef __WASAVX2__ -#if 0 - int Kr_last,skipped_last=0; - uint8_t (*tc_2cw)(int16_t *y, - int16_t *y2, - uint8_t *, - uint8_t *, - uint16_t, - uint16_t, - uint16_t, - uint8_t, - uint8_t, - uint8_t, - time_stats_t *, - time_stats_t *, - time_stats_t *, - time_stats_t *, - time_stats_t *, - time_stats_t *, - time_stats_t *); -#endif - decoder_if_t *tc; + decoder_if_t *td; if (!dlsch_llr) { printf("dlsch_decoding.c: NULL dlsch_llr pointer\n"); @@ -222,11 +198,11 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, } if (llr8_flag == 0) { - tc = decoder16; + td = decoder16; } else { AssertFatal (harq_process->TBS >= 256 , "Mismatch flag nbRB=%d TBS=%d mcs=%d Qm=%d RIV=%d round=%d \n", harq_process->nb_rb, harq_process->TBS,harq_process->mcs,harq_process->Qm,harq_process->rvidx,harq_process->round); - tc = decoder8; + td = decoder8; } // nb_rb = dlsch->nb_rb; @@ -310,9 +286,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, Kr = harq_process->Kplus; Kr_bytes = Kr>>3; -#if UE_TIMING_TRACE - start_meas(dlsch_rate_unmatching_stats); -#endif + start_UE_TIMING(phy_vars_ue->dlsch_rate_unmatching_stats); memset(&dummy_w[r][0],0,3*(6144+64)*sizeof(short)); harq_process->RTC[r] = generate_dummy_w(4+(Kr_bytes*8), (uint8_t *) &dummy_w[r][0], @@ -347,15 +321,11 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, harq_process->Nl, r, &E)==-1) { -#if UE_TIMING_TRACE - stop_meas(dlsch_rate_unmatching_stats); -#endif + stop_UE_TIMING(phy_vars_ue->dlsch_rate_unmatching_stats); LOG_E(PHY,"dlsch_decoding.c: Problem in rate_matching\n"); return(dlsch->max_turbo_iterations); } else { -#if UE_TIMING_TRACE - stop_meas(dlsch_rate_unmatching_stats); -#endif + stop_UE_TIMING(phy_vars_ue->dlsch_rate_unmatching_stats); } r_offset += E; @@ -364,15 +334,11 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, harq_process->d[r], harq_process->w); */ -#if UE_TIMING_TRACE - start_meas(dlsch_deinterleaving_stats); -#endif + start_UE_TIMING(phy_vars_ue->dlsch_deinterleaving_stats); sub_block_deinterleaving_turbo(4+Kr, &harq_process->d[r][96], harq_process->w[r]); -#if UE_TIMING_TRACE - stop_meas(dlsch_deinterleaving_stats); -#endif + stop_UE_TIMING(phy_vars_ue->dlsch_deinterleaving_stats); #ifdef DEBUG_DLSCH_DECODING /* if (r==0) { @@ -394,184 +360,31 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, else crc_type = CRC24_B; - /* - printf("decoder input(segment %d)\n",r); - for (i=0;i<(3*8*Kr_bytes)+12;i++) - if ((harq_process->d[r][96+i]>7) || - (harq_process->d[r][96+i] < -8)) - printf("%d : %d\n",i,harq_process->d[r][96+i]); - printf("\n"); - */ - //#ifndef __WASAVX2__ -#if 1 - if (err_flag == 0) { - /* - LOG_I(PHY, "turbo algo Kr=%d cb_cnt=%d C=%d nbRB=%d crc_type %d TBSInput=%d TBSHarq=%d TBSplus24=%d mcs=%d Qm=%d RIV=%d round=%d maxIter %d\n", - Kr,r,harq_process->C,harq_process->nb_rb,crc_type,A,harq_process->TBS, - harq_process->B,harq_process->mcs,harq_process->Qm,harq_process->rvidx,harq_process->round,dlsch->max_turbo_iterations); - */ if (llr8_flag) { AssertFatal (Kr >= 256, "turbo algo issue Kr=%d cb_cnt=%d C=%d nbRB=%d TBSInput=%d TBSHarq=%d TBSplus24=%d mcs=%d Qm=%d RIV=%d round=%d\n", Kr,r,harq_process->C,harq_process->nb_rb,A,harq_process->TBS,harq_process->B,harq_process->mcs,harq_process->Qm,harq_process->rvidx,harq_process->round); } - -#if UE_TIMING_TRACE - start_meas(dlsch_turbo_decoding_stats); -#endif LOG_D(PHY,"AbsSubframe %d.%d Start turbo segment %d/%d \n",frame%1024,subframe,r,harq_process->C-1); - ret = tc - (&harq_process->d[r][96], - NULL, - harq_process->c[r], - NULL, - Kr, - dlsch->max_turbo_iterations, - crc_type, - (r==0) ? harq_process->F : 0, - &phy_vars_ue->dlsch_tc_init_stats, - &phy_vars_ue->dlsch_tc_alpha_stats, - &phy_vars_ue->dlsch_tc_beta_stats, - &phy_vars_ue->dlsch_tc_gamma_stats, - &phy_vars_ue->dlsch_tc_ext_stats, - &phy_vars_ue->dlsch_tc_intl1_stats, - &phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1); -#if UE_TIMING_TRACE - stop_meas(dlsch_turbo_decoding_stats); -#endif + start_UE_TIMING(phy_vars_ue->dlsch_turbo_decoding_stats); + ret = td(&harq_process->d[r][96], + NULL, + harq_process->c[r], + NULL, + Kr, + dlsch->max_turbo_iterations, + crc_type, + (r == 0) ? harq_process->F : 0, + &phy_vars_ue->dlsch_tc_init_stats, + &phy_vars_ue->dlsch_tc_alpha_stats, + &phy_vars_ue->dlsch_tc_beta_stats, + &phy_vars_ue->dlsch_tc_gamma_stats, + &phy_vars_ue->dlsch_tc_ext_stats, + &phy_vars_ue->dlsch_tc_intl1_stats, + &phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1); + stop_UE_TIMING(phy_vars_ue->dlsch_turbo_decoding_stats); } -#else - - if ((harq_process->C == 1) || - ((r==harq_process->C-1) && (skipped_last==0))) { // last segment with odd number of segments -#if UE_TIMING_TRACE - start_meas(dlsch_turbo_decoding_stats); -#endif - ret = tc - (&harq_process->d[r][96], - harq_process->c[r], - Kr, - dlsch->max_turbo_iterations, - crc_type, - (r==0) ? harq_process->F : 0, - &phy_vars_ue->dlsch_tc_init_stats, - &phy_vars_ue->dlsch_tc_alpha_stats, - &phy_vars_ue->dlsch_tc_beta_stats, - &phy_vars_ue->dlsch_tc_gamma_stats, - &phy_vars_ue->dlsch_tc_ext_stats, - &phy_vars_ue->dlsch_tc_intl1_stats, - &phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1); -#if UE_TIMING_TRACE - stop_meas(dlsch_turbo_decoding_stats); -#endif - // printf("single decode, exit\n"); - // exit(-1); - } else { - // we can merge code segments - if ((skipped_last == 0) && (rC-1)) { - skipped_last = 1; - Kr_last = Kr; - } else { - skipped_last=0; - - if (Kr_last == Kr) { // decode 2 code segments with AVX2 version -#ifdef DEBUG_DLSCH_DECODING - printf("single decoding segment %d (%p)\n",r-1,&harq_process->d[r-1][96]); -#endif -#if UE_TIMING_TRACE - start_meas(dlsch_turbo_decoding_stats); -#endif -#ifdef DEBUG_DLSCH_DECODING - printf("double decoding segments %d,%d (%p,%p)\n",r-1,r,&harq_process->d[r-1][96],&harq_process->d[r][96]); -#endif - ret = tc_2cw - (&harq_process->d[r-1][96], - &harq_process->d[r][96], - harq_process->c[r-1], - harq_process->c[r], - Kr, - dlsch->max_turbo_iterations, - crc_type, - (r==0) ? harq_process->F : 0, - &phy_vars_ue->dlsch_tc_init_stats, - &phy_vars_ue->dlsch_tc_alpha_stats, - &phy_vars_ue->dlsch_tc_beta_stats, - &phy_vars_ue->dlsch_tc_gamma_stats, - &phy_vars_ue->dlsch_tc_ext_stats, - &phy_vars_ue->dlsch_tc_intl1_stats, - &phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1); - /* - ret = tc - (&harq_process->d[r-1][96], - harq_process->c[r-1], - Kr_last, - dlsch->max_turbo_iterations, - crc_type, - (r==0) ? harq_process->F : 0, - &phy_vars_ue->dlsch_tc_init_stats, - &phy_vars_ue->dlsch_tc_alpha_stats, - &phy_vars_ue->dlsch_tc_beta_stats, - &phy_vars_ue->dlsch_tc_gamma_stats, - &phy_vars_ue->dlsch_tc_ext_stats, - &phy_vars_ue->dlsch_tc_intl1_stats, - &phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1); - - exit(-1);*/ -#if UE_TIMING_TRACE - stop_meas(dlsch_turbo_decoding_stats); -#endif - } else { // Kr_last != Kr -#if UE_TIMING_TRACE - start_meas(dlsch_turbo_decoding_stats); -#endif - ret = tc - (&harq_process->d[r-1][96], - harq_process->c[r-1], - Kr_last, - dlsch->max_turbo_iterations, - crc_type, - (r==0) ? harq_process->F : 0, - &phy_vars_ue->dlsch_tc_init_stats, - &phy_vars_ue->dlsch_tc_alpha_stats, - &phy_vars_ue->dlsch_tc_beta_stats, - &phy_vars_ue->dlsch_tc_gamma_stats, - &phy_vars_ue->dlsch_tc_ext_stats, - &phy_vars_ue->dlsch_tc_intl1_stats, - &phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1); -#if UE_TIMING_TRACE - stop_meas(dlsch_turbo_decoding_stats); - start_meas(dlsch_turbo_decoding_stats); -#endif - ret = tc - (&harq_process->d[r][96], - harq_process->c[r], - Kr, - dlsch->max_turbo_iterations, - crc_type, - (r==0) ? harq_process->F : 0, - &phy_vars_ue->dlsch_tc_init_stats, - &phy_vars_ue->dlsch_tc_alpha_stats, - &phy_vars_ue->dlsch_tc_beta_stats, - &phy_vars_ue->dlsch_tc_gamma_stats, - &phy_vars_ue->dlsch_tc_ext_stats, - &phy_vars_ue->dlsch_tc_intl1_stats, - &phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1); -#if UE_TIMING_TRACE - stop_meas(dlsch_turbo_decoding_stats); - /*printf("Segmentation: C %d r %d, dlsch_rate_unmatching_stats %5.3f dlsch_deinterleaving_stats %5.3f dlsch_turbo_decoding_stats %5.3f \n", - harq_process->C, - r, - dlsch_rate_unmatching_stats->p_time/(cpuf*1000.0), - dlsch_deinterleaving_stats->p_time/(cpuf*1000.0), - dlsch_turbo_decoding_stats->p_time/(cpuf*1000.0));*/ -#endif - } - } - } - -#endif - if ((err_flag == 0) && (ret>=(1+dlsch->max_turbo_iterations))) {// a Code segment is in error so break; LOG_D(PHY,"AbsSubframe %d.%d CRC failed, segment %d/%d \n",frame%1024,subframe,r,harq_process->C-1); err_flag = 1; diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c index b9b442f6f5..096c0fd442 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c @@ -370,8 +370,15 @@ int rx_pdsch(PHY_VARS_UE *ue, #if UE_TIMING_TRACE stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); - LOG_D(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d Flag %d type %d: Pilot/Data extraction %5.2f \n",frame,subframe,slot,symbol, - ue->high_speed_flag,type,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0)); + LOG_D(PHY, + "[AbsSFN %d.%d] Slot%d Symbol %d Flag %d type %d: Pilot/Data extraction %5.2f \n", + frame, + subframe, + slot, + symbol, + ue->high_speed_flag, + type, + ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time / (get_cpu_freq_GHz() * 1000.0)); #endif #if UE_TIMING_TRACE start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); @@ -398,7 +405,13 @@ int rx_pdsch(PHY_VARS_UE *ue, #if UE_TIMING_TRACE stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); - LOG_D(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d: Channel Scale %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0)); + LOG_D(PHY, + "[AbsSFN %d.%d] Slot%d Symbol %d: Channel Scale %5.2f \n", + frame, + subframe, + slot, + symbol, + ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time / (get_cpu_freq_GHz() * 1000.0)); start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); #endif @@ -507,8 +520,14 @@ int rx_pdsch(PHY_VARS_UE *ue, #endif #if UE_TIMING_TRACE stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); - LOG_D(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d first_symbol_flag %d: Channel Level %5.2f \n",frame,subframe,slot,symbol,first_symbol_flag, - ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0)); + LOG_D(PHY, + "[AbsSFN %d.%d] Slot%d Symbol %d first_symbol_flag %d: Channel Level %5.2f \n", + frame, + subframe, + slot, + symbol, + first_symbol_flag, + ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time / (get_cpu_freq_GHz() * 1000.0)); start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); #endif @@ -731,8 +750,14 @@ int rx_pdsch(PHY_VARS_UE *ue, #if UE_TIMING_TRACE stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); - LOG_D(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d log2_maxh %d Channel Comp %5.2f \n",frame,subframe,slot,symbol,pdsch_vars[eNB_id]->log2_maxh, - ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0)); + LOG_D(PHY, + "[AbsSFN %d.%d] Slot%d Symbol %d log2_maxh %d Channel Comp %5.2f \n", + frame, + subframe, + slot, + symbol, + pdsch_vars[eNB_id]->log2_maxh, + ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time / (get_cpu_freq_GHz() * 1000.0)); start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); #endif @@ -805,7 +830,13 @@ int rx_pdsch(PHY_VARS_UE *ue, #if UE_TIMING_TRACE stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); - LOG_D(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d: Channel Combine %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0)); + LOG_D(PHY, + "[AbsSFN %d.%d] Slot%d Symbol %d: Channel Combine %5.2f \n", + frame, + subframe, + slot, + symbol, + ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time / (get_cpu_freq_GHz() * 1000.0)); start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); #endif //printf("LLR dlsch0_harq->Qm %d rx_type %d cw0 %d cw1 %d symbol %d \n",dlsch0_harq->Qm,rx_type,codeword_TB0,codeword_TB1,symbol); @@ -1168,7 +1199,13 @@ int rx_pdsch(PHY_VARS_UE *ue, #if UE_TIMING_TRACE stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); - LOG_D(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d: LLR Computation %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0)); + LOG_D(PHY, + "[AbsSFN %d.%d] Slot%d Symbol %d: LLR Computation %5.2f \n", + frame, + subframe, + slot, + symbol, + ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time / (get_cpu_freq_GHz() * 1000.0)); #endif // Please keep it: useful for debugging #if 0 diff --git a/openair1/PHY/MODULATION/slot_fep.c b/openair1/PHY/MODULATION/slot_fep.c index b2c7d934c6..e32816f76a 100644 --- a/openair1/PHY/MODULATION/slot_fep.c +++ b/openair1/PHY/MODULATION/slot_fep.c @@ -121,14 +121,10 @@ int slot_fep(PHY_VARS_UE *ue, dft(dftsizeidx,(int16_t *)tmp_dft_in, (int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1); } else { // use dft input from RX buffer directly -#if UE_TIMING_TRACE - start_meas(&ue->rx_dft_stats); -#endif + start_UE_TIMING(ue->rx_dft_stats); dft(dftsizeidx,(int16_t *)&common_vars->rxdata[aa][(rx_offset) % frame_length_samples], (int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1); -#if UE_TIMING_TRACE - stop_meas(&ue->rx_dft_stats); -#endif + stop_UE_TIMING(ue->rx_dft_stats); } } else { rx_offset += (frame_parms->ofdm_symbol_size+nb_prefix_samples)*l;// + @@ -145,9 +141,7 @@ int slot_fep(PHY_VARS_UE *ue, (void *)&common_vars->rxdata[aa][0], frame_parms->ofdm_symbol_size*sizeof(int)); -#if UE_TIMING_TRACE - start_meas(&ue->rx_dft_stats); -#endif + start_UE_TIMING(ue->rx_dft_stats); if ((rx_offset&7)!=0) { // if input to dft is not 128-bit aligned, issue for size 6 and 15 PRBs memcpy((void *)tmp_dft_in, @@ -160,9 +154,7 @@ int slot_fep(PHY_VARS_UE *ue, (int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1); } -#if UE_TIMING_TRACE - stop_meas(&ue->rx_dft_stats); -#endif + stop_UE_TIMING(ue->rx_dft_stats); } @@ -178,17 +170,13 @@ int slot_fep(PHY_VARS_UE *ue, #ifdef DEBUG_FEP printf("Channel estimation eNB %d, aatx %d, slot %d, symbol %d\n",eNB_id,aa,Ns,l); #endif -#if UE_TIMING_TRACE - start_meas(&ue->dlsch_channel_estimation_stats); -#endif + start_UE_TIMING(ue->dlsch_channel_estimation_stats); lte_dl_channel_estimation(ue,eNB_id,0, Ns, aa, l, symbol); -#if UE_TIMING_TRACE - stop_meas(&ue->dlsch_channel_estimation_stats); -#endif + stop_UE_TIMING(ue->dlsch_channel_estimation_stats); for (i=0; imeasurements.n_adj_cells; i++) { lte_dl_channel_estimation(ue,eNB_id,i+1, @@ -206,17 +194,13 @@ int slot_fep(PHY_VARS_UE *ue, #endif if (l==(4-frame_parms->Ncp)) { -#if UE_TIMING_TRACE - start_meas(&ue->dlsch_freq_offset_estimation_stats); -#endif + start_UE_TIMING(ue->dlsch_freq_offset_estimation_stats); lte_est_freq_offset(common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].dl_ch_estimates[0], frame_parms, l, &common_vars->freq_offset, reset_freq_est); -#if UE_TIMING_TRACE - stop_meas(&ue->dlsch_freq_offset_estimation_stats); -#endif + stop_UE_TIMING(ue->dlsch_freq_offset_estimation_stats); } } } diff --git a/openair1/PHY/MODULATION/slot_fep_mbsfn.c b/openair1/PHY/MODULATION/slot_fep_mbsfn.c index 6036745029..ae62cc8e9b 100644 --- a/openair1/PHY/MODULATION/slot_fep_mbsfn.c +++ b/openair1/PHY/MODULATION/slot_fep_mbsfn.c @@ -107,17 +107,13 @@ int slot_fep_mbsfn(PHY_VARS_UE *ue, memset(&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[aa][frame_parms->ofdm_symbol_size*l],0,frame_parms->ofdm_symbol_size*sizeof(int)); if (l==0) { -#if UE_TIMING_TRACE - start_meas(&ue->rx_dft_stats); -#endif + start_UE_TIMING(ue->rx_dft_stats); dft(dftsizeidx,(int16_t *)&common_vars->rxdata[aa][(sample_offset + nb_prefix_samples0 + subframe_offset - SOFFSET) % frame_length_samples], (int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[aa][frame_parms->ofdm_symbol_size*l],1); -#if UE_TIMING_TRACE - stop_meas(&ue->rx_dft_stats); -#endif + stop_UE_TIMING(ue->rx_dft_stats); } else { if ((sample_offset + (frame_parms->ofdm_symbol_size+nb_prefix_samples0+nb_prefix_samples) + @@ -128,18 +124,14 @@ int slot_fep_mbsfn(PHY_VARS_UE *ue, (short *)&common_vars->rxdata[aa][0], frame_parms->ofdm_symbol_size*sizeof(int)); -#if UE_TIMING_TRACE - start_meas(&ue->rx_dft_stats); -#endif + start_UE_TIMING(ue->rx_dft_stats); dft(dftsizeidx,(int16_t *)&common_vars->rxdata[aa][(sample_offset + (frame_parms->ofdm_symbol_size+nb_prefix_samples0+nb_prefix_samples) + (frame_parms->ofdm_symbol_size+nb_prefix_samples)*(l-1) + subframe_offset- SOFFSET) % frame_length_samples], (int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[aa][frame_parms->ofdm_symbol_size*l],1); -#if UE_TIMING_TRACE - stop_meas(&ue->rx_dft_stats); -#endif + stop_UE_TIMING(ue->rx_dft_stats); } } @@ -262,17 +254,13 @@ int slot_fep_mbsfn_khz_1dot25(PHY_VARS_UE *ue, for (aa=0; aanb_antennas_rx; aa++) { memset(&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[aa][0],0,ofdm_symbol_size*sizeof(int)); -#if UE_TIMING_TRACE - start_meas(&ue->rx_dft_stats); -#endif + start_UE_TIMING(ue->rx_dft_stats); dft(dftsizeidx,(int16_t *)&common_vars->rxdata[aa][(sample_offset + nb_prefix_samples + subframe_offset - SOFFSET) % frame_length_samples], (int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[aa][0],1); -#if UE_TIMING_TRACE - stop_meas(&ue->rx_dft_stats); -#endif + stop_UE_TIMING(ue->rx_dft_stats); } for (aa=0; aanb_antennas_tx; aa++) { diff --git a/openair1/PHY/defs_UE.h b/openair1/PHY/defs_UE.h index 4f9bc076ff..8455b2acb0 100644 --- a/openair1/PHY/defs_UE.h +++ b/openair1/PHY/defs_UE.h @@ -68,6 +68,14 @@ #include #include "assertions.h" +#if UE_TIMING_TRACE +#define start_UE_TIMING(a) start_meas(&(a)) +#define stop_UE_TIMING(a) stop_meas(&(a)) +#else +#define start_UE_TIMING(a) +#define stop_UE_TIMING(a) +#endif + #ifdef MEX #include "mex.h" #define msg mexPrintf diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index 28e311e202..a44edd830b 100644 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -1453,17 +1453,6 @@ void pusch_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) { 0, // control_only_flag ulsch_harq->V_UL_DAI, ulsch_harq->nb_rb > 20 ? 1 : 0); - /* - int ulsch_id=-1; - for (ulsch_id=0;ulsch_idrnti == eNB->ulsch_stats[ulsch_id].rnti) break; - AssertFatal(ulsch_id>=0,"no ulsch_id found\n"); - - if (eNB->ulsch_stats[ulsch_id].round_trials[0]>100) { - dump_ulsch(eNB,frame,subframe,i,ulsch_harq->round); - AssertFatal(1==0,"exiting\n"); - } - */ } else if ((ulsch) && (ulsch->rnti>0) && @@ -1485,12 +1474,12 @@ void pusch_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) { if (req == NULL) break; // Tpool has been stopped postDecode(proc, req); + const time_stats_t ts = exec_time_stats_NotifiedFIFO(req); + merge_meas(&eNB->ulsch_turbo_decoding_stats, &ts); delNotifiedFIFO_elt(req); } - if (decode) { + if (decode) stop_meas(&eNB->ulsch_decoding_stats); - stop_meas(&eNB->ulsch_turbo_decoding_stats); - } } extern int oai_exit; diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c index 5eeec0d42b..377410f0af 100644 --- a/openair2/LAYER2/MAC/ue_procedures.c +++ b/openair2/LAYER2/MAC/ue_procedures.c @@ -377,9 +377,7 @@ ue_send_sdu(module_id_t module_idP, unsigned char rx_lcids[NB_RB_MAX]; unsigned short rx_lengths[NB_RB_MAX]; unsigned char *tx_sdu; -#if UE_TIMING_TRACE - start_meas(&UE_mac_inst[module_idP].rx_dlsch_sdu); -#endif + start_UE_TIMING(UE_mac_inst[module_idP].rx_dlsch_sdu); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_SDU, VCD_FUNCTION_IN); //LOG_D(MAC,"sdu: %x.%x.%x\n",sdu[0],sdu[1],sdu[2]); @@ -563,16 +561,12 @@ ue_send_sdu(module_id_t module_idP, VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_SDU, VCD_FUNCTION_OUT); -#if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].rx_dlsch_sdu); -#endif + stop_UE_TIMING(UE_mac_inst[module_idP].rx_dlsch_sdu); } void ue_decode_si_mbms(module_id_t module_idP, int CC_id, frame_t frameP, uint8_t eNB_index, void *pdu, uint16_t len) { -#if UE_TIMING_TRACE - start_meas(&UE_mac_inst[module_idP].rx_si); -#endif + start_UE_TIMING(UE_mac_inst[module_idP].rx_si); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_IN); LOG_D(MAC, "[UE %d] Frame %d Sending SI MBMS to RRC (LCID Id %d,len %d)\n", @@ -583,9 +577,7 @@ void ue_decode_si_mbms(module_id_t module_idP, int CC_id, frame_t frameP, 0); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_OUT); -#if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].rx_si); -#endif + stop_UE_TIMING(UE_mac_inst[module_idP].rx_si); trace_pdu(DIRECTION_UPLINK, (uint8_t *) pdu, @@ -603,9 +595,7 @@ void ue_decode_si_mbms(module_id_t module_idP, int CC_id, frame_t frameP, void ue_decode_si(module_id_t module_idP, int CC_id, frame_t frameP, uint8_t eNB_index, void *pdu, uint16_t len) { -#if UE_TIMING_TRACE - start_meas(&UE_mac_inst[module_idP].rx_si); -#endif + start_UE_TIMING(UE_mac_inst[module_idP].rx_si); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_IN); LOG_D(MAC, "[UE %d] Frame %d Sending SI to RRC (LCID Id %d,len %d)\n", @@ -616,9 +606,7 @@ ue_decode_si(module_id_t module_idP, int CC_id, frame_t frameP, 0); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_OUT); -#if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].rx_si); -#endif + stop_UE_TIMING(UE_mac_inst[module_idP].rx_si); trace_pdu(DIRECTION_UPLINK, (uint8_t *) pdu, len, @@ -632,9 +620,7 @@ ue_decode_si(module_id_t module_idP, int CC_id, frame_t frameP, void ue_decode_p(module_id_t module_idP, int CC_id, frame_t frameP, uint8_t eNB_index, void *pdu, uint16_t len) { -#if UE_TIMING_TRACE - start_meas(&UE_mac_inst[module_idP].rx_p); -#endif + start_UE_TIMING(UE_mac_inst[module_idP].rx_p); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_PCCH, VCD_FUNCTION_IN); LOG_D(MAC, @@ -646,9 +632,7 @@ ue_decode_p(module_id_t module_idP, int CC_id, frame_t frameP, 0); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_PCCH, VCD_FUNCTION_OUT); -#if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].rx_p); -#endif + stop_UE_TIMING(UE_mac_inst[module_idP].rx_p); trace_pdu(DIRECTION_UPLINK, (uint8_t *) pdu, len, @@ -719,9 +703,7 @@ ue_send_mch_sdu(module_id_t module_idP, uint8_t CC_id, frame_t frameP, unsigned char num_sdu, i, j, *payload_ptr; unsigned char rx_lcids[NB_RB_MAX]; unsigned short rx_lengths[NB_RB_MAX]; -#if UE_TIMING_TRACE - start_meas(&UE_mac_inst[module_idP].rx_mch_sdu); -#endif + start_UE_TIMING(UE_mac_inst[module_idP].rx_mch_sdu); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_MCH_SDU, VCD_FUNCTION_IN); LOG_D(MAC, @@ -814,9 +796,7 @@ ue_send_mch_sdu(module_id_t module_idP, uint8_t CC_id, frame_t frameP, VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_MCH_SDU, VCD_FUNCTION_OUT); -#if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].rx_mch_sdu); -#endif + stop_UE_TIMING(UE_mac_inst[module_idP].rx_mch_sdu); } void ue_send_sl_sdu(module_id_t module_idP, @@ -1493,10 +1473,7 @@ int ue_query_mch(module_id_t module_idP, uint8_t CC_id, uint32_t frameP, uint32_ int mcch_flag = 0, mtch_flag = 0, msi_flag = 0; long mch_scheduling_period = -1; uint8_t mch_lcid = 0; -#if UE_TIMING_TRACE - start_meas(&UE_mac_inst[module_idP].ue_query_mch); -#endif - + start_UE_TIMING(UE_mac_inst[module_idP].ue_query_mch); if (UE_mac_inst[module_idP].pmch_Config[0]) { mch_scheduling_period = 8 << UE_mac_inst[module_idP].pmch_Config[0]->mch_SchedulingPeriod_r9; } @@ -1996,9 +1973,7 @@ int ue_query_mch(module_id_t module_idP, uint8_t CC_id, uint32_t frameP, uint32_ } } // end of for -#if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].ue_query_mch); -#endif + stop_UE_TIMING(UE_mac_inst[module_idP].ue_query_mch); if ((mcch_flag == 1)) { // || (msi_flag==1)) *mcch_active = 1; @@ -2349,9 +2324,7 @@ ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP, module_idP, frameP, subframe, buflen); AssertFatal(CC_id == 0, "Transmission on secondary CCs is not supported yet\n"); -#if UE_TIMING_TRACE - start_meas(&UE_mac_inst[module_idP].tx_ulsch_sdu); -#endif + start_UE_TIMING(UE_mac_inst[module_idP].tx_ulsch_sdu); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GET_SDU, VCD_FUNCTION_IN); bsr_header_len = 0; @@ -2893,9 +2866,7 @@ ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP, VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GET_SDU, VCD_FUNCTION_OUT); -#if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].tx_ulsch_sdu); -#endif + stop_UE_TIMING(UE_mac_inst[module_idP].tx_ulsch_sdu); trace_pdu(DIRECTION_UPLINK, ulsch_buffer, buflen, module_idP, WS_C_RNTI, UE_mac_inst[module_idP].crnti, UE_mac_inst[module_idP].txFrame, @@ -2933,9 +2904,7 @@ ue_scheduler(const module_id_t module_idP, protocol_ctxt_t ctxt; MessageDef *msg_p; int result; -#if UE_TIMING_TRACE - start_meas(&UE_mac_inst[module_idP].ue_scheduler); -#endif + start_UE_TIMING(UE_mac_inst[module_idP].ue_scheduler); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_IN); PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, ENB_FLAG_NO, @@ -3001,9 +2970,7 @@ ue_scheduler(const module_id_t module_idP, LOG_E(MAC, "RRCConnectionSetup failed, returning to IDLE state\n"); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT); -#if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].ue_scheduler); -#endif + stop_UE_TIMING(UE_mac_inst[module_idP].ue_scheduler); return (CONNECTION_LOST); break; @@ -3011,9 +2978,7 @@ ue_scheduler(const module_id_t module_idP, LOG_E(MAC, "RRC Loss of synch, returning PHY_RESYNCH\n"); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT); -#if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].ue_scheduler); -#endif + stop_UE_TIMING(UE_mac_inst[module_idP].ue_scheduler); return (PHY_RESYNCH); case RRC_Handover_failed: @@ -3030,9 +2995,7 @@ ue_scheduler(const module_id_t module_idP, "RRC handover, Instruct PHY to start the contention-free PRACH and synchronization\n"); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT); -#if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].ue_scheduler); -#endif + stop_UE_TIMING(UE_mac_inst[module_idP].ue_scheduler); return (PHY_HO_PRACH); default: @@ -3052,11 +3015,9 @@ ue_scheduler(const module_id_t module_idP, VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT); - stop_meas(&UE_mac_inst[module_idP].ue_scheduler); + stop_UE_TIMING(UE_mac_inst[module_idP].ue_scheduler); AssertFatal(1 == 0, ""); -#if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].ue_scheduler); -#endif + stop_UE_TIMING(UE_mac_inst[module_idP].ue_scheduler); //return(RRC_OK); } @@ -3175,9 +3136,7 @@ ue_scheduler(const module_id_t module_idP, LOG_T(MAC, "[UE %d] Release all SRs \n", module_idP); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT); -#if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].ue_scheduler); -#endif + stop_UE_TIMING(UE_mac_inst[module_idP].ue_scheduler); return (CONNECTION_OK); } @@ -3233,9 +3192,7 @@ ue_scheduler(const module_id_t module_idP, //If the UE has UL resources allocated for new transmission for this TTI here: VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT); -#if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].ue_scheduler); -#endif + stop_UE_TIMING(UE_mac_inst[module_idP].ue_scheduler); return (CONNECTION_OK); } diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c index 9f52682e87..999d1d5a71 100644 --- a/openair2/RRC/LTE/rrc_eNB.c +++ b/openair2/RRC/LTE/rrc_eNB.c @@ -971,7 +971,7 @@ void release_UE_in_freeList(module_id_t mod_id) { for(int ue_num = 0; ue_num < sizeofArray(eNB_MAC->UE_free_ctrl) ; ue_num++) { rnti_t rnti = eNB_MAC->UE_free_ctrl[ue_num].rnti; - if (!rnti) + if (rnti == 0) continue; protocol_ctxt_t ctxt; PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, mod_id, ENB_FLAG_YES, rnti, 0, 0, mod_id); @@ -1006,15 +1006,14 @@ void release_UE_in_freeList(module_id_t mod_id) { int pdu_number = ul_req_tmp->number_of_pdus; for (int pdu_index = pdu_number - 1; pdu_index >= 0; pdu_index--) { - if ((ul_req_tmp->ul_config_pdu_list[pdu_index].ulsch_pdu.ulsch_pdu_rel8.rnti == rnti) - || (ul_req_tmp->ul_config_pdu_list[pdu_index].uci_harq_pdu.ue_information.ue_information_rel8.rnti == rnti) - || (ul_req_tmp->ul_config_pdu_list[pdu_index].uci_cqi_pdu.ue_information.ue_information_rel8.rnti == rnti) - || (ul_req_tmp->ul_config_pdu_list[pdu_index].uci_sr_pdu.ue_information.ue_information_rel8.rnti == rnti) - || (ul_req_tmp->ul_config_pdu_list[pdu_index].srs_pdu.srs_pdu_rel8.rnti == rnti)) { + nfapi_ul_config_request_pdu_t *pdu = ul_req_tmp->ul_config_pdu_list + pdu_index; + if (pdu->ulsch_pdu.ulsch_pdu_rel8.rnti == rnti || pdu->uci_harq_pdu.ue_information.ue_information_rel8.rnti == rnti || pdu->uci_cqi_pdu.ue_information.ue_information_rel8.rnti == rnti + || pdu->uci_sr_pdu.ue_information.ue_information_rel8.rnti == rnti || pdu->srs_pdu.srs_pdu_rel8.rnti == rnti) { LOG_I(RRC, "remove UE %x from ul_config_pdu_list %d/%d\n", rnti, pdu_index, pdu_number); + // Very inefficient memory management, but simple if (pdu_index < pdu_number - 1) { - memcpy(&ul_req_tmp->ul_config_pdu_list[pdu_index], &ul_req_tmp->ul_config_pdu_list[pdu_index + 1], (pdu_number - 1 - pdu_index) * sizeof(nfapi_ul_config_request_pdu_t)); + memcpy(pdu, pdu + 1, (pdu_number - 1 - pdu_index) * sizeof(nfapi_ul_config_request_pdu_t)); } ul_req_tmp->number_of_pdus--; @@ -1879,46 +1878,6 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete( PDCP_TRANSMISSION_MODE_CONTROL); } - // delete UE data of prior RNTI. UE use current RNTI. - // protocol_ctxt_t ctxt_prior = *ctxt_pP; - // ctxt_prior.rnti = reestablish_rnti; - // - // LTE_eNB_ULSCH_t *ulsch = NULL; - // nfapi_ul_config_request_body_t *ul_req_tmp = NULL; - // PHY_VARS_eNB *eNB_PHY = NULL; - // eNB_MAC_INST *eNB_MAC = RC.mac[ctxt_prior.module_id]; - // for (int CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - // eNB_PHY = RC.eNB[ctxt_prior.module_id][CC_id]; - // for (int i=0; iulsch[i]; - // if((ulsch != NULL) && (ulsch->rnti == ctxt_prior.rnti)){ - // void clean_eNb_ulsch(LTE_eNB_ULSCH_t *ulsch); - // LOG_I(RRC, "clean_eNb_ulsch UE %x \n", ctxt_prior.rnti); - // clean_eNb_ulsch(ulsch); - // break; - // } - // } - // - // for(int j = 0; j < 10; j++){ - // ul_req_tmp = &eNB_MAC->UL_req_tmp[CC_id][j].ul_config_request_body; - // if(ul_req_tmp){ - // int pdu_number = ul_req_tmp->number_of_pdus; - // for(int pdu_index = pdu_number-1; pdu_index >= 0; pdu_index--){ - // if(ul_req_tmp->ul_config_pdu_list[pdu_index].ulsch_pdu.ulsch_pdu_rel8.rnti == ctxt_prior.rnti){ - // LOG_I(RRC, "remove UE %x from ul_config_pdu_list %d/%d\n", ctxt_prior.rnti, pdu_index, pdu_number); - // if(pdu_index < pdu_number -1){ - // memcpy(&ul_req_tmp->ul_config_pdu_list[pdu_index], &ul_req_tmp->ul_config_pdu_list[pdu_index+1], (pdu_number-1-pdu_index) * sizeof(nfapi_ul_config_request_pdu_t)); - // } - // ul_req_tmp->number_of_pdus--; - // } - // } - // } - // } - // } - // rrc_mac_remove_ue(ctxt_prior.module_id, ctxt_prior.rnti); - // rrc_rlc_remove_ue(&ctxt_prior); - // pdcp_remove_UE(&ctxt_prior); - // add UE info to freeList for RU_thread to remove the UE instead of remove it here LOG_I(RRC, "[RRCConnectionReestablishment]put UE %x into freeList\n", reestablish_rnti); put_UE_in_freelist(ctxt_pP->module_id, reestablish_rnti, 0); } From 22ad41e6f78615e9eafd23d31a6dcac1e28d8994 Mon Sep 17 00:00:00 2001 From: turletti Date: Thu, 9 Feb 2023 17:59:58 +0100 Subject: [PATCH 22/36] Dockerfile for aw2s RRUs on u18.04 --- docker/Dockerfile.gNB.aw2s.ubuntu18 | 110 ++++++++++++++++++++++++++ docker/scripts/gnb-aw2s_entrypoint.sh | 83 +++++++++++++++++++ 2 files changed, 193 insertions(+) create mode 100644 docker/Dockerfile.gNB.aw2s.ubuntu18 create mode 100755 docker/scripts/gnb-aw2s_entrypoint.sh diff --git a/docker/Dockerfile.gNB.aw2s.ubuntu18 b/docker/Dockerfile.gNB.aw2s.ubuntu18 new file mode 100644 index 0000000000..d5e3eed6dc --- /dev/null +++ b/docker/Dockerfile.gNB.aw2s.ubuntu18 @@ -0,0 +1,110 @@ +#/* +# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more +# * contributor license agreements. See the NOTICE file distributed with +# * this work for additional information regarding copyright ownership. +# * The OpenAirInterface Software Alliance licenses this file to You under +# * the OAI Public License, Version 1.1 (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.openairinterface.org/?page_id=698 +# * +# * 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. +# *------------------------------------------------------------------------------- +# * For more information about the OpenAirInterface (OAI) Software Alliance: +# * contact@openairinterface.org +# */ +#--------------------------------------------------------------------- +# +# Dockerfile for the Open-Air-Interface BUILD service +# Valid for Ubuntu18.04 +# +#--------------------------------------------------------------------- + +FROM ran-base:latest AS gnb-base + +FROM ran-build:latest AS gnb-build + +COPY ./libori.so /usr/local/lib/ + +# build AW2S fronthaul lib +WORKDIR /oai-ran +RUN /bin/sh oaienv && \ + cd cmake_targets/ran_build/build && \ + ninja aw2sori_transpro + +RUN python3 ./docker/scripts/generateTemplate.py ./docker/scripts/gnb_parameters.yaml && \ + cp /oai-ran/docker/scripts/gnb-aw2s_entrypoint.sh /oai-ran/docker/scripts/entrypoint.sh + +#start from scratch for target executable +FROM ubuntu:bionic as oai-gnb-aw2s +ENV DEBIAN_FRONTEND=noninteractive +ENV TZ=Europe + +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \ + DEBIAN_FRONTEND=noninteractive apt-get install --yes \ + software-properties-common \ + procps \ + libsctp1 \ + tzdata \ + libnettle6 \ + libblas3 \ + libatlas3-base \ + libconfig9 \ + openssl \ + net-tools \ + iproute2 \ + iputils-ping \ + python \ + python3 \ + python3-six \ + python3-requests \ + libusb-1.0-0 && \ + rm -rf /var/lib/apt/lists/* + +COPY ./libori.so /usr/local/lib/ + +WORKDIR /opt/oai-gnb-aw2s/bin +COPY --from=gnb-build \ + /oai-ran/cmake_targets/ran_build/build/nr-softmodem \ + ./ +COPY ./docker/scripts/gnb-aw2s_entrypoint.sh /opt/oai-gnb-aw2s/bin/entrypoint.sh + +COPY --from=gnb-build \ + /oai-ran/cmake_targets/ran_build/build/liboai_eth_transpro.so \ + /oai-ran/cmake_targets/ran_build/build/librfsimulator.so \ + /oai-ran/cmake_targets/ran_build/build/libaw2sori_transpro.so \ + /oai-ran/cmake_targets/ran_build/build/libcoding.so \ + /oai-ran/cmake_targets/ran_build/build/libparams_libconfig.so \ + /oai-ran/cmake_targets/ran_build/build/libdfts.so \ + /oai-ran/cmake_targets/ran_build/build/libldpc.so \ + /oai-ran/cmake_targets/ran_build/build/libldpc_optim.so \ + /oai-ran/cmake_targets/ran_build/build/libldpc_optim8seg.so \ + /oai-ran/cmake_targets/ran_build/build/libldpc_orig.so \ + /oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \ + /usr/local/lib/ + + +RUN /bin/bash -c "ln -s /usr/local/lib/libaw2sori_transpro.so /usr/local/lib/libthirdparty_transpro.so" && \ + /bin/bash -c "ln -s /usr/local/lib/liboai_eth_transpro.so /usr/local/lib/liboai_transpro.so" && \ + ldconfig + +# Copy the relevant configuration files for gNB +WORKDIR /opt/oai-gnb-aw2s/etc +COPY --from=gnb-build /oai-ran/docker/etc . + +WORKDIR /opt/oai-gnb-aw2s +#EXPOSE 2152/udp # S1U, GTP/UDP +#EXPOSE 22100/tcp # ? +#EXPOSE 36412/udp # S1C, SCTP/UDP +#EXPOSE 36422/udp # X2C, SCTP/UDP +#EXPOSE 50000/udp # IF5 / ORI (control) +#EXPOSE 50001/udp # IF5 / ECPRI (data) + +ENTRYPOINT ["/opt/oai-gnb-aw2s/bin/entrypoint.sh"] +CMD ["/opt/oai-gnb-aw2s/bin/nr-softmodem", "-O", "/opt/oai-gnb-aw2s/etc/gnb.conf"] diff --git a/docker/scripts/gnb-aw2s_entrypoint.sh b/docker/scripts/gnb-aw2s_entrypoint.sh new file mode 100755 index 0000000000..da148ffa53 --- /dev/null +++ b/docker/scripts/gnb-aw2s_entrypoint.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +set -uo pipefail + +PREFIX=/opt/oai-gnb-aw2s +ENABLE_X2=${ENABLE_X2:-yes} +THREAD_PARALLEL_CONFIG=${THREAD_PARALLEL_CONFIG:-PARALLEL_SINGLE_THREAD} + +# Based another env var, pick one template to use + +if [[ -v USE_NSA_TDD_MONO ]]; then cp $PREFIX/etc/gnb.nsa.tdd.conf $PREFIX/etc/gnb.conf; fi +if [[ -v USE_SA_TDD_MONO ]]; then cp $PREFIX/etc/gnb.sa.tdd.conf $PREFIX/etc/gnb.conf; fi +if [[ -v USE_SA_TDD_MONO_B2XX ]]; then cp $PREFIX/etc/gnb.sa.tdd.b2xx.conf $PREFIX/etc/gnb.conf; fi +if [[ -v USE_SA_FDD_MONO ]]; then cp $PREFIX/etc/gnb.sa.fdd.conf $PREFIX/etc/gnb.conf; fi +if [[ -v USE_SA_CU ]]; then cp $PREFIX/etc/gnb.sa.cu.conf $PREFIX/etc/gnb.conf; fi +if [[ -v USE_SA_TDD_DU ]]; then cp $PREFIX/etc/gnb.sa.du.tdd.conf $PREFIX/etc/gnb.conf; fi +if [[ -v USE_SA_NFAPI_VNF ]]; then cp $PREFIX/etc/gnb.sa.nfapi.vnf.conf $PREFIX/etc/gnb.conf; fi +# Sometimes, the templates are not enough. We mount a conf file on $PREFIX/etc. It can be a template itself. +if [[ -v USE_VOLUMED_CONF ]]; then cp $PREFIX/etc/mounted.conf $PREFIX/etc/gnb.conf; fi + +# Default Parameters +GNB_ID=${GNB_ID:-e00} +NSSAI_SD=${NSSAI_SD:-ffffff} +# AMF_IP_ADDRESS can be amf ip address of amf fqdn +if [[ -v AMF_IP_ADDRESS ]] && [[ "${AMF_IP_ADDRESS}" =~ [a-zA-Z] ]] && [[ -z `getent hosts $AMF_IP_ADDRESS | awk '{print $1}'` ]]; then echo "not able to resolve AMF FQDN" && exit 1 ; fi +[[ -v AMF_IP_ADDRESS ]] && [[ "${AMF_IP_ADDRESS}" =~ [a-zA-Z] ]] && AMF_IP_ADDRESS=$(getent hosts $AMF_IP_ADDRESS | awk '{print $1}') + +# Only this template will be manipulated +CONFIG_FILES=`ls $PREFIX/etc/gnb.conf || true` + +for c in ${CONFIG_FILES}; do + # Sometimes templates have no pattern to be replaced. + if ! grep -oP '@[a-zA-Z0-9_]+@' ${c}; then + echo "Configuration is already set" + break + fi + + # grep variable names (format: ${VAR}) from template to be rendered + VARS=$(grep -oP '@[a-zA-Z0-9_]+@' ${c} | sort | uniq | xargs) + + # create sed expressions for substituting each occurrence of ${VAR} + # with the value of the environment variable "VAR" + EXPRESSIONS="" + for v in ${VARS}; do + NEW_VAR=`echo $v | sed -e "s#@##g"` + if [[ "${!NEW_VAR}x" == "x" ]]; then + echo "Error: Environment variable '${NEW_VAR}' is not set." \ + "Config file '$(basename $c)' requires all of $VARS." + exit 1 + fi + EXPRESSIONS="${EXPRESSIONS};s|${v}|${!NEW_VAR}|g" + done + EXPRESSIONS="${EXPRESSIONS#';'}" + + # render template and inline replace config file + sed -i "${EXPRESSIONS}" ${c} + + echo "==================================" + echo "== Configuration file: ${c}" + cat ${c} +done + +# enable printing of stack traces on assert +export gdbStacks=1 + +echo "==================================" +echo "== Starting gNB soft modem with AW2S" +if [[ -v USE_ADDITIONAL_OPTIONS ]]; then + echo "Additional option(s): ${USE_ADDITIONAL_OPTIONS}" + new_args=() + while [[ $# -gt 0 ]]; do + new_args+=("$1") + shift + done + for word in ${USE_ADDITIONAL_OPTIONS}; do + new_args+=("$word") + done + echo "${new_args[@]}" + exec "${new_args[@]}" +else + echo "$@" + exec "$@" +fi From d45a9a933b17c6a3b3db53d4b196d90ce233b308 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 15 Feb 2023 18:23:20 +0100 Subject: [PATCH 23/36] AW2S image: install less packages, require mounted configuration file --- docker/Dockerfile.gNB.aw2s.ubuntu18 | 26 +---------- docker/scripts/gnb-aw2s_entrypoint.sh | 64 +++++---------------------- 2 files changed, 12 insertions(+), 78 deletions(-) diff --git a/docker/Dockerfile.gNB.aw2s.ubuntu18 b/docker/Dockerfile.gNB.aw2s.ubuntu18 index d5e3eed6dc..a38cb34d78 100644 --- a/docker/Dockerfile.gNB.aw2s.ubuntu18 +++ b/docker/Dockerfile.gNB.aw2s.ubuntu18 @@ -37,9 +37,6 @@ RUN /bin/sh oaienv && \ cd cmake_targets/ran_build/build && \ ninja aw2sori_transpro -RUN python3 ./docker/scripts/generateTemplate.py ./docker/scripts/gnb_parameters.yaml && \ - cp /oai-ran/docker/scripts/gnb-aw2s_entrypoint.sh /oai-ran/docker/scripts/entrypoint.sh - #start from scratch for target executable FROM ubuntu:bionic as oai-gnb-aw2s ENV DEBIAN_FRONTEND=noninteractive @@ -48,31 +45,22 @@ ENV TZ=Europe RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \ DEBIAN_FRONTEND=noninteractive apt-get install --yes \ - software-properties-common \ procps \ libsctp1 \ tzdata \ - libnettle6 \ libblas3 \ libatlas3-base \ libconfig9 \ openssl \ net-tools \ iproute2 \ - iputils-ping \ - python \ - python3 \ - python3-six \ - python3-requests \ - libusb-1.0-0 && \ + iputils-ping && \ rm -rf /var/lib/apt/lists/* COPY ./libori.so /usr/local/lib/ WORKDIR /opt/oai-gnb-aw2s/bin -COPY --from=gnb-build \ - /oai-ran/cmake_targets/ran_build/build/nr-softmodem \ - ./ +COPY --from=gnb-build /oai-ran/cmake_targets/ran_build/build/nr-softmodem ./ COPY ./docker/scripts/gnb-aw2s_entrypoint.sh /opt/oai-gnb-aw2s/bin/entrypoint.sh COPY --from=gnb-build \ @@ -94,17 +82,7 @@ RUN /bin/bash -c "ln -s /usr/local/lib/libaw2sori_transpro.so /usr/local/lib/lib /bin/bash -c "ln -s /usr/local/lib/liboai_eth_transpro.so /usr/local/lib/liboai_transpro.so" && \ ldconfig -# Copy the relevant configuration files for gNB -WORKDIR /opt/oai-gnb-aw2s/etc -COPY --from=gnb-build /oai-ran/docker/etc . - WORKDIR /opt/oai-gnb-aw2s -#EXPOSE 2152/udp # S1U, GTP/UDP -#EXPOSE 22100/tcp # ? -#EXPOSE 36412/udp # S1C, SCTP/UDP -#EXPOSE 36422/udp # X2C, SCTP/UDP -#EXPOSE 50000/udp # IF5 / ORI (control) -#EXPOSE 50001/udp # IF5 / ECPRI (data) ENTRYPOINT ["/opt/oai-gnb-aw2s/bin/entrypoint.sh"] CMD ["/opt/oai-gnb-aw2s/bin/nr-softmodem", "-O", "/opt/oai-gnb-aw2s/etc/gnb.conf"] diff --git a/docker/scripts/gnb-aw2s_entrypoint.sh b/docker/scripts/gnb-aw2s_entrypoint.sh index da148ffa53..3b2a6a37d7 100755 --- a/docker/scripts/gnb-aw2s_entrypoint.sh +++ b/docker/scripts/gnb-aw2s_entrypoint.sh @@ -3,62 +3,18 @@ set -uo pipefail PREFIX=/opt/oai-gnb-aw2s -ENABLE_X2=${ENABLE_X2:-yes} -THREAD_PARALLEL_CONFIG=${THREAD_PARALLEL_CONFIG:-PARALLEL_SINGLE_THREAD} -# Based another env var, pick one template to use +if [[ -v USE_VOLUMED_CONF ]]; then + cp $PREFIX/etc/mounted.conf $PREFIX/etc/gnb.conf +else + echo "ERROR: No configuration file provided." + echo "Please set USE_VOLUMED_CONF and mount a configuration file at $PREFIX/etc/mounted.conf" + exit 1 +fi -if [[ -v USE_NSA_TDD_MONO ]]; then cp $PREFIX/etc/gnb.nsa.tdd.conf $PREFIX/etc/gnb.conf; fi -if [[ -v USE_SA_TDD_MONO ]]; then cp $PREFIX/etc/gnb.sa.tdd.conf $PREFIX/etc/gnb.conf; fi -if [[ -v USE_SA_TDD_MONO_B2XX ]]; then cp $PREFIX/etc/gnb.sa.tdd.b2xx.conf $PREFIX/etc/gnb.conf; fi -if [[ -v USE_SA_FDD_MONO ]]; then cp $PREFIX/etc/gnb.sa.fdd.conf $PREFIX/etc/gnb.conf; fi -if [[ -v USE_SA_CU ]]; then cp $PREFIX/etc/gnb.sa.cu.conf $PREFIX/etc/gnb.conf; fi -if [[ -v USE_SA_TDD_DU ]]; then cp $PREFIX/etc/gnb.sa.du.tdd.conf $PREFIX/etc/gnb.conf; fi -if [[ -v USE_SA_NFAPI_VNF ]]; then cp $PREFIX/etc/gnb.sa.nfapi.vnf.conf $PREFIX/etc/gnb.conf; fi -# Sometimes, the templates are not enough. We mount a conf file on $PREFIX/etc. It can be a template itself. -if [[ -v USE_VOLUMED_CONF ]]; then cp $PREFIX/etc/mounted.conf $PREFIX/etc/gnb.conf; fi - -# Default Parameters -GNB_ID=${GNB_ID:-e00} -NSSAI_SD=${NSSAI_SD:-ffffff} -# AMF_IP_ADDRESS can be amf ip address of amf fqdn -if [[ -v AMF_IP_ADDRESS ]] && [[ "${AMF_IP_ADDRESS}" =~ [a-zA-Z] ]] && [[ -z `getent hosts $AMF_IP_ADDRESS | awk '{print $1}'` ]]; then echo "not able to resolve AMF FQDN" && exit 1 ; fi -[[ -v AMF_IP_ADDRESS ]] && [[ "${AMF_IP_ADDRESS}" =~ [a-zA-Z] ]] && AMF_IP_ADDRESS=$(getent hosts $AMF_IP_ADDRESS | awk '{print $1}') - -# Only this template will be manipulated -CONFIG_FILES=`ls $PREFIX/etc/gnb.conf || true` - -for c in ${CONFIG_FILES}; do - # Sometimes templates have no pattern to be replaced. - if ! grep -oP '@[a-zA-Z0-9_]+@' ${c}; then - echo "Configuration is already set" - break - fi - - # grep variable names (format: ${VAR}) from template to be rendered - VARS=$(grep -oP '@[a-zA-Z0-9_]+@' ${c} | sort | uniq | xargs) - - # create sed expressions for substituting each occurrence of ${VAR} - # with the value of the environment variable "VAR" - EXPRESSIONS="" - for v in ${VARS}; do - NEW_VAR=`echo $v | sed -e "s#@##g"` - if [[ "${!NEW_VAR}x" == "x" ]]; then - echo "Error: Environment variable '${NEW_VAR}' is not set." \ - "Config file '$(basename $c)' requires all of $VARS." - exit 1 - fi - EXPRESSIONS="${EXPRESSIONS};s|${v}|${!NEW_VAR}|g" - done - EXPRESSIONS="${EXPRESSIONS#';'}" - - # render template and inline replace config file - sed -i "${EXPRESSIONS}" ${c} - - echo "==================================" - echo "== Configuration file: ${c}" - cat ${c} -done +echo "==================================" +echo "== Configuration file:" +cat $PREFIX/etc/enb.conf # enable printing of stack traces on assert export gdbStacks=1 From c73ac5cf306e22be40ccca0709f0849345819109 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 15 Feb 2023 18:24:53 +0100 Subject: [PATCH 24/36] AW2s RHEL image: don't copy config files, copy libori.so in final image --- docker/Dockerfile.gNB.aw2s.rhel8.2 | 26 +++++--------------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/docker/Dockerfile.gNB.aw2s.rhel8.2 b/docker/Dockerfile.gNB.aw2s.rhel8.2 index bc86223130..e79bd6c09b 100644 --- a/docker/Dockerfile.gNB.aw2s.rhel8.2 +++ b/docker/Dockerfile.gNB.aw2s.rhel8.2 @@ -37,9 +37,6 @@ RUN /bin/sh oaienv && \ cd cmake_targets/ran_build/build && \ ninja aw2sori_transpro -RUN python3 ./docker/scripts/generateTemplate.py ./docker/scripts/gnb_parameters.yaml && \ - cp /oai-ran/docker/scripts/gnb_entrypoint.sh /oai-ran/docker/scripts/entrypoint.sh - #start from scratch for target executable FROM registry.access.redhat.com/ubi8/ubi:latest as oai-gnb-aw2s ENV TZ=Europe/Paris @@ -54,18 +51,15 @@ RUN yum repolist --disablerepo=* && \ lksctp-tools \ tzdata \ net-tools \ - iputils \ - python3-pip && \ - pip3 install six && \ - pip3 install requests && \ + iputils && \ echo "/usr/local/lib" > /etc/ld.so.conf.d/local-lib.conf && \ echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local-lib.conf +COPY ./libori.so /usr/local/lib + WORKDIR /opt/oai-gnb-aw2s/bin -COPY --from=gnb-build \ - /oai-ran/cmake_targets/ran_build/build/nr-softmodem \ - /oai-ran/docker/scripts/entrypoint.sh \ - ./ +COPY --from=gnb-build /oai-ran/cmake_targets/ran_build/build/nr-softmodem ./ +COPY ./docker/scripts/gnb-aw2s_entrypoint.sh /opt/oai-gnb-aw2s/bin/entrypoint.sh COPY --from=gnb-build \ /oai-ran/cmake_targets/ran_build/build/liboai_eth_transpro.so \ @@ -92,17 +86,7 @@ COPY --from=gnb-base \ RUN ln -s /usr/local/lib/libaw2sori_transpro.so /usr/local/lib/libthirdparty_transpro.so && \ ldconfig -# Copy the relevant configuration files for gNB -WORKDIR /opt/oai-gnb-aw2s/etc -COPY --from=gnb-build /oai-ran/docker/etc . - WORKDIR /opt/oai-gnb-aw2s -#EXPOSE 2152/udp # S1U, GTP/UDP -#EXPOSE 22100/tcp # ? -#EXPOSE 36412/udp # S1C, SCTP/UDP -#EXPOSE 36422/udp # X2C, SCTP/UDP -#EXPOSE 50000/udp # IF5 / ORI (control) -#EXPOSE 50001/udp # IF5 / ECPRI (data) ENTRYPOINT ["/opt/oai-gnb-aw2s/bin/entrypoint.sh"] CMD ["/opt/oai-gnb-aw2s/bin/nr-softmodem", "-O", "/opt/oai-gnb-aw2s/etc/gnb.conf"] From 16b0b5f0ec62fdbf16d6e81069cfec47721e440b Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Wed, 15 Feb 2023 22:50:40 +0100 Subject: [PATCH 25/36] bugfix: length type too short On a setup, length of cellGroupConfig was > 255. Using uint8_t to store the length is thus wrong and gives a bad encoding of the cellGroupConfig. So let's use uint32_t to store length instead of uint8_t. --- openair2/COMMON/f1ap_messages_types.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openair2/COMMON/f1ap_messages_types.h b/openair2/COMMON/f1ap_messages_types.h index e615005991..cd89e8d871 100644 --- a/openair2/COMMON/f1ap_messages_types.h +++ b/openair2/COMMON/f1ap_messages_types.h @@ -358,11 +358,11 @@ typedef struct cu_to_du_rrc_information_s { typedef struct du_to_du_rrc_information_s { uint8_t * cellGroupConfig; - uint8_t cellGroupConfig_length; + uint32_t cellGroupConfig_length; uint8_t * measGapConfig; - uint8_t measGapConfig_length; + uint32_t measGapConfig_length; uint8_t * requestedP_MaxFR1; - uint8_t requestedP_MaxFR1_length; + uint32_t requestedP_MaxFR1_length; }du_to_cu_rrc_information_t; typedef enum QoS_information_e { From 37b808d17117598540d2167198f4ebb0458aa9f6 Mon Sep 17 00:00:00 2001 From: Sakthivel Velumani Date: Thu, 16 Feb 2023 17:22:53 +0000 Subject: [PATCH 26/36] Updated 5G L2sim tutorial --- doc/L2NFAPI.md | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/doc/L2NFAPI.md b/doc/L2NFAPI.md index 77f9e5cb78..d480db71d7 100644 --- a/doc/L2NFAPI.md +++ b/doc/L2NFAPI.md @@ -12,6 +12,8 @@ +## 4G L2 nFAPI simulator + This simulator allows to test L2 and above Layers using the nFAPI interface. The UE executable is able to "simulate" multiple UEs in order to stimulate the scheduler in the eNB. @@ -38,7 +40,34 @@ Normally it should be fine to run both executables on the same host using the `l **2022/03/08: Starting the `2022.w01` tag on the `develop` branch, the L2 nFAPI simulation is using a proxy.** -A tutorial is available on the [EpiSci GitHub Repository](https://github.com/EpiSci/oai-lte-5g-multi-ue-proxy#readme). +## 5G L2 nFAPI simulator + +### Download and Build the Proxy Server (from EpiSci) + +```bash +$ cd ~ +$ git clone https://github.com/EpiSci/oai-lte-5g-multi-ue-proxy.git +$ cd oai-lte-multi-ue-proxy +$ make +``` + +### Start Proxy Server +Set the number of UEs to connect to server as 1 and the mode is SA. +```bash +$ number_of_ues=1 +$ sudo -E ./build/proxy $number_of_ues --nr +``` + +### Start gNB +```bash +$ sudo -E ./nr-softmodem -O ../ci-scripts/conf_files/episci/proxy_rcc.band78.tm1.106PRB.nfapi.conf --nfapi VNF --noS1 --sa --emulate-l1 +``` +### Start UE +```bash +$ sudo -E ./nr-uesoftmodem -O ../ci-scripts/conf_files/episci/proxy_nr-ue.nfapi.conf --nokrnmod 1 --nfapi STANDALONE_PNF --node-number 2 --sa --emulate-l1 +``` +### EpiSci's Documentation +A more detailed tutorial is available on the [EpiSci GitHub Repository](https://github.com/EpiSci/oai-lte-5g-multi-ue-proxy#readme). This proxy allows to perform L2 nFAPI simulator for: @@ -46,6 +75,7 @@ This proxy allows to perform L2 nFAPI simulator for: * 5G-NSA * 5G-SA +### L2 Simulator as Docker Containers Another tutorial for 5G SA mode with 1 User is available [here](../ci-scripts/yaml_files/5g_l2sim_tdd/README.md). ---- From 79f8d16da67b44605343ccd765cb25530bed5b83 Mon Sep 17 00:00:00 2001 From: Jaroslava Fiedlerova Date: Tue, 14 Feb 2023 14:07:42 +0100 Subject: [PATCH 27/36] Rename T1 offload lib and conditional compilation --- CMakeLists.txt | 43 ++++++++----------- .../nrLDPC_decoder/nrLDPC_decoder_offload.c | 2 +- openair1/PHY/CODING/nrLDPC_load.c | 2 +- 3 files changed, 20 insertions(+), 27 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 116b8a55d2..2cf58436fd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -618,26 +618,19 @@ target_link_libraries(benetel_5g PRIVATE asn1_nr_rrc asn1_lte_rrc) # LDPC offload library ########################################################## -# there is no generic way to test for T1 Offload, it simply comes with the -# shared object -if (EXISTS "/usr/local/lib64/librte_pmd_hpac_sdfec_pmd.so") - set(T1_OFFLOAD_FOUND TRUE) -else() - set(T1_OFFLOAD_FOUND FALSE) +add_boolean_option(ENABLE_LDPC_T1 OFF "Build support for LDPC Offload to T1 library") +if (ENABLE_LDPC_T1) + pkg_check_modules(LIBDPDK_T1 REQUIRED libdpdk=20.05.0) + find_library(T1 NAMES rte_pmd_hpac_sdfec_pmd REQUIRED) + if (NOT T1) + message(FATAL_ERROR "Library rte_pmd_hpac_sdfec_pmd for T1 offload not found") + endif() + add_library(ldpc_t1 MODULE ${OPENAIR1_DIR}/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c) + set_target_properties(ldpc_t1 PROPERTIES COMPILE_FLAGS "-DALLOW_EXPERIMENTAL_API") + target_compile_options(ldpc_t1 PRIVATE ${LIBDPDK_T1_CFLAGS}) + target_link_libraries(ldpc_t1 ${LIBDPDK_T1_LDFLAGS} ${T1}) endif() -if(T1_OFFLOAD_FOUND) - message(STATUS "T1 Offload support detected") - set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/usr/local/lib64/pkgconfig/") - pkg_search_module(LIBDPDK REQUIRED libdpdk=20.05.0) - add_library(ldpc_offload MODULE ${OPENAIR1_DIR}/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c) - set_target_properties(ldpc_offload PROPERTIES COMPILE_FLAGS "-DALLOW_EXPERIMENTAL_API") - target_compile_options(ldpc_offload PRIVATE ${LIBDPDK_CFLAGS}) - target_link_libraries(ldpc_offload ${LIBDPDK_LDFLAGS} rte_pmd_hpac_sdfec_pmd "-Wl,-rpath /usr/local/lib64") -else() - message(STATUS "No T1 Offload support detected") -endif () - ########################################################## include_directories ("${OPENAIR_DIR}/radio/COMMON") @@ -2384,11 +2377,11 @@ target_link_libraries(nr-softmodem PRIVATE ${LIB_LMS_LIBRARIES}) target_link_libraries(nr-softmodem PRIVATE ${T_LIB}) target_link_libraries(nr-softmodem PRIVATE asn1_nr_rrc asn1_lte_rrc) -add_dependencies( nr-softmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc) +add_dependencies(nr-softmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc) -if(T1_OFFLOAD_FOUND) -add_dependencies( nr-softmodem ldpc_offload) -endif () +if (ENABLE_LDPC_T1) + add_dependencies(nr-softmodem ldpc_t1) +endif() # force the generation of ASN.1 so that we don't need to wait during the build target_link_libraries(nr-softmodem PRIVATE @@ -2634,9 +2627,9 @@ add_executable(nr_ulsim ${SHLIB_LOADER_SOURCES} ) -if(T1_OFFLOAD_FOUND) -add_dependencies( nr_ulsim ldpc_offload) -endif () +if (ENABLE_LDPC_T1) + add_dependencies(nr_ulsim ldpc_t1) +endif() target_link_libraries(nr_ulsim PRIVATE -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON lte_rrc nr_rrc CONFIG_LIB L2_LTE_NR L2_NR HASHTABLE x2ap SECU_CN ngap NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB -lz -Wl,--end-group diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c index a523e960e2..33c0026314 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c @@ -1434,7 +1434,7 @@ int32_t nrLDPC_decod_offload(t_nrLDPC_dec_params* p_decParams, uint8_t harq_pid, argv_re[1] = "-l"; argv_re[2] = "31"; argv_re[3] = "-w"; - argv_re[4] = "81:00.0"; + argv_re[4] = "b0:00.0"; argv_re[5] = "--file-prefix=b6"; argv_re[6] = "--"; diff --git a/openair1/PHY/CODING/nrLDPC_load.c b/openair1/PHY/CODING/nrLDPC_load.c index 49ca9bf0de..400fb8d836 100644 --- a/openair1/PHY/CODING/nrLDPC_load.c +++ b/openair1/PHY/CODING/nrLDPC_load.c @@ -75,7 +75,7 @@ int load_nrLDPClib_offload(void) { loader_shlibfunc_t shlib_decoffload_fdesc; shlib_decoffload_fdesc.fname = "nrLDPC_decod_offload"; - int ret=load_module_shlib("ldpc_offload",&shlib_decoffload_fdesc,1,NULL); + int ret=load_module_shlib("ldpc_t1",&shlib_decoffload_fdesc,1,NULL); AssertFatal( (ret >= 0),"Error loading ldpc decoder offload"); nrLDPC_decoder_offload = (nrLDPC_decoffloadfunc_t)shlib_decoffload_fdesc.fptr; From 52e160a08a882ed3c8344f6c0fa996df57943a3a Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Sat, 18 Feb 2023 11:54:21 +0100 Subject: [PATCH 28/36] Conditional compilation for CUDA LDPC Offload --- CMakeLists.txt | 57 +++++++++++++++++++------------------------------- 1 file changed, 22 insertions(+), 35 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2cf58436fd..7da5bbc5e5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -140,29 +140,6 @@ set (OPENAIR_BIN_DIR ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}) project (OpenAirInterface) -############################################## -# Base CUDA setting -############################################## -find_package(CUDA) -if (CUDA_FOUND) - message ("cuda include ${CUDA_INCLUDE_DIRS}") - message ("cuda library ${CUDA_LIBRARY_DIRS}") - - add_definitions("-L/usr/local/cuda/lib64") - - SET(CUDA_NVCC_FLAGS - "${CUDA_NVCC_FLAGS};-arch=sm_60;") - - # Disable warnings for CUDA - SET(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};-lpthread;-w;-O3;--default-stream;per-thread;-I/usr/local/cuda/inc;-L/usr/local/cuda/lib -lcutil;-rdc=true;-lcudadevrt") - SET(CUDA_VERBOSE_BUILD ON) - - SET(CUDA_SEPARABLE_COMPILATION ON) - -else (CUDA_FOUND) - message ("No CUDA tool installed") -endif () - #################################################### # compilation flags ############################################# @@ -1026,16 +1003,26 @@ add_library(ldpc_cl MODULE ${PHY_LDPC_CL_SRC} ) target_link_libraries(ldpc_cl OpenCL) add_dependencies(ldpc_cl nrLDPC_decoder_kernels_CL) -if (CUDA_FOUND) - cuda_add_library(ldpc_cuda MODULE ${PHY_LDPC_CUDA_SRC} ) + +############################################## +# Base CUDA setting +############################################## + +add_boolean_option(BUILD_CUDA False "Build support for CUDA") +if (ENABLE_LDPC_CUDA) + find_package(CUDA REQUIRED) + SET(CUDA_NVCC_FLAG "${CUDA_NVCC_FLAGS};-arch=sm_60;") + SET(CUDA_VERBOSE_BUILD ON) + cuda_add_library(ldpc_cuda MODULE ${PHY_LDPC_CUDA_SRC}) set_target_properties(ldpc_cuda PROPERTIES CUDA_SEPARABLE_COMPILATION ON) -# CUDA_ADD_CUFFT_TO_TARGET(ldpc_cuda) -endif (CUDA_FOUND) + if (NOT CUDA_FOUND) + message(FATAL_ERROR "no CUDA found") + endif() +endif() add_library(ldpc MODULE ${PHY_LDPC_OPTIM8SEGMULTI_SRC} ) target_link_libraries(ldpc PRIVATE ldpc_gen_HEADERS) - add_library(coding MODULE ${PHY_TURBOSRC} ) target_link_libraries(coding PRIVATE asn1_nr_rrc asn1_lte_rrc) @@ -2444,10 +2431,10 @@ target_link_libraries(nr-uesoftmodem PRIVATE ${T_LIB}) target_link_libraries(nr-uesoftmodem PRIVATE asn1_nr_rrc asn1_lte_rrc) add_dependencies( nr-uesoftmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc ) -if (CUDA_FOUND) - add_dependencies( nr-uesoftmodem ldpc_cuda) - add_dependencies( nr-softmodem ldpc_cuda) -endif (CUDA_FOUND) +if (ENABLE_LDPC_CUDA) + add_dependencies(nr-uesoftmodem ldpc_cuda) + add_dependencies(nr-softmodem ldpc_cuda) +endif() # force the generation of ASN.1 so that we don't need to wait during the build target_link_libraries(nr-uesoftmodem PRIVATE @@ -2516,9 +2503,9 @@ add_executable(ldpctest ) add_dependencies( ldpctest ldpc_orig ldpc_optim ldpc_optim8seg ldpc ) -if (CUDA_FOUND) - add_dependencies( ldpctest ldpc_cuda) -endif (CUDA_FOUND) +if (ENABLE_LDPC_CUDA) + add_dependencies(ldpctest ldpc_cuda) +endif() target_link_libraries(ldpctest PRIVATE -Wl,--start-group UTIL SIMU PHY_NR PHY_COMMON PHY_NR_COMMON CONFIG_LIB -Wl,--end-group m pthread ${ATLAS_LIBRARIES} dl From b89b0d50744ea90d3023b645d566d0c8baec4f70 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Sat, 18 Feb 2023 11:54:29 +0100 Subject: [PATCH 29/36] build_oai: include ldpc_cuda and ldpc_t1 as optional libraries --- cmake_targets/build_oai | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index f9166e0555..f27a0cb315 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -55,7 +55,7 @@ CMAKE_BUILD_TYPE="RelWithDebInfo" CMAKE_CMD="$CMAKE" BUILD_ECLIPSE=0 NR="False" -OPTIONAL_LIBRARIES="telnetsrv enbscope uescope nrscope" +OPTIONAL_LIBRARIES="telnetsrv enbscope uescope nrscope ldpc_cuda ldpc_t1" ulfiusdep=$(basename ./`find /usr/lib* -name libulfius.so`) jssondep=$(basename ./`find /usr/lib* -name libjansson.so`) if [ "$ulfiusdep" == "libulfius.so" -a "$jssondep" == "libjansson.so" ] ; then @@ -392,13 +392,16 @@ function main() { if [ "$alib" = "$oklib" ] ; then BUILD_OPTLIB="$BUILD_OPTLIB $alib" echo_info "Enabling build of lib${alib}.so" - fi - done - done - if [ "${BUILD_OPTLIB## }" != "$2" ] ; then - echo_fatal "Unknown optional library in $2, valid libraries are $OPTIONAL_LIBRARIES" + fi + done + done + if [ "${BUILD_OPTLIB## }" != "$2" ] ; then + echo_fatal "Unknown optional library in $2, valid libraries are $OPTIONAL_LIBRARIES" fi fi + for oklib in $BUILD_OPTLIB ; do + CMAKE_CMD="$CMAKE_CMD -DENABLE_${oklib^^}=ON" + done shift 2;; --noavx512) CMAKE_CMD="$CMAKE_CMD -DAVX512=OFF" From 4f097b425a7ee3de15a2165d2d47f41d8e1831a3 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Sat, 18 Feb 2023 11:59:11 +0100 Subject: [PATCH 30/36] Build CI: only build selected optional libraries --- docker/Dockerfile.build.rhel8.2 | 2 +- docker/Dockerfile.build.ubuntu18 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile.build.rhel8.2 b/docker/Dockerfile.build.rhel8.2 index 6fc2598276..4978c0c50d 100644 --- a/docker/Dockerfile.build.rhel8.2 +++ b/docker/Dockerfile.build.rhel8.2 @@ -35,4 +35,4 @@ COPY . . RUN /bin/sh oaienv && \ cd cmake_targets && \ mkdir -p log && \ - ./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib all -w USRP --verbose-ci --noavx512 -c + ./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib "telnetsrv enbscope uescope nrscope" -w USRP --verbose-ci --noavx512 -c diff --git a/docker/Dockerfile.build.ubuntu18 b/docker/Dockerfile.build.ubuntu18 index 8c1ea3556d..62c3b84c10 100644 --- a/docker/Dockerfile.build.ubuntu18 +++ b/docker/Dockerfile.build.ubuntu18 @@ -35,4 +35,4 @@ COPY . . RUN /bin/sh oaienv && \ cd cmake_targets && \ mkdir -p log && \ - ./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib all -w USRP --verbose-ci --noavx512 -c + ./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib "telnetsrv enbscope uescope nrscope" -w USRP --verbose-ci --noavx512 -c From 8f7a4bf353f7b315e24737fc7a2e6afe83af7c58 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Sat, 18 Feb 2023 12:04:41 +0100 Subject: [PATCH 31/36] All-in-one tutorial: only build selected libraries --- doc/NR_SA_CN5G_gNB_USRP_COTS_UE_Tutorial.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/NR_SA_CN5G_gNB_USRP_COTS_UE_Tutorial.md b/doc/NR_SA_CN5G_gNB_USRP_COTS_UE_Tutorial.md index 8d82b1964f..13624042ee 100644 --- a/doc/NR_SA_CN5G_gNB_USRP_COTS_UE_Tutorial.md +++ b/doc/NR_SA_CN5G_gNB_USRP_COTS_UE_Tutorial.md @@ -144,7 +144,7 @@ cd cmake_targets cd ~/openairinterface5g source oaienv cd cmake_targets -./build_oai -w USRP --ninja --nrUE --gNB --build-lib all -c +./build_oai -w USRP --ninja --nrUE --gNB --build-lib "telnetsrv nrscope" -c ``` # 4. Run OAI CN5G and OAI gNB From 5723e7135f3e02c88eb25b79e1dde67f126ea551 Mon Sep 17 00:00:00 2001 From: Dhanuja Elizabeth Thomas Date: Fri, 17 Feb 2023 15:24:41 +0100 Subject: [PATCH 32/36] Add custom_commad to execute arbitrary command in CI --- ci-scripts/main.py | 6 ++++++ ci-scripts/ran.py | 18 ++++++++++++++++++ ci-scripts/xml_class_list.yml | 1 + 3 files changed, 25 insertions(+) diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 322b6a5c72..1566b2d47d 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -498,6 +498,9 @@ def GetParametersFromXML(action): string_field = test.findtext('test_svr_id') if (string_field is not None): CONTAINERS.testSvrId = string_field + elif action == 'Custom_Command': + RAN.node = test.findtext('node') + RAN.command = test.findtext('command') else: logging.warning(f"unknown action {action} from option-parsing point-of-view") @@ -879,6 +882,9 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re RAN.BuildeNB(HTML) elif action == 'WaitEndBuild_eNB': RAN.WaitBuildeNBisFinished(HTML) + elif action == 'Custom_Command': + logging.info(f"Executing custom command") + RAN.CustomCommand(HTML) elif action == 'Initialize_eNB': check_eNB = False check_OAI_UE = False diff --git a/ci-scripts/ran.py b/ci-scripts/ran.py index fd6a073f21..8ec72bf40f 100644 --- a/ci-scripts/ran.py +++ b/ci-scripts/ran.py @@ -38,6 +38,7 @@ import os import time from multiprocessing import Process, Lock, SimpleQueue import yaml +import cls_cmd #----------------------------------------------------------- @@ -96,6 +97,8 @@ class RANManagement(): #checkers from xml self.ran_checkers={} self.cmd_prefix = '' # prefix before {lte,nr}-softmodem + self.node = '' + self.command = '' #----------------------------------------------------------- @@ -259,6 +262,21 @@ class RANManagement(): mySSH.close() self.checkBuildeNB(lIpAddr, lUserName, lPassWord, lSourcePath, self.backgroundBuildTestId[int(self.eNB_instance)], HTML) + def CustomCommand(self, HTML): + if self.node == '' or self.node == "localhost": + cmd = cls_cmd.LocalCmd() + else: + cmd = cls_cmd.RemoteCmd(self.node) + ret = cmd.run(self.command) + cmd.close() + logging.debug(f'CustomCommand: {self.command} returnCode: {ret.returncode} output: {ret.stdout}') + html_queue = SimpleQueue() + status = 'OK' + if ret.returncode != 0: + html_queue.put(ret.stdout) + status = 'Warning' + HTML.CreateHtmlTestRow(self.command, status, 1, html_queue) + def checkBuildeNB(self, lIpAddr, lUserName, lPassWord, lSourcePath, testcaseId, HTML): HTML.testCase_id=testcaseId diff --git a/ci-scripts/xml_class_list.yml b/ci-scripts/xml_class_list.yml index b4dabb1654..93e3bc9fb0 100755 --- a/ci-scripts/xml_class_list.yml +++ b/ci-scripts/xml_class_list.yml @@ -51,3 +51,4 @@ - Push_Local_Registry - Pull_Local_Registry - Clean_Test_Server_Images + - Custom_Command From 9e5e6bf16dc454f1c199cb5d1628e9b0e9c994c4 Mon Sep 17 00:00:00 2001 From: Dhanuja Elizabeth Thomas Date: Fri, 20 Jan 2023 15:42:25 +0100 Subject: [PATCH 33/36] Removed reset/reboot of USRP --- ci-scripts/cls_containerize.py | 1 - ci-scripts/cls_oaicitest.py | 11 ----------- ci-scripts/ran.py | 21 --------------------- 3 files changed, 33 deletions(-) diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index 324e718ba1..f98561f3b5 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -865,7 +865,6 @@ class Containerize(): mySSH.command('sed -i -e "s/CI_MME_IP_ADDR/' + localMmeIpAddr + '/" ci-docker-compose.yml', '\$', 2) # Currently support only one - mySSH.command('echo ' + lPassWord + ' | sudo -S b2xx_fx3_utils --reset-device', '\$', 15) svcName = self.services[self.eNB_instance] if svcName == '': logging.warning('no service name given: starting all services in ci-docker-compose.yml!') diff --git a/ci-scripts/cls_oaicitest.py b/ci-scripts/cls_oaicitest.py index 328785f8d1..51e43109a0 100644 --- a/ci-scripts/cls_oaicitest.py +++ b/ci-scripts/cls_oaicitest.py @@ -453,17 +453,6 @@ class OaiCiTest(): UE_prefix = 'NR ' SSH = sshconnection.SSHConnection() SSH.open(self.UEIPAddress, self.UEUserName, self.UEPassword) - # b2xx_fx3_utils reset procedure - SSH.command('echo ' + self.UEPassword + ' | sudo -S uhd_find_devices', '\$', 180) - result = re.search('type: b200', SSH.getBefore()) - if result is not None: - logging.debug('Found a B2xx device --> resetting it') - SSH.command('echo ' + self.UEPassword + ' | sudo -S b2xx_fx3_utils --reset-device', '\$', 10) - # Reloading FGPA bin firmware - SSH.command('echo ' + self.UEPassword + ' | sudo -S uhd_find_devices', '\$', 180) - result = re.search('type: n3xx', str(SSH.getBefore())) - if result is not None: - logging.debug('Found a N3xx device --> resetting it') SSH.command('cd ' + self.UESourceCodePath, '\$', 5) # Initialize_OAI_UE_args usually start with -C and followed by the location in repository SSH.command('source oaienv', '\$', 5) diff --git a/ci-scripts/ran.py b/ci-scripts/ran.py index 8ec72bf40f..8628d5f3d8 100644 --- a/ci-scripts/ran.py +++ b/ci-scripts/ran.py @@ -365,17 +365,6 @@ class RANManagement(): cwd = os.getcwd() mySSH.copyout(lIpAddr,lUserName,lPassWord, cwd + "/active_net_interfaces.awk", "/tmp") - #reboot USRP if requested in xml - if self.USRPIPAddress!='': - logging.debug('USRP '+ self.USRPIPAddress +': reboot request') - mySSH.open(lIpAddr, lUserName, lPassWord) - cmd2usrp='ssh root@'+self.USRPIPAddress+' reboot' - mySSH.command2(cmd2usrp,1) - mySSH.close() - logging.debug('Waiting for USRP to be ready') - time.sleep(120) - - if (self.pStatus < 0): HTML.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' ' + self.Initialize_eNB_args, 'KO', self.pStatus) HTML.CreateHtmlTabFooter(False) @@ -437,16 +426,6 @@ class RANManagement(): result = re.search('^rru|^rcc|^du.band', str(config_file)) if result is not None: rruCheck = True - # do not reset board twice in IF4.5 case - result = re.search('^rru|^enb|^du.band', str(config_file)) - if result is not None: - mySSH.command('echo ' + lPassWord + ' | sudo -S uhd_find_devices', '\$', 180) - result = re.search('type: b200', mySSH.getBefore()) - if result is not None: - logging.debug('Found a B2xx device --> resetting it') - mySSH.command('echo ' + lPassWord + ' | sudo -S b2xx_fx3_utils --reset-device', '\$', 10) - # Reloading FGPA bin firmware - mySSH.command('echo ' + lPassWord + ' | sudo -S uhd_find_devices', '\$', 180) # Make a copy and adapt to EPC / eNB IP addresses mySSH.command('cp ' + full_config_file + ' ' + ci_full_config_file, '\$', 5) localMmeIpAddr = EPC.MmeIPAddress From d7d067165cf1fc2838b5b24e3a74ab7530c8ef7f Mon Sep 17 00:00:00 2001 From: Dhanuja Elizabeth Thomas Date: Fri, 17 Feb 2023 14:47:58 +0100 Subject: [PATCH 34/36] Add custom command to reboot or reset SDRs in CI --- .../xml_files/container_lte_b200_fdd_05Mhz_tm1.xml | 10 ++++++++-- ci-scripts/xml_files/container_nsa_b200_quectel.xml | 8 +++++++- ci-scripts/xml_files/fr1_enb_build.xml | 8 ++++++++ ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml | 8 +++++++- ci-scripts/xml_files/fr1_nsa_quectel.xml | 7 +++++++ ci-scripts/xml_files/fr1_sa_quectel.xml | 8 +++++++- ci-scripts/xml_files/gnb_usrp_build.xml | 8 ++++++++ ci-scripts/xml_files/sa_cn5g_asue_start.xml | 9 ++++++++- ci-scripts/xml_files/sa_cn5g_start.xml | 2 +- 9 files changed, 61 insertions(+), 7 deletions(-) diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml index ce9a19fde3..135321a36b 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml @@ -28,6 +28,7 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml tasks 111110 +300000 040101 030101 000001 @@ -41,8 +42,13 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml Pull Images from Local Registry 0 oai-enb - - + + + Custom_Command + To reset USRP + hutch + sudo -S b2xx_fx3_utils --reset-device + Deploy_Object Deploy eNB (FDD/Band7/5MHz/B200) in a container diff --git a/ci-scripts/xml_files/container_nsa_b200_quectel.xml b/ci-scripts/xml_files/container_nsa_b200_quectel.xml index 3734c91229..5362e4ec31 100644 --- a/ci-scripts/xml_files/container_nsa_b200_quectel.xml +++ b/ci-scripts/xml_files/container_nsa_b200_quectel.xml @@ -26,6 +26,7 @@ tasks 1 + 100000 111110 111111 000001 @@ -69,7 +70,12 @@ Initialize Quectel idefix - + + Custom_Command + To reset USRP + nepes + sudo -S b2xx_fx3_utils --reset-device + Terminate_UE diff --git a/ci-scripts/xml_files/fr1_enb_build.xml b/ci-scripts/xml_files/fr1_enb_build.xml index 084f58a591..6ea1ccfd29 100644 --- a/ci-scripts/xml_files/fr1_enb_build.xml +++ b/ci-scripts/xml_files/fr1_enb_build.xml @@ -25,6 +25,7 @@ Build wrench + 100000 000001 000002 @@ -47,4 +48,11 @@ 0 + + Custom_Command + To reboot USRP + obelix + ssh root@172.21.19.13 reboot ; sleep 45 + + diff --git a/ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml b/ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml index 459a16c323..be9df7a277 100644 --- a/ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml +++ b/ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml @@ -27,6 +27,7 @@ 1 010002 + 100000 030000 040000 000002 @@ -84,7 +85,12 @@ datalog_rt_stats.2x2.yaml 172.21.19.14 - + + Custom_Command + To reboot USRP + asterix + ssh root@172.21.19.14 reboot ; sleep 45 + IdleSleep Sleep diff --git a/ci-scripts/xml_files/fr1_nsa_quectel.xml b/ci-scripts/xml_files/fr1_nsa_quectel.xml index c72c61c0a2..cad6358231 100644 --- a/ci-scripts/xml_files/fr1_nsa_quectel.xml +++ b/ci-scripts/xml_files/fr1_nsa_quectel.xml @@ -26,6 +26,7 @@ tasks 1 + 100000 010002 030000 040000 @@ -52,6 +53,12 @@ idefix yes + + Custom_Command + To reset USRP + obelix + sudo -S b2xx_fx3_utils --reset-device + Terminate_UE diff --git a/ci-scripts/xml_files/fr1_sa_quectel.xml b/ci-scripts/xml_files/fr1_sa_quectel.xml index 0a9d17b63d..4d4c0ef45e 100644 --- a/ci-scripts/xml_files/fr1_sa_quectel.xml +++ b/ci-scripts/xml_files/fr1_sa_quectel.xml @@ -27,6 +27,7 @@ 1 010002 + 300000 040000 000002 010000 @@ -59,7 +60,12 @@ Terminate Quectel nrmodule2_quectel - + + Custom_Command + To reboot USRP + asterix + ssh root@172.21.19.14 reboot ; sleep 45 + Initialize_eNB diff --git a/ci-scripts/xml_files/gnb_usrp_build.xml b/ci-scripts/xml_files/gnb_usrp_build.xml index 3fc1b1c955..4dd477cbb4 100644 --- a/ci-scripts/xml_files/gnb_usrp_build.xml +++ b/ci-scripts/xml_files/gnb_usrp_build.xml @@ -26,6 +26,7 @@ wrench 1 +100000 010101 @@ -38,4 +39,11 @@ True + + Custom_Command + To reboot USRP + caracal + ssh root@192.168.20.2 reboot + + diff --git a/ci-scripts/xml_files/sa_cn5g_asue_start.xml b/ci-scripts/xml_files/sa_cn5g_asue_start.xml index 740022b1c9..8e4e32a95e 100644 --- a/ci-scripts/xml_files/sa_cn5g_asue_start.xml +++ b/ci-scripts/xml_files/sa_cn5g_asue_start.xml @@ -25,7 +25,8 @@ CN5G-Start log-in - 000100 +100000 +000100 @@ -35,5 +36,11 @@ Initialize 5G Core --type start-mini-as-ue --fqdn yes --scenario 1 --capture /tmp/oai-cn5g-v1.3.pcap + + Custom_Command + To reboot USRP + asterix + ssh root@172.21.19.14 reboot ; sleep 45 + diff --git a/ci-scripts/xml_files/sa_cn5g_start.xml b/ci-scripts/xml_files/sa_cn5g_start.xml index a524610569..44ec44b1d9 100644 --- a/ci-scripts/xml_files/sa_cn5g_start.xml +++ b/ci-scripts/xml_files/sa_cn5g_start.xml @@ -25,7 +25,7 @@ CN5G-Start log-in - 000100 +000100 From 379bc3e5199c69b3d513053fdcce1f192c239081 Mon Sep 17 00:00:00 2001 From: Dhanuja Elizabeth Thomas Date: Fri, 17 Feb 2023 15:53:14 +0100 Subject: [PATCH 35/36] Add custom command for setting cpu power state --- .../container_lte_b200_fdd_05Mhz_tm1.xml | 16 +++++++++- ...lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml | 14 ++++++++ .../container_lte_b200_fdd_10Mhz_tm1.xml | 14 ++++++++ .../container_lte_b200_fdd_10Mhz_tm1_cdrx.xml | 14 ++++++++ .../container_lte_b200_fdd_20Mhz_tm1.xml | 14 ++++++++ .../container_lte_b200_tdd_05Mhz_tm1.xml | 14 ++++++++ .../container_lte_b200_tdd_05Mhz_tm2.xml | 15 ++++++++- .../container_lte_b200_tdd_10Mhz_tm1.xml | 15 ++++++++- .../container_lte_b200_tdd_20Mhz_tm1.xml | 15 ++++++++- ...e_b200_tdd_20Mhz_tm1_default_scheduler.xml | 15 ++++++++- .../xml_files/container_nsa_b200_quectel.xml | 28 ++++++++++++++++ .../xml_files/container_sa_b200_quectel.xml | 15 ++++++++- .../container_sa_f1_b200_quectel.xml | 15 ++++++++- ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml | 32 +++++++++++++++++-- .../fr1_nsa_2x2_quectel_attach_detach.xml | 29 +++++++++++++++++ ci-scripts/xml_files/fr1_nsa_quectel.xml | 28 ++++++++++++++++ .../xml_files/fr1_sa_amarisoft_ue_1x.xml | 14 ++++++++ ci-scripts/xml_files/fr1_sa_oaiue_n310.xml | 15 ++++++++- ci-scripts/xml_files/fr1_sa_quectel.xml | 14 ++++++++ .../xml_files/fr1_sa_quectel_162prb.xml | 15 ++++++++- .../xml_files/fr1_sa_quectel_stages.xml | 16 ++++++++-- ci-scripts/xml_files/gnb_phytest_usrp_run.xml | 14 +++++++- .../xml_files/gnb_phytest_usrp_run_60.xml | 14 +++++++- .../xml_files/gnb_phytest_usrp_run_60_2x2.xml | 12 +++++++ ci-scripts/xml_files/lte_2x2_tm1_quectel.xml | 15 ++++++++- ci-scripts/xml_files/lte_2x2_tm2_quectel.xml | 14 ++++++++ ci-scripts/xml_files/sa_cn5g_asue_start.xml | 2 +- ci-scripts/xml_files/sa_cn5g_start.xml | 1 - 28 files changed, 421 insertions(+), 18 deletions(-) diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml index 135321a36b..698c620329 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml @@ -27,6 +27,7 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml Test-FDD-05MHz-TM1 tasks +100000 111110 300000 040101 @@ -34,6 +35,7 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml 000001 040301 000001 040501 040603 040604 040605 040606 040607 040641 040642 040643 040644 040401 040201 030201 +200000 @@ -42,7 +44,19 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml Pull Images from Local Registry 0 oai-enb - + + + Custom_Command + To reset cpupower + hutch + sudo cpupower idle-set -D 0 + + + Custom_Command + To reset cpupower + hutch + sudo cpupower idle-set -E + Custom_Command To reset USRP diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml index 8ead87d703..66d0c982ec 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml @@ -27,11 +27,13 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xm Test-FDD-05MHz-TM1-RRC-Inactivity tasks +100000 111110 040101 030102 000010 040301 040502 000011 040302 000001 000012 040303 000002 000013 040503 040401 040201 030201 +200000 @@ -41,6 +43,18 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xm 0 oai-enb + + Custom_Command + To reset cpupower + hutch + sudo cpupower idle-set -D 0 + + + Custom_Command + To reset cpupower + hutch + sudo cpupower idle-set -E + Deploy_Object diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1.xml index ce3161c94c..07f23ff2f0 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1.xml @@ -28,12 +28,14 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml Test-FDD-10MHz-TM1 tasks +100000 111110 040101 030111 000001 040301 040511 040613 040614 040615 040651 040652 040653 040654 040401 040201 030201 +200000 @@ -43,6 +45,18 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml 0 oai-enb + + Custom_Command + To reset cpupower + hutch + sudo cpupower idle-set -D 0 + + + Custom_Command + To reset cpupower + hutch + sudo cpupower idle-set -E + Deploy_Object diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml index 4d09bada08..caa888e4a8 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml @@ -27,11 +27,13 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml Test-FDD-10MHz-CDRX-TM1 tasks +100000 111110 040101 030112 040301 040512 040612 040650 040401 040201 030201 +200000 @@ -41,6 +43,18 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml 0 oai-enb + + Custom_Command + To reset cpupower + hutch + sudo cpupower idle-set -D 0 + + + Custom_Command + To reset cpupower + hutch + sudo cpupower idle-set -E + Deploy_Object diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_20Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_fdd_20Mhz_tm1.xml index 092ee208d1..e57e40cb1f 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_20Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_20Mhz_tm1.xml @@ -27,12 +27,14 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml Test-FDD-20MHz-TM1 tasks +100000 111110 040101 030121 000001 040301 040521 040623 040624 040625 040662 040401 040201 030201 +200000 @@ -42,6 +44,18 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml 0 oai-enb + + Custom_Command + To reset cpupower + hutch + sudo cpupower idle-set -D 0 + + + Custom_Command + To reset cpupower + hutch + sudo cpupower idle-set -E + Deploy_Object diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1.xml index fa191cd163..9f3bedba9e 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1.xml @@ -27,11 +27,13 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml Test-TDD-05MHz-TM1 tasks +100000 111110 040101 030104 040301 040501 040602 040601 040603 040604 040605 040642 040641 040643 040644 040645 040401 040201 030201 +200000 @@ -41,6 +43,18 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml 0 oai-enb + + Custom_Command + To reset cpupower + starsky + sudo cpupower idle-set -D 0 + + + Custom_Command + To reset cpupower + starsky + sudo cpupower idle-set -E + Deploy_Object diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm2.xml b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm2.xml index 69997c5586..d8f87b4741 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm2.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm2.xml @@ -27,11 +27,13 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm2.xml Test-TDD-05MHz-TM2 tasks +100000 111110 040101 030105 040301 040502 040606 040608 040646 040648 040401 040201 030201 +200000 @@ -41,7 +43,18 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm2.xml 0 oai-enb - + + Custom_Command + To reset cpupower + starsky + sudo cpupower idle-set -D 0 + + + Custom_Command + To reset cpupower + starsky + sudo cpupower idle-set -E + Deploy_Object Deploy eNB (TDD/Band40/5MHz/B200) in a container diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_10Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_tdd_10Mhz_tm1.xml index ada6945aad..fe47e7c958 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_10Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_10Mhz_tm1.xml @@ -27,11 +27,13 @@ Replaces xml_files/enb_usrp210_band40_test_10mhz_tm1.xml Test-TDD-10MHz-TM1 tasks +100000 111110 040101 030114 040301 040511 040612 040611 040613 040614 040615 040652 040651 040653 040654 040655 040401 040201 030201 +200000 @@ -41,7 +43,18 @@ Replaces xml_files/enb_usrp210_band40_test_10mhz_tm1.xml 0 oai-enb - + + Custom_Command + To reset cpupower + starsky + sudo cpupower idle-set -D 0 + + + Custom_Command + To reset cpupower + starsky + sudo cpupower idle-set -E + Deploy_Object Deploy eNB (TDD/Band40/10MHz/B200) in a container diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1.xml index ec3de1a5ae..51c4f95137 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1.xml @@ -27,11 +27,13 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1.xml Test-TDD-20MHz-TM1 tasks +100000 111110 040101 030124 040301 040521 040622 040621 040623 040662 040401 040201 030201 +200000 @@ -41,7 +43,18 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1.xml 0 oai-enb - + + Custom_Command + To reset cpupower + starsky + sudo cpupower idle-set -D 0 + + + Custom_Command + To reset cpupower + starsky + sudo cpupower idle-set -E + Deploy_Object Deploy eNB (TDD/Band40/20MHz/B200) in a container diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml b/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml index b5ff90e112..57ebb79fac 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml @@ -27,11 +27,13 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml Test-TDD-20MHz-TM1-Default-Scheduler tasks +100000 111110 040101 030125 040301 040522 040627 040626 040628 040629 040630 040667 040666 040668 040669 040670 040401 040201 030201 +200000 @@ -41,7 +43,18 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml 0 oai-enb - + + Custom_Command + To reset cpupower + starsky + sudo cpupower idle-set -D 0 + + + Custom_Command + To reset cpupower + starsky + sudo cpupower idle-set -E + Deploy_Object Deploy eNB (TDD/Band40/20MHz/B200) in a container diff --git a/ci-scripts/xml_files/container_nsa_b200_quectel.xml b/ci-scripts/xml_files/container_nsa_b200_quectel.xml index 5362e4ec31..397e6aadbd 100644 --- a/ci-scripts/xml_files/container_nsa_b200_quectel.xml +++ b/ci-scripts/xml_files/container_nsa_b200_quectel.xml @@ -26,7 +26,9 @@ tasks 1 + 200000 100000 + 500000 111110 111111 000001 @@ -48,6 +50,8 @@ 000001 030202 030201 + 300000 + 600000 @@ -76,6 +80,30 @@ nepes sudo -S b2xx_fx3_utils --reset-device + + Custom_Command + To reset cpupower - nepes + nepes + sudo cpupower idle-set -D 0 + + + Custom_Command + To reset cpupower - nepes + nepes + sudo cpupower idle-set -E + + + Custom_Command + To reset cpupower - obelix + obelix + sudo cpupower idle-set -D 0 + + + Custom_Command + To reset cpupower - obelix + obelix + sudo cpupower idle-set -E + Terminate_UE diff --git a/ci-scripts/xml_files/container_sa_b200_quectel.xml b/ci-scripts/xml_files/container_sa_b200_quectel.xml index 53cfbf80cb..4f0e01c692 100644 --- a/ci-scripts/xml_files/container_sa_b200_quectel.xml +++ b/ci-scripts/xml_files/container_sa_b200_quectel.xml @@ -26,6 +26,7 @@ tasks 1 + 100000 111111 010002 030101 @@ -39,6 +40,7 @@ 010002 000001 030201 + 200000