diff --git a/ci-scripts/conf_files/gnb-cu.sa.band78.106prb.conf b/ci-scripts/conf_files/gnb-cu.sa.band78.106prb.conf index 8a33b6dd96..7f975cbcd4 100644 --- a/ci-scripts/conf_files/gnb-cu.sa.band78.106prb.conf +++ b/ci-scripts/conf_files/gnb-cu.sa.band78.106prb.conf @@ -23,8 +23,8 @@ gNBs = tr_s_preference = "f1"; local_s_if_name = "eth0"; - local_s_address = "192.168.71.140"; - remote_s_address = "192.168.71.142"; + local_s_address = "192.168.71.150"; + remote_s_address = "192.168.71.171"; local_s_portc = 501; local_s_portd = 2153; remote_s_portc = 500; @@ -51,9 +51,9 @@ gNBs = { GNB_INTERFACE_NAME_FOR_NG_AMF = "eth0"; - GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.140"; + GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.150"; GNB_INTERFACE_NAME_FOR_NGU = "eth0"; - GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.140"; + GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.150"; GNB_PORT_FOR_S1U = 2152; # Spec 2152 }; } diff --git a/ci-scripts/conf_files/gnb-cucp.sa.f1.conf b/ci-scripts/conf_files/gnb-cucp.sa.f1.conf index 469ab8d187..94200b8189 100644 --- a/ci-scripts/conf_files/gnb-cucp.sa.f1.conf +++ b/ci-scripts/conf_files/gnb-cucp.sa.f1.conf @@ -16,7 +16,7 @@ gNBs = // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = 1; - plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0xffffff }) }); + plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }, { sst = 2 }, { sst = 3 }) }); nr_cellid = 12345678L; @@ -24,8 +24,8 @@ gNBs = tr_s_preference = "f1"; local_s_if_name = "lo"; - local_s_address = "192.168.72.140"; - remote_s_address = "192.168.72.143"; + local_s_address = "192.168.71.150"; + remote_s_address = "0.0.0.0"; # multiple DUs local_s_portc = 501; local_s_portd = 2152; remote_s_portc = 500; @@ -52,9 +52,9 @@ gNBs = ( { type = "cp"; - ipv4_cucp = "192.168.72.140"; + ipv4_cucp = "192.168.71.150"; port_cucp = 38462; - ipv4_cuup = "192.168.72.141"; + ipv4_cuup = "0.0.0.0"; # multiple CU-UPs port_cuup = 38462; } ) diff --git a/ci-scripts/conf_files/gnb-cuup.sa.f1.conf b/ci-scripts/conf_files/gnb-cuup.sa.f1.conf index d6c54f0b9a..07e3701749 100644 --- a/ci-scripts/conf_files/gnb-cuup.sa.f1.conf +++ b/ci-scripts/conf_files/gnb-cuup.sa.f1.conf @@ -22,12 +22,12 @@ gNBs = tr_s_preference = "f1"; local_s_if_name = "lo"; - local_s_address = "192.168.72.141"; - remote_s_address = "192.168.72.142"; + local_s_address = "192.168.72.161"; + remote_s_address = "192.168.72.171"; local_s_portc = 501; - local_s_portd = 2152; + local_s_portd = 2153; remote_s_portc = 500; - remote_s_portd = 2152; + remote_s_portd = 2153; # ------- SCTP definitions SCTP : @@ -41,17 +41,17 @@ gNBs = ( { type = "up"; - ipv4_cucp = "192.168.72.140"; - ipv4_cuup = "192.168.72.141"; + ipv4_cucp = "192.168.71.150"; + ipv4_cuup = "192.168.71.161"; } ) NETWORK_INTERFACES : { GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai"; - GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.141/24"; + GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.161/24"; GNB_INTERFACE_NAME_FOR_NGU = "demo-oai"; - GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.141/24"; + GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.161/24"; GNB_PORT_FOR_S1U = 2152; # Spec 2152 }; } diff --git a/ci-scripts/conf_files/gnb-du.sa.band78.106prb.rfsim.conf b/ci-scripts/conf_files/gnb-du.sa.band78.106prb.rfsim.conf index 75d2beed6d..9d8a3cb57b 100644 --- a/ci-scripts/conf_files/gnb-du.sa.band78.106prb.rfsim.conf +++ b/ci-scripts/conf_files/gnb-du.sa.band78.106prb.rfsim.conf @@ -15,7 +15,7 @@ gNBs = // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = 1; - plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0xffffff }) }); + plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }, { sst = 2 }, { sst = 3 } ) }); nr_cellid = 12345678L; @@ -23,7 +23,6 @@ gNBs = ////////// Physical parameters: min_rxtxtime = 6; - force_256qam_off = 1; servingCellConfigCommon = ( { @@ -170,8 +169,8 @@ MACRLCs = ( tr_s_preference = "local_L1"; tr_n_preference = "f1"; local_n_if_name = "eth0"; - local_n_address = "192.168.71.142"; - remote_n_address = "192.168.71.140"; + local_n_address = "192.168.71.171"; + remote_n_address = "192.168.71.150"; local_n_portc = 500; local_n_portd = 2153; remote_n_portc = 501; diff --git a/ci-scripts/xml_files/container_5g_e1_rfsim.xml b/ci-scripts/xml_files/container_5g_e1_rfsim.xml index b89b8a2bd2..b53a01da13 100644 --- a/ci-scripts/xml_files/container_5g_e1_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_e1_rfsim.xml @@ -27,14 +27,10 @@ 111111 100021 - 000020 000021 000022 000023 - 000024 020021 - 020022 - 030021 100021 @@ -46,80 +42,38 @@ oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan - - DeployGenObject - Deploy MySql Database - yaml_files/5g_rfsimulator_e1 - mysql - 1 - - DeployGenObject Deploy OAI 5G CoreNetwork yaml_files/5g_rfsimulator_e1 - oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn - 6 + mysql oai-nrf oai-amf oai-smf oai-spgwu + 5 DeployGenObject - Deploy OAI 5G CU-CP RF sim SA + Deploy OAI 5G RAN RF sim SA (1 CU-CP, 3 CU-UPs, 3 DUs) yaml_files/5g_rfsimulator_e1 - oai-cucp - 7 + oai-cucp oai-cuup oai-cuup2 oai-cuup3 oai-du oai-du2 oai-du3 + 12 - DeployGenObject - Deploy OAI 5G CU-UP and DU RF sim SA - yaml_files/5g_rfsimulator_e1 - oai-cuup oai-du - 9 - - - DeployGenObject Deploy OAI 5G NR-UE RF sim SA yaml_files/5g_rfsimulator_e1 - oai-nr-ue - 10 + oai-nr-ue oai-nr-ue2 oai-nr-ue3 + 15 Ping - Ping ext-dn from NR-UE - rfsim5g_ue - -c 20 192.168.73.135 + Ping ext-dn from all NR-UEs + rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3 + -c 20 12.1.1.1 -i0.25 5 - - Ping - Ping NR-UE from ext-dn - rfsim5g_ext_dn - -c 20 12.1.1.2 - 5 - - - - IperfFromContainer - Iperf UDP Downlink - rfsim5g-oai-nr-ue - rfsim5g-oai-ext-dn - -B 12.1.1.2 -u -i 1 -s - -c 12.1.1.2 -u -i 1 -t 30 -b 3M - - - - IperfFromContainer - Iperf UDP Uplink - rfsim5g-oai-ext-dn - rfsim5g-oai-nr-ue - -u -i 1 -s - -B 12.1.1.2 -c 192.168.73.135 -u -i 1 -t 30 -b 1M - - UndeployGenObject Undeploy all OAI 5G stack diff --git a/ci-scripts/xml_files/container_5g_e1_rfsim_down.xml b/ci-scripts/xml_files/container_5g_e1_rfsim_down.xml index a1213c9b9b..4ccf180fd0 100644 --- a/ci-scripts/xml_files/container_5g_e1_rfsim_down.xml +++ b/ci-scripts/xml_files/container_5g_e1_rfsim_down.xml @@ -22,7 +22,7 @@ --> rfsim-5gnr-down-e1 - CleanUp CUCP-CUUP-DU E1+F1 split + CleanUp E1+F1 split trash 100022 diff --git a/ci-scripts/xml_files/container_5g_f1_rfsim.xml b/ci-scripts/xml_files/container_5g_f1_rfsim.xml index 6f8f71095c..c6eb681a58 100644 --- a/ci-scripts/xml_files/container_5g_f1_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_f1_rfsim.xml @@ -27,13 +27,11 @@ 111111 100021 - 000020 000021 000022 - 000023 - 000024 - 000025 020021 + 030021 + 030022 100021 @@ -42,61 +40,29 @@ Pull_Local_Registry Pull Images from Local Registry 0 - oai-gnb-asan oai-nr-ue-asan - - - - DeployGenObject - Deploy MySql Database - yaml_files/5g_f1_rfsimulator - mysql - 1 + oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan DeployGenObject Deploy OAI 5G CoreNetwork yaml_files/5g_f1_rfsimulator - oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn + mysql oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn 6 DeployGenObject - Deploy OAI 5G CU RF sim SA + Deploy OAI 5G CU+DU+UE RF sim SA yaml_files/5g_f1_rfsimulator - oai-cu - 7 - - - - DeployGenObject - Deploy 3 OAI 5G DUs RF sim SA - yaml_files/5g_f1_rfsimulator - oai-du oai-du2 oai-du3 - 10 - - - - DeployGenObject - Deploy OAI 5G NR-UE RF sim SA - yaml_files/5g_f1_rfsimulator - oai-nr-ue oai-nr-ue2 - 12 - - - - DeployGenObject - Deploy OAI 5G NR-UE RF sim SA - yaml_files/5g_f1_rfsimulator - oai-nr-ue3 - 13 + oai-cu oai-du oai-nr-ue + 9 Ping Ping ext-dn from all NR-UEs - rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3 + rfsim5g_ue -c 20 192.168.72.135 -i0.25 5 @@ -107,7 +73,7 @@ rfsim5g-oai-nr-ue rfsim5g-oai-ext-dn -B 12.1.1.2 -u -i 1 -s - -c 12.1.1.2 -u -i 1 -t 30 -b 3M + -c 12.1.1.2 -u -i 1 -t 10 -b 20M @@ -116,7 +82,7 @@ rfsim5g-oai-ext-dn rfsim5g-oai-nr-ue -u -i 1 -s - -B 12.1.1.2 -c 192.168.72.135 -u -i 1 -t 30 -b 1M + -B 12.1.1.2 -c 192.168.72.135 -u -i 1 -t 10 -b 5M diff --git a/ci-scripts/xml_files/container_5g_rfsim.xml b/ci-scripts/xml_files/container_5g_rfsim.xml index 1bca25027f..dd18ee7132 100644 --- a/ci-scripts/xml_files/container_5g_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_rfsim.xml @@ -28,7 +28,6 @@ 111111 100001 - 000000 000001 000002 000003 @@ -36,6 +35,7 @@ 000005 000006 000007 + 000008 020001 020002 020003 @@ -61,19 +61,11 @@ oai-gnb-asan oai-nr-ue - - DeployGenObject - Deploy MySql Database - yaml_files/5g_rfsimulator - mysql - 1 - - DeployGenObject Deploy OAI 5G CoreNetwork yaml_files/5g_rfsimulator - oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn + mysql oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn 6 @@ -125,6 +117,12 @@ 17 + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3 rfsim5g_ue4 rfsim5g_ue5 rfsim5g_ue6 rfsim5g_ue7 rfsim5g_ue8 rfsim5g_ue9 rfsim5g_ue10 + + Ping Ping ext-dn from NR-UE 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 8d62746300..308efdc33b 100644 --- a/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml +++ b/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml @@ -49,8 +49,10 @@ services: - PLMN_SUPPORT_MCC=208 - PLMN_SUPPORT_MNC=99 - PLMN_SUPPORT_TAC=0x0001 - # Only one slice is defined (1, 0xFFFFFF). + # Three slices are defined - SST_0=1 + - SST_1=2 + - SST_2=3 - AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0 # One single SMF instance @@ -101,6 +103,8 @@ services: - TYPE0=IPv4 - DNN_RANGE0=12.1.1.2 - 12.1.1.127 - NSSAI_SST0=1 + - NSSAI_SST1=2 + - NSSAI_SST2=3 - SESSION_AMBR_UL0=200Mbps - SESSION_AMBR_DL0=400Mbps - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1 @@ -127,10 +131,16 @@ services: - UPF_FQDN_5G=oai-spgwu - NRF_IPV4_ADDRESS=192.168.71.130 - NRF_FQDN=oai-nrf - # Only one slice is defined (1, 0xFFFFFF) + # Three slices are defined - NSSAI_SST_0=1 - NSSAI_SD_0=0xffffff - DNN_0=oai + - NSSAI_SST_1=2 + - NSSAI_SD_1=0xffffff + - DNN_1=oai + - NSSAI_SST_2=3 + - NSSAI_SD_2=0xffffff + - DNN_2=oai depends_on: - oai-nrf - oai-smf @@ -145,6 +155,7 @@ services: ipv4_address: 192.168.71.134 traffic_net: ipv4_address: 192.168.72.134 + oai-ext-dn: privileged: true container_name: rfsim5g-oai-ext-dn @@ -162,6 +173,7 @@ services: interval: 10s timeout: 5s retries: 5 + oai-cu: image: oaisoftwarealliance/oai-gnb:develop privileged: true @@ -173,7 +185,7 @@ services: - oai-ext-dn networks: public_net: - ipv4_address: 192.168.71.140 + ipv4_address: 192.168.71.150 volumes: - ../../conf_files/gnb-cu.sa.band78.106prb.conf:/opt/oai-gnb/etc/gnb.conf healthcheck: @@ -181,56 +193,19 @@ services: interval: 10s timeout: 5s retries: 5 + oai-du: image: oaisoftwarealliance/oai-gnb:develop privileged: true container_name: rfsim5g-oai-du - environment: + environment: USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time ASAN_OPTIONS: detect_leaks=0 depends_on: - oai-cu networks: public_net: - ipv4_address: 192.168.71.142 - volumes: - - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf - healthcheck: - test: /bin/bash -c "pgrep nr-softmodem" - interval: 10s - timeout: 5s - retries: 5 - oai-du2: - image: oaisoftwarealliance/oai-gnb:develop - privileged: true - container_name: rfsim5g-oai-du2 - environment: - USE_ADDITIONAL_OPTIONS: --sa --rfsim --gNBs.[0].gNB_DU_ID 0xe01 --gNBs.[0].nr_cellid 87654321 --gNBs.[0].servingCellConfigCommon.[0].physCellId 1 --MACRLCs.[0].local_n_address 192.168.71.143 --log_config.global_log_options level,nocolor,time - ASAN_OPTIONS: detect_leaks=0 - depends_on: - - oai-cu - networks: - public_net: - ipv4_address: 192.168.71.143 - volumes: - - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf - healthcheck: - test: /bin/bash -c "pgrep nr-softmodem" - interval: 10s - timeout: 5s - retries: 5 - oai-du3: - image: oaisoftwarealliance/oai-gnb:develop - privileged: true - container_name: rfsim5g-oai-du3 - environment: - USE_ADDITIONAL_OPTIONS: --sa --rfsim --gNBs.[0].gNB_DU_ID 0xe02 --gNBs.[0].nr_cellid 11111111 --gNBs.[0].servingCellConfigCommon.[0].physCellId 2 --MACRLCs.[0].local_n_address 192.168.71.144 --log_config.global_log_options level,nocolor,time - ASAN_OPTIONS: detect_leaks=0 - depends_on: - - oai-cu - networks: - public_net: - ipv4_address: 192.168.71.144 + ipv4_address: 192.168.71.171 volumes: - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf healthcheck: @@ -238,56 +213,22 @@ services: interval: 10s timeout: 5s retries: 5 + oai-nr-ue: image: oaisoftwarealliance/oai-nr-ue:develop privileged: true container_name: rfsim5g-oai-nr-ue - environment: - USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001100 -C 3619200000 --rfsimulator.serveraddr 192.168.71.142 --log_config.global_log_options level,nocolor,time + environment: + USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time + -r 106 --numerology 1 -C 3619200000 + --uicc0.imsi 208990100001100 + --rfsimulator.serveraddr 192.168.71.171 ASAN_OPTIONS: detect_leaks=0 depends_on: - oai-du networks: public_net: - ipv4_address: 192.168.71.150 - volumes: - - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf - healthcheck: - test: /bin/bash -c "pgrep nr-uesoftmodem" - interval: 10s - timeout: 5s - retries: 5 - oai-nr-ue2: - image: oaisoftwarealliance/oai-nr-ue:develop - privileged: true - container_name: rfsim5g-oai-nr-ue2 - environment: - USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001101 -C 3619200000 --rfsimulator.serveraddr 192.168.71.143 --log_config.global_log_options level,nocolor,time - ASAN_OPTIONS: detect_leaks=0 - depends_on: - - oai-du2 - networks: - public_net: - ipv4_address: 192.168.71.151 - volumes: - - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf - healthcheck: - test: /bin/bash -c "pgrep nr-uesoftmodem" - interval: 10s - timeout: 5s - retries: 5 - oai-nr-ue3: - image: oaisoftwarealliance/oai-nr-ue:develop - privileged: true - container_name: rfsim5g-oai-nr-ue3 - environment: - USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001102 -C 3619200000 --rfsimulator.serveraddr 192.168.71.144 --log_config.global_log_options level,nocolor,time - ASAN_OPTIONS: detect_leaks=0 - depends_on: - - oai-du3 - networks: - public_net: - ipv4_address: 192.168.71.152 + ipv4_address: 192.168.71.181 volumes: - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf healthcheck: diff --git a/ci-scripts/yaml_files/5g_rfsimulator/README.md b/ci-scripts/yaml_files/5g_rfsimulator/README.md index 72756b1441..4efd2714b4 100644 --- a/ci-scripts/yaml_files/5g_rfsimulator/README.md +++ b/ci-scripts/yaml_files/5g_rfsimulator/README.md @@ -65,7 +65,8 @@ $ docker logout All the following commands **SHALL** be run from the `ci-scripts/yaml_files/5g_rfsimulator` folder for a deployment with monolithic gNB. -For a deployment with the gNB split in CU and DU components, the following commands **SHALL** be run from the `ci-scripts/yaml_files/5g_f1_rfsimulator` folder. +For a deployment with the gNB split in CU and DU components, please refer to the `../5g_f1_rfsimulator` folder. +For a deployment with the gNB split in CU-CP, CU-UP, and DU components, please refer to the ../5g_rfsimulator_e1` folder. ## 2.1. Deploy OAI 5G Core Network ## diff --git a/ci-scripts/yaml_files/5g_rfsimulator_e1/README.md b/ci-scripts/yaml_files/5g_rfsimulator_e1/README.md new file mode 100644 index 0000000000..2cc0ec88ab --- /dev/null +++ b/ci-scripts/yaml_files/5g_rfsimulator_e1/README.md @@ -0,0 +1,230 @@ +# CI test for 5G F1+E1 splits with RFsimulator + +## General + +This docker-compose file deploys a core, RAN, and 3 UEs. Specifically: + +- 5GC mini deployment, +- 1 CU-CP, +- 3 CU-UPs, one for slices SST=1,2,3, +- 3 DUs, +- 3 UEs connecting to each DU, each requesting slice SST=1,2,3. + +The CU-CP associates each UE X connecting through DU X to CU-UP X, X=1,2,3. To this end, the docker-compose file deliberately employs the three `f1u_netX` networks to route the user-plane traffic of each DU X/CU-UP X pair, through the `f1u_netX` network in order to effectively test that the correct CU-UP is associated. Basically, the traffic test will only succeed if the correct pair of DU/CU-UP has been established; if not, the DU/CU-UP cannot communicate, as the traffic cannot be routed. + +Core network components are on `core_net` network, CU-CP <--> CU-UP X communicate via `e1_net` network, CU-CP <--> DU X communicate via `f1c_net` network and DU X <--> NR_UE X communicate via `ue_net` network. + + +## Connectivity + +``` +AMF --> 192.168.71.132 (N2,Namf) +SMF --> 192.168.71.133 (N4,Nsmf) +NRF --> 192.168.71.130 (Nnrf) +SPGWU --> 192.168.71.134 (N3) +CU-CP --> 192.168.71.X (N2), 192.168.72.2 (F1C), 192.168.77.2 (E1) +CU-UP1 --> 192.168.71.X (N3), 192.168.73.2 (F1U), 192.168.77.3 (E1) +CU-UP2 --> 192.168.71.X (N3), 192.168.74.2 (F1U), 192.168.77.4 (E1) +CU-UP3 --> 192.168.71.X (N3), 192.168.76.2 (F1U), 192.168.77.5 (E1) +DU1 --> 192.168.72.2 (F1C), 192.168.73.3 (F1U), 192.168.78.2 (RFSIM) +DU2 --> 192.168.72.3 (F1C), 192.168.74.3 (F1U), 192.168.78.3 (RFSIM) +DU3 --> 192.168.72.4 (F1C), 192.168.76.3 (F1U), 192.168.78.4 (RFSIM) +UE1 --> 192.168.78.5 (RFSIM) +UE2 --> 192.168.78.6 (RFSIM) +UE3 --> 192.168.78.7 (RFSIM) +``` + +## How to run + +You should be able to deploy the [basic 5G RFsim deployment](../5g_rfsimulator/README.md). + +First, start the MySQL server and 5GC: + +```bash +docker-compose up -d mysql oai-nrf oai-amf oai-smf oai-spgwu +docker-compose ps -a +``` + +Wait till everything is healthy. + +Next, start the RAN: + +```bash +docker-compose up -d oai-cucp oai-cuup{,2,3} oai-du{,2,3} +``` + +You can verify that the DUs and CU-UPs connected successfully: +```bash +docker logs rfsim5g-oai-cucp +``` + +
+The output is similar to: + +```console +[...] +18535.139811 [RRC] I Accepting new CU-UP ID 3585 name gNB-OAI (assoc_id 257) +18535.425744 [RRC] I Accepting new CU-UP ID 3584 name gNB-OAI (assoc_id 260) +18535.425757 [RRC] I Accepting new CU-UP ID 3586 name gNB-OAI (assoc_id 261) +18535.669733 [NR_RRC] I Received F1 Setup Request from gNB_DU 3585 (du-rfsim) on assoc_id 263 +18535.669814 [RRC] I Accepting DU 3585 (du-rfsim), sending F1 Setup Response +18536.066417 [NR_RRC] I Received F1 Setup Request from gNB_DU 3586 (du-rfsim) on assoc_id 265 +18536.066476 [RRC] I Accepting DU 3586 (du-rfsim), sending F1 Setup Response +18536.135581 [NR_RRC] I Received F1 Setup Request from gNB_DU 3584 (du-rfsim) on assoc_id 267 +18536.135650 [RRC] I Accepting DU 3584 (du-rfsim), sending F1 Setup Response +``` +
+ +You should see that the CU-UP initialized two GTP instances (one for NG-U, the other for F1-U): + +```bash +docker logs -f rfsim5g-oai-cuup +``` + +
+The output is similar to: + +```console +[...] +122690.500374 [GTPU] I Initializing UDP for local address 192.168.73.2 with port 2153 +122690.500406 [GTPU] I Created gtpu instance id: 96 +122690.500413 [GTPU] I Configuring GTPu address : 192.168.71.161, port : 2152 +122690.500414 [GTPU] I Initializing UDP for local address 192.168.71.161 with port 2152 +122690.500420 [GTPU] I Created gtpu instance id: 97 +``` +
+ + + +You should see the typical periodical output at the DUs: + +```bash +docker logs rfsim5g-oai-du +``` +
+The output is similar to: + +```console +[...] +18626.446953 [NR_MAC] I Frame.Slot 128.0 + +18629.151076 [NR_MAC] I Frame.Slot 256.0 +``` +
+ +``` + +Next, connect the UEs. They are configured to connect to each DU by setting the +RFsimulator server address to the `public_net` IP address of each DU. For each, +you should see that they get an IP address + +```bash +docker compose up -d oai-nr-ue{,2,3} +``` + +```bash +docker logs rfsim5g-oai-nr-ue +``` + +
+The output is similar to: + +```console +[...] +18758.176149 [NR_RRC] I rrcReconfigurationComplete Encoded 10 bits (2 bytes) +18758.176153 [NR_RRC] I Logical Channel UL-DCCH (SRB1), Generating RRCReconfigurationComplete (bytes 2) +18758.176154 [NAS] I [UE 0] Received NAS_CONN_ESTABLI_CNF: errCode 1, length 87 +18758.176455 [OIP] I Interface oaitun_ue1 successfully configured, ip address 12.1.1.3, mask 255.255.255.0 broadcast address 12.1.1.255 +``` +
+ + +Alternatively, check that they all received an IP address (the associated IP addresses might be different): + +```bash +docker exec -it rfsim5g-oai-nr-ue3 ip a show oaitun_ue1 +``` +
+The output is similar to: + +```console +[...] + inet 12.1.1.2/24 brd 12.1.1.255 scope global oaitun_ue1 +[...] +``` +
+ +```bash +docker exec -it rfsim5g-oai-nr-ue2 ip a show oaitun_ue1 +``` +
+The output is similar to: + +```console +[...] + inet 12.1.1.4/24 brd 12.1.1.255 scope global oaitun_ue1 +[...] +``` +
+ +```bash +docker exec -it rfsim5g-oai-nr-ue ip a show oaitun_ue1 +``` +
+The output is similar to: + +```console +[...] + inet 12.1.1.3/24 brd 12.1.1.255 scope global oaitun_ue1 +[...] +``` +
+ + + +Also, note that each DU sees only one UE! At the CU-CP, you should see that +each DU has been associated to a different CU-UP, based on the NSSAI (`exact +NSSAI match`): +```bash +docker logs rfsim5g-oai-cucp | grep CU-U +``` + +
+The output is similar to: + +```console +[...] +18757.531423 [RRC] I selecting CU-UP ID 3586 based on exact NSSAI match (3:0xffffff) +18757.531434 [RRC] I UE 1 associating to CU-UP assoc_id 261 out of 3 CU-UPs +18758.171502 [RRC] I selecting CU-UP ID 3584 based on exact NSSAI match (1:0xffffff) +18758.171510 [RRC] I UE 2 associating to CU-UP assoc_id 260 out of 3 CU-UPs +18758.772320 [RRC] I selecting CU-UP ID 3585 based on exact NSSAI match (2:0xffffff) +18758.772327 [RRC] I UE 3 associating to CU-UP assoc_id 257 out of 3 CU-UPs +``` +
+ + +Also, each UE should be able to ping the core network. For instance, with UE 1: +```bash +docker exec -it rfsim5g-oai-nr-ue ping -c1 12.1.1.1 +``` +
+The output is similar to: + +```console +PING 12.1.1.1 (12.1.1.1) 56(84) bytes of data. +64 bytes from 12.1.1.1: icmp_seq=1 ttl=64 time=15.2 ms + +--- 12.1.1.1 ping statistics --- +1 packets transmitted, 1 received, 0% packet loss, time 0ms +rtt min/avg/max/mdev = 15.155/15.155/15.155/0.000 ms +``` +
+ + +Finally, undeploy the UEs (to give them time to do deregistration), and then +the rest of the network: +```bash +docker compose stop oai-nr-ue{,2,3} +docker compose down +``` 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 4eaa942824..adfdefbccf 100644 --- a/ci-scripts/yaml_files/5g_rfsimulator_e1/docker-compose.yaml +++ b/ci-scripts/yaml_files/5g_rfsimulator_e1/docker-compose.yaml @@ -5,7 +5,7 @@ services: image: oaisoftwarealliance/oai-nrf:v1.5.0 environment: - NRF_INTERFACE_NAME_FOR_SBI=eth0 - - TZ=Europe/Paris + - TZ=Europe/1 networks: core_net: ipv4_address: 192.168.71.130 @@ -13,10 +13,10 @@ services: container_name: "rfsim5g-mysql" 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 + - ../5g_f1_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql + - ../5g_f1_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh environment: - - TZ=Europe/Paris + - TZ=Europe/1 - MYSQL_DATABASE=oai_db - MYSQL_USER=test - MYSQL_PASSWORD=test @@ -33,7 +33,7 @@ services: container_name: "rfsim5g-oai-amf" image: oaisoftwarealliance/oai-amf:v1.5.0 environment: - - TZ=Europe/paris + - TZ=Europe/1 - MCC=208 - MNC=99 - REGION_ID=128 @@ -49,8 +49,10 @@ services: - PLMN_SUPPORT_MCC=208 - PLMN_SUPPORT_MNC=99 - PLMN_SUPPORT_TAC=0x0001 - # Only one slice is defined (1, 0xFFFFFF). + # Three slices are defined - SST_0=1 + - SST_1=2 + - SST_2=3 - AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0 # One single SMF instance @@ -80,7 +82,7 @@ services: container_name: "rfsim5g-oai-smf" image: oaisoftwarealliance/oai-smf:v1.5.0 environment: - - TZ=Europe/Paris + - TZ=Europe/1 - SMF_INTERFACE_NAME_FOR_N4=eth0 - SMF_INTERFACE_NAME_FOR_SBI=eth0 - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 @@ -101,6 +103,8 @@ services: - TYPE0=IPv4 - DNN_RANGE0=12.1.1.2 - 12.1.1.127 - NSSAI_SST0=1 + - NSSAI_SST1=2 + - NSSAI_SST2=3 - SESSION_AMBR_UL0=200Mbps - SESSION_AMBR_DL0=400Mbps - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1 @@ -115,7 +119,7 @@ services: container_name: "rfsim5g-oai-spgwu" image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 environment: - - TZ=Europe/Paris + - TZ=Europe/1 - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 - SGW_INTERFACE_NAME_FOR_SX=eth0 - PGW_INTERFACE_NAME_FOR_SGI=eth0 @@ -127,10 +131,16 @@ services: - UPF_FQDN_5G=oai-spgwu - NRF_IPV4_ADDRESS=192.168.71.130 - NRF_FQDN=oai-nrf - # Only one slice is defined (1, 0xFFFFFF) + # Three slices are defined - NSSAI_SST_0=1 - NSSAI_SD_0=0xffffff - DNN_0=oai + - NSSAI_SST_1=2 + - NSSAI_SD_1=0xffffff + - DNN_1=oai + - NSSAI_SST_2=3 + - NSSAI_SD_2=0xffffff + - DNN_2=oai depends_on: - oai-nrf - oai-smf @@ -143,26 +153,6 @@ services: networks: core_net: ipv4_address: 192.168.71.134 - traffic_net: - ipv4_address: 192.168.73.134 - - oai-ext-dn: - privileged: true - container_name: rfsim5g-oai-ext-dn - image: oaisoftwarealliance/trf-gen-cn5g:focal - entrypoint: /bin/bash -c \ - "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: - - oai-spgwu - networks: - traffic_net: - ipv4_address: 192.168.73.135 - healthcheck: - test: /bin/bash -c "ping -c 2 192.168.73.134" - interval: 10s - timeout: 5s - retries: 5 oai-cucp: image: oaisoftwarealliance/oai-gnb:develop @@ -170,14 +160,18 @@ services: container_name: rfsim5g-oai-cucp environment: USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time + --gNBs.[0].E1_INTERFACE.[0].ipv4_cucp 192.168.77.2 + --gNBs.[0].local_s_address 192.168.72.2 ASAN_OPTIONS: detect_leaks=0 depends_on: - - oai-ext-dn + - oai-spgwu networks: core_net: - ipv4_address: 192.168.71.140 - ran_net: - ipv4_address: 192.168.72.140 + ipv4_address: 192.168.71.150 + f1c_net: + ipv4_address: 192.168.72.2 + e1_net: + ipv4_address: 192.168.77.2 volumes: - ../../conf_files/gnb-cucp.sa.f1.conf:/opt/oai-gnb/etc/gnb.conf healthcheck: @@ -192,14 +186,82 @@ services: container_name: rfsim5g-oai-cuup environment: USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time + --gNBs.[0].E1_INTERFACE.[0].ipv4_cucp 192.168.77.2 + --gNBs.[0].E1_INTERFACE.[0].ipv4_cuup 192.168.77.3 + --gNBs.[0].local_s_address 192.168.73.2 + --gNBs.[0].remote_s_address 127.0.0.1 ASAN_OPTIONS: detect_leaks=0 depends_on: - oai-cucp networks: core_net: - ipv4_address: 192.168.71.141 - ran_net: - ipv4_address: 192.168.72.141 + ipv4_address: 192.168.71.161 + f1u_1_net: + ipv4_address: 192.168.73.2 + e1_net: + ipv4_address: 192.168.77.3 + volumes: + - ../../conf_files/gnb-cuup.sa.f1.conf:/opt/oai-gnb/etc/gnb.conf + healthcheck: + test: /bin/bash -c "pgrep nr-cuup" + interval: 10s + timeout: 5s + retries: 5 + + oai-cuup2: + image: oaisoftwarealliance/oai-nr-cuup:develop + privileged: true + container_name: rfsim5g-oai-cuup2 + environment: + USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time + --gNBs.[0].gNB_CU_UP_ID 0xe01 + --gNBs.[0].E1_INTERFACE.[0].ipv4_cucp 192.168.77.2 + --gNBs.[0].E1_INTERFACE.[0].ipv4_cuup 192.168.77.4 + --gNBs.[0].local_s_address 192.168.74.2 + --gNBs.[0].remote_s_address 127.0.0.1 + --gNBs.[0].NETWORK_INTERFACES.GNB_IPV4_ADDRESS_FOR_NGU 192.168.71.162 + --gNBs.[0].plmn_list.[0].snssaiList.[0].sst 2 + ASAN_OPTIONS: detect_leaks=0 + depends_on: + - oai-cucp + networks: + core_net: + ipv4_address: 192.168.71.162 + f1u_2_net: + ipv4_address: 192.168.74.2 + e1_net: + ipv4_address: 192.168.77.4 + volumes: + - ../../conf_files/gnb-cuup.sa.f1.conf:/opt/oai-gnb/etc/gnb.conf + healthcheck: + test: /bin/bash -c "pgrep nr-cuup" + interval: 10s + timeout: 5s + retries: 5 + + oai-cuup3: + image: oaisoftwarealliance/oai-nr-cuup:develop + privileged: true + container_name: rfsim5g-oai-cuup3 + environment: + USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time + --gNBs.[0].gNB_CU_UP_ID 0xe02 + --gNBs.[0].E1_INTERFACE.[0].ipv4_cucp 192.168.77.2 + --gNBs.[0].E1_INTERFACE.[0].ipv4_cuup 192.168.77.5 + --gNBs.[0].local_s_address 192.168.76.2 + --gNBs.[0].remote_s_address 127.0.0.1 + --gNBs.[0].NETWORK_INTERFACES.GNB_IPV4_ADDRESS_FOR_NGU 192.168.71.163 + --gNBs.[0].plmn_list.[0].snssaiList.[0].sst 3 + ASAN_OPTIONS: detect_leaks=0 + depends_on: + - oai-cucp + networks: + core_net: + ipv4_address: 192.168.71.163 + f1u_3_net: + ipv4_address: 192.168.76.2 + e1_net: + ipv4_address: 192.168.77.5 volumes: - ../../conf_files/gnb-cuup.sa.f1.conf:/opt/oai-gnb/etc/gnb.conf healthcheck: @@ -214,12 +276,81 @@ services: container_name: rfsim5g-oai-du environment: USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time + --MACRLCs.[0].local_n_address 192.168.73.3 + --MACRLCs.[0].remote_n_address 192.168.72.2 ASAN_OPTIONS: detect_leaks=0 + depends_on: + - oai-cucp + - oai-cuup networks: - ran_net: - ipv4_address: 192.168.72.142 + f1c_net: + ipv4_address: 192.168.72.3 + f1u_1_net: + ipv4_address: 192.168.73.3 + ue_net: + ipv4_address: 192.168.78.2 volumes: - - ../../conf_files/gnb-du.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf + - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf + healthcheck: + test: /bin/bash -c "pgrep nr-softmodem" + interval: 10s + timeout: 5s + retries: 5 + + oai-du2: + image: oaisoftwarealliance/oai-gnb:develop + privileged: true + container_name: rfsim5g-oai-du2 + environment: + USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time + --gNBs.[0].gNB_DU_ID 0xe01 + --gNBs.[0].nr_cellid 87654321 + --gNBs.[0].servingCellConfigCommon.[0].physCellId 1 + --MACRLCs.[0].local_n_address 192.168.74.3 + --MACRLCs.[0].remote_n_address 192.168.72.2 + ASAN_OPTIONS: detect_leaks=0 + depends_on: + - oai-cucp + - oai-cuup2 + networks: + f1c_net: + ipv4_address: 192.168.72.4 + f1u_2_net: + ipv4_address: 192.168.74.3 + ue_net: + ipv4_address: 192.168.78.3 + volumes: + - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf + healthcheck: + test: /bin/bash -c "pgrep nr-softmodem" + interval: 10s + timeout: 5s + retries: 5 + + oai-du3: + image: oaisoftwarealliance/oai-gnb:develop + privileged: true + container_name: rfsim5g-oai-du3 + environment: + USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time + --gNBs.[0].gNB_DU_ID 0xe02 + --gNBs.[0].nr_cellid 11111111 + --gNBs.[0].servingCellConfigCommon.[0].physCellId 2 + --MACRLCs.[0].local_n_address 192.168.76.3 + --MACRLCs.[0].remote_n_address 192.168.72.2 + ASAN_OPTIONS: detect_leaks=0 + depends_on: + - oai-cucp + - oai-cuup3 + networks: + f1c_net: + ipv4_address: 192.168.72.5 + f1u_3_net: + ipv4_address: 192.168.76.3 + ue_net: + ipv4_address: 192.168.78.4 + volumes: + - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf healthcheck: test: /bin/bash -c "pgrep nr-softmodem" interval: 10s @@ -231,13 +362,62 @@ services: privileged: true container_name: rfsim5g-oai-nr-ue environment: - USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 106 --numerology 1 -C 3619200000 --rfsimulator.serveraddr 192.168.72.142 --log_config.global_log_options level,nocolor,time + USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time + -r 106 --numerology 1 -C 3619200000 + --uicc0.imsi 208990100001100 + --rfsimulator.serveraddr 192.168.78.2 ASAN_OPTIONS: detect_leaks=0 depends_on: - oai-du networks: - ran_net: - ipv4_address: 192.168.72.150 + ue_net: + ipv4_address: 192.168.78.5 + volumes: + - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf + healthcheck: + test: /bin/bash -c "pgrep nr-uesoftmodem" + interval: 10s + timeout: 5s + retries: 5 + + oai-nr-ue2: + image: oaisoftwarealliance/oai-nr-ue:develop + privileged: true + container_name: rfsim5g-oai-nr-ue2 + environment: + USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time + -r 106 --numerology 1 -C 3619200000 + --uicc0.imsi 208990100001101 --uicc0.nssai_sst 2 + --rfsimulator.serveraddr 192.168.78.3 + ASAN_OPTIONS: detect_leaks=0 + depends_on: + - oai-du2 + networks: + ue_net: + ipv4_address: 192.168.78.6 + volumes: + - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf + healthcheck: + test: /bin/bash -c "pgrep nr-uesoftmodem" + interval: 10s + timeout: 5s + retries: 5 + + oai-nr-ue3: + image: oaisoftwarealliance/oai-nr-ue:develop + privileged: true + container_name: rfsim5g-oai-nr-ue3 + environment: + USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time + -r 106 --numerology 1 -C 3619200000 + --uicc0.imsi 208990100001102 --uicc0.nssai_sst 3 + --rfsimulator.serveraddr 192.168.78.4 + ASAN_OPTIONS: detect_leaks=0 + depends_on: + - oai-du3 + networks: + ue_net: + ipv4_address: 192.168.78.7 volumes: - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf healthcheck: @@ -255,19 +435,51 @@ networks: - subnet: 192.168.71.128/26 driver_opts: com.docker.network.bridge.name: "rfsim5g-core" - ran_net: + f1c_net: driver: bridge - name: rfsim5g-oai-ran-net + name: rfsim5g-oai-f1c-net ipam: config: - - subnet: 192.168.72.128/26 + - subnet: 192.168.72.0/28 driver_opts: - com.docker.network.bridge.name: "rfsim5g-ran" - traffic_net: + com.docker.network.bridge.name: "rfsim5g-f1c" + f1u_1_net: driver: bridge - name: rfsim5g-oai-traffic_net-net + name: rfsim5g-oai-f1u-1-net ipam: config: - - subnet: 192.168.73.128/26 + - subnet: 192.168.73.0/28 driver_opts: - com.docker.network.bridge.name: "rfsim5g-traffic" + com.docker.network.bridge.name: "rfsim5g-f1u_1" + f1u_2_net: + driver: bridge + name: rfsim5g-oai-f1u-2-net + ipam: + config: + - subnet: 192.168.74.0/28 + driver_opts: + com.docker.network.bridge.name: "rfsim5g-f1u_2" + f1u_3_net: + driver: bridge + name: rfsim5g-oai-f1u-3-net + ipam: + config: + - subnet: 192.168.76.0/28 + driver_opts: + com.docker.network.bridge.name: "rfsim5g-f1u_3" + e1_net: + driver: bridge + name: rfsim5g-oai-e1-net + ipam: + config: + - subnet: 192.168.77.1/28 + driver_opts: + com.docker.network.bridge.name: "rfsim5g-e1" + ue_net: + driver: bridge + name: rfsim5g-oai-ue-net + ipam: + config: + - subnet: 192.168.78.1/28 + driver_opts: + com.docker.network.bridge.name: "rfsim5g-ue" diff --git a/doc/F1-design.md b/doc/F1-design.md index 916c1a2edf..ee45128ebb 100644 --- a/doc/F1-design.md +++ b/doc/F1-design.md @@ -152,9 +152,11 @@ In the CU file: In the DU file: - Set `MACRLCs.[0].tr_n_preference` to `f1` - Update `MACRLCs.[0].local_n_address` (local north-bound address of the DU) to - `127.0.0.4` + `127.0.0.4`. This IP address is used to bind the GTP socket (F1-U user plane + traffic). - Update `MACRLCs.[].remote_n_address` (remote north-bound address of the CU) - to `127.0.0.3` + to `127.0.0.3`. This IP address is used as the CU destination IP address for + F1AP communication. Note: all `local_*_if_name` parameters are ignored. diff --git a/openair2/F1AP/f1ap_cu_ue_context_management.c b/openair2/F1AP/f1ap_cu_ue_context_management.c index 08090a1395..cc29a92ebb 100644 --- a/openair2/F1AP/f1ap_cu_ue_context_management.c +++ b/openair2/F1AP/f1ap_cu_ue_context_management.c @@ -1227,7 +1227,7 @@ int CU_send_UE_CONTEXT_MODIFICATION_REQUEST(sctp_assoc_t assoc_id, f1ap_ue_conte else{ /* 12.1.2 DRB_Information */ - f1ap_drb_information_t *drb_info_in = &f1ap_ue_context_modification_req->drbs_to_be_setup->drb_info; + f1ap_drb_information_t *drb_info_in = &f1ap_ue_context_modification_req->drbs_to_be_setup[i].drb_info; drbs_toBeSetupMod_item->qoSInformation.present = F1AP_QoSInformation_PR_choice_extension; F1AP_QoSInformation_ExtIEs_t *ie = (F1AP_QoSInformation_ExtIEs_t *)calloc(1, sizeof(*ie)); ie->id = F1AP_ProtocolIE_ID_id_DRB_Information; diff --git a/openair2/F1AP/f1ap_du_task.c b/openair2/F1AP/f1ap_du_task.c index 7ba479e1f9..d823a35092 100644 --- a/openair2/F1AP/f1ap_du_task.c +++ b/openair2/F1AP/f1ap_du_task.c @@ -54,8 +54,6 @@ void du_task_send_sctp_association_req(instance_t instance, f1ap_net_config_t *n sctp_new_association_req_p->out_streams = 2; //du_inst->sctp_out_streams; // remote memcpy(&sctp_new_association_req_p->remote_address, &nc->CU_f1_ip_address, sizeof(nc->CU_f1_ip_address)); - // local - memcpy(&sctp_new_association_req_p->local_address, &nc->DU_f1_ip_address, sizeof(nc->DU_f1_ip_address)); // du_f1ap_register_to_sctp itti_send_msg_to_task(TASK_SCTP, instance, message_p); } diff --git a/openair2/F1AP/f1ap_du_ue_context_management.c b/openair2/F1AP/f1ap_du_ue_context_management.c index cc0214a47d..e306463b66 100644 --- a/openair2/F1AP/f1ap_du_ue_context_management.c +++ b/openair2/F1AP/f1ap_du_ue_context_management.c @@ -555,7 +555,7 @@ int DU_send_UE_CONTEXT_SETUP_FAILURE(sctp_assoc_t assoc_id) int DU_send_UE_CONTEXT_RELEASE_REQUEST(sctp_assoc_t assoc_id, f1ap_ue_context_release_req_t *req) { - F1AP_F1AP_PDU_t pdu; + F1AP_F1AP_PDU_t pdu = {0}; F1AP_UEContextReleaseRequest_t *out; uint8_t *buffer=NULL; uint32_t len=0; diff --git a/openair2/F1AP/f1ap_encoder.c b/openair2/F1AP/f1ap_encoder.c index b249f23cfe..870dfd73fc 100644 --- a/openair2/F1AP/f1ap_encoder.c +++ b/openair2/F1AP/f1ap_encoder.c @@ -21,13 +21,6 @@ /*! \file f1ap_encoder.c * \brief f1ap pdu encode procedures - * \author EURECOM/NTUST - * \date 2018 - * \version 0.1 - * \company Eurecom - * \email: navid.nikaein@eurecom.fr, bing-kai.hong@eurecom.fr - * \note - * \warning */ #include "f1ap_common.h" @@ -66,282 +59,3 @@ int f1ap_encode_pdu(F1AP_F1AP_PDU_t *pdu, uint8_t **buffer, uint32_t *length) { *length = encoded; return encoded; } - -/* -static inline -int f1ap_encode_initiating(f1ap_message *f1ap_message_p, - uint8_t **buffer, uint32_t *len) -{ - int ret = -1; - MessageDef *message_p; - char *message_string = NULL; - size_t message_string_size; - MessagesIds message_id; - - DevAssert(f1ap_message_p != NULL); - - message_string = calloc(10000, sizeof(char)); - - f1ap_string_total_size = 0; - - switch(f1ap_message_p->procedureCode) { - case F1ap_ProcedureCode_id_F1Setup: - ret = f1ap_encode_f1_setup_request( - &f1ap_message_p->msg.f1ap_F1SetupRequestIEs, buffer, len); - //f1ap_xer_print_f1ap_f1setuprequest(f1ap_xer__print2sp, message_string, f1ap_message_p); - message_id = F1AP_F1_SETUP_LOG; - break; - - case F1ap_ProcedureCode_id_UEContextReleaseRequest: - ret = f1ap_encode_ue_context_release_request( - &f1ap_message_p->msg.f1ap_UEContextReleaseRequestIEs, buffer, len); - //f1ap_xer_print_f1ap_uecontextreleaserequest(f1ap_xer__print2sp, - // message_string, f1ap_message_p); - message_id = F1AP_UE_CONTEXT_RELEASE_REQ_LOG; - break; - - - default: - F1AP_DEBUG("Unknown procedure ID (%d) for initiating message\n", - (int)f1ap_message_p->procedureCode); - return ret; - break; - } - - message_string_size = strlen(message_string); - - message_p = itti_alloc_new_message_sized(TASK_F1AP, message_id, message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.f1ap_f1_setup_log.size = message_string_size; - memcpy(&message_p->ittiMsg.f1ap_f1_setup_log.text, message_string, message_string_size); - - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - - free(message_string); - - return ret; -} - -static inline -int f1ap_encode_successfull_outcome(f1ap_message *f1ap_message_p, - uint8_t **buffer, uint32_t *len) -{ - int ret = -1; - MessageDef *message_p; - char *message_string = NULL; - size_t message_string_size; - MessagesIds message_id; - - DevAssert(f1ap_message_p != NULL); - - message_string = calloc(10000, sizeof(char)); - - f1ap_string_total_size = 0; - message_string_size = strlen(message_string); - - - switch(f1ap_message_p->procedureCode) { - case F1ap_ProcedureCode_id_InitialContextSetup: - ret = f1ap_encode_initial_context_setup_response( - &f1ap_message_p->msg.f1ap_InitialContextSetupResponseIEs, buffer, len); - - f1ap_xer_print_f1ap_initialcontextsetupresponse(f1ap_xer__print2sp, message_string, f1ap_message_p); - message_id = F1AP_INITIAL_CONTEXT_SETUP_LOG; - message_p = itti_alloc_new_message_sized(TASK_F1AP, message_id, message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.f1ap_initial_context_setup_log.size = message_string_size; - memcpy(&message_p->ittiMsg.f1ap_initial_context_setup_log.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - free(message_string); - break; - - case F1ap_ProcedureCode_id_UEContextRelease: - ret = f1ap_encode_ue_context_release_complete( - &f1ap_message_p->msg.f1ap_UEContextReleaseCompleteIEs, buffer, len); - f1ap_xer_print_f1ap_uecontextreleasecomplete(f1ap_xer__print2sp, message_string, f1ap_message_p); - message_id = F1AP_UE_CONTEXT_RELEASE_COMPLETE_LOG; - message_p = itti_alloc_new_message_sized(TASK_F1AP, message_id, message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.f1ap_ue_context_release_complete_log.size = message_string_size; - memcpy(&message_p->ittiMsg.f1ap_ue_context_release_complete_log.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - free(message_string); - break; - - default: - F1AP_WARN("Unknown procedure ID (%d) for successfull outcome message\n", - (int)f1ap_message_p->procedureCode); - return ret; - break; - } - - - return ret; -} - -static inline -int f1ap_encode_unsuccessfull_outcome(f1ap_message *f1ap_message_p, - uint8_t **buffer, uint32_t *len) -{ - int ret = -1; - MessageDef *message_p; - char *message_string = NULL; - size_t message_string_size; - MessagesIds message_id; - - DevAssert(f1ap_message_p != NULL); - - message_string = calloc(10000, sizeof(char)); - - f1ap_string_total_size = 0; - - switch(f1ap_message_p->procedureCode) { - case F1ap_ProcedureCode_id_InitialContextSetup: - // ret = f1ap_encode_f1ap_initialcontextsetupfailureies( - // &f1ap_message_p->ittiMsg.f1ap_InitialContextSetupFailureIEs, buffer, len); - f1ap_xer_print_f1ap_initialcontextsetupfailure(f1ap_xer__print2sp, message_string, f1ap_message_p); - message_id = F1AP_INITIAL_CONTEXT_SETUP_LOG; - break; - - default: - F1AP_DEBUG("Unknown procedure ID (%d) for unsuccessfull outcome message\n", - (int)f1ap_message_p->procedureCode); - return ret; - break; - } - - message_string_size = strlen(message_string); - - message_p = itti_alloc_new_message_sized(TASK_F1AP, message_id, message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.f1ap_initial_context_setup_log.size = message_string_size; - memcpy(&message_p->ittiMsg.f1ap_initial_context_setup_log.text, message_string, message_string_size); - - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - - free(message_string); - - return ret; -} - -static inline -int f1ap_encode_f1_setup_request( - F1ap_F1SetupRequestIEs_t *f1SetupRequestIEs, - uint8_t **buffer, - uint32_t *length) -{ - F1ap_F1SetupRequest_t f1SetupRequest; - F1ap_F1SetupRequest_t *f1SetupRequest_p = &f1SetupRequest; - - memset((void *)f1SetupRequest_p, 0, sizeof(f1SetupRequest)); - - if (f1ap_encode_f1ap_f1setuprequesties(f1SetupRequest_p, f1SetupRequestIEs) < 0) { - return -1; - } - - return f1ap_generate_initiating_message(buffer, - length, - F1ap_ProcedureCode_id_F1Setup, - F1ap_Criticality_reject, - &asn_DEF_F1ap_F1SetupRequest, - f1SetupRequest_p); -} - -static inline -int f1ap_encode_trace_failure( - F1ap_TraceFailureIndicationIEs_t *trace_failure_ies_p, - uint8_t **buffer, - uint32_t *length) -{ - F1ap_TraceFailureIndication_t trace_failure; - F1ap_TraceFailureIndication_t *trace_failure_p = &trace_failure; - - memset((void *)trace_failure_p, 0, sizeof(trace_failure)); - - if (f1ap_encode_f1ap_tracefailureindicationies( - trace_failure_p, trace_failure_ies_p) < 0) { - return -1; - } - - return f1ap_generate_initiating_message(buffer, - length, - F1ap_ProcedureCode_id_TraceFailureIndication, - F1ap_Criticality_reject, - &asn_DEF_F1ap_TraceFailureIndication, - trace_failure_p); -} - -static inline -int f1ap_encode_initial_context_setup_response( - F1ap_InitialContextSetupResponseIEs_t *initialContextSetupResponseIEs, - uint8_t **buffer, - uint32_t *length) -{ - F1ap_InitialContextSetupResponse_t initial_context_setup_response; - F1ap_InitialContextSetupResponse_t *initial_context_setup_response_p = - &initial_context_setup_response; - - memset((void *)initial_context_setup_response_p, 0, - sizeof(initial_context_setup_response)); - - if (f1ap_encode_f1ap_initialcontextsetupresponseies( - initial_context_setup_response_p, initialContextSetupResponseIEs) < 0) { - return -1; - } - - return f1ap_generate_successfull_outcome(buffer, - length, - F1ap_ProcedureCode_id_InitialContextSetup, - F1ap_Criticality_reject, - &asn_DEF_F1ap_InitialContextSetupResponse, - initial_context_setup_response_p); -} - -static inline -int f1ap_encode_ue_context_release_complete( - F1ap_UEContextReleaseCompleteIEs_t *f1ap_UEContextReleaseCompleteIEs, - uint8_t **buffer, - uint32_t *length) -{ - F1ap_UEContextReleaseComplete_t ue_context_release_complete; - F1ap_UEContextReleaseComplete_t *ue_context_release_complete_p = - &ue_context_release_complete; - - memset((void *)ue_context_release_complete_p, 0, - sizeof(ue_context_release_complete)); - - if (f1ap_encode_f1ap_uecontextreleasecompleteies( - ue_context_release_complete_p, f1ap_UEContextReleaseCompleteIEs) < 0) { - return -1; - } - - return f1ap_generate_successfull_outcome(buffer, - length, - F1ap_ProcedureCode_id_UEContextRelease, - F1ap_Criticality_reject, - &asn_DEF_F1ap_UEContextReleaseComplete, - ue_context_release_complete_p); -} - -static inline -int f1ap_encode_ue_context_release_request( - F1ap_UEContextReleaseRequestIEs_t *f1ap_UEContextReleaseRequestIEs, - uint8_t **buffer, - uint32_t *length) -{ - F1ap_UEContextReleaseRequest_t ue_context_release_request; - F1ap_UEContextReleaseRequest_t *ue_context_release_request_p = - &ue_context_release_request; - - memset((void *)ue_context_release_request_p, 0, - sizeof(ue_context_release_request)); - - if (f1ap_encode_f1ap_uecontextreleaserequesties( - ue_context_release_request_p, f1ap_UEContextReleaseRequestIEs) < 0) { - return -1; - } - - return f1ap_generate_initiating_message(buffer, - length, - F1ap_ProcedureCode_id_UEContextReleaseRequest, - F1ap_Criticality_reject, - &asn_DEF_F1ap_UEContextReleaseRequest, - ue_context_release_request_p); -} -*/ diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c index 1a5439e292..2022f46a5b 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c @@ -3097,6 +3097,7 @@ void nr_mac_check_ul_failure(const gNB_MAC_INST *nrmac, int rnti, NR_UE_sched_ct /* to trigger only once: trigger when ul_failure_timer == 1, but timer will * stop at 0 and we wait for a UE release command from upper layers */ if (sched_ctrl->ul_failure_timer == 1) { + LOG_W(MAC, "request release after UL failure timer expiry\n"); f1_ue_data_t ue_data = du_get_f1_ue_data(rnti); f1ap_ue_context_release_req_t request = { .gNB_CU_ue_id = ue_data.secondary_ue, diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index b797af80a7..fe51b6c54e 100644 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -1904,6 +1904,10 @@ static void rrc_CU_process_ue_context_release_complete(MessageDef *msg_p) } gNB_RRC_UE_t *UE = &ue_context_p->ue_context; + /* we call nr_pdcp_remove_UE() in the handler of E1 bearer release, but if we + * are in E1, we also need to free the UE in the CU-CP, so call it twice to + * cover all cases */ + nr_pdcp_remove_UE(UE->rrc_ue_id); rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_COMPLETE(instance, UE->rrc_ue_id); LOG_I(NR_RRC, "removed UE CU UE ID %u/RNTI %04x \n", UE->rrc_ue_id, UE->rnti); rrc_delete_ue_data(UE); @@ -2089,6 +2093,7 @@ void rrc_gNB_process_e1_bearer_context_setup_resp(e1ap_bearer_setup_resp_t *resp /* pass QoS info to MAC */ int nb_qos_flows = drb_config->numQosFlowSetup; + AssertFatal(nb_qos_flows > 0, "must map at least one flow to a DRB\n"); drbs[i].drb_info.flows_to_be_setup_length = nb_qos_flows; drbs[i].drb_info.flows_mapped_to_drb = (f1ap_flows_mapped_to_drb_t *)calloc(nb_qos_flows, sizeof(f1ap_flows_mapped_to_drb_t)); AssertFatal(drbs[i].drb_info.flows_mapped_to_drb, "could not allocate memory\n"); @@ -2107,6 +2112,9 @@ void rrc_gNB_process_e1_bearer_context_setup_resp(e1ap_bearer_setup_resp_t *resp qos_char->non_dynamic.qos_priority_level = in_qos_char->qos_priority; } } + /* the DRB QoS parameters: we just reuse the ones from the first flow */ + drbs[i].drb_info.drb_qos = drbs[i].drb_info.flows_mapped_to_drb[0].qos_params; + /* pass NSSAI info to MAC */ drbs[i].nssai = RRC_pduSession->param.nssai; } diff --git a/openair2/RRC/NR/rrc_gNB_NGAP.c b/openair2/RRC/NR/rrc_gNB_NGAP.c index b659ccc2f8..00497d6d1b 100644 --- a/openair2/RRC/NR/rrc_gNB_NGAP.c +++ b/openair2/RRC/NR/rrc_gNB_NGAP.c @@ -788,9 +788,7 @@ void rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(MessageDef *msg_p, instance_t ins pdu_session_to_setup_t *pdu = bearer_req.pduSession + bearer_req.numPDUSessions; bearer_req.numPDUSessions++; pdu->sessionId = session->pdusession_id; - nssai_t *nssai = &msg->allowed_nssai[i]; - pdu->nssai.sst = nssai->sst; - pdu->nssai.sd = nssai->sd; + pdu->nssai = msg->pdusession_setup_params[i].nssai; if (cuup_nssai.sst == 0) cuup_nssai = pdu->nssai; /* for CU-UP selection below */ pdu->integrityProtectionIndication = rrc->security.do_drb_integrity ? E1AP_IntegrityProtectionIndication_required : E1AP_IntegrityProtectionIndication_not_needed; diff --git a/openair2/RRC/NR/rrc_gNB_cuup.c b/openair2/RRC/NR/rrc_gNB_cuup.c index 3ab6dfe7bb..6c5ea8aef5 100644 --- a/openair2/RRC/NR/rrc_gNB_cuup.c +++ b/openair2/RRC/NR/rrc_gNB_cuup.c @@ -46,7 +46,7 @@ static const nr_rrc_cuup_container_t *select_cuup_slice(const struct rrc_cuup_tr for (int s = 0; s < sr->plmn[p].supported_slices; ++s) { e1ap_nssai_t *nssai = &sr->plmn[p].slice[s]; if (nssai->sst == sst && nssai->sd == sd) { - LOG_I(RRC, "selecting CU-UP ID %ld based on exact NSSAI match (%d:0x%06x)\n", sr->gNB_cu_up_id, sst, sd); + LOG_A(RRC, "selecting CU-UP ID %ld based on exact NSSAI match (%d:0x%06x)\n", sr->gNB_cu_up_id, sst, sd); return cuup; /* exact match */ } else if (nssai->sst == sst && second_best_match == NULL) { LOG_I(RRC, "second best match: CU-UP ID %ld matches SST %d\n", sr->gNB_cu_up_id, sst); @@ -66,7 +66,7 @@ static const nr_rrc_cuup_container_t *select_cuup_round_robin(size_t n_t, const nr_rrc_cuup_container_t *cuup = NULL; RB_FOREACH(cuup, rrc_cuup_tree, (struct rrc_cuup_tree *)&t) { if (m == 0) { - LOG_I(RRC, "round-robin match: select CU-UP ID %ld (no NSSAI match)\n", cuup->setup_req->gNB_cu_up_id); + LOG_W(RRC, "round-robin match: select CU-UP ID %ld (no NSSAI match)\n", cuup->setup_req->gNB_cu_up_id); return cuup; } m--; diff --git a/openair3/ocp-gtpu/gtp_itf.cpp b/openair3/ocp-gtpu/gtp_itf.cpp index 904ca6548c..9fb8f159fe 100644 --- a/openair3/ocp-gtpu/gtp_itf.cpp +++ b/openair3/ocp-gtpu/gtp_itf.cpp @@ -940,7 +940,7 @@ static int Gtpv1uHandleError(int h, uint32_t msgBufLen, uint16_t peerPort, uint32_t peerIp) { - LOG_E(GTPU, "Handle error to be dev\n"); + LOG_E(GTPU, "Received GTP error indication (error handling is missing/not implemented)\n"); int rc = GTPNOK; return rc; } diff --git a/radio/rfsimulator/simulator.c b/radio/rfsimulator/simulator.c index 1111e48e6b..5dea88edd5 100644 --- a/radio/rfsimulator/simulator.c +++ b/radio/rfsimulator/simulator.c @@ -314,7 +314,7 @@ static void fullwrite(int fd, void *_buf, ssize_t count, rfsimulator_state_t *t) continue; if (errno == EAGAIN) { - LOG_E(HW, "write() failed, errno(%d)\n", errno); + LOG_D(HW, "write() failed, errno(%d)\n", errno); usleep(250); continue; } else