Commit 47c06934 authored by Robert Schmidt's avatar Robert Schmidt

Merge branch 'integration_2024_w03' into 'develop'

Integration: 2024.w03

See merge request oai/openairinterface5g!2524

* !2519 fix(build): migrating rocky dockerfiles to Rocky-linux-9 to ease maintenance
* !2508 NR UE PDCP RLC indexing
* !2511 chore(ci): updating 5G RF / L2 simulator scenarios to release v2.0
* !2486 E2 agent: Use FlexRIC release v2 and add to CU-UP
* !2453 Liteon DU integration
* !2516 remove ASAN_OPTIONS: detect_leaks=0 from SA rfsim CI tests
* !2199 NR precoding matrix generation at MAC
parents 2b717d49 1d6457ee
...@@ -300,8 +300,8 @@ set(E2AP_VERSION "E2AP_V2" CACHE STRING "E2AP version") ...@@ -300,8 +300,8 @@ set(E2AP_VERSION "E2AP_V2" CACHE STRING "E2AP version")
set_property(CACHE E2AP_VERSION PROPERTY STRINGS "E2AP_V1" "E2AP_V2" "E2AP_V3") set_property(CACHE E2AP_VERSION PROPERTY STRINGS "E2AP_V1" "E2AP_V2" "E2AP_V3")
message(STATUS "Selected E2AP_VERSION: ${E2AP_VERSION}") message(STATUS "Selected E2AP_VERSION: ${E2AP_VERSION}")
set(KPM_VERSION "KPM_V2" CACHE STRING "The KPM SM version to use") set(KPM_VERSION "KPM_V2_03" CACHE STRING "The KPM SM version to use")
set_property(CACHE KPM_VERSION PROPERTY STRINGS "KPM_V2" "KPM_V3") set_property(CACHE KPM_VERSION PROPERTY STRINGS "KPM_V2_03" "KPM_V3_00")
message(STATUS "Selected KPM Version: ${KPM_VERSION}") message(STATUS "Selected KPM Version: ${KPM_VERSION}")
...@@ -1433,7 +1433,7 @@ target_link_libraries(L2 PRIVATE x2ap s1ap lte_rrc m2ap) ...@@ -1433,7 +1433,7 @@ target_link_libraries(L2 PRIVATE x2ap s1ap lte_rrc m2ap)
target_link_libraries(L2 PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs) target_link_libraries(L2 PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs)
if(E2_AGENT) if(E2_AGENT)
target_link_libraries(L2 PUBLIC e2_agent e2_ran_func) target_link_libraries(L2 PUBLIC e2_agent e2_agent_arg e2_ran_func_du_cucp_cuup)
target_compile_definitions(L2 PRIVATE E2_AGENT) target_compile_definitions(L2 PRIVATE E2_AGENT)
target_compile_definitions(L2 PRIVATE ${E2AP_VERSION} ${KPM_VERSION}) target_compile_definitions(L2 PRIVATE ${E2AP_VERSION} ${KPM_VERSION})
endif() endif()
...@@ -1460,7 +1460,7 @@ target_link_libraries(e1_if PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs asn1_f1ap ...@@ -1460,7 +1460,7 @@ target_link_libraries(e1_if PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs asn1_f1ap
target_link_libraries(L2_NR PRIVATE f1ap x2ap s1ap ngap nr_rrc e1ap nr_rlc) target_link_libraries(L2_NR PRIVATE f1ap x2ap s1ap ngap nr_rrc e1ap nr_rlc)
if(E2_AGENT) if(E2_AGENT)
target_link_libraries(L2_NR PUBLIC e2_agent e2_ran_func) target_link_libraries(L2_NR PUBLIC e2_agent e2_agent_arg e2_ran_func_du_cucp_cuup)
target_compile_definitions(L2_NR PRIVATE ${E2AP_VERSION} ${KPM_VERSION}) target_compile_definitions(L2_NR PRIVATE ${E2AP_VERSION} ${KPM_VERSION})
target_compile_definitions(L2_NR PRIVATE E2_AGENT) target_compile_definitions(L2_NR PRIVATE E2_AGENT)
endif() endif()
...@@ -2113,6 +2113,10 @@ target_link_libraries(nr-cuup PRIVATE ...@@ -2113,6 +2113,10 @@ target_link_libraries(nr-cuup PRIVATE
GTPV1U e1ap f1ap SIMU_ETH GTPV1U e1ap f1ap SIMU_ETH
z sctp dl pthread shlib_loader ${T_LIB}) z sctp dl pthread shlib_loader ${T_LIB})
target_link_libraries(nr-cuup PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs) target_link_libraries(nr-cuup PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs)
if(E2_AGENT)
target_link_libraries(nr-cuup PRIVATE e2_agent e2_agent_arg e2_ran_func_cuup)
target_compile_definitions(nr-cuup PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
endif()
# nr-uesoftmodem is UE implementation # nr-uesoftmodem is UE implementation
####################################### #######################################
......
...@@ -46,8 +46,8 @@ ...@@ -46,8 +46,8 @@
<class>DeployGenObject</class> <class>DeployGenObject</class>
<desc>Deploy OAI 5G CoreNetwork</desc> <desc>Deploy OAI 5G CoreNetwork</desc>
<yaml_path>yaml_files/5g_rfsimulator_e1</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_e1</yaml_path>
<services>mysql oai-nrf oai-amf oai-smf oai-spgwu</services> <services>mysql oai-amf oai-smf oai-upf</services>
<nb_healthy>5</nb_healthy> <nb_healthy>4</nb_healthy>
</testCase> </testCase>
<testCase id="000022"> <testCase id="000022">
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
<desc>Deploy OAI 5G RAN RF sim SA (1 CU-CP, 3 CU-UPs, 3 DUs)</desc> <desc>Deploy OAI 5G RAN RF sim SA (1 CU-CP, 3 CU-UPs, 3 DUs)</desc>
<yaml_path>yaml_files/5g_rfsimulator_e1</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_e1</yaml_path>
<services>oai-cucp oai-cuup oai-cuup2 oai-cuup3 oai-du oai-du2 oai-du3</services> <services>oai-cucp oai-cuup oai-cuup2 oai-cuup3 oai-du oai-du2 oai-du3</services>
<nb_healthy>12</nb_healthy> <nb_healthy>11</nb_healthy>
</testCase> </testCase>
<testCase id="000023"> <testCase id="000023">
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
<desc>Deploy OAI 5G NR-UE RF sim SA</desc> <desc>Deploy OAI 5G NR-UE RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator_e1</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_e1</yaml_path>
<services>oai-nr-ue oai-nr-ue2 oai-nr-ue3</services> <services>oai-nr-ue oai-nr-ue2 oai-nr-ue3</services>
<nb_healthy>15</nb_healthy> <nb_healthy>14</nb_healthy>
</testCase> </testCase>
<testCase id="020021"> <testCase id="020021">
......
...@@ -47,8 +47,8 @@ ...@@ -47,8 +47,8 @@
<class>DeployGenObject</class> <class>DeployGenObject</class>
<desc>Deploy OAI 5G CoreNetwork</desc> <desc>Deploy OAI 5G CoreNetwork</desc>
<yaml_path>yaml_files/5g_f1_rfsimulator</yaml_path> <yaml_path>yaml_files/5g_f1_rfsimulator</yaml_path>
<services>mysql oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn</services> <services>mysql oai-amf oai-smf oai-upf oai-ext-dn</services>
<nb_healthy>6</nb_healthy> <nb_healthy>5</nb_healthy>
</testCase> </testCase>
<testCase id="000022"> <testCase id="000022">
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
<desc>Deploy OAI 5G CU+DU+UE RF sim SA</desc> <desc>Deploy OAI 5G CU+DU+UE RF sim SA</desc>
<yaml_path>yaml_files/5g_f1_rfsimulator</yaml_path> <yaml_path>yaml_files/5g_f1_rfsimulator</yaml_path>
<services>oai-cu oai-du oai-nr-ue</services> <services>oai-cu oai-du oai-nr-ue</services>
<nb_healthy>9</nb_healthy> <nb_healthy>8</nb_healthy>
</testCase> </testCase>
<testCase id="020021"> <testCase id="020021">
......
...@@ -59,8 +59,8 @@ ...@@ -59,8 +59,8 @@
<class>DeployGenObject</class> <class>DeployGenObject</class>
<desc>Deploy OAI 5G CoreNetwork</desc> <desc>Deploy OAI 5G CoreNetwork</desc>
<yaml_path>yaml_files/5g_fdd_rfsimulator</yaml_path> <yaml_path>yaml_files/5g_fdd_rfsimulator</yaml_path>
<services>oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn</services> <services>oai-amf oai-smf oai-upf oai-ext-dn</services>
<nb_healthy>6</nb_healthy> <nb_healthy>5</nb_healthy>
</testCase> </testCase>
<testCase id="000012"> <testCase id="000012">
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
<desc>Deploy OAI 5G gNB RF sim SA</desc> <desc>Deploy OAI 5G gNB RF sim SA</desc>
<yaml_path>yaml_files/5g_fdd_rfsimulator</yaml_path> <yaml_path>yaml_files/5g_fdd_rfsimulator</yaml_path>
<services>oai-gnb</services> <services>oai-gnb</services>
<nb_healthy>7</nb_healthy> <nb_healthy>6</nb_healthy>
</testCase> </testCase>
<testCase id="000013"> <testCase id="000013">
...@@ -76,7 +76,7 @@ ...@@ -76,7 +76,7 @@
<desc>Deploy OAI 5G NR-UE RF sim SA</desc> <desc>Deploy OAI 5G NR-UE RF sim SA</desc>
<yaml_path>yaml_files/5g_fdd_rfsimulator</yaml_path> <yaml_path>yaml_files/5g_fdd_rfsimulator</yaml_path>
<services>oai-nr-ue</services> <services>oai-nr-ue</services>
<nb_healthy>8</nb_healthy> <nb_healthy>7</nb_healthy>
</testCase> </testCase>
<testCase id="020011"> <testCase id="020011">
......
...@@ -60,8 +60,8 @@ ...@@ -60,8 +60,8 @@
<class>DeployGenObject</class> <class>DeployGenObject</class>
<desc>Deploy OAI 5G CoreNetwork</desc> <desc>Deploy OAI 5G CoreNetwork</desc>
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path> <yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
<services>oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn</services> <services>oai-amf oai-smf oai-upf oai-ext-dn</services>
<nb_healthy>6</nb_healthy> <nb_healthy>5</nb_healthy>
</testCase> </testCase>
<testCase id="000002"> <testCase id="000002">
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
<desc>Deploy OAI 5G gNB L2 sim SA</desc> <desc>Deploy OAI 5G gNB L2 sim SA</desc>
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path> <yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
<services>oai-gnb</services> <services>oai-gnb</services>
<nb_healthy>7</nb_healthy> <nb_healthy>6</nb_healthy>
</testCase> </testCase>
<testCase id="000003"> <testCase id="000003">
...@@ -77,7 +77,7 @@ ...@@ -77,7 +77,7 @@
<desc>Deploy OAI 5G NR-UE L2 sim SA and Proxy</desc> <desc>Deploy OAI 5G NR-UE L2 sim SA and Proxy</desc>
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path> <yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
<services>proxy oai-nr-ue0</services> <services>proxy oai-nr-ue0</services>
<nb_healthy>9</nb_healthy> <nb_healthy>8</nb_healthy>
</testCase> </testCase>
<testCase id="000004"> <testCase id="000004">
......
...@@ -65,8 +65,8 @@ ...@@ -65,8 +65,8 @@
<class>DeployGenObject</class> <class>DeployGenObject</class>
<desc>Deploy OAI 5G CoreNetwork</desc> <desc>Deploy OAI 5G CoreNetwork</desc>
<yaml_path>yaml_files/5g_rfsimulator</yaml_path> <yaml_path>yaml_files/5g_rfsimulator</yaml_path>
<services>mysql oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn</services> <services>mysql oai-amf oai-smf oai-upf oai-ext-dn</services>
<nb_healthy>6</nb_healthy> <nb_healthy>5</nb_healthy>
</testCase> </testCase>
<testCase id="000002"> <testCase id="000002">
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
<desc>Deploy OAI 5G gNB RF sim SA</desc> <desc>Deploy OAI 5G gNB RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator</yaml_path> <yaml_path>yaml_files/5g_rfsimulator</yaml_path>
<services>oai-gnb</services> <services>oai-gnb</services>
<nb_healthy>7</nb_healthy> <nb_healthy>6</nb_healthy>
</testCase> </testCase>
<testCase id="000003"> <testCase id="000003">
...@@ -82,7 +82,7 @@ ...@@ -82,7 +82,7 @@
<desc>Deploy OAI 5G NR-UE RF sim SA</desc> <desc>Deploy OAI 5G NR-UE RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator</yaml_path> <yaml_path>yaml_files/5g_rfsimulator</yaml_path>
<services>oai-nr-ue</services> <services>oai-nr-ue</services>
<nb_healthy>8</nb_healthy> <nb_healthy>7</nb_healthy>
</testCase> </testCase>
<testCase id="000004"> <testCase id="000004">
...@@ -90,7 +90,7 @@ ...@@ -90,7 +90,7 @@
<desc>Deploy Second OAI 5G NR-UE RF sim SA</desc> <desc>Deploy Second OAI 5G NR-UE RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator</yaml_path> <yaml_path>yaml_files/5g_rfsimulator</yaml_path>
<services>oai-nr-ue2</services> <services>oai-nr-ue2</services>
<nb_healthy>9</nb_healthy> <nb_healthy>8</nb_healthy>
</testCase> </testCase>
<testCase id="000005"> <testCase id="000005">
...@@ -98,7 +98,7 @@ ...@@ -98,7 +98,7 @@
<desc>Deploy OAI 5G NR-UEs (#3, #4, #5) RF sim SA</desc> <desc>Deploy OAI 5G NR-UEs (#3, #4, #5) RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator</yaml_path> <yaml_path>yaml_files/5g_rfsimulator</yaml_path>
<services>oai-nr-ue3 oai-nr-ue4 oai-nr-ue5</services> <services>oai-nr-ue3 oai-nr-ue4 oai-nr-ue5</services>
<nb_healthy>12</nb_healthy> <nb_healthy>11</nb_healthy>
</testCase> </testCase>
<testCase id="000006"> <testCase id="000006">
...@@ -106,7 +106,7 @@ ...@@ -106,7 +106,7 @@
<desc>Deploy OAI 5G NR-UEs (#6, #7, #8) RF sim SA</desc> <desc>Deploy OAI 5G NR-UEs (#6, #7, #8) RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator</yaml_path> <yaml_path>yaml_files/5g_rfsimulator</yaml_path>
<services>oai-nr-ue6 oai-nr-ue7 oai-nr-ue8</services> <services>oai-nr-ue6 oai-nr-ue7 oai-nr-ue8</services>
<nb_healthy>15</nb_healthy> <nb_healthy>14</nb_healthy>
</testCase> </testCase>
<testCase id="000007"> <testCase id="000007">
...@@ -114,7 +114,7 @@ ...@@ -114,7 +114,7 @@
<desc>Deploy OAI 5G NR-UEs (#9, #10) RF sim SA</desc> <desc>Deploy OAI 5G NR-UEs (#9, #10) RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator</yaml_path> <yaml_path>yaml_files/5g_rfsimulator</yaml_path>
<services>oai-nr-ue9 oai-nr-ue10</services> <services>oai-nr-ue9 oai-nr-ue10</services>
<nb_healthy>17</nb_healthy> <nb_healthy>16</nb_healthy>
</testCase> </testCase>
<testCase id="000008"> <testCase id="000008">
......
...@@ -59,8 +59,8 @@ ...@@ -59,8 +59,8 @@
<class>DeployGenObject</class> <class>DeployGenObject</class>
<desc>Deploy OAI 5G CoreNetwork</desc> <desc>Deploy OAI 5G CoreNetwork</desc>
<yaml_path>yaml_files/5g_rfsimulator_24prb</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_24prb</yaml_path>
<services>oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn</services> <services>oai-amf oai-smf oai-upf oai-ext-dn</services>
<nb_healthy>6</nb_healthy> <nb_healthy>5</nb_healthy>
</testCase> </testCase>
<testCase id="000002"> <testCase id="000002">
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
<desc>Deploy OAI 5G gNB RF sim SA</desc> <desc>Deploy OAI 5G gNB RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator_24prb</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_24prb</yaml_path>
<services>oai-gnb</services> <services>oai-gnb</services>
<nb_healthy>7</nb_healthy> <nb_healthy>6</nb_healthy>
</testCase> </testCase>
<testCase id="000003"> <testCase id="000003">
...@@ -76,7 +76,7 @@ ...@@ -76,7 +76,7 @@
<desc>Deploy OAI 5G NR-UE RF sim SA</desc> <desc>Deploy OAI 5G NR-UE RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator_24prb</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_24prb</yaml_path>
<services>oai-nr-ue</services> <services>oai-nr-ue</services>
<nb_healthy>8</nb_healthy> <nb_healthy>7</nb_healthy>
</testCase> </testCase>
<testCase id="020001"> <testCase id="020001">
......
...@@ -59,8 +59,8 @@ ...@@ -59,8 +59,8 @@
<class>DeployGenObject</class> <class>DeployGenObject</class>
<desc>Deploy OAI 5G CoreNetwork</desc> <desc>Deploy OAI 5G CoreNetwork</desc>
<yaml_path>yaml_files/5g_rfsimulator_2x2</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_2x2</yaml_path>
<services>oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn</services> <services>oai-amf oai-smf oai-upf oai-ext-dn</services>
<nb_healthy>6</nb_healthy> <nb_healthy>5</nb_healthy>
</testCase> </testCase>
<testCase id="000002"> <testCase id="000002">
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
<desc>Deploy OAI 5G gNB RF sim SA</desc> <desc>Deploy OAI 5G gNB RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator_2x2</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_2x2</yaml_path>
<services>oai-gnb</services> <services>oai-gnb</services>
<nb_healthy>7</nb_healthy> <nb_healthy>6</nb_healthy>
</testCase> </testCase>
<testCase id="000003"> <testCase id="000003">
...@@ -76,7 +76,7 @@ ...@@ -76,7 +76,7 @@
<desc>Deploy OAI 5G NR-UE RF sim SA</desc> <desc>Deploy OAI 5G NR-UE RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator_2x2</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_2x2</yaml_path>
<services>oai-nr-ue</services> <services>oai-nr-ue</services>
<nb_healthy>8</nb_healthy> <nb_healthy>7</nb_healthy>
</testCase> </testCase>
<testCase id="020001"> <testCase id="020001">
......
...@@ -59,8 +59,8 @@ ...@@ -59,8 +59,8 @@
<class>DeployGenObject</class> <class>DeployGenObject</class>
<desc>Deploy OAI 5G CoreNetwork</desc> <desc>Deploy OAI 5G CoreNetwork</desc>
<yaml_path>yaml_files/5g_rfsimulator_u0_25prb</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_u0_25prb</yaml_path>
<services>oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn</services> <services>oai-amf oai-smf oai-upf oai-ext-dn</services>
<nb_healthy>6</nb_healthy> <nb_healthy>5</nb_healthy>
</testCase> </testCase>
<testCase id="000002"> <testCase id="000002">
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
<desc>Deploy OAI 5G gNB RF sim SA</desc> <desc>Deploy OAI 5G gNB RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator_u0_25prb</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_u0_25prb</yaml_path>
<services>oai-gnb</services> <services>oai-gnb</services>
<nb_healthy>7</nb_healthy> <nb_healthy>6</nb_healthy>
</testCase> </testCase>
<testCase id="000003"> <testCase id="000003">
...@@ -76,7 +76,7 @@ ...@@ -76,7 +76,7 @@
<desc>Deploy OAI 5G NR-UE RF sim SA</desc> <desc>Deploy OAI 5G NR-UE RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator_u0_25prb</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_u0_25prb</yaml_path>
<services>oai-nr-ue</services> <services>oai-nr-ue</services>
<nb_healthy>8</nb_healthy> <nb_healthy>7</nb_healthy>
</testCase> </testCase>
<testCase id="020001"> <testCase id="020001">
......
#!/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
version: '3.8' version: '3.8'
services: services:
oai-nrf:
container_name: "rfsim5g-oai-nrf"
image: oaisoftwarealliance/oai-nrf:v1.5.0
environment:
- NRF_INTERFACE_NAME_FOR_SBI=eth0
- TZ=Europe/Paris
networks:
public_net:
ipv4_address: 192.168.71.130
mysql: mysql:
container_name: "rfsim5g-mysql" container_name: "rfsim5g-mysql"
image: mysql:8.0 image: mysql:8.0
volumes: volumes:
- ./oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
- ./mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh - ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- MYSQL_DATABASE=oai_db - MYSQL_DATABASE=oai_db
...@@ -31,118 +22,36 @@ services: ...@@ -31,118 +22,36 @@ services:
ipv4_address: 192.168.71.131 ipv4_address: 192.168.71.131
oai-amf: oai-amf:
container_name: "rfsim5g-oai-amf" container_name: "rfsim5g-oai-amf"
image: oaisoftwarealliance/oai-amf:v1.5.0 image: oaisoftwarealliance/oai-amf:v2.0.0
environment: environment:
- TZ=Europe/paris - TZ=Europe/paris
- MCC=208 volumes:
- MNC=99 - ../5g_rfsimulator_e1/mini_nonrf_config_3slices.yaml:/openair-amf/etc/config.yaml
- REGION_ID=128
- AMF_SET_ID=1
- SERVED_GUAMI_MCC_0=208
- SERVED_GUAMI_MNC_0=99
- SERVED_GUAMI_REGION_ID_0=128
- SERVED_GUAMI_AMF_SET_ID_0=1
- SERVED_GUAMI_MCC_1=460
- SERVED_GUAMI_MNC_1=11
- SERVED_GUAMI_REGION_ID_1=10
- SERVED_GUAMI_AMF_SET_ID_1=1
- PLMN_SUPPORT_MCC=208
- PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001
# 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
- SMF_INSTANCE_ID_0=1
- SMF_FQDN_0=oai-smf
- SMF_IPV4_ADDR_0=192.168.71.133
- SELECTED_0=true
# 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
# NF registration
- NRF_IPV4_ADDRESS=192.168.71.130
- NRF_FQDN=oai-nrf
- NF_REGISTRATION=yes
- SMF_SELECTION=yes
- USE_FQDN_DNS=yes
- USE_HTTP2=no
depends_on: depends_on:
- oai-nrf
- mysql - mysql
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.132 ipv4_address: 192.168.71.132
oai-smf: oai-smf:
container_name: "rfsim5g-oai-smf" container_name: "rfsim5g-oai-smf"
image: oaisoftwarealliance/oai-smf:v1.5.0 image: oaisoftwarealliance/oai-smf:v2.0.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- SMF_INTERFACE_NAME_FOR_N4=eth0 volumes:
- SMF_INTERFACE_NAME_FOR_SBI=eth0 - ../5g_rfsimulator_e1/mini_nonrf_config_3slices.yaml:/openair-smf/etc/config.yaml
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
- AMF_IPV4_ADDRESS=192.168.71.132
- AMF_FQDN=oai-amf
- UPF_IPV4_ADDRESS=192.168.71.134
- UPF_FQDN_0=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130
- 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_SST1=2
- NSSAI_SST2=3
- SESSION_AMBR_UL0=200Mbps
- SESSION_AMBR_DL0=400Mbps
- DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1
- ENABLE_USAGE_REPORTING=no
depends_on: depends_on:
- oai-nrf
- oai-amf - oai-amf
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.133 ipv4_address: 192.168.71.133
oai-spgwu: oai-upf:
container_name: "rfsim5g-oai-spgwu" container_name: "rfsim5g-oai-upf"
image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 image: oaisoftwarealliance/oai-upf:v2.0.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 volumes:
- SGW_INTERFACE_NAME_FOR_SX=eth0 - ../5g_rfsimulator_e1/mini_nonrf_config_3slices.yaml:/openair-upf/etc/config.yaml
- PGW_INTERFACE_NAME_FOR_SGI=eth0
- NETWORK_UE_NAT_OPTION=yes
- NETWORK_UE_IP=12.1.1.0/24
- ENABLE_5G_FEATURES=yes
- REGISTER_NRF=yes
- USE_FQDN_NRF=yes
- UPF_FQDN_5G=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130
- NRF_FQDN=oai-nrf
# 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: depends_on:
- oai-nrf
- oai-smf - oai-smf
cap_add: cap_add:
- NET_ADMIN - NET_ADMIN
...@@ -164,7 +73,7 @@ services: ...@@ -164,7 +73,7 @@ services:
"iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "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" "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
depends_on: depends_on:
- oai-spgwu - oai-upf
networks: networks:
traffic_net: traffic_net:
ipv4_address: 192.168.72.135 ipv4_address: 192.168.72.135
...@@ -223,7 +132,6 @@ services: ...@@ -223,7 +132,6 @@ services:
-r 106 --numerology 1 -C 3619200000 -r 106 --numerology 1 -C 3619200000
--uicc0.imsi 208990100001100 --uicc0.imsi 208990100001100
--rfsimulator.serveraddr 192.168.71.171 --rfsimulator.serveraddr 192.168.71.171
ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-du - oai-du
networks: networks:
...@@ -248,7 +156,7 @@ networks: ...@@ -248,7 +156,7 @@ networks:
com.docker.network.bridge.name: "rfsim5g-public" com.docker.network.bridge.name: "rfsim5g-public"
traffic_net: traffic_net:
driver: bridge driver: bridge
name: rfsim5g-oai-traffic_net-net name: rfsim5g-oai-traffic-net
ipam: ipam:
config: config:
- subnet: 192.168.72.128/26 - subnet: 192.168.72.128/26
......
#!/bin/bash
set -eo pipefail
if [ "$MYSQL_ROOT_PASSWORD" ] && [ -z "$MYSQL_USER" ] && [ -z "$MYSQL_PASSWORD" ]; then
echo >&2 'Healthcheck error: cannot determine root password (and MYSQL_USER and MYSQL_PASSWORD were not set)'
exit 0
fi
host="$(hostname --ip-address || echo '127.0.0.1')"
user="${MYSQL_USER:-root}"
export MYSQL_PWD="${MYSQL_PASSWORD:-$MYSQL_ROOT_PASSWORD}"
args=(
# force mysql to not use the local "mysqld.sock" (test "external" connectivity)
-h"$host"
-u"$user"
--silent
)
STATUS=0
if command -v mysqladmin &> /dev/null; then
if mysqladmin "${args[@]}" ping > /dev/null; then
database_check=$(mysql -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
else
if select="$(echo 'SELECT 1' | mysql "${args[@]}")" && [ "$select" = '1' ]; then
database_check=$(mysql -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
#!/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
This diff is collapsed.
#!/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
#!/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
#!/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
version: '3.8' version: '3.8'
services: services:
oai-nrf:
container_name: "rfsim5g-oai-nrf"
image: oaisoftwarealliance/oai-nrf:v1.5.0
environment:
- NRF_INTERFACE_NAME_FOR_SBI=eth0
- TZ=Europe/Paris
networks:
public_net:
ipv4_address: 192.168.71.130
mysql: mysql:
container_name: "rfsim5g-mysql" container_name: "rfsim5g-mysql"
image: mysql:8.0 image: mysql:8.0
volumes: volumes:
- ./oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
- ./mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh - ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- MYSQL_DATABASE=oai_db - MYSQL_DATABASE=oai_db
...@@ -31,108 +22,36 @@ services: ...@@ -31,108 +22,36 @@ services:
ipv4_address: 192.168.71.131 ipv4_address: 192.168.71.131
oai-amf: oai-amf:
container_name: "rfsim5g-oai-amf" container_name: "rfsim5g-oai-amf"
image: oaisoftwarealliance/oai-amf:v1.5.0 image: oaisoftwarealliance/oai-amf:v2.0.0
environment: environment:
- TZ=Europe/paris - TZ=Europe/paris
- MCC=208 volumes:
- MNC=99 - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-amf/etc/config.yaml
- REGION_ID=128
- AMF_SET_ID=1
- SERVED_GUAMI_MCC_0=208
- SERVED_GUAMI_MNC_0=99
- SERVED_GUAMI_REGION_ID_0=128
- SERVED_GUAMI_AMF_SET_ID_0=1
- SERVED_GUAMI_MCC_1=460
- SERVED_GUAMI_MNC_1=11
- SERVED_GUAMI_REGION_ID_1=10
- SERVED_GUAMI_AMF_SET_ID_1=1
- PLMN_SUPPORT_MCC=208
- PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001
# Only one slice is defined (1, 0xFFFFFF).
- SST_0=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=192.168.71.133
- SELECTED_0=true
# 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
# NF registration
- NRF_IPV4_ADDRESS=192.168.71.130
- NRF_FQDN=oai-nrf
- NF_REGISTRATION=yes
- SMF_SELECTION=yes
- USE_FQDN_DNS=yes
- USE_HTTP2=no
depends_on: depends_on:
- oai-nrf
- mysql - mysql
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.132 ipv4_address: 192.168.71.132
oai-smf: oai-smf:
container_name: "rfsim5g-oai-smf" container_name: "rfsim5g-oai-smf"
image: oaisoftwarealliance/oai-smf:v1.5.0 image: oaisoftwarealliance/oai-smf:v2.0.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- SMF_INTERFACE_NAME_FOR_N4=eth0 volumes:
- SMF_INTERFACE_NAME_FOR_SBI=eth0 - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-smf/etc/config.yaml
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
- AMF_IPV4_ADDRESS=192.168.71.132
- AMF_FQDN=oai-amf
- UPF_IPV4_ADDRESS=192.168.71.134
- UPF_FQDN_0=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130
- 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
- SESSION_AMBR_UL0=200Mbps
- SESSION_AMBR_DL0=400Mbps
- DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1
- ENABLE_USAGE_REPORTING=no
depends_on: depends_on:
- oai-nrf
- oai-amf - oai-amf
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.133 ipv4_address: 192.168.71.133
oai-spgwu: oai-upf:
container_name: "rfsim5g-oai-spgwu" container_name: "rfsim5g-oai-upf"
image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 image: oaisoftwarealliance/oai-upf:v2.0.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 volumes:
- SGW_INTERFACE_NAME_FOR_SX=eth0 - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-upf/etc/config.yaml
- PGW_INTERFACE_NAME_FOR_SGI=eth0
- NETWORK_UE_NAT_OPTION=yes
- NETWORK_UE_IP=12.1.1.0/24
- ENABLE_5G_FEATURES=yes
- REGISTER_NRF=yes
- USE_FQDN_NRF=yes
- UPF_FQDN_5G=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130
- NRF_FQDN=oai-nrf
# Only one slice is defined (1, 0xFFFFFF)
- NSSAI_SST_0=1
- NSSAI_SD_0=0xffffff
- DNN_0=oai
depends_on: depends_on:
- oai-nrf
- oai-smf - oai-smf
cap_add: cap_add:
- NET_ADMIN - NET_ADMIN
...@@ -153,7 +72,7 @@ services: ...@@ -153,7 +72,7 @@ services:
"iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "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" "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
depends_on: depends_on:
- oai-spgwu - oai-upf
networks: networks:
traffic_net: traffic_net:
ipv4_address: 192.168.72.135 ipv4_address: 192.168.72.135
...@@ -166,7 +85,7 @@ services: ...@@ -166,7 +85,7 @@ services:
image: oaisoftwarealliance/oai-gnb:develop image: oaisoftwarealliance/oai-gnb:develop
privileged: true privileged: true
container_name: rfsim5g-oai-gnb container_name: rfsim5g-oai-gnb
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa -E --rfsim --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --sa -E --rfsim --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0 ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
...@@ -187,7 +106,6 @@ services: ...@@ -187,7 +106,6 @@ services:
container_name: rfsim5g-oai-nr-ue container_name: rfsim5g-oai-nr-ue
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001100 --band 66 -C 2169090000 --CO -400000000 --ssb 378 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001100 --band 66 -C 2169090000 --CO -400000000 --ssb 378 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
......
#!/bin/bash
set -eo pipefail
if [ "$MYSQL_ROOT_PASSWORD" ] && [ -z "$MYSQL_USER" ] && [ -z "$MYSQL_PASSWORD" ]; then
echo >&2 'Healthcheck error: cannot determine root password (and MYSQL_USER and MYSQL_PASSWORD were not set)'
exit 0
fi
host="$(hostname --ip-address || echo '127.0.0.1')"
user="${MYSQL_USER:-root}"
export MYSQL_PWD="${MYSQL_PASSWORD:-$MYSQL_ROOT_PASSWORD}"
args=(
# force mysql to not use the local "mysqld.sock" (test "external" connectivity)
-h"$host"
-u"$user"
--silent
)
STATUS=0
if command -v mysqladmin &> /dev/null; then
if mysqladmin "${args[@]}" ping > /dev/null; then
database_check=$(mysql -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
else
if select="$(echo 'SELECT 1' | mysql "${args[@]}")" && [ "$select" = '1' ]; then
database_check=$(mysql -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
#!/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
This diff is collapsed.
#!/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
#!/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
...@@ -96,10 +96,9 @@ Now pull images. ...@@ -96,10 +96,9 @@ Now pull images.
```bash ```bash
docker pull mysql:8.0 docker pull mysql:8.0
docker pull oaisoftwarealliance/oai-amf:v1.5.0 docker pull oaisoftwarealliance/oai-amf:v2.0.0
docker pull oaisoftwarealliance/oai-nrf:v1.5.0 docker pull oaisoftwarealliance/oai-smf:v2.0.0
docker pull oaisoftwarealliance/oai-smf:v1.5.0 docker pull oaisoftwarealliance/oai-upf:v2.0.0
docker pull oaisoftwarealliance/oai-spgwu-tiny:v1.5.0
docker pull oaisoftwarealliance/trf-gen-cn5g:focal docker pull oaisoftwarealliance/trf-gen-cn5g:focal
docker pull oaisoftwarealliance/oai-gnb:develop docker pull oaisoftwarealliance/oai-gnb:develop
...@@ -139,14 +138,13 @@ sudo ifconfig lo: 127.0.0.2 netmask 255.0.0.0 up ...@@ -139,14 +138,13 @@ sudo ifconfig lo: 127.0.0.2 netmask 255.0.0.0 up
```bash ```bash
cd ci-scripts/yaml_files/5g_l2sim_tdd cd ci-scripts/yaml_files/5g_l2sim_tdd
docker-compose up -d mysql oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn docker-compose up -d mysql oai-amf oai-smf oai-upf oai-ext-dn
``` ```
```bash ```bash
Creating network "l2sim-oai-public-net" with driver "bridge" Creating network "l2sim-oai-public-net" with driver "bridge"
Creating network "l2sim-oai-traffic_net-net" with driver "bridge" Creating network "l2sim-oai-traffic_net-net" with driver "bridge"
Creating l2sim-oai-nrf ... done
Creating l2sim-mysql ... done Creating l2sim-mysql ... done
Creating l2sim-oai-spgwu ... done Creating l2sim-oai-upf ... done
Creating l2sim-oai-amf ... done Creating l2sim-oai-amf ... done
Creating l2sim-oai-smf ... done Creating l2sim-oai-smf ... done
Creating l2sim-oai-ext-dn ... done Creating l2sim-oai-ext-dn ... done
...@@ -160,12 +158,11 @@ docker-compose ps -a ...@@ -160,12 +158,11 @@ docker-compose ps -a
```bash ```bash
Name Command State Ports Name Command State Ports
------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------
l2sim-mysql docker-entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp l2sim-mysql docker-entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp
l2sim-oai-amf /bin/bash /openair-amf/bin ... Up (healthy) 38412/sctp, 80/tcp, 9090/tcp l2sim-oai-amf /bin/bash /openair-amf/bin ... Up (healthy) 38412/sctp, 80/tcp, 9090/tcp
l2sim-oai-ext-dn /bin/bash -c apt update; ... Up (healthy) l2sim-oai-ext-dn /bin/bash -c apt update; ... Up (healthy)
l2sim-oai-nrf /bin/bash /openair-nrf/bin ... Up (healthy) 80/tcp, 9090/tcp l2sim-oai-smf /bin/bash /openair-smf/bin ... Up (healthy) 80/tcp, 8805/udp, 9090/tcp
l2sim-oai-smf /bin/bash /openair-smf/bin ... Up (healthy) 80/tcp, 8805/udp, 9090/tcp l2sim-oai-upf /bin/bash /openair-upf/bin ... Up (healthy) 2152/udp, 8805/udp
l2sim-oai-spgwu /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp
``` ```
At this point, you can prepare a capture on the newly-created public docker bridges: At this point, you can prepare a capture on the newly-created public docker bridges:
...@@ -206,8 +203,7 @@ sudo nohup tshark -f "(host 192.168.72.135 and icmp) or (not host 192.168.72.135 ...@@ -206,8 +203,7 @@ sudo nohup tshark -f "(host 192.168.72.135 and icmp) or (not host 192.168.72.135
docker-compose up -d oai-gnb docker-compose up -d oai-gnb
``` ```
```bash ```bash
l2sim-oai-nrf is up-to-date l2sim-oai-upf is up-to-date
l2sim-oai-spgwu is up-to-date
l2sim-oai-ext-dn is up-to-date l2sim-oai-ext-dn is up-to-date
Creating l2sim-oai-gnb ... done Creating l2sim-oai-gnb ... done
``` ```
...@@ -220,13 +216,12 @@ $ docker-compose ps -a ...@@ -220,13 +216,12 @@ $ docker-compose ps -a
```bash ```bash
Name Command State Ports Name Command State Ports
------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------
l2sim-mysql docker-entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp l2sim-mysql docker-entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp
l2sim-oai-amf /bin/bash /openair-amf/bin ... Up (healthy) 38412/sctp, 80/tcp, 9090/tcp l2sim-oai-amf /bin/bash /openair-amf/bin ... Up (healthy) 38412/sctp, 80/tcp, 9090/tcp
l2sim-oai-ext-dn /bin/bash -c apt update; ... Up (healthy) l2sim-oai-ext-dn /bin/bash -c apt update; ... Up (healthy)
l2sim-oai-gnb /opt/oai-gnb/bin/entrypoin ... Up (healthy) l2sim-oai-gnb /opt/oai-gnb/bin/entrypoin ... Up (healthy)
l2sim-oai-nrf /bin/bash /openair-nrf/bin ... Up (healthy) 80/tcp, 9090/tcp l2sim-oai-smf /bin/bash /openair-smf/bin ... Up (healthy) 80/tcp, 8805/udp, 9090/tcp
l2sim-oai-smf /bin/bash /openair-smf/bin ... Up (healthy) 80/tcp, 8805/udp, 9090/tcp l2sim-oai-upf /bin/bash /openair-upf/bin ... Up (healthy) 2152/udp, 8805/udp
l2sim-oai-spgwu /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp
``` ```
You can verify that the `gNB` is connected with the `AMF`: You can verify that the `gNB` is connected with the `AMF`:
...@@ -250,10 +245,9 @@ docker-compose up -d proxy oai-nr-ue ...@@ -250,10 +245,9 @@ docker-compose up -d proxy oai-nr-ue
``` ```
```bash ```bash
l2sim-mysql is up-to-date l2sim-mysql is up-to-date
l2sim-oai-nrf is up-to-date
l2sim-oai-amf is up-to-date l2sim-oai-amf is up-to-date
l2sim-oai-smf is up-to-date l2sim-oai-smf is up-to-date
l2sim-oai-spgwu is up-to-date l2sim-oai-upf is up-to-date
l2sim-oai-ext-dn is up-to-date l2sim-oai-ext-dn is up-to-date
l2sim-oai-gnb is up-to-date l2sim-oai-gnb is up-to-date
Creating l2sim-oai-nr-ue ... done Creating l2sim-oai-nr-ue ... done
...@@ -268,18 +262,17 @@ docker-compose ps -a ...@@ -268,18 +262,17 @@ docker-compose ps -a
```bash ```bash
Name Command State Ports Name Command State Ports
------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------
l2sim-mysql docker-entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp l2sim-mysql docker-entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp
l2sim-oai-amf /bin/bash /openair-amf/bin ... Up (healthy) 38412/sctp, 80/tcp, 9090/tcp l2sim-oai-amf /bin/bash /openair-amf/bin ... Up (healthy) 38412/sctp, 80/tcp, 9090/tcp
l2sim-oai-ext-dn /bin/bash -c apt update; ... Up (healthy) l2sim-oai-ext-dn /bin/bash -c apt update; ... Up (healthy)
l2sim-oai-gnb /opt/oai-gnb/bin/entrypoin ... Up (healthy) l2sim-oai-gnb /opt/oai-gnb/bin/entrypoin ... Up (healthy)
l2sim-oai-nr-ue0 /opt/oai-nr-ue/bin/entrypo ... Up (healthy) l2sim-oai-nr-ue0 /opt/oai-nr-ue/bin/entrypo ... Up (healthy)
l2sim-oai-nrf /bin/bash /openair-nrf/bin ... Up (healthy) 80/tcp, 9090/tcp l2sim-oai-smf /bin/bash /openair-smf/bin ... Up (healthy) 80/tcp, 8805/udp, 9090/tcp
l2sim-oai-smf /bin/bash /openair-smf/bin ... Up (healthy) 80/tcp, 8805/udp, 9090/tcp l2sim-oai-upf /bin/bash /openair-upf/bin ... Up (healthy) 2152/udp, 8805/udp
l2sim-oai-spgwu /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp l2sim-proxy /oai-lte-multi-ue-proxy/bi ... Up (healthy)
l2sim-proxy /oai-lte-multi-ue-proxy/bi ... Up (healthy)
``` ```
```bash ```bash
docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}} {{.MemUsage}}\t{{.MemPerc}}" l2sim-mysql l2sim-oai-amf l2sim-oai-ext-dn l2sim-oai-gnb l2sim-oai-nr-ue0 l2sim-oai-nrf l2sim-oai-smf l2sim-oai-spgwu l2sim-proxy docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}} {{.MemUsage}}\t{{.MemPerc}}" l2sim-mysql l2sim-oai-amf l2sim-oai-ext-dn l2sim-oai-gnb l2sim-oai-nr-ue0 l2sim-oai-smf l2sim-oai-upf l2sim-proxy
``` ```
```bash ```bash
CONTAINER CPU % MEM USAGE / LIMIT MEM % CONTAINER CPU % MEM USAGE / LIMIT MEM %
...@@ -288,9 +281,8 @@ l2sim-oai-amf 4.05% 29.49MiB / 62.54GiB 0.05% ...@@ -288,9 +281,8 @@ l2sim-oai-amf 4.05% 29.49MiB / 62.54GiB 0.05%
l2sim-oai-ext-dn 0.00% 31.27MiB / 62.54GiB 0.05% l2sim-oai-ext-dn 0.00% 31.27MiB / 62.54GiB 0.05%
l2sim-oai-gnb 1.29% 1.853GiB / 62.54GiB 2.96% l2sim-oai-gnb 1.29% 1.853GiB / 62.54GiB 2.96%
l2sim-oai-nr-ue0 1.43% 350.8MiB / 62.54GiB 0.55% l2sim-oai-nr-ue0 1.43% 350.8MiB / 62.54GiB 0.55%
l2sim-oai-nrf 0.21% 9.105MiB / 62.54GiB 0.01%
l2sim-oai-smf 3.24% 30.23MiB / 62.54GiB 0.05% l2sim-oai-smf 3.24% 30.23MiB / 62.54GiB 0.05%
l2sim-oai-spgwu 0.00% 11.78MiB / 62.54GiB 0.02% l2sim-oai-upf 0.00% 11.78MiB / 62.54GiB 0.02%
l2sim-proxy 6.97% 290.4MiB / 62.54GiB 0.45% l2sim-proxy 6.97% 290.4MiB / 62.54GiB 0.45%
``` ```
...@@ -389,19 +381,17 @@ Stopping l2sim-oai-nr-ue2 ... done ...@@ -389,19 +381,17 @@ Stopping l2sim-oai-nr-ue2 ... done
Stopping l2sim-oai-nr-ue ... done Stopping l2sim-oai-nr-ue ... done
Stopping l2sim-oai-gnb ... done Stopping l2sim-oai-gnb ... done
Stopping l2sim-oai-ext-dn ... done Stopping l2sim-oai-ext-dn ... done
Stopping l2sim-oai-spgwu ... done Stopping l2sim-oai-upf ... done
Stopping l2sim-oai-smf ... done Stopping l2sim-oai-smf ... done
Stopping l2sim-oai-amf ... done Stopping l2sim-oai-amf ... done
Stopping l2sim-oai-nrf ... done
Stopping l2sim-mysql ... done Stopping l2sim-mysql ... done
Removing l2sim-oai-nr-ue2 ... done Removing l2sim-oai-nr-ue2 ... done
Removing l2sim-oai-nr-ue ... done Removing l2sim-oai-nr-ue ... done
Removing l2sim-oai-gnb ... done Removing l2sim-oai-gnb ... done
Removing l2sim-oai-ext-dn ... done Removing l2sim-oai-ext-dn ... done
Removing l2sim-oai-spgwu ... done Removing l2sim-oai-upf ... done
Removing l2sim-oai-smf ... done Removing l2sim-oai-smf ... done
Removing l2sim-oai-amf ... done Removing l2sim-oai-amf ... done
Removing l2sim-oai-nrf ... done
Removing l2sim-mysql ... done Removing l2sim-mysql ... done
Removing network l2sim-oai-public-net Removing network l2sim-oai-public-net
Removing network l2sim-oai-traffic-net Removing network l2sim-oai-traffic-net
......
version: '3.8' version: '3.8'
services: services:
oai-nrf:
container_name: "l2sim-oai-nrf"
image: oaisoftwarealliance/oai-nrf:v1.5.0
environment:
- NRF_INTERFACE_NAME_FOR_SBI=eth0
- TZ=Europe/Paris
networks:
public_net:
ipv4_address: 192.168.71.130
mysql: mysql:
container_name: "l2sim-mysql" container_name: "l2sim-mysql"
image: mysql:8.0 image: mysql:8.0
...@@ -31,108 +22,36 @@ services: ...@@ -31,108 +22,36 @@ services:
ipv4_address: 192.168.71.131 ipv4_address: 192.168.71.131
oai-amf: oai-amf:
container_name: "l2sim-oai-amf" container_name: "l2sim-oai-amf"
image: oaisoftwarealliance/oai-amf:v1.5.0 image: oaisoftwarealliance/oai-amf:v2.0.0
environment: environment:
- TZ=Europe/paris - TZ=Europe/paris
- MCC=208 volumes:
- MNC=99 - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-amf/etc/config.yaml
- REGION_ID=128
- AMF_SET_ID=1
- SERVED_GUAMI_MCC_0=208
- SERVED_GUAMI_MNC_0=99
- SERVED_GUAMI_REGION_ID_0=128
- SERVED_GUAMI_AMF_SET_ID_0=1
- SERVED_GUAMI_MCC_1=460
- SERVED_GUAMI_MNC_1=11
- SERVED_GUAMI_REGION_ID_1=10
- SERVED_GUAMI_AMF_SET_ID_1=1
- PLMN_SUPPORT_MCC=208
- PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001
# Only one slice is defined (1, 0xFFFFFF).
- SST_0=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=192.168.71.133
- SELECTED_0=true
# 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
# NF registration
- NRF_IPV4_ADDRESS=192.168.71.130
- NRF_FQDN=oai-nrf
- NF_REGISTRATION=yes
- SMF_SELECTION=yes
- USE_FQDN_DNS=yes
- USE_HTTP2=no
depends_on: depends_on:
- oai-nrf
- mysql - mysql
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.132 ipv4_address: 192.168.71.132
oai-smf: oai-smf:
container_name: "l2sim-oai-smf" container_name: "l2sim-oai-smf"
image: oaisoftwarealliance/oai-smf:v1.5.0 image: oaisoftwarealliance/oai-smf:v2.0.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- SMF_INTERFACE_NAME_FOR_N4=eth0 volumes:
- SMF_INTERFACE_NAME_FOR_SBI=eth0 - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-smf/etc/config.yaml
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
- AMF_IPV4_ADDRESS=192.168.71.132
- AMF_FQDN=oai-amf
- UPF_IPV4_ADDRESS=192.168.71.134
- UPF_FQDN_0=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130
- 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
- SESSION_AMBR_UL0=200Mbps
- SESSION_AMBR_DL0=400Mbps
- DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1
- ENABLE_USAGE_REPORTING=no
depends_on: depends_on:
- oai-nrf
- oai-amf - oai-amf
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.133 ipv4_address: 192.168.71.133
oai-spgwu: oai-upf:
container_name: "l2sim-oai-spgwu" container_name: "l2sim-oai-upf"
image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 image: oaisoftwarealliance/oai-upf:v2.0.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 volumes:
- SGW_INTERFACE_NAME_FOR_SX=eth0 - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-upf/etc/config.yaml
- PGW_INTERFACE_NAME_FOR_SGI=eth0
- NETWORK_UE_NAT_OPTION=yes
- NETWORK_UE_IP=12.1.1.0/24
- ENABLE_5G_FEATURES=yes
- REGISTER_NRF=yes
- USE_FQDN_NRF=yes
- UPF_FQDN_5G=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130
- NRF_FQDN=oai-nrf
# Only one slice is defined (1, 0xFFFFFF)
- NSSAI_SST_0=1
- NSSAI_SD_0=0xffffff
- DNN_0=oai
depends_on: depends_on:
- oai-nrf
- oai-smf - oai-smf
cap_add: cap_add:
- NET_ADMIN - NET_ADMIN
...@@ -153,7 +72,7 @@ services: ...@@ -153,7 +72,7 @@ services:
"iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "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" "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
depends_on: depends_on:
- oai-spgwu - oai-upf
networks: networks:
traffic_net: traffic_net:
ipv4_address: 192.168.72.135 ipv4_address: 192.168.72.135
...@@ -172,7 +91,7 @@ services: ...@@ -172,7 +91,7 @@ services:
USE_ADDITIONAL_OPTIONS: --sa --nfapi VNF --emulate-l1 --log_config.global_log_options level,time,thread_id,nocolor USE_ADDITIONAL_OPTIONS: --sa --nfapi VNF --emulate-l1 --log_config.global_log_options level,time,thread_id,nocolor
ASAN_OPTIONS: detect_leaks=0 ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-spgwu - oai-upf
- oai-amf - oai-amf
volumes: volumes:
- ../../conf_files/gnb.sa.band78.106prb.l2sim.conf:/opt/oai-gnb/etc/gnb.conf - ../../conf_files/gnb.sa.band78.106prb.l2sim.conf:/opt/oai-gnb/etc/gnb.conf
......
version: '3.8' version: '3.8'
services: services:
oai-nrf:
container_name: "rfsim5g-oai-nrf"
image: oaisoftwarealliance/oai-nrf:v1.5.0
environment:
- NRF_INTERFACE_NAME_FOR_SBI=eth0
- TZ=Europe/Paris
networks:
public_net:
ipv4_address: 192.168.71.130
mysql: mysql:
container_name: "rfsim5g-mysql" container_name: "rfsim5g-mysql"
image: mysql:8.0 image: mysql:8.0
...@@ -31,108 +22,36 @@ services: ...@@ -31,108 +22,36 @@ services:
ipv4_address: 192.168.71.131 ipv4_address: 192.168.71.131
oai-amf: oai-amf:
container_name: "rfsim5g-oai-amf" container_name: "rfsim5g-oai-amf"
image: oaisoftwarealliance/oai-amf:v1.5.0 image: oaisoftwarealliance/oai-amf:v2.0.0
environment: environment:
- TZ=Europe/paris - TZ=Europe/paris
- MCC=208 volumes:
- MNC=99 - ./mini_nonrf_config.yaml:/openair-amf/etc/config.yaml
- REGION_ID=128
- AMF_SET_ID=1
- SERVED_GUAMI_MCC_0=208
- SERVED_GUAMI_MNC_0=99
- SERVED_GUAMI_REGION_ID_0=128
- SERVED_GUAMI_AMF_SET_ID_0=1
- SERVED_GUAMI_MCC_1=460
- SERVED_GUAMI_MNC_1=11
- SERVED_GUAMI_REGION_ID_1=10
- SERVED_GUAMI_AMF_SET_ID_1=1
- PLMN_SUPPORT_MCC=208
- PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001
# Only one slice is defined (1, 0xFFFFFF).
- SST_0=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=192.168.71.133
- SELECTED_0=true
# 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
# NF registration
- NRF_IPV4_ADDRESS=192.168.71.130
- NRF_FQDN=oai-nrf
- NF_REGISTRATION=yes
- SMF_SELECTION=yes
- USE_FQDN_DNS=yes
- USE_HTTP2=no
depends_on: depends_on:
- oai-nrf
- mysql - mysql
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.132 ipv4_address: 192.168.71.132
oai-smf: oai-smf:
container_name: "rfsim5g-oai-smf" container_name: "rfsim5g-oai-smf"
image: oaisoftwarealliance/oai-smf:v1.5.0 image: oaisoftwarealliance/oai-smf:v2.0.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- SMF_INTERFACE_NAME_FOR_N4=eth0 volumes:
- SMF_INTERFACE_NAME_FOR_SBI=eth0 - ./mini_nonrf_config.yaml:/openair-smf/etc/config.yaml
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
- AMF_IPV4_ADDRESS=192.168.71.132
- AMF_FQDN=oai-amf
- UPF_IPV4_ADDRESS=192.168.71.134
- UPF_FQDN_0=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130
- 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
- SESSION_AMBR_UL0=200Mbps
- SESSION_AMBR_DL0=400Mbps
- DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1
- ENABLE_USAGE_REPORTING=no
depends_on: depends_on:
- oai-nrf
- oai-amf - oai-amf
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.133 ipv4_address: 192.168.71.133
oai-spgwu: oai-upf:
container_name: "rfsim5g-oai-spgwu" container_name: "rfsim5g-oai-upf"
image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 image: oaisoftwarealliance/oai-upf:v2.0.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 volumes:
- SGW_INTERFACE_NAME_FOR_SX=eth0 - ./mini_nonrf_config.yaml:/openair-upf/etc/config.yaml
- PGW_INTERFACE_NAME_FOR_SGI=eth0
- NETWORK_UE_NAT_OPTION=yes
- NETWORK_UE_IP=12.1.1.0/24
- ENABLE_5G_FEATURES=yes
- REGISTER_NRF=yes
- USE_FQDN_NRF=yes
- UPF_FQDN_5G=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130
- NRF_FQDN=oai-nrf
# Only one slice is defined (1, 0xFFFFFF)
- NSSAI_SST_0=1
- NSSAI_SD_0=0xffffff
- DNN_0=oai
depends_on: depends_on:
- oai-nrf
- oai-smf - oai-smf
cap_add: cap_add:
- NET_ADMIN - NET_ADMIN
...@@ -153,7 +72,7 @@ services: ...@@ -153,7 +72,7 @@ services:
"iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "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" "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
depends_on: depends_on:
- oai-spgwu - oai-upf
networks: networks:
traffic_net: traffic_net:
ipv4_address: 192.168.72.135 ipv4_address: 192.168.72.135
...@@ -187,7 +106,6 @@ services: ...@@ -187,7 +106,6 @@ services:
container_name: rfsim5g-oai-nr-ue container_name: rfsim5g-oai-nr-ue
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001100 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001100 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
...@@ -206,7 +124,6 @@ services: ...@@ -206,7 +124,6 @@ services:
container_name: rfsim5g-oai-nr-ue2 container_name: rfsim5g-oai-nr-ue2
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001101 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001101 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
...@@ -225,7 +142,6 @@ services: ...@@ -225,7 +142,6 @@ services:
container_name: rfsim5g-oai-nr-ue3 container_name: rfsim5g-oai-nr-ue3
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001102 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001102 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
...@@ -244,7 +160,6 @@ services: ...@@ -244,7 +160,6 @@ services:
container_name: rfsim5g-oai-nr-ue4 container_name: rfsim5g-oai-nr-ue4
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001103 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001103 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
...@@ -263,7 +178,6 @@ services: ...@@ -263,7 +178,6 @@ services:
container_name: rfsim5g-oai-nr-ue5 container_name: rfsim5g-oai-nr-ue5
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001104 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001104 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
...@@ -282,7 +196,6 @@ services: ...@@ -282,7 +196,6 @@ services:
container_name: rfsim5g-oai-nr-ue6 container_name: rfsim5g-oai-nr-ue6
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001105 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001105 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
...@@ -301,7 +214,6 @@ services: ...@@ -301,7 +214,6 @@ services:
container_name: rfsim5g-oai-nr-ue7 container_name: rfsim5g-oai-nr-ue7
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001106 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001106 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
...@@ -320,7 +232,6 @@ services: ...@@ -320,7 +232,6 @@ services:
container_name: rfsim5g-oai-nr-ue8 container_name: rfsim5g-oai-nr-ue8
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001107 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001107 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
...@@ -339,7 +250,6 @@ services: ...@@ -339,7 +250,6 @@ services:
container_name: rfsim5g-oai-nr-ue9 container_name: rfsim5g-oai-nr-ue9
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001108 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001108 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
...@@ -358,7 +268,6 @@ services: ...@@ -358,7 +268,6 @@ services:
container_name: rfsim5g-oai-nr-ue10 container_name: rfsim5g-oai-nr-ue10
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001109 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001109 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
......
################################################################################
# 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
################################################################################
# OAI CN Configuration File
### This file can be used by all OAI NFs
### Some fields are specific to an NF and will be ignored by other NFs
## NOTE ON YAML ANCHORS ##
# We use YAML anchors to ease the configuration and to avoid duplicating parts of the configuration.
# This is especially true for the SNSSAIs, as we have to define them for multiple NFs.
# Please note that the use of anchors is not mandatory, and you can define the SNSSAI in each NF yourself.
# You can read more about anchors here: https://yaml.org/spec/1.2.2/#anchors-and-aliases
############# Common configuration
# Log level for all the NFs
log_level:
general: debug
# If you enable registration, the other NFs will use the NRF discovery mechanism
register_nf:
general: no
http_version: 1
############## SBI Interfaces
### Each NF takes its local SBI interfaces and remote interfaces from here, unless it gets them using NRF discovery mechanisms
nfs:
amf:
host: oai-amf
sbi:
port: 80
api_version: v1
interface_name: eth0
n2:
interface_name: eth0
port: 38412
smf:
host: oai-smf
sbi:
port: 80
api_version: v1
interface_name: eth0
n4:
interface_name: eth0
port: 8805
upf:
host: oai-upf
sbi:
port: 80
api_version: v1
interface_name: eth0
n3:
interface_name: eth0
port: 2152
n4:
interface_name: eth0
port: 8805
n6:
interface_name: eth1
n9:
interface_name: eth0
port: 2152
#### Common for UDR and AMF
database:
host: mysql
user: test
type: mysql
password: test
database_name: oai_db
generate_random: true
connection_timeout: 300 # seconds
## general single_nssai configuration
## Defines YAML anchors, which are reused in the config file
snssais:
- &embb_slice1
sst: 1
############## NF-specific configuration
amf:
amf_name: "OAI-AMF"
# This really depends on if we want to keep the "mini" version or not
support_features_options:
enable_simple_scenario: yes # "no" by default with the normal deployment scenarios with AMF/SMF/UPF/AUSF/UDM/UDR/NRF.
# set it to "yes" to use with the minimalist deployment scenario (including only AMF/SMF/UPF) by using the internal AUSF/UDM implemented inside AMF.
# There's no NRF in this scenario, SMF info is taken from "nfs" section.
enable_nssf: no
enable_smf_selection: no
relative_capacity: 30
statistics_timer_interval: 20 # in seconds
emergency_support: false
served_guami_list:
- mcc: 208
mnc: 99
amf_region_id: 01
amf_set_id: 001
amf_pointer: 01
plmn_support_list:
- mcc: 208
mnc: 99
tac: 0x0001
nssai:
- *embb_slice1
supported_integrity_algorithms:
- "NIA0"
- "NIA1"
- "NIA2"
supported_encryption_algorithms:
- "NEA0"
- "NEA1"
- "NEA2"
smf:
ue_mtu: 1500
support_features:
use_local_subscription_info: yes # Use infos from local_subscription_info or from UDM
use_local_pcc_rules: yes # Use infos from local_pcc_rules or from PCF
upfs:
- host: oai-upf
port: 8805
config:
enable_usage_reporting: no
# follows UPFInfo from 3GPP TS 29.510, currently only these values from interfaceUpfInfoList are supported
upf_info:
interfaceUpfInfoList:
- interfaceType: "N3"
networkInstance: "access.oai.org"
- interfaceType: "N6"
networkInstance: "core.oai.org"
ue_dns:
primary_ipv4: "172.21.3.100"
primary_ipv6: "2001:4860:4860::8888"
secondary_ipv4: "8.8.8.8"
secondary_ipv6: "2001:4860:4860::8888"
ims:
pcscf_ipv4: "127.0.0.1"
pcscf_ipv6: "fe80::7915:f408:1787:db8b"
# the DNN you configure here should be configured in "dnns"
# follows the SmfInfo datatype from 3GPP TS 29.510
smf_info:
sNssaiSmfInfoList:
- sNssai: *embb_slice1
dnnSmfInfoList:
- dnn: "oai"
local_subscription_infos:
- single_nssai: *embb_slice1
dnn: "oai"
qos_profile:
5qi: 9
session_ambr_ul: "200Mbps"
session_ambr_dl: "400Mbps"
upf:
support_features:
enable_bpf_datapath: no # If "on": BPF is used as datapath else simpleswitch is used, DEFAULT= off
enable_snat: yes # If "on": Source natting is done for UE, DEFAULT= off
remote_n6_gw: localhost # Dummy host since simple-switch does not use N6 GW
upf_info:
sNssaiUpfInfoList:
- sNssai: *embb_slice1
dnnUpfInfoList:
- dnn: "oai"
## DNN configuration
dnns:
- dnn: "oai"
pdu_session_type: "IPV4"
ipv4_subnet: "12.1.1.0/24"
File mode changed from 100755 to 100644
version: '3.8' version: '3.8'
services: services:
oai-nrf:
container_name: "rfsim5g-oai-nrf"
image: oaisoftwarealliance/oai-nrf:v1.5.0
environment:
- NRF_INTERFACE_NAME_FOR_SBI=eth0
- TZ=Europe/Paris
networks:
public_net:
ipv4_address: 192.168.71.130
mysql: mysql:
container_name: "rfsim5g-mysql" container_name: "rfsim5g-mysql"
image: mysql:8.0 image: mysql:8.0
...@@ -31,108 +22,36 @@ services: ...@@ -31,108 +22,36 @@ services:
ipv4_address: 192.168.71.131 ipv4_address: 192.168.71.131
oai-amf: oai-amf:
container_name: "rfsim5g-oai-amf" container_name: "rfsim5g-oai-amf"
image: oaisoftwarealliance/oai-amf:v1.5.0 image: oaisoftwarealliance/oai-amf:v2.0.0
environment: environment:
- TZ=Europe/paris - TZ=Europe/paris
- MCC=208 volumes:
- MNC=99 - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-amf/etc/config.yaml
- REGION_ID=128
- AMF_SET_ID=1
- SERVED_GUAMI_MCC_0=208
- SERVED_GUAMI_MNC_0=99
- SERVED_GUAMI_REGION_ID_0=128
- SERVED_GUAMI_AMF_SET_ID_0=1
- SERVED_GUAMI_MCC_1=460
- SERVED_GUAMI_MNC_1=11
- SERVED_GUAMI_REGION_ID_1=10
- SERVED_GUAMI_AMF_SET_ID_1=1
- PLMN_SUPPORT_MCC=208
- PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001
# Only one slice is defined (1, 0xFFFFFF).
- SST_0=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=192.168.71.133
- SELECTED_0=true
# 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
# NF registration
- NRF_IPV4_ADDRESS=192.168.71.130
- NRF_FQDN=oai-nrf
- NF_REGISTRATION=yes
- SMF_SELECTION=yes
- USE_FQDN_DNS=yes
- USE_HTTP2=no
depends_on: depends_on:
- oai-nrf
- mysql - mysql
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.132 ipv4_address: 192.168.71.132
oai-smf: oai-smf:
container_name: "rfsim5g-oai-smf" container_name: "rfsim5g-oai-smf"
image: oaisoftwarealliance/oai-smf:v1.5.0 image: oaisoftwarealliance/oai-smf:v2.0.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- SMF_INTERFACE_NAME_FOR_N4=eth0 volumes:
- SMF_INTERFACE_NAME_FOR_SBI=eth0 - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-smf/etc/config.yaml
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
- AMF_IPV4_ADDRESS=192.168.71.132
- AMF_FQDN=oai-amf
- UPF_IPV4_ADDRESS=192.168.71.134
- UPF_FQDN_0=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130
- 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
- SESSION_AMBR_UL0=200Mbps
- SESSION_AMBR_DL0=400Mbps
- DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1
- ENABLE_USAGE_REPORTING=no
depends_on: depends_on:
- oai-nrf
- oai-amf - oai-amf
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.133 ipv4_address: 192.168.71.133
oai-spgwu: oai-upf:
container_name: "rfsim5g-oai-spgwu" container_name: "rfsim5g-oai-upf"
image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 image: oaisoftwarealliance/oai-upf:v2.0.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 volumes:
- SGW_INTERFACE_NAME_FOR_SX=eth0 - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-upf/etc/config.yaml
- PGW_INTERFACE_NAME_FOR_SGI=eth0
- NETWORK_UE_NAT_OPTION=yes
- NETWORK_UE_IP=12.1.1.0/24
- ENABLE_5G_FEATURES=yes
- REGISTER_NRF=yes
- USE_FQDN_NRF=yes
- UPF_FQDN_5G=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130
- NRF_FQDN=oai-nrf
# Only one slice is defined (1, 0xFFFFFF)
- NSSAI_SST_0=1
- NSSAI_SD_0=0xffffff
- DNN_0=oai
depends_on: depends_on:
- oai-nrf
- oai-smf - oai-smf
cap_add: cap_add:
- NET_ADMIN - NET_ADMIN
...@@ -153,7 +72,7 @@ services: ...@@ -153,7 +72,7 @@ services:
"iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "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" "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
depends_on: depends_on:
- oai-spgwu - oai-upf
networks: networks:
traffic_net: traffic_net:
ipv4_address: 192.168.72.135 ipv4_address: 192.168.72.135
...@@ -187,7 +106,6 @@ services: ...@@ -187,7 +106,6 @@ services:
container_name: rfsim5g-oai-nr-ue container_name: rfsim5g-oai-nr-ue
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 24 --ssb 24 --numerology 1 -C 3604800000 --uicc0.imsi 208990100001100 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 24 --ssb 24 --numerology 1 -C 3604800000 --uicc0.imsi 208990100001100 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
......
version: '3.8' version: '3.8'
services: services:
oai-nrf:
container_name: "rfsim5g-oai-nrf"
image: oaisoftwarealliance/oai-nrf:v1.5.0
environment:
- NRF_INTERFACE_NAME_FOR_SBI=eth0
- TZ=Europe/Paris
networks:
public_net:
ipv4_address: 192.168.71.130
mysql: mysql:
container_name: "rfsim5g-mysql" container_name: "rfsim5g-mysql"
image: mysql:8.0 image: mysql:8.0
...@@ -31,108 +22,36 @@ services: ...@@ -31,108 +22,36 @@ services:
ipv4_address: 192.168.71.131 ipv4_address: 192.168.71.131
oai-amf: oai-amf:
container_name: "rfsim5g-oai-amf" container_name: "rfsim5g-oai-amf"
image: oaisoftwarealliance/oai-amf:v1.5.0 image: oaisoftwarealliance/oai-amf:v2.0.0
environment: environment:
- TZ=Europe/paris - TZ=Europe/paris
- MCC=208 volumes:
- MNC=99 - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-amf/etc/config.yaml
- REGION_ID=128
- AMF_SET_ID=1
- SERVED_GUAMI_MCC_0=208
- SERVED_GUAMI_MNC_0=99
- SERVED_GUAMI_REGION_ID_0=128
- SERVED_GUAMI_AMF_SET_ID_0=1
- SERVED_GUAMI_MCC_1=460
- SERVED_GUAMI_MNC_1=11
- SERVED_GUAMI_REGION_ID_1=10
- SERVED_GUAMI_AMF_SET_ID_1=1
- PLMN_SUPPORT_MCC=208
- PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001
# Only one slice is defined (1, 0xFFFFFF).
- SST_0=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=192.168.71.133
- SELECTED_0=true
# 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
# NF registration
- NRF_IPV4_ADDRESS=192.168.71.130
- NRF_FQDN=oai-nrf
- NF_REGISTRATION=yes
- SMF_SELECTION=yes
- USE_FQDN_DNS=yes
- USE_HTTP2=no
depends_on: depends_on:
- oai-nrf
- mysql - mysql
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.132 ipv4_address: 192.168.71.132
oai-smf: oai-smf:
container_name: "rfsim5g-oai-smf" container_name: "rfsim5g-oai-smf"
image: oaisoftwarealliance/oai-smf:v1.5.0 image: oaisoftwarealliance/oai-smf:v2.0.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- SMF_INTERFACE_NAME_FOR_N4=eth0 volumes:
- SMF_INTERFACE_NAME_FOR_SBI=eth0 - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-smf/etc/config.yaml
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
- AMF_IPV4_ADDRESS=192.168.71.132
- AMF_FQDN=oai-amf
- UPF_IPV4_ADDRESS=192.168.71.134
- UPF_FQDN_0=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130
- 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
- SESSION_AMBR_UL0=200Mbps
- SESSION_AMBR_DL0=400Mbps
- DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1
- ENABLE_USAGE_REPORTING=no
depends_on: depends_on:
- oai-nrf
- oai-amf - oai-amf
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.133 ipv4_address: 192.168.71.133
oai-spgwu: oai-upf:
container_name: "rfsim5g-oai-spgwu" container_name: "rfsim5g-oai-upf"
image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 image: oaisoftwarealliance/oai-upf:v2.0.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 volumes:
- SGW_INTERFACE_NAME_FOR_SX=eth0 - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-upf/etc/config.yaml
- PGW_INTERFACE_NAME_FOR_SGI=eth0
- NETWORK_UE_NAT_OPTION=yes
- NETWORK_UE_IP=12.1.1.0/24
- ENABLE_5G_FEATURES=yes
- REGISTER_NRF=yes
- USE_FQDN_NRF=yes
- UPF_FQDN_5G=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130
- NRF_FQDN=oai-nrf
# Only one slice is defined (1, 0xFFFFFF)
- NSSAI_SST_0=1
- NSSAI_SD_0=0xffffff
- DNN_0=oai
depends_on: depends_on:
- oai-nrf
- oai-smf - oai-smf
cap_add: cap_add:
- NET_ADMIN - NET_ADMIN
...@@ -153,7 +72,7 @@ services: ...@@ -153,7 +72,7 @@ services:
"iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "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" "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
depends_on: depends_on:
- oai-spgwu - oai-upf
networks: networks:
traffic_net: traffic_net:
ipv4_address: 192.168.72.135 ipv4_address: 192.168.72.135
...@@ -188,7 +107,6 @@ services: ...@@ -188,7 +107,6 @@ services:
container_name: rfsim5g-oai-nr-ue container_name: rfsim5g-oai-nr-ue
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 106 --numerology 1 --band 78 -C 3319680000 --ue-nb-ant-tx 2 --uicc0.imsi 208990100001100 --ue-nb-ant-rx 2 --uecap_file /opt/oai-nr-ue/etc/uecap.xml --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 106 --numerology 1 --band 78 -C 3319680000 --ue-nb-ant-tx 2 --uicc0.imsi 208990100001100 --ue-nb-ant-rx 2 --uecap_file /opt/oai-nr-ue/etc/uecap.xml --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
......
...@@ -20,8 +20,7 @@ Core network components are on `core_net` network, CU-CP <--> CU-UP X communicat ...@@ -20,8 +20,7 @@ Core network components are on `core_net` network, CU-CP <--> CU-UP X communicat
``` ```
AMF --> 192.168.71.132 (N2,Namf) AMF --> 192.168.71.132 (N2,Namf)
SMF --> 192.168.71.133 (N4,Nsmf) SMF --> 192.168.71.133 (N4,Nsmf)
NRF --> 192.168.71.130 (Nnrf) UPF --> 192.168.71.134 (N3)
SPGWU --> 192.168.71.134 (N3)
CU-CP --> 192.168.71.X (N2), 192.168.72.2 (F1C), 192.168.77.2 (E1) 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-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-UP2 --> 192.168.71.X (N3), 192.168.74.2 (F1U), 192.168.77.4 (E1)
...@@ -41,7 +40,7 @@ You should be able to deploy the [basic 5G RFsim deployment](../5g_rfsimulator/R ...@@ -41,7 +40,7 @@ You should be able to deploy the [basic 5G RFsim deployment](../5g_rfsimulator/R
First, start the MySQL server and 5GC: First, start the MySQL server and 5GC:
```bash ```bash
docker-compose up -d mysql oai-nrf oai-amf oai-smf oai-spgwu docker-compose up -d mysql oai-amf oai-smf oai-upf
docker-compose ps -a docker-compose ps -a
``` ```
......
version: '3.8' version: '3.8'
services: services:
oai-nrf:
container_name: "rfsim5g-oai-nrf"
image: oaisoftwarealliance/oai-nrf:v1.5.0
environment:
- NRF_INTERFACE_NAME_FOR_SBI=eth0
- TZ=Europe/1
networks:
core_net:
ipv4_address: 192.168.71.130
mysql: mysql:
container_name: "rfsim5g-mysql" container_name: "rfsim5g-mysql"
image: mysql:8.0 image: mysql:8.0
volumes: volumes:
- ../5g_f1_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
- ../5g_f1_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh - ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
environment: environment:
- TZ=Europe/1 - TZ=Europe/Paris
- MYSQL_DATABASE=oai_db - MYSQL_DATABASE=oai_db
- MYSQL_USER=test - MYSQL_USER=test
- MYSQL_PASSWORD=test - MYSQL_PASSWORD=test
...@@ -31,118 +22,36 @@ services: ...@@ -31,118 +22,36 @@ services:
ipv4_address: 192.168.71.131 ipv4_address: 192.168.71.131
oai-amf: oai-amf:
container_name: "rfsim5g-oai-amf" container_name: "rfsim5g-oai-amf"
image: oaisoftwarealliance/oai-amf:v1.5.0 image: oaisoftwarealliance/oai-amf:v2.0.0
environment: environment:
- TZ=Europe/1 - TZ=Europe/paris
- MCC=208 volumes:
- MNC=99 - ./mini_nonrf_config_3slices.yaml:/openair-amf/etc/config.yaml
- REGION_ID=128
- AMF_SET_ID=1
- SERVED_GUAMI_MCC_0=208
- SERVED_GUAMI_MNC_0=99
- SERVED_GUAMI_REGION_ID_0=128
- SERVED_GUAMI_AMF_SET_ID_0=1
- SERVED_GUAMI_MCC_1=460
- SERVED_GUAMI_MNC_1=11
- SERVED_GUAMI_REGION_ID_1=10
- SERVED_GUAMI_AMF_SET_ID_1=1
- PLMN_SUPPORT_MCC=208
- PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001
# 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
- SMF_INSTANCE_ID_0=1
- SMF_FQDN_0=oai-smf
- SMF_IPV4_ADDR_0=192.168.71.133
- SELECTED_0=true
# 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
# NF registration
- NRF_IPV4_ADDRESS=192.168.71.130
- NRF_FQDN=oai-nrf
- NF_REGISTRATION=yes
- SMF_SELECTION=yes
- USE_FQDN_DNS=yes
- USE_HTTP2=no
depends_on: depends_on:
- oai-nrf
- mysql - mysql
networks: networks:
core_net: core_net:
ipv4_address: 192.168.71.132 ipv4_address: 192.168.71.132
oai-smf: oai-smf:
container_name: "rfsim5g-oai-smf" container_name: "rfsim5g-oai-smf"
image: oaisoftwarealliance/oai-smf:v1.5.0 image: oaisoftwarealliance/oai-smf:v2.0.0
environment: environment:
- TZ=Europe/1 - TZ=Europe/Paris
- SMF_INTERFACE_NAME_FOR_N4=eth0 volumes:
- SMF_INTERFACE_NAME_FOR_SBI=eth0 - ./mini_nonrf_config_3slices.yaml:/openair-smf/etc/config.yaml
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
- AMF_IPV4_ADDRESS=192.168.71.132
- AMF_FQDN=oai-amf
- UPF_IPV4_ADDRESS=192.168.71.134
- UPF_FQDN_0=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130
- 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_SST1=2
- NSSAI_SST2=3
- SESSION_AMBR_UL0=200Mbps
- SESSION_AMBR_DL0=400Mbps
- DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1
- ENABLE_USAGE_REPORTING=no
depends_on: depends_on:
- oai-nrf
- oai-amf - oai-amf
networks: networks:
core_net: core_net:
ipv4_address: 192.168.71.133 ipv4_address: 192.168.71.133
oai-spgwu: oai-upf:
container_name: "rfsim5g-oai-spgwu" container_name: "rfsim5g-oai-upf"
image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 image: oaisoftwarealliance/oai-upf:v2.0.0
environment: environment:
- TZ=Europe/1 - TZ=Europe/Paris
- SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 volumes:
- SGW_INTERFACE_NAME_FOR_SX=eth0 - ./mini_nonrf_config_3slices.yaml:/openair-upf/etc/config.yaml
- PGW_INTERFACE_NAME_FOR_SGI=eth0
- NETWORK_UE_NAT_OPTION=yes
- NETWORK_UE_IP=12.1.1.0/24
- ENABLE_5G_FEATURES=yes
- REGISTER_NRF=yes
- USE_FQDN_NRF=yes
- UPF_FQDN_5G=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130
- NRF_FQDN=oai-nrf
# 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: depends_on:
- oai-nrf
- oai-smf - oai-smf
cap_add: cap_add:
- NET_ADMIN - NET_ADMIN
...@@ -153,6 +62,8 @@ services: ...@@ -153,6 +62,8 @@ services:
networks: networks:
core_net: core_net:
ipv4_address: 192.168.71.134 ipv4_address: 192.168.71.134
traffic_net:
ipv4_address: 192.168.72.134
oai-cucp: oai-cucp:
image: oaisoftwarealliance/oai-gnb:develop image: oaisoftwarealliance/oai-gnb:develop
...@@ -164,7 +75,7 @@ services: ...@@ -164,7 +75,7 @@ services:
--gNBs.[0].local_s_address 192.168.72.2 --gNBs.[0].local_s_address 192.168.72.2
ASAN_OPTIONS: detect_leaks=0 ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-spgwu - oai-upf
networks: networks:
core_net: core_net:
ipv4_address: 192.168.71.150 ipv4_address: 192.168.71.150
...@@ -366,7 +277,6 @@ services: ...@@ -366,7 +277,6 @@ services:
-r 106 --numerology 1 -C 3619200000 -r 106 --numerology 1 -C 3619200000
--uicc0.imsi 208990100001100 --uicc0.imsi 208990100001100
--rfsimulator.serveraddr 192.168.78.2 --rfsimulator.serveraddr 192.168.78.2
ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-du - oai-du
networks: networks:
...@@ -389,7 +299,6 @@ services: ...@@ -389,7 +299,6 @@ services:
-r 106 --numerology 1 -C 3619200000 -r 106 --numerology 1 -C 3619200000
--uicc0.imsi 208990100001101 --uicc0.nssai_sst 2 --uicc0.imsi 208990100001101 --uicc0.nssai_sst 2
--rfsimulator.serveraddr 192.168.78.3 --rfsimulator.serveraddr 192.168.78.3
ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-du2 - oai-du2
networks: networks:
...@@ -435,6 +344,14 @@ networks: ...@@ -435,6 +344,14 @@ networks:
- subnet: 192.168.71.128/26 - subnet: 192.168.71.128/26
driver_opts: driver_opts:
com.docker.network.bridge.name: "rfsim5g-core" com.docker.network.bridge.name: "rfsim5g-core"
traffic_net:
driver: bridge
name: rfsim5g-oai-traffic-net
ipam:
config:
- subnet: 192.168.72.128/26
driver_opts:
com.docker.network.bridge.name: "rfsim5g-traffic"
f1c_net: f1c_net:
driver: bridge driver: bridge
name: rfsim5g-oai-f1c-net name: rfsim5g-oai-f1c-net
......
################################################################################
# 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
################################################################################
# OAI CN Configuration File
### This file can be used by all OAI NFs
### Some fields are specific to an NF and will be ignored by other NFs
## NOTE ON YAML ANCHORS ##
# We use YAML anchors to ease the configuration and to avoid duplicating parts of the configuration.
# This is especially true for the SNSSAIs, as we have to define them for multiple NFs.
# Please note that the use of anchors is not mandatory, and you can define the SNSSAI in each NF yourself.
# You can read more about anchors here: https://yaml.org/spec/1.2.2/#anchors-and-aliases
############# Common configuration
# Log level for all the NFs
log_level:
general: debug
# If you enable registration, the other NFs will use the NRF discovery mechanism
register_nf:
general: no
http_version: 1
############## SBI Interfaces
### Each NF takes its local SBI interfaces and remote interfaces from here, unless it gets them using NRF discovery mechanisms
nfs:
amf:
host: oai-amf
sbi:
port: 80
api_version: v1
interface_name: eth0
n2:
interface_name: eth0
port: 38412
smf:
host: oai-smf
sbi:
port: 80
api_version: v1
interface_name: eth0
n4:
interface_name: eth0
port: 8805
upf:
host: oai-upf
sbi:
port: 80
api_version: v1
interface_name: eth0
n3:
interface_name: eth0
port: 2152
n4:
interface_name: eth0
port: 8805
n6:
interface_name: eth1
n9:
interface_name: eth0
port: 2152
#### Common for UDR and AMF
database:
host: mysql
user: test
type: mysql
password: test
database_name: oai_db
generate_random: true
connection_timeout: 300 # seconds
## general single_nssai configuration
## Defines YAML anchors, which are reused in the config file
snssais:
- &embb_slice1
sst: 1
- &embb_slice2
sst: 2
- &embb_slice3
sst: 3
############## NF-specific configuration
amf:
amf_name: "OAI-AMF"
# This really depends on if we want to keep the "mini" version or not
support_features_options:
enable_simple_scenario: yes # "no" by default with the normal deployment scenarios with AMF/SMF/UPF/AUSF/UDM/UDR/NRF.
# set it to "yes" to use with the minimalist deployment scenario (including only AMF/SMF/UPF) by using the internal AUSF/UDM implemented inside AMF.
# There's no NRF in this scenario, SMF info is taken from "nfs" section.
enable_nssf: no
enable_smf_selection: no
relative_capacity: 30
statistics_timer_interval: 20 # in seconds
emergency_support: false
served_guami_list:
- mcc: 208
mnc: 99
amf_region_id: 01
amf_set_id: 001
amf_pointer: 01
plmn_support_list:
- mcc: 208
mnc: 99
tac: 0x0001
nssai:
- *embb_slice1
- *embb_slice2
- *embb_slice3
supported_integrity_algorithms:
- "NIA0"
- "NIA1"
- "NIA2"
supported_encryption_algorithms:
- "NEA0"
- "NEA1"
- "NEA2"
smf:
ue_mtu: 1500
support_features:
use_local_subscription_info: yes # Use infos from local_subscription_info or from UDM
use_local_pcc_rules: yes # Use infos from local_pcc_rules or from PCF
upfs:
- host: oai-upf
port: 8805
config:
enable_usage_reporting: no
# follows UPFInfo from 3GPP TS 29.510, currently only these values from interfaceUpfInfoList are supported
upf_info:
interfaceUpfInfoList:
- interfaceType: "N3"
networkInstance: "access.oai.org"
- interfaceType: "N6"
networkInstance: "core.oai.org"
ue_dns:
primary_ipv4: "172.21.3.100"
primary_ipv6: "2001:4860:4860::8888"
secondary_ipv4: "8.8.8.8"
secondary_ipv6: "2001:4860:4860::8888"
ims:
pcscf_ipv4: "127.0.0.1"
pcscf_ipv6: "fe80::7915:f408:1787:db8b"
# the DNN you configure here should be configured in "dnns"
# follows the SmfInfo datatype from 3GPP TS 29.510
smf_info:
sNssaiSmfInfoList:
- sNssai: *embb_slice1
dnnSmfInfoList:
- dnn: "oai"
local_subscription_infos:
- single_nssai: *embb_slice1
dnn: "oai"
qos_profile:
5qi: 9
session_ambr_ul: "200Mbps"
session_ambr_dl: "400Mbps"
- single_nssai: *embb_slice2
dnn: "oai"
qos_profile:
5qi: 9
session_ambr_ul: "200Mbps"
session_ambr_dl: "400Mbps"
- single_nssai: *embb_slice3
dnn: "oai"
qos_profile:
5qi: 9
session_ambr_ul: "200Mbps"
session_ambr_dl: "400Mbps"
upf:
support_features:
enable_bpf_datapath: no # If "on": BPF is used as datapath else simpleswitch is used, DEFAULT= off
enable_snat: yes # If "on": Source natting is done for UE, DEFAULT= off
remote_n6_gw: localhost # Dummy host since simple-switch does not use N6 GW
upf_info:
sNssaiUpfInfoList:
- sNssai: *embb_slice1
dnnUpfInfoList:
- dnn: "oai"
- sNssai: *embb_slice2
dnnUpfInfoList:
- dnn: "oai"
- sNssai: *embb_slice3
dnnUpfInfoList:
- dnn: "oai"
## DNN configuration
dnns:
- dnn: "oai"
pdu_session_type: "IPV4"
ipv4_subnet: "12.1.1.0/24"
version: '3.8' version: '3.8'
services: services:
oai-nrf:
container_name: "rfsim5g-oai-nrf"
image: oaisoftwarealliance/oai-nrf:v1.5.0
environment:
- NRF_INTERFACE_NAME_FOR_SBI=eth0
- TZ=Europe/Paris
networks:
public_net:
ipv4_address: 192.168.71.130
mysql: mysql:
container_name: "rfsim5g-mysql" container_name: "rfsim5g-mysql"
image: mysql:8.0 image: mysql:8.0
...@@ -31,108 +22,36 @@ services: ...@@ -31,108 +22,36 @@ services:
ipv4_address: 192.168.71.131 ipv4_address: 192.168.71.131
oai-amf: oai-amf:
container_name: "rfsim5g-oai-amf" container_name: "rfsim5g-oai-amf"
image: oaisoftwarealliance/oai-amf:v1.5.0 image: oaisoftwarealliance/oai-amf:v2.0.0
environment: environment:
- TZ=Europe/paris - TZ=Europe/paris
- MCC=208 volumes:
- MNC=99 - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-amf/etc/config.yaml
- REGION_ID=128
- AMF_SET_ID=1
- SERVED_GUAMI_MCC_0=208
- SERVED_GUAMI_MNC_0=99
- SERVED_GUAMI_REGION_ID_0=128
- SERVED_GUAMI_AMF_SET_ID_0=1
- SERVED_GUAMI_MCC_1=460
- SERVED_GUAMI_MNC_1=11
- SERVED_GUAMI_REGION_ID_1=10
- SERVED_GUAMI_AMF_SET_ID_1=1
- PLMN_SUPPORT_MCC=208
- PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001
# Only one slice is defined (1, 0xFFFFFF).
- SST_0=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=192.168.71.133
- SELECTED_0=true
# 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
# NF registration
- NRF_IPV4_ADDRESS=192.168.71.130
- NRF_FQDN=oai-nrf
- NF_REGISTRATION=yes
- SMF_SELECTION=yes
- USE_FQDN_DNS=yes
- USE_HTTP2=no
depends_on: depends_on:
- oai-nrf
- mysql - mysql
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.132 ipv4_address: 192.168.71.132
oai-smf: oai-smf:
container_name: "rfsim5g-oai-smf" container_name: "rfsim5g-oai-smf"
image: oaisoftwarealliance/oai-smf:v1.5.0 image: oaisoftwarealliance/oai-smf:v2.0.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- SMF_INTERFACE_NAME_FOR_N4=eth0 volumes:
- SMF_INTERFACE_NAME_FOR_SBI=eth0 - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-smf/etc/config.yaml
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
- AMF_IPV4_ADDRESS=192.168.71.132
- AMF_FQDN=oai-amf
- UPF_IPV4_ADDRESS=192.168.71.134
- UPF_FQDN_0=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130
- 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
- SESSION_AMBR_UL0=200Mbps
- SESSION_AMBR_DL0=400Mbps
- DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1
- ENABLE_USAGE_REPORTING=no
depends_on: depends_on:
- oai-nrf
- oai-amf - oai-amf
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.133 ipv4_address: 192.168.71.133
oai-spgwu: oai-upf:
container_name: "rfsim5g-oai-spgwu" container_name: "rfsim5g-oai-upf"
image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 image: oaisoftwarealliance/oai-upf:v2.0.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 volumes:
- SGW_INTERFACE_NAME_FOR_SX=eth0 - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-upf/etc/config.yaml
- PGW_INTERFACE_NAME_FOR_SGI=eth0
- NETWORK_UE_NAT_OPTION=yes
- NETWORK_UE_IP=12.1.1.0/24
- ENABLE_5G_FEATURES=yes
- REGISTER_NRF=yes
- USE_FQDN_NRF=yes
- UPF_FQDN_5G=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130
- NRF_FQDN=oai-nrf
# Only one slice is defined (1, 0xFFFFFF)
- NSSAI_SST_0=1
- NSSAI_SD_0=0xffffff
- DNN_0=oai
depends_on: depends_on:
- oai-nrf
- oai-smf - oai-smf
cap_add: cap_add:
- NET_ADMIN - NET_ADMIN
...@@ -153,7 +72,7 @@ services: ...@@ -153,7 +72,7 @@ services:
"iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "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" "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
depends_on: depends_on:
- oai-spgwu - oai-upf
networks: networks:
traffic_net: traffic_net:
ipv4_address: 192.168.72.135 ipv4_address: 192.168.72.135
...@@ -188,7 +107,6 @@ services: ...@@ -188,7 +107,6 @@ services:
container_name: rfsim5g-oai-nr-ue container_name: rfsim5g-oai-nr-ue
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 25 --numerology 0 --uicc0.imsi 208990100001100 --band 66 -C 2152260000 --CO -400000000 --ssb 76 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 25 --numerology 0 --uicc0.imsi 208990100001100 --band 66 -C 2152260000 --CO -400000000 --ssb 76 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
......
...@@ -76,6 +76,8 @@ static inline const char *rnti_types(nr_rnti_type_t rr) ...@@ -76,6 +76,8 @@ static inline const char *rnti_types(nr_rnti_type_t rr)
} }
#undef R #undef R
#define NR_MAX_NB_LAYERS 4 // 8
typedef enum { typedef enum {
nr_FR1 = 0, nr_FR1 = 0,
nr_FR2 nr_FR2
......
...@@ -132,3 +132,21 @@ void set_priority(int priority) ...@@ -132,3 +132,21 @@ void set_priority(int priority)
abort(); abort();
} }
} }
/**
* @brief Convert a version string x.y.z into numbers.
*
* The function takes a version string of format "x.y.z" where x is the major
* version number, y minor, z patch. It tries to match version, and outputs the
* numbers in the correspondingly named variables.
*
* @return The number of version parts matched (should be three on x.y.z).
*/
int read_version(const char *version, uint8_t *major, uint8_t *minor, uint8_t *patch)
{
int ret = sscanf(version, "%hhu.%hhu.%hhu", major, minor, patch);
// EOF means "end of input reached or matching failure"
if (ret == EOF)
return 3;
return ret; // ret has number of items matched
}
...@@ -107,6 +107,10 @@ void set_priority(int priority); ...@@ -107,6 +107,10 @@ void set_priority(int priority);
char *itoa(int i); char *itoa(int i);
#define STRINGIFY(S) #S
#define TO_STRING(S) STRINGIFY(S)
int read_version(const char *version, uint8_t *major, uint8_t *minor, uint8_t *patch);
#define findInList(keY, result, list, element_type) {\ #define findInList(keY, result, list, element_type) {\
int i;\ int i;\
for (i=0; i<sizeof(list)/sizeof(element_type) ; i++)\ for (i=0; i<sizeof(list)/sizeof(element_type) ; i++)\
......
...@@ -21,11 +21,11 @@ ...@@ -21,11 +21,11 @@
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# #
# Dockerfile for the Open-Air-Interface BUILD service # Dockerfile for the Open-Air-Interface BUILD service
# Valid for Rocky 8.7 # Valid for Rocky 9
# #
#--------------------------------------------------------------------- #---------------------------------------------------------------------
ARG BASE_IMAGE=docker.io/rockylinux:8.7 ARG BASE_IMAGE=docker.io/rockylinux:9
FROM $BASE_IMAGE AS ran-base FROM $BASE_IMAGE AS ran-base
ENV TZ=Europe/Paris ENV TZ=Europe/Paris
...@@ -33,7 +33,6 @@ ENV BUILD_UHD_FROM_SOURCE=True ...@@ -33,7 +33,6 @@ ENV BUILD_UHD_FROM_SOURCE=True
ENV UHD_VERSION=4.4.0.0 ENV UHD_VERSION=4.4.0.0
RUN dnf install 'dnf-command(config-manager)' -y && \ RUN dnf install 'dnf-command(config-manager)' -y && \
dnf config-manager --set-enabled powertools && \
dnf install epel-release -y && crb enable && \ dnf install epel-release -y && crb enable && \
dnf update -y && \ dnf update -y && \
dnf install -y \ dnf install -y \
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# #
# Dockerfile for the Open-Air-Interface BUILD service # Dockerfile for the Open-Air-Interface BUILD service
# Valid for Rocky 8.7 # Valid for Rocky 9
# #
#--------------------------------------------------------------------- #---------------------------------------------------------------------
......
...@@ -21,17 +21,15 @@ ...@@ -21,17 +21,15 @@
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# #
# Dockerfile for the Open-Air-Interface BUILD service # Dockerfile for the Open-Air-Interface BUILD service
# Valid for Rocky 8.7 # Valid for Rocky 9
# #
#--------------------------------------------------------------------- #---------------------------------------------------------------------
ARG BASE_IMAGE=docker.io/rockylinux:8.7 ARG BASE_IMAGE=docker.io/rockylinux:9
FROM ran-base:latest AS enb-base FROM ran-base:latest AS enb-base
FROM ran-build:latest AS enb-build FROM ran-build:latest AS enb-build
RUN python3 ./docker/scripts/generateTemplate.py ./docker/scripts/enb_parameters.yaml && \
cp /oai-ran/docker/scripts/enb_entrypoint.sh /oai-ran/docker/scripts/entrypoint.sh
#start from scratch for target executable #start from scratch for target executable
FROM $BASE_IMAGE as oai-enb FROM $BASE_IMAGE as oai-enb
...@@ -56,9 +54,9 @@ RUN dnf update -y && \ ...@@ -56,9 +54,9 @@ RUN dnf update -y && \
WORKDIR /opt/oai-enb/bin WORKDIR /opt/oai-enb/bin
COPY --from=enb-build \ COPY --from=enb-build \
/oai-ran/cmake_targets/ran_build/build/lte-softmodem \ /oai-ran/cmake_targets/ran_build/build/lte-softmodem ./
/oai-ran/docker/scripts/entrypoint.sh \
./ COPY ./docker/scripts/enb_entrypoint.sh ./entrypoint.sh
COPY --from=enb-build \ COPY --from=enb-build \
/oai-ran/cmake_targets/ran_build/build/liboai_eth_transpro.so \ /oai-ran/cmake_targets/ran_build/build/liboai_eth_transpro.so \
...@@ -73,24 +71,25 @@ COPY --from=enb-build \ ...@@ -73,24 +71,25 @@ COPY --from=enb-build \
/usr/local/lib/ /usr/local/lib/
COPY --from=enb-base \ COPY --from=enb-base \
/lib64/libconfig.so.9 \ /lib64/libconfig.so.11 \
/lib64/libblas.so.3 \ /lib64/libblas.so.3 \
/lib64/libcblas.so.3 \
/lib64/liblapack.so.3 \ /lib64/liblapack.so.3 \
/lib64/liblapacke.so.3 \ /lib64/liblapacke.so.3 \
/lib64/libboost_chrono.so.1.66.0 \ /lib64/libboost_chrono.so.1.75.0 \
/lib64/libboost_date_time.so.1.66.0 \ /lib64/libboost_date_time.so.1.75.0 \
/lib64/libboost_filesystem.so.1.66.0 \ /lib64/libboost_filesystem.so.1.75.0 \
/lib64/libboost_program_options.so.1.66.0 \ /lib64/libboost_program_options.so.1.75.0 \
/lib64/libboost_serialization.so.1.66.0 \ /lib64/libboost_serialization.so.1.75.0 \
/lib64/libboost_thread.so.1.66.0 \ /lib64/libboost_thread.so.1.75.0 \
/lib64/libboost_system.so.1.66.0 \ /lib64/libboost_system.so.1.75.0 \
/lib64/libboost_unit_test_framework.so.1.66.0 \ /lib64/libboost_unit_test_framework.so.1.75.0 \
/lib64/libboost_atomic.so.1.66.0 \ /lib64/libboost_atomic.so.1.75.0 \
/lib64/libboost_timer.so.1.66.0 \ /lib64/libboost_timer.so.1.75.0 \
/lib64/libboost_regex.so.1.66.0 \ /lib64/libboost_regex.so.1.75.0 \
/lib64/libicudata.so.60 \ /lib64/libicudata.so.67 \
/lib64/libicui18n.so.60 \ /lib64/libicui18n.so.67 \
/lib64/libicuuc.so.60 \ /lib64/libicuuc.so.67 \
/lib64/ /lib64/
...@@ -116,10 +115,6 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai ...@@ -116,10 +115,6 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai
echo "ldd on libtelnetsrv.so" && ldd /usr/local/lib/libtelnetsrv.so && \ echo "ldd on libtelnetsrv.so" && ldd /usr/local/lib/libtelnetsrv.so && \
echo "ldd on libtelnetsrv_enb.so" && ldd /usr/local/lib/libtelnetsrv_enb.so echo "ldd on libtelnetsrv_enb.so" && ldd /usr/local/lib/libtelnetsrv_enb.so
# Copy the relevant configuration files for eNB
WORKDIR /opt/oai-enb/etc
COPY --from=enb-build /oai-ran/docker/etc .
WORKDIR /opt/oai-enb WORKDIR /opt/oai-enb
# 2152 --> S1U, GTP/UDP # 2152 --> S1U, GTP/UDP
......
...@@ -21,11 +21,11 @@ ...@@ -21,11 +21,11 @@
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# #
# Dockerfile for the Open-Air-Interface BUILD service # Dockerfile for the Open-Air-Interface BUILD service
# Valid for Rocky 8.7 # Valid for Rocky 9
# #
#--------------------------------------------------------------------- #---------------------------------------------------------------------
ARG BASE_IMAGE=docker.io/rockylinux:8.7 ARG BASE_IMAGE=docker.io/rockylinux:9
FROM ran-base:latest AS gnb-base FROM ran-base:latest AS gnb-base
FROM ran-build:latest AS gnb-build FROM ran-build:latest AS gnb-build
...@@ -55,11 +55,11 @@ RUN dnf update -y && \ ...@@ -55,11 +55,11 @@ RUN dnf update -y && \
echo "/usr/local/lib" > /etc/ld.so.conf.d/local-lib.conf && \ echo "/usr/local/lib" > /etc/ld.so.conf.d/local-lib.conf && \
echo "/usr/local/lib64" >> /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 WORKDIR /opt/oai-gnb-aw2s/bin
COPY --from=gnb-build \ COPY --from=gnb-build /oai-ran/cmake_targets/ran_build/build/nr-softmodem ./
/oai-ran/cmake_targets/ran_build/build/nr-softmodem \ COPY ./docker/scripts/gnb-aw2s_entrypoint.sh /opt/oai-gnb-aw2s/bin/entrypoint.sh
./
COPY ./docker/scripts/gnb-aw2s_entrypoint.sh ./entrypoint.sh
COPY --from=gnb-build \ COPY --from=gnb-build \
/oai-ran/cmake_targets/ran_build/build/liboai_eth_transpro.so \ /oai-ran/cmake_targets/ran_build/build/liboai_eth_transpro.so \
...@@ -70,21 +70,30 @@ COPY --from=gnb-build \ ...@@ -70,21 +70,30 @@ COPY --from=gnb-build \
/oai-ran/cmake_targets/ran_build/build/libdfts.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*.so \
/oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \ /oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \
/usr/local/lib/libori.so \
/usr/local/lib/ /usr/local/lib/
COPY --from=gnb-base \ COPY --from=gnb-base \
/lib64/libconfig.so.9 \ /lib64/libconfig.so.11 \
/lib64/libforms.so.2 \ /lib64/libforms.so.2 \
/lib64/libblas.so.3 \ /lib64/libblas.so.3 \
/lib64/libcblas.so.3 \
/lib64/liblapack.so.3 \ /lib64/liblapack.so.3 \
/lib64/liblapacke.so.3 \ /lib64/liblapacke.so.3 \
/lib64/ /lib64/
RUN ln -s /usr/local/lib/libaw2sori_transpro.so /usr/local/lib/libthirdparty_transpro.so && \ RUN ln -s /usr/local/lib/libaw2sori_transpro.so /usr/local/lib/libthirdparty_transpro.so && \
ln -s /usr/local/lib/liboai_eth_transpro.so /usr/local/lib/liboai_transpro.so && \ ln -s /usr/local/lib/liboai_eth_transpro.so /usr/local/lib/liboai_transpro.so && \
ldconfig ldconfig && \
echo "ldd on nr-softmodem" && ldd /opt/oai-gnb-aw2s/bin/nr-softmodem && \
echo "ldd on liboai_eth_transpro.so" && ldd /usr/local/lib/liboai_eth_transpro.so && \
echo "ldd on librfsimulator.so" && ldd /usr/local/lib/librfsimulator.so && \
echo "ldd on libthirdparty_transpro.so" && ldd /usr/local/lib/libthirdparty_transpro.so && \
echo "ldd on libcoding.so" && ldd /usr/local/lib/libcoding.so && \
echo "ldd on libparams_libconfig.so" && ldd /usr/local/lib/libparams_libconfig.so && \
echo "ldd on libdfts.so" && ldd /usr/local/lib/libdfts.so && \
echo "ldd on libtelnetsrv.so" && ldd /usr/local/lib/libtelnetsrv.so
WORKDIR /opt/oai-gnb-aw2s WORKDIR /opt/oai-gnb-aw2s
ENTRYPOINT ["/opt/oai-gnb-aw2s/bin/entrypoint.sh"] ENTRYPOINT ["/opt/oai-gnb-aw2s/bin/entrypoint.sh"]
CMD ["/opt/oai-gnb-aw2s/bin/nr-softmodem", "-O", "/opt/oai-gnb-aw2s/etc/gnb.conf"] CMD ["/opt/oai-gnb-aw2s/bin/nr-softmodem", "-O", "/opt/oai-gnb-aw2s/etc/gnb.conf"]
...@@ -21,17 +21,15 @@ ...@@ -21,17 +21,15 @@
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# #
# Dockerfile for the Open-Air-Interface BUILD service # Dockerfile for the Open-Air-Interface BUILD service
# Valid for Rocky 8.7 # Valid for Rocky 9
# #
#--------------------------------------------------------------------- #---------------------------------------------------------------------
ARG BASE_IMAGE=docker.io/rockylinux:8.7 ARG BASE_IMAGE=docker.io/rockylinux:9
FROM ran-base:latest AS gnb-base FROM ran-base:latest AS gnb-base
FROM ran-build:latest AS gnb-build FROM ran-build:latest AS gnb-build
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 #start from scratch for target executable
FROM $BASE_IMAGE as oai-gnb FROM $BASE_IMAGE as oai-gnb
...@@ -57,9 +55,8 @@ RUN dnf update -y && \ ...@@ -57,9 +55,8 @@ RUN dnf update -y && \
WORKDIR /opt/oai-gnb/bin WORKDIR /opt/oai-gnb/bin
COPY --from=gnb-build \ COPY --from=gnb-build \
/oai-ran/cmake_targets/ran_build/build/nr-softmodem \ /oai-ran/cmake_targets/ran_build/build/nr-softmodem ./
/oai-ran/docker/scripts/entrypoint.sh \ COPY ./docker/scripts/gnb_entrypoint.sh ./entrypoint.sh
./
COPY --from=gnb-build \ COPY --from=gnb-build \
/oai-ran/cmake_targets/ran_build/build/liboai_eth_transpro.so \ /oai-ran/cmake_targets/ran_build/build/liboai_eth_transpro.so \
...@@ -74,25 +71,26 @@ COPY --from=gnb-build \ ...@@ -74,25 +71,26 @@ COPY --from=gnb-build \
/usr/local/lib/ /usr/local/lib/
COPY --from=gnb-base \ COPY --from=gnb-base \
/lib64/libconfig.so.9 \ /lib64/libconfig.so.11 \
/lib64/libforms.so.2 \ /lib64/libforms.so.2 \
/lib64/libblas.so.3 \ /lib64/libblas.so.3 \
/lib64/libcblas.so.3 \
/lib64/liblapack.so.3 \ /lib64/liblapack.so.3 \
/lib64/liblapacke.so.3 \ /lib64/liblapacke.so.3 \
/lib64/libboost_chrono.so.1.66.0 \ /lib64/libboost_chrono.so.1.75.0 \
/lib64/libboost_date_time.so.1.66.0 \ /lib64/libboost_date_time.so.1.75.0 \
/lib64/libboost_filesystem.so.1.66.0 \ /lib64/libboost_filesystem.so.1.75.0 \
/lib64/libboost_program_options.so.1.66.0 \ /lib64/libboost_program_options.so.1.75.0 \
/lib64/libboost_serialization.so.1.66.0 \ /lib64/libboost_serialization.so.1.75.0 \
/lib64/libboost_thread.so.1.66.0 \ /lib64/libboost_thread.so.1.75.0 \
/lib64/libboost_system.so.1.66.0 \ /lib64/libboost_system.so.1.75.0 \
/lib64/libboost_unit_test_framework.so.1.66.0 \ /lib64/libboost_unit_test_framework.so.1.75.0 \
/lib64/libboost_atomic.so.1.66.0 \ /lib64/libboost_atomic.so.1.75.0 \
/lib64/libboost_timer.so.1.66.0 \ /lib64/libboost_timer.so.1.75.0 \
/lib64/libboost_regex.so.1.66.0 \ /lib64/libboost_regex.so.1.75.0 \
/lib64/libicudata.so.60 \ /lib64/libicudata.so.67 \
/lib64/libicui18n.so.60 \ /lib64/libicui18n.so.67 \
/lib64/libicuuc.so.60 \ /lib64/libicuuc.so.67 \
/lib64/ /lib64/
# Now we are copying from builder-image the UHD files. # Now we are copying from builder-image the UHD files.
...@@ -104,11 +102,16 @@ WORKDIR /usr/local/share/uhd/rfnoc ...@@ -104,11 +102,16 @@ WORKDIR /usr/local/share/uhd/rfnoc
COPY --from=gnb-base /usr/local/share/uhd/rfnoc/ . COPY --from=gnb-base /usr/local/share/uhd/rfnoc/ .
RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai_device.so" && \ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai_device.so" && \
ldconfig ldconfig && \
echo "ldd on nr-softmodem" && ldd /opt/oai-gnb/bin/nr-softmodem && \
# Copy the relevant configuration files for gNB echo "ldd on liboai_eth_transpro.so" && ldd /usr/local/lib/liboai_eth_transpro.so && \
WORKDIR /opt/oai-gnb/etc echo "ldd on librfsimulator.so" && ldd /usr/local/lib/librfsimulator.so && \
COPY --from=gnb-build /oai-ran/docker/etc . echo "ldd on liboai_usrpdevif.so" && ldd /usr/local/lib/liboai_usrpdevif.so && \
echo "ldd on libcoding.so" && ldd /usr/local/lib/libcoding.so && \
echo "ldd on libparams_libconfig.so" && ldd /usr/local/lib/libparams_libconfig.so && \
echo "ldd on libdfts.so" && ldd /usr/local/lib/libdfts.so && \
echo "ldd on libtelnetsrv.so" && ldd /usr/local/lib/libtelnetsrv.so && \
echo "ldd on libtelnetsrv_ci.so" && ldd /usr/local/lib/libtelnetsrv_ci.so
WORKDIR /opt/oai-gnb WORKDIR /opt/oai-gnb
#EXPOSE 2152/udp # S1U, GTP/UDP #EXPOSE 2152/udp # S1U, GTP/UDP
......
...@@ -21,18 +21,15 @@ ...@@ -21,18 +21,15 @@
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# #
# Dockerfile for the Open-Air-Interface BUILD service # Dockerfile for the Open-Air-Interface BUILD service
# Valid for Rocky 8.7 # Valid for Rocky 9
# #
#--------------------------------------------------------------------- #---------------------------------------------------------------------
ARG BASE_IMAGE=docker.io/rockylinux:8.7 ARG BASE_IMAGE=docker.io/rockylinux:9
FROM ran-base:latest AS lte-ue-base FROM ran-base:latest AS lte-ue-base
FROM ran-build:latest AS lte-ue-build FROM ran-build:latest AS lte-ue-build
RUN python3 ./docker/scripts/generateTemplate.py ./docker/scripts/lte_ue_parameters.yaml && \
python3 ./docker/scripts/generateTemplate.py ./docker/scripts/lte_ue_sim_parameters.yaml && \
cp /oai-ran/docker/scripts/lte_ue_entrypoint.sh /oai-ran/docker/scripts/entrypoint.sh
#start from scratch for target executable #start from scratch for target executable
FROM $BASE_IMAGE as oai-lte-ue FROM $BASE_IMAGE as oai-lte-ue
...@@ -58,12 +55,12 @@ RUN dnf update -y && \ ...@@ -58,12 +55,12 @@ RUN dnf update -y && \
WORKDIR /opt/oai-lte-ue/bin WORKDIR /opt/oai-lte-ue/bin
COPY --from=lte-ue-build \ COPY --from=lte-ue-build \
/oai-ran/cmake_targets/ran_build/build/lte-uesoftmodem \ /oai-ran/cmake_targets/ran_build/build/lte-uesoftmodem \
/oai-ran/docker/scripts/entrypoint.sh \
/oai-ran/cmake_targets/nas_sim_tools/build/conf2uedata \ /oai-ran/cmake_targets/nas_sim_tools/build/conf2uedata \
/oai-ran/cmake_targets/nas_sim_tools/build/nvram \ /oai-ran/cmake_targets/nas_sim_tools/build/nvram \
/oai-ran/cmake_targets/nas_sim_tools/build/usim \ /oai-ran/cmake_targets/nas_sim_tools/build/usim \
./ ./
COPY ./docker/scripts/lte_ue_entrypoint.sh ./entrypoint.sh
COPY --from=lte-ue-build \ COPY --from=lte-ue-build \
/oai-ran/cmake_targets/ran_build/build/liboai_eth_transpro.so \ /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/librfsimulator.so \
...@@ -75,24 +72,25 @@ COPY --from=lte-ue-build \ ...@@ -75,24 +72,25 @@ COPY --from=lte-ue-build \
/usr/local/lib/ /usr/local/lib/
COPY --from=lte-ue-base \ COPY --from=lte-ue-base \
/lib64/libconfig.so.9 \ /lib64/libconfig.so.11 \
/lib64/libblas.so.3 \ /lib64/libblas.so.3 \
/lib64/libcblas.so.3 \
/lib64/liblapack.so.3 \ /lib64/liblapack.so.3 \
/lib64/liblapacke.so.3 \ /lib64/liblapacke.so.3 \
/lib64/libboost_chrono.so.1.66.0 \ /lib64/libboost_chrono.so.1.75.0 \
/lib64/libboost_date_time.so.1.66.0 \ /lib64/libboost_date_time.so.1.75.0 \
/lib64/libboost_filesystem.so.1.66.0 \ /lib64/libboost_filesystem.so.1.75.0 \
/lib64/libboost_program_options.so.1.66.0 \ /lib64/libboost_program_options.so.1.75.0 \
/lib64/libboost_serialization.so.1.66.0 \ /lib64/libboost_serialization.so.1.75.0 \
/lib64/libboost_thread.so.1.66.0 \ /lib64/libboost_thread.so.1.75.0 \
/lib64/libboost_system.so.1.66.0 \ /lib64/libboost_system.so.1.75.0 \
/lib64/libboost_unit_test_framework.so.1.66.0 \ /lib64/libboost_unit_test_framework.so.1.75.0 \
/lib64/libboost_atomic.so.1.66.0 \ /lib64/libboost_atomic.so.1.75.0 \
/lib64/libboost_timer.so.1.66.0 \ /lib64/libboost_timer.so.1.75.0 \
/lib64/libboost_regex.so.1.66.0 \ /lib64/libboost_regex.so.1.75.0 \
/lib64/libicudata.so.60 \ /lib64/libicudata.so.67 \
/lib64/libicui18n.so.60 \ /lib64/libicui18n.so.67 \
/lib64/libicuuc.so.60 \ /lib64/libicuuc.so.67 \
/lib64/ /lib64/
# Now we are copying from builder-image the UHD files. # Now we are copying from builder-image the UHD files.
...@@ -106,17 +104,16 @@ COPY --from=lte-ue-base /usr/local/share/uhd/rfnoc/ . ...@@ -106,17 +104,16 @@ COPY --from=lte-ue-base /usr/local/share/uhd/rfnoc/ .
RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai_device.so" && \ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai_device.so" && \
ldconfig && \ ldconfig && \
echo "ldd on lte-uesoftmodem" && ldd /opt/oai-lte-ue/bin/lte-uesoftmodem && \ echo "ldd on lte-uesoftmodem" && ldd /opt/oai-lte-ue/bin/lte-uesoftmodem && \
echo "ldd on liboai_eth_transpro" && ldd /usr/local/lib/liboai_eth_transpro.so && \ echo "ldd on conf2uedata" && ldd /opt/oai-lte-ue/bin/conf2uedata && \
echo "ldd on librfsimulator" && ldd /usr/local/lib/librfsimulator.so && \ echo "ldd on nvram" && ldd /opt/oai-lte-ue/bin/nvram && \
echo "ldd on liboai_usrpdevif" && ldd /usr/local/lib/liboai_usrpdevif.so && \ echo "ldd on usim" && ldd /opt/oai-lte-ue/bin/usim && \
echo "ldd on libcoding" && ldd /usr/local/lib/libcoding.so && \ echo "ldd on liboai_eth_transpro.so" && ldd /usr/local/lib/liboai_eth_transpro.so && \
echo "ldd on libparams_libconfig" && ldd /usr/local/lib/libparams_libconfig.so && \ echo "ldd on librfsimulator.so" && ldd /usr/local/lib/librfsimulator.so && \
echo "ldd on libdfts" && ldd /usr/local/lib/libdfts.so && \ echo "ldd on liboai_usrpdevif.so" && ldd /usr/local/lib/liboai_usrpdevif.so && \
echo "ldd on libtelnetsrv" && ldd /usr/local/lib/libtelnetsrv.so echo "ldd on libcoding.so" && ldd /usr/local/lib/libcoding.so && \
echo "ldd on libparams_libconfig.so" && ldd /usr/local/lib/libparams_libconfig.so && \
# Copy the relevant configuration files for UE echo "ldd on libdfts.so" && ldd /usr/local/lib/libdfts.so && \
WORKDIR /opt/oai-lte-ue/etc echo "ldd on libtelnetsrv.so" && ldd /usr/local/lib/libtelnetsrv.so
COPY --from=lte-ue-build /oai-ran/docker/etc .
WORKDIR /opt/oai-lte-ue WORKDIR /opt/oai-lte-ue
CMD ["/opt/oai-lte-ue/bin/lte-uesoftmodem"] CMD ["/opt/oai-lte-ue/bin/lte-uesoftmodem"]
......
...@@ -21,11 +21,11 @@ ...@@ -21,11 +21,11 @@
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# #
# Dockerfile for the Open-Air-Interface BUILD service # Dockerfile for the Open-Air-Interface BUILD service
# Valid for Rocky 8.7 # Valid for Rocky 9
# #
#--------------------------------------------------------------------- #---------------------------------------------------------------------
ARG BASE_IMAGE=docker.io/rockylinux:8.7 ARG BASE_IMAGE=docker.io/rockylinux:9
FROM ran-base:latest AS gnb-base FROM ran-base:latest AS gnb-base
FROM ran-build:latest AS gnb-build FROM ran-build:latest AS gnb-build
...@@ -36,8 +36,9 @@ RUN cp /oai-ran/docker/scripts/gnb_entrypoint.sh /oai-ran/docker/scripts/entrypo ...@@ -36,8 +36,9 @@ RUN cp /oai-ran/docker/scripts/gnb_entrypoint.sh /oai-ran/docker/scripts/entrypo
FROM $BASE_IMAGE as oai-nr-cuup FROM $BASE_IMAGE as oai-nr-cuup
ENV TZ=Europe/Paris ENV TZ=Europe/Paris
RUN dnf update -y && \ RUN yum repolist --disablerepo=* && \
dnf install -y \ yum update -y && \
yum install -y \
procps-ng \ procps-ng \
lksctp-tools \ lksctp-tools \
tzdata \ tzdata \
...@@ -59,8 +60,9 @@ COPY --from=gnb-build \ ...@@ -59,8 +60,9 @@ COPY --from=gnb-build \
/usr/local/lib/ /usr/local/lib/
COPY --from=gnb-base \ COPY --from=gnb-base \
/lib64/libconfig.so.9 \ /lib64/libconfig.so.11 \
/lib64/libblas.so.3 \ /lib64/libblas.so.3 \
/lib64/libcblas.so.3 \
/lib64/liblapack.so.3 \ /lib64/liblapack.so.3 \
/lib64/liblapacke.so.3 \ /lib64/liblapacke.so.3 \
/lib64/ /lib64/
......
...@@ -21,17 +21,15 @@ ...@@ -21,17 +21,15 @@
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# #
# Dockerfile for the Open-Air-Interface BUILD service # Dockerfile for the Open-Air-Interface BUILD service
# Valid for Rocky 8.7 # Valid for Rocky 9
# #
#--------------------------------------------------------------------- #---------------------------------------------------------------------
ARG BASE_IMAGE=docker.io/rockylinux:8.7 ARG BASE_IMAGE=docker.io/rockylinux:9
FROM ran-base:latest AS nr-ue-base FROM ran-base:latest AS nr-ue-base
FROM ran-build:latest AS nr-ue-build FROM ran-build:latest AS nr-ue-build
RUN python3 ./docker/scripts/generateTemplate.py ./docker/scripts/nr_ue_parameters.yaml && \
cp /oai-ran/docker/scripts/nr_ue_entrypoint.sh /oai-ran/docker/scripts/entrypoint.sh
#start from scratch for target executable #start from scratch for target executable
FROM $BASE_IMAGE as oai-nr-ue FROM $BASE_IMAGE as oai-nr-ue
...@@ -59,9 +57,8 @@ RUN dnf update -y && \ ...@@ -59,9 +57,8 @@ RUN dnf update -y && \
WORKDIR /opt/oai-nr-ue/bin WORKDIR /opt/oai-nr-ue/bin
COPY --from=nr-ue-build \ COPY --from=nr-ue-build \
/oai-ran/cmake_targets/ran_build/build/nr-uesoftmodem \ /oai-ran/cmake_targets/ran_build/build/nr-uesoftmodem \
/oai-ran/docker/scripts/entrypoint.sh \
./ ./
COPY ./docker/scripts/nr_ue_entrypoint.sh ./entrypoint.sh
WORKDIR /opt/oai-nr-ue/etc WORKDIR /opt/oai-nr-ue/etc
COPY --from=nr-ue-build \ COPY --from=nr-ue-build \
...@@ -77,25 +74,26 @@ COPY --from=nr-ue-build \ ...@@ -77,25 +74,26 @@ COPY --from=nr-ue-build \
/usr/local/lib/ /usr/local/lib/
COPY --from=nr-ue-base \ COPY --from=nr-ue-base \
/lib64/libconfig.so.9 \ /lib64/libconfig.so.11 \
/lib64/libblas.so.3 \ /lib64/libblas.so.3 \
/lib64/libcblas.so.3 \
/lib64/liblapack.so.3 \ /lib64/liblapack.so.3 \
/lib64/liblapacke.so.3 \ /lib64/liblapacke.so.3 \
/lib64/libforms.so.2 \ /lib64/libforms.so.2 \
/lib64/libboost_chrono.so.1.66.0 \ /lib64/libboost_chrono.so.1.75.0 \
/lib64/libboost_date_time.so.1.66.0 \ /lib64/libboost_date_time.so.1.75.0 \
/lib64/libboost_filesystem.so.1.66.0 \ /lib64/libboost_filesystem.so.1.75.0 \
/lib64/libboost_program_options.so.1.66.0 \ /lib64/libboost_program_options.so.1.75.0 \
/lib64/libboost_serialization.so.1.66.0 \ /lib64/libboost_serialization.so.1.75.0 \
/lib64/libboost_thread.so.1.66.0 \ /lib64/libboost_thread.so.1.75.0 \
/lib64/libboost_system.so.1.66.0 \ /lib64/libboost_system.so.1.75.0 \
/lib64/libboost_unit_test_framework.so.1.66.0 \ /lib64/libboost_unit_test_framework.so.1.75.0 \
/lib64/libboost_atomic.so.1.66.0 \ /lib64/libboost_atomic.so.1.75.0 \
/lib64/libboost_timer.so.1.66.0 \ /lib64/libboost_timer.so.1.75.0 \
/lib64/libboost_regex.so.1.66.0 \ /lib64/libboost_regex.so.1.75.0 \
/lib64/libicudata.so.60 \ /lib64/libicudata.so.67 \
/lib64/libicui18n.so.60 \ /lib64/libicui18n.so.67 \
/lib64/libicuuc.so.60 \ /lib64/libicuuc.so.67 \
/lib64/ /lib64/
# Now we are copying from builder-image the UHD files. # Now we are copying from builder-image the UHD files.
...@@ -107,11 +105,16 @@ WORKDIR /usr/local/share/uhd/rfnoc ...@@ -107,11 +105,16 @@ WORKDIR /usr/local/share/uhd/rfnoc
COPY --from=nr-ue-base /usr/local/share/uhd/rfnoc/ . COPY --from=nr-ue-base /usr/local/share/uhd/rfnoc/ .
RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai_device.so" && \ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai_device.so" && \
ldconfig ldconfig && \
echo "ldd on nr-uesoftmodem" && ldd /opt/oai-nr-ue/bin/nr-uesoftmodem && \
# Copy the relevant configuration files for eNB echo "ldd on liboai_eth_transpro.so" && ldd /usr/local/lib/liboai_eth_transpro.so && \
WORKDIR /opt/oai-nr-ue/etc echo "ldd on librfsimulator.so" && ldd /usr/local/lib/librfsimulator.so && \
COPY --from=nr-ue-build /oai-ran/ci-scripts/conf_files/ue.* . echo "ldd on liboai_usrpdevif.so" && ldd /usr/local/lib/liboai_usrpdevif.so && \
echo "ldd on libcoding.so" && ldd /usr/local/lib/libcoding.so && \
echo "ldd on libparams_libconfig.so" && ldd /usr/local/lib/libparams_libconfig.so && \
echo "ldd on libdfts.so" && ldd /usr/local/lib/libdfts.so && \
echo "ldd on libtelnetsrv.so" && ldd /usr/local/lib/libtelnetsrv.so && \
echo "ldd on libtelnetsrv_5Gue.so" && ldd /usr/local/lib/libtelnetsrv_5Gue.so
WORKDIR /opt/oai-nr-ue WORKDIR /opt/oai-nr-ue
CMD ["/opt/oai-nr-ue/bin/nr-uesoftmodem", "-O", "/opt/oai-nr-ue/etc/nr-ue.conf"] CMD ["/opt/oai-nr-ue/bin/nr-uesoftmodem", "-O", "/opt/oai-nr-ue/etc/nr-ue.conf"]
......
...@@ -39,6 +39,42 @@ int asn1_xer_print; ...@@ -39,6 +39,42 @@ int asn1_xer_print;
int oai_exit = 0; int oai_exit = 0;
instance_t CUuniqInstance = 0; instance_t CUuniqInstance = 0;
#ifdef E2_AGENT
#include "openair2/E2AP/flexric/src/agent/e2_agent_api.h"
#include "openair2/E2AP/RAN_FUNCTION/init_ran_func.h"
static void initialize_agent(ngran_node_t node_type, e2_agent_args_t oai_args)
{
AssertFatal(oai_args.sm_dir != NULL , "Please, specify the directory where the SMs are located in the config file, i.e., add in config file the next line: e2_agent = {near_ric_ip_addr = \"127.0.0.1\"; sm_dir = \"/usr/local/lib/flexric/\");} ");
AssertFatal(oai_args.ip != NULL , "Please, specify the IP address of the nearRT-RIC in the config file, i.e., e2_agent = {near_ric_ip_addr = \"127.0.0.1\"; sm_dir = \"/usr/local/lib/flexric/\"");
printf("After RCconfig_NR_E2agent %s %s \n",oai_args.sm_dir, oai_args.ip );
fr_args_t args = { .ip = oai_args.ip }; // init_fr_args(0, NULL);
memcpy(args.libs_dir, oai_args.sm_dir, 128);
sleep(1);
// Only 1 instances is supported in one executable
// Advice: run multiple executables to have multiple instances
const e1ap_upcp_inst_t *e1inst = getCxtE1(CUuniqInstance);
const int nb_id = e1inst->gnb_id;
const int cu_up_id = e1inst->cuup.setupReq.gNB_cu_up_id;
const int mcc = e1inst->cuup.setupReq.plmn[0].id.mcc;
const int mnc = e1inst->cuup.setupReq.plmn[0].id.mnc;
const int mnc_digit_len = e1inst->cuup.setupReq.plmn[0].id.mnc_digit_length;
printf("[E2 NODE]: mcc = %d mnc = %d mnc_digit = %d nb_id = %d \n", mcc, mnc, mnc_digit_len, nb_id);
printf("[E2 NODE]: Args %s %s \n", args.ip, args.libs_dir);
sm_io_ag_ran_t io = init_ran_func_ag();
init_agent_api(mcc, mnc, mnc_digit_len, nb_id, cu_up_id, node_type, io, &args);
}
#endif // E2_AGENT
void exit_function(const char *file, const char *function, const int line, const char *s, const int assert) void exit_function(const char *file, const char *function, const int line, const char *s, const int assert)
{ {
if (assert) { if (assert) {
...@@ -135,6 +171,22 @@ int main(int argc, char **argv) ...@@ -135,6 +171,22 @@ int main(int argc, char **argv)
AssertFatal(msg != NULL, "Send init to task for E1AP UP failed\n"); AssertFatal(msg != NULL, "Send init to task for E1AP UP failed\n");
itti_send_msg_to_task(TASK_CUUP_E1, 0, msg); itti_send_msg_to_task(TASK_CUUP_E1, 0, msg);
#ifdef E2_AGENT
//////////////////////////////////
//////////////////////////////////
//// Init the E2 Agent
// OAI Wrapper
e2_agent_args_t oai_args = RCconfig_NR_E2agent();
if (oai_args.enabled) {
const ngran_node_t node_type = get_node_type();
assert(node_type == ngran_gNB_CUUP);
initialize_agent(node_type, oai_args);
}
#endif // E2_AGENT
printf("TYPE <CTRL-C> TO TERMINATE\n"); printf("TYPE <CTRL-C> TO TERMINATE\n");
itti_wait_tasks_end(NULL); itti_wait_tasks_end(NULL);
......
...@@ -600,7 +600,7 @@ static void initialize_agent(ngran_node_t node_type, e2_agent_args_t oai_args) ...@@ -600,7 +600,7 @@ static void initialize_agent(ngran_node_t node_type, e2_agent_args_t oai_args)
AssertFatal(mac != NULL, "MAC not initialized\n"); AssertFatal(mac != NULL, "MAC not initialized\n");
cu_du_id = mac->f1_config.gnb_id; cu_du_id = mac->f1_config.gnb_id;
nb_id = mac->f1_config.setup_req->gNB_DU_id; nb_id = mac->f1_config.setup_req->gNB_DU_id;
} else if (node_type == ngran_gNB_CU) { } else if (node_type == ngran_gNB_CU || node_type == ngran_gNB_CUCP) {
// agent buggy: the CU has no second ID, it is the CU-UP ID // agent buggy: the CU has no second ID, it is the CU-UP ID
// however, that is not a problem her for us, so put the same ID twice // however, that is not a problem her for us, so put the same ID twice
nb_id = rrc->node_id; nb_id = rrc->node_id;
......
...@@ -981,18 +981,18 @@ void *UE_thread(void *arg) ...@@ -981,18 +981,18 @@ void *UE_thread(void *arg)
void init_NR_UE(int nb_inst, char *uecap_file, char *reconfig_file, char *rbconfig_file) void init_NR_UE(int nb_inst, char *uecap_file, char *reconfig_file, char *rbconfig_file)
{ {
NR_UE_MAC_INST_t *mac_inst; NR_UE_RRC_INST_t *rrc_inst = nr_rrc_init_ue(uecap_file, nb_inst);
NR_UE_RRC_INST_t* rrc_inst; NR_UE_MAC_INST_t *mac_inst = nr_l2_init_ue(nb_inst);
AssertFatal(mac_inst, "Couldn't allocate MAC module\n");
for (int inst = 0; inst < nb_inst; inst++) {
AssertFatal((rrc_inst = nr_l3_init_ue(uecap_file)) != NULL, "can not initialize RRC module\n"); for (int i = 0; i < nb_inst; i++) {
AssertFatal((mac_inst = nr_l2_init_ue()) != NULL, "can not initialize L2 module\n"); NR_UE_MAC_INST_t *mac = get_mac_inst(i);
AssertFatal((mac_inst->if_module = nr_ue_if_module_init(inst)) != NULL, "can not initialize IF module\n"); AssertFatal((mac->if_module = nr_ue_if_module_init(i)) != NULL, "can not initialize IF module\n");
if (!get_softmodem_params()->sa) { if (!get_softmodem_params()->sa) {
init_nsa_message(rrc_inst, reconfig_file, rbconfig_file); init_nsa_message(&rrc_inst[i], reconfig_file, rbconfig_file);
// TODO why do we need noS1 configuration? // TODO why do we need noS1 configuration?
// temporarily moved here to understand why not using the one provided by gNB // temporarily moved here to understand why not using the one provided by gNB
nr_rlc_activate_srb0(mac_inst->crnti, NULL, send_srb0_rrc); nr_rlc_activate_srb0(i, NULL, send_srb0_rrc);
if (IS_SOFTMODEM_NOS1) { if (IS_SOFTMODEM_NOS1) {
// get default noS1 configuration // get default noS1 configuration
NR_RadioBearerConfig_t *rbconfig = NULL; NR_RadioBearerConfig_t *rbconfig = NULL;
...@@ -1001,8 +1001,8 @@ void init_NR_UE(int nb_inst, char *uecap_file, char *reconfig_file, char *rbconf ...@@ -1001,8 +1001,8 @@ void init_NR_UE(int nb_inst, char *uecap_file, char *reconfig_file, char *rbconf
// set up PDCP, RLC, MAC // set up PDCP, RLC, MAC
nr_pdcp_layer_init(false); nr_pdcp_layer_init(false);
nr_pdcp_add_drbs(ENB_FLAG_NO, mac_inst->crnti, rbconfig->drb_ToAddModList, 0, NULL, NULL); nr_pdcp_add_drbs(ENB_FLAG_NO, i, rbconfig->drb_ToAddModList, 0, NULL, NULL);
nr_rlc_add_drb(mac_inst->crnti, rbconfig->drb_ToAddModList->list.array[0]->drb_Identity, rlc_rbconfig); nr_rlc_add_drb(i, rbconfig->drb_ToAddModList->list.array[0]->drb_Identity, rlc_rbconfig);
struct NR_CellGroupConfig__rlc_BearerToAddModList rlc_toadd_list; struct NR_CellGroupConfig__rlc_BearerToAddModList rlc_toadd_list;
rlc_toadd_list.list.count = 1; rlc_toadd_list.list.count = 1;
rlc_toadd_list.list.array = calloc(1, sizeof(NR_RLC_BearerConfig_t)); rlc_toadd_list.list.array = calloc(1, sizeof(NR_RLC_BearerConfig_t));
......
...@@ -454,7 +454,8 @@ configmodule_interface_t *uniqCfg = NULL; ...@@ -454,7 +454,8 @@ configmodule_interface_t *uniqCfg = NULL;
// A global var to reduce the changes size // A global var to reduce the changes size
ldpc_interface_t ldpc_interface = {0}, ldpc_interface_offload = {0}; ldpc_interface_t ldpc_interface = {0}, ldpc_interface_offload = {0};
int main( int argc, char **argv ) { int main(int argc, char **argv)
{
int set_exe_prio = 1; int set_exe_prio = 1;
if (checkIfFedoraDistribution()) if (checkIfFedoraDistribution())
if (checkIfGenericKernelOnFedora()) if (checkIfGenericKernelOnFedora())
...@@ -509,7 +510,7 @@ int main( int argc, char **argv ) { ...@@ -509,7 +510,7 @@ int main( int argc, char **argv ) {
memset(PHY_vars_UE_g[0][CC_id], 0, sizeof(*PHY_vars_UE_g[0][CC_id])); memset(PHY_vars_UE_g[0][CC_id], 0, sizeof(*PHY_vars_UE_g[0][CC_id]));
} }
init_NR_UE(1, uecap_file, reconfig_file, rbconfig_file); init_NR_UE(NB_UE_INST, uecap_file, reconfig_file, rbconfig_file);
int mode_offset = get_softmodem_params()->nsa ? NUMBER_OF_UE_MAX : 1; int mode_offset = get_softmodem_params()->nsa ? NUMBER_OF_UE_MAX : 1;
uint16_t node_number = get_softmodem_params()->node_number; uint16_t node_number = get_softmodem_params()->node_number;
......
...@@ -74,17 +74,17 @@ typedef enum { ...@@ -74,17 +74,17 @@ typedef enum {
NFAPI_NR_PHY_MSG_TYPE_RACH_INDICATION= 0X89, NFAPI_NR_PHY_MSG_TYPE_RACH_INDICATION= 0X89,
//RESERVED 0X8a ~ 0xff //RESERVED 0X8a ~ 0xff
NFAPI_NR_PHY_MSG_TYPE_PNF_PARAM_REQUEST = 0x0100, NFAPI_NR_PHY_MSG_TYPE_PNF_PARAM_REQUEST = 0x0100,
NFAPI_NR_PHY_MSG_TYPE_PNF_PARAM_RESPONSE = 0x0101, NFAPI_NR_PHY_MSG_TYPE_PNF_PARAM_RESPONSE = 0x0101,
NFAPI_NR_PHY_MSG_TYPE_PNF_CONFIG_REQUEST= 0x0102, NFAPI_NR_PHY_MSG_TYPE_PNF_CONFIG_REQUEST= 0x0102,
NFAPI_NR_PHY_MSG_TYPE_PNF_CONFIG_RESPONSE= 0x0103, NFAPI_NR_PHY_MSG_TYPE_PNF_CONFIG_RESPONSE= 0x0103,
NFAPI_NR_PHY_MSG_TYPE_PNF_START_REQUEST= 0x0104, NFAPI_NR_PHY_MSG_TYPE_PNF_START_REQUEST= 0x0104,
NFAPI_NR_PHY_MSG_TYPE_PNF_START_RESPONSE= 0x0105, NFAPI_NR_PHY_MSG_TYPE_PNF_START_RESPONSE= 0x0105,
NFAPI_NR_PHY_MSG_TYPE_PNF_STOP_REQUEST= 0x0106, NFAPI_NR_PHY_MSG_TYPE_PNF_STOP_REQUEST= 0x0106,
NFAPI_NR_PHY_MSG_TYPE_PNF_STOP_RESPONSE= 0x0107, NFAPI_NR_PHY_MSG_TYPE_PNF_STOP_RESPONSE= 0x0107,
NFAPI_NR_PHY_MSG_TYPE_UL_NODE_SYNC = 0x0180, NFAPI_NR_PHY_MSG_TYPE_UL_NODE_SYNC = 0x0180,
NFAPI_NR_PHY_MSG_TYPE_DL_NODE_SYNC, NFAPI_NR_PHY_MSG_TYPE_DL_NODE_SYNC,
NFAPI_NR_PHY_MSG_TYPE_TIMING_INFO NFAPI_NR_PHY_MSG_TYPE_TIMING_INFO
} nfapi_nr_phy_msg_type_e; } nfapi_nr_phy_msg_type_e;
// SCF222_5G-FAPI_PHY_SPI_Specificayion.pdf Section 3.3 // SCF222_5G-FAPI_PHY_SPI_Specificayion.pdf Section 3.3
...@@ -449,6 +449,26 @@ typedef struct ...@@ -449,6 +449,26 @@ typedef struct
} nfapi_nr_measurement_config_t; } nfapi_nr_measurement_config_t;
// Table 3–62 Precoding matrix (PM) PDU (v.222.10.04)
typedef struct {
int16_t precoder_weight_Re;
int16_t precoder_weight_Im;
} nfapi_nr_pm_weights_t;
typedef struct {
uint16_t pm_idx;
uint16_t numLayers;
uint16_t num_ant_ports;
nfapi_nr_pm_weights_t weights[4][4]; // TODO temporary hardcoding
} nfapi_nr_pm_pdu_t;
typedef struct {
uint16_t num_pm_idx;
nfapi_nr_pm_pdu_t *pmi_pdu;
} nfapi_nr_pm_list_t;
// ERROR enums // ERROR enums
typedef enum { // Table 2-22 typedef enum { // Table 2-22
NFAPI_NR_PARAM_MSG_OK = 0, NFAPI_NR_PARAM_MSG_OK = 0,
...@@ -560,6 +580,7 @@ typedef struct { ...@@ -560,6 +580,7 @@ typedef struct {
nfapi_nr_tdd_table_t tdd_table; nfapi_nr_tdd_table_t tdd_table;
nfapi_nr_measurement_config_t measurement_config; nfapi_nr_measurement_config_t measurement_config;
nfapi_nr_nfapi_t nfapi_config; nfapi_nr_nfapi_t nfapi_config;
nfapi_nr_pm_list_t pmi_list;
} nfapi_nr_config_request_scf_t; } nfapi_nr_config_request_scf_t;
...@@ -592,24 +613,24 @@ typedef struct { ...@@ -592,24 +613,24 @@ typedef struct {
//3.3.4 STOP //3.3.4 STOP
typedef struct { typedef struct {
nfapi_p4_p5_message_header_t header; nfapi_p4_p5_message_header_t header;
nfapi_vendor_extension_tlv_t vendor_extension; nfapi_vendor_extension_tlv_t vendor_extension;
} nfapi_nr_stop_request_t; } nfapi_nr_stop_request_t;
typedef struct { typedef struct {
nfapi_p4_p5_message_header_t header; nfapi_p4_p5_message_header_t header;
nfapi_vendor_extension_tlv_t vendor_extension; nfapi_vendor_extension_tlv_t vendor_extension;
} nfapi_nr_stop_indication_t; } nfapi_nr_stop_indication_t;
typedef enum { typedef enum {
NFAPI_NR_STOP_MSG_INVALID_STATE NFAPI_NR_STOP_MSG_INVALID_STATE
} nfapi_nr_stop_errors_e; } nfapi_nr_stop_errors_e;
//3.3.5 PHY Notifications //3.3.5 PHY Notifications
typedef enum { typedef enum {
NFAPI_NR_PHY_API_MSG_OK =0x0, NFAPI_NR_PHY_API_MSG_OK =0x0,
NFAPI_NR_PHY_API_MSG_INVALID_STATE =0x1, NFAPI_NR_PHY_API_MSG_INVALID_STATE =0x1,
NFAPI_NR_PHY_API_MSG_INVALID_CONFIG =0x2, NFAPI_NR_PHY_API_MSG_INVALID_CONFIG =0x2,
NFAPI_NR_PHY_API_SFN_OUT_OF_SYNC =0X3, NFAPI_NR_PHY_API_SFN_OUT_OF_SYNC =0X3,
NFAPI_NR_PHY_API_MSG_SLOR_ERR =0X4, NFAPI_NR_PHY_API_MSG_SLOR_ERR =0X4,
...@@ -620,7 +641,7 @@ typedef enum { ...@@ -620,7 +641,7 @@ typedef enum {
} nfapi_nr_phy_notifications_errors_e; } nfapi_nr_phy_notifications_errors_e;
typedef struct { typedef struct {
uint16_t sfn; //0~1023 uint16_t sfn; //0~1023
uint16_t slot;//0~319 uint16_t slot;//0~319
nfapi_nr_phy_msg_type_e msg_id;//Indicate which message received by the PHY has an error. Values taken from Table 3-4. nfapi_nr_phy_msg_type_e msg_id;//Indicate which message received by the PHY has an error. Values taken from Table 3-4.
nfapi_nr_phy_notifications_errors_e error_code; nfapi_nr_phy_notifications_errors_e error_code;
...@@ -632,42 +653,22 @@ typedef struct { ...@@ -632,42 +653,22 @@ typedef struct {
//table 3-32 //table 3-32
//? //?
typedef struct { typedef struct {
uint16_t beam_idx; //0~65535 uint16_t beam_idx; //0~65535
} nfapi_nr_dig_beam_t; } nfapi_nr_dig_beam_t;
typedef struct { typedef struct {
uint16_t dig_beam_weight_Re; uint16_t dig_beam_weight_Re;
uint16_t dig_beam_weight_Im; uint16_t dig_beam_weight_Im;
} nfapi_nr_txru_t; } nfapi_nr_txru_t;
typedef struct { typedef struct {
uint16_t num_dig_beams; //0~65535 uint16_t num_dig_beams; //0~65535
uint16_t num_txrus; //0~65535 uint16_t num_txrus; //0~65535
nfapi_nr_dig_beam_t* dig_beam_list; nfapi_nr_dig_beam_t* dig_beam_list;
nfapi_nr_txru_t* txru_list; nfapi_nr_txru_t* txru_list;
} nfapi_nr_dbt_pdu_t; } nfapi_nr_dbt_pdu_t;
//table 3-33
//?
typedef struct {
uint16_t num_ant_ports;
int16_t precoder_weight_Re;
int16_t precoder_weight_Im;
} nfapi_nr_num_ant_ports_t;
typedef struct {
uint16_t numLayers; //0~65535
nfapi_nr_num_ant_ports_t* num_ant_ports_list;
} nfapi_nr_num_layers_t;
typedef struct {
uint16_t pm_idx; //0~65535
nfapi_nr_num_layers_t* num_layers_list; //0~65535
//nfapi_nr_num_ant_ports_t* num_ant_ports_list;
} nfapi_nr_pm_pdu_t;
// Section 3.4 // Section 3.4
// Section 3.4.1 slot indication // Section 3.4.1 slot indication
...@@ -678,7 +679,7 @@ typedef struct { ...@@ -678,7 +679,7 @@ typedef struct {
typedef struct { typedef struct {
nfapi_p7_message_header_t header; nfapi_p7_message_header_t header;
uint16_t sfn; //0->1023 uint16_t sfn; //0->1023
uint16_t slot;//0->319 uint16_t slot;//0->319
} nfapi_nr_slot_indication_scf_t; } nfapi_nr_slot_indication_scf_t;
...@@ -1441,7 +1442,7 @@ typedef struct { ...@@ -1441,7 +1442,7 @@ typedef struct {
//3.4.5 slot_errors //3.4.5 slot_errors
typedef enum { typedef enum {
NFAPI_NR_SLOT_UL_TTI_MSG_INVALID_STATE, NFAPI_NR_SLOT_UL_TTI_MSG_INVALID_STATE,
NFAPI_NR_SLOT_UL_TTI_SFN_OUT_OF_SYNC, NFAPI_NR_SLOT_UL_TTI_SFN_OUT_OF_SYNC,
NFAPI_NR_SLOT_UL_TTI_MSG_BCH_MISSING, NFAPI_NR_SLOT_UL_TTI_MSG_BCH_MISSING,
NFAPI_NR_SLOT_UL_TTI_MSG_SLOT_ERR NFAPI_NR_SLOT_UL_TTI_MSG_SLOT_ERR
...@@ -1449,14 +1450,14 @@ typedef enum { ...@@ -1449,14 +1450,14 @@ typedef enum {
} nfapi_nr_slot_errors_ul_tti_e; } nfapi_nr_slot_errors_ul_tti_e;
typedef enum { typedef enum {
NFAPI_NR_SLOT_DL_TTI_MSG_INVALID_STATE, NFAPI_NR_SLOT_DL_TTI_MSG_INVALID_STATE,
NFAPI_NR_SLOT_DL_TTI_MSG_SLOT_ERR NFAPI_NR_SLOT_DL_TTI_MSG_SLOT_ERR
} nfapi_nr_slot_errors_dl_tti_e; } nfapi_nr_slot_errors_dl_tti_e;
typedef enum { typedef enum {
NFAPI_NR_SLOT_UL_DCI_MSG_INVALID_STATE, NFAPI_NR_SLOT_UL_DCI_MSG_INVALID_STATE,
NFAPI_NR_SLOT_UL_DCI_MSG_INVALID_SFN, NFAPI_NR_SLOT_UL_DCI_MSG_INVALID_SFN,
NFAPI_NR_SLOT_UL_DCI_MSG_UL_DCI_ERR NFAPI_NR_SLOT_UL_DCI_MSG_UL_DCI_ERR
......
This diff is collapsed.
...@@ -703,13 +703,17 @@ c16_t nr_layer_precoder_cm(int n_layers, ...@@ -703,13 +703,17 @@ c16_t nr_layer_precoder_cm(int n_layers,
int n_symbols, int n_symbols,
int symSz, int symSz,
c16_t datatx_F_precoding[n_layers][n_symbols][symSz], c16_t datatx_F_precoding[n_layers][n_symbols][symSz],
c16_t *prec_matrix, int ap,
nfapi_nr_pm_pdu_t *pmi_pdu,
int symbol, int symbol,
int offset) int offset)
{ {
c16_t precodatatx_F = {0}; c16_t precodatatx_F = {0};
for (int al = 0; al < n_layers; al++) for (int al = 0; al < n_layers; al++) {
precodatatx_F = c16maddShift(datatx_F_precoding[al][symbol][offset], prec_matrix[al], precodatatx_F, 15); nfapi_nr_pm_weights_t *w = &pmi_pdu->weights[al][ap];
c16_t prec_weight = {.r = w->precoder_weight_Re, .i = w->precoder_weight_Im};
precodatatx_F = c16maddShift(datatx_F_precoding[al][symbol][offset], prec_weight, precodatatx_F, 15);
}
return precodatatx_F; return precodatatx_F;
} }
...@@ -717,69 +721,77 @@ void nr_layer_precoder_simd(const int n_layers, ...@@ -717,69 +721,77 @@ void nr_layer_precoder_simd(const int n_layers,
const int n_symbols, const int n_symbols,
const int symSz, const int symSz,
const c16_t txdataF_res_mapped[n_layers][n_symbols][symSz], const c16_t txdataF_res_mapped[n_layers][n_symbols][symSz],
const c16_t prec_matrix[n_layers], const int ant,
const nfapi_nr_pm_pdu_t *pmi_pdu,
const int symbol, const int symbol,
const int sc_offset, const int sc_offset,
const int re_cnt, const int re_cnt,
c16_t *txdataF_precoded) c16_t *txdataF_precoded)
{ {
uint32_t sc = sc_offset; uint32_t sc = sc_offset;
c16_t prec_weight = {0};
// For x86, use 256 SIMD for every 8 RE and 128 SIMD for last 4 RE // For x86, use 256 SIMD for every 8 RE and 128 SIMD for last 4 RE
// For aarch64, use 128 SIMD for every 4 RE // For aarch64, use 128 SIMD for every 4 RE
// 256 SIMD: Do 8 RE in one iteration, 3 iterations for 2 RB // 256 SIMD: Do 8 RE in one iteration, 3 iterations for 2 RB
#ifdef __AVX2__ #ifdef __AVX2__
const uint32_t re_cnt_align8 = re_cnt & ~7; const uint32_t re_cnt_align8 = re_cnt & ~7;
for(; sc<sc_offset+(re_cnt_align8); sc+=sizeof(simde__m256i)/sizeof(*prec_matrix)){ for(; sc < sc_offset + (re_cnt_align8); sc += sizeof(simde__m256i) / sizeof(prec_weight)) {
// Matrix multiplication for 4 elements of the result (sizeof(simde__m256i) / sizeof(*prec_matrix) = 8) // Matrix multiplication for 4 elements of the result (sizeof(simde__m256i) / sizeof(*prec_matrix) = 8)
simde__m256i y = simde_mm256_set1_epi16(0); // Y = W[0]*X[0] + W[1]*X[1] + ... + W[nrOfLayers-1]*X[nrOfLayers-1] simde__m256i y = simde_mm256_set1_epi16(0); // Y = W[0]*X[0] + W[1]*X[1] + ... + W[nrOfLayers-1]*X[nrOfLayers-1]
for(int nl=0; nl<n_layers; nl++){ for(int nl = 0; nl < n_layers; nl++) {
const simde__m256i x = simde_mm256_loadu_epi32(&txdataF_res_mapped[nl][symbol][sc]); prec_weight.r = pmi_pdu->weights[nl][ant].precoder_weight_Re;
prec_weight.i = pmi_pdu->weights[nl][ant].precoder_weight_Im;
// Rearrange precoding matrix weight to match complex multiplication and broadcast it to match SIMD size
const simde__m256i w_c = simde_mm256_set1_epi32(c16toI32(c16conj(prec_matrix[nl]))); // broadcast conjugate of w const simde__m256i x = simde_mm256_loadu_epi32(&txdataF_res_mapped[nl][symbol][sc]);
const simde__m256i w_s = simde_mm256_set1_epi32(c16toI32(c16swap(prec_matrix[nl]))); // broadcast swapped real and img of w
// Rearrange precoding matrix weight to match complex multiplication and broadcast it to match SIMD size
// Multiplication and shift const simde__m256i w_c = simde_mm256_set1_epi32(c16toI32(c16conj(prec_weight))); // broadcast conjugate of w
const simde__m256i reals = simde_mm256_srai_epi32(simde_mm256_madd_epi16(x, w_c), 15); // (int32_t) .r = (x.r * w.r - x.i * w.i) >> 15 const simde__m256i w_s = simde_mm256_set1_epi32(c16toI32(c16swap(prec_weight))); // broadcast swapped real and img of w
const simde__m256i imags = simde_mm256_slli_epi32(simde_mm256_madd_epi16(x, w_s), 1); // (int32_t) .i = (x.r * w.i + x.i * w.r) << 1, since higher 16 bit of each 32 bit is taken by blend_epi16
// Multiplication and shift
// Re-arrange to match c16_t format const simde__m256i reals = simde_mm256_srai_epi32(simde_mm256_madd_epi16(x, w_c), 15); // (int32_t) .r = (x.r * w.r - x.i * w.i) >> 15
const simde__m256i produ = simde_mm256_blend_epi16(reals, imags, 0xAA); const simde__m256i imags = simde_mm256_slli_epi32(simde_mm256_madd_epi16(x, w_s), 1); // (int32_t) .i = (x.r * w.i + x.i * w.r) << 1, since higher 16 bit of each 32 bit is taken by blend_epi16
// Accumulate the product // Re-arrange to match c16_t format
y = simde_mm256_adds_epi16(y, produ); const simde__m256i produ = simde_mm256_blend_epi16(reals, imags, 0xAA);
}
// Store the result to txdataF // Accumulate the product
simde_mm256_storeu_si256(&txdataF_precoded[sc], y); y = simde_mm256_adds_epi16(y, produ);
} }
#endif // Store the result to txdataF
simde_mm256_storeu_si256(&txdataF_precoded[sc], y);
}
#endif
// 128 SIMD: Do 4 RE in one iteration, 3 iterations for 1 RB // 128 SIMD: Do 4 RE in one iteration, 3 iterations for 1 RB
const uint32_t re_cnt_align4 = re_cnt & ~3; const uint32_t re_cnt_align4 = re_cnt & ~3;
for(; sc<sc_offset+re_cnt_align4; sc+=sizeof(simde__m128i)/sizeof(*prec_matrix)){ for(; sc < sc_offset+re_cnt_align4; sc += sizeof(simde__m128i) / sizeof(prec_weight)) {
#ifdef DEBUG_DLSCH_PRECODING_PRINT_WITH_TRIVIAL // Get result with trivial solution, TODO: To be removed #ifdef DEBUG_DLSCH_PRECODING_PRINT_WITH_TRIVIAL // Get result with trivial solution, TODO: To be removed
c16_t y_triv[4]; c16_t y_triv[4];
for(int i=0; i<4; i++) for(int i = 0; i < 4; i++)
y_triv[i] = nr_layer_precoder_cm(n_layers, y_triv[i] = nr_layer_precoder_cm(n_layers,
NR_SYMBOLS_PER_SLOT, NR_SYMBOLS_PER_SLOT,
symSz, symSz,
txdataF_res_mapped, txdataF_res_mapped,
prec_matrix, ant,
symbol, pmi_pdu,
sc + i); symbol,
sc + i);
memcpy(&txdataF_precoded[sc], y_triv, sizeof(y_triv)); memcpy(&txdataF_precoded[sc], y_triv, sizeof(y_triv));
#endif #endif
// Matrix multiplication for 4 elements of the result (sizeof(simde__m128i) / sizeof(c16_t) = 4) // Matrix multiplication for 4 elements of the result (sizeof(simde__m128i) / sizeof(c16_t) = 4)
simde__m128i y = simde_mm_set1_epi16(0); // Y = W[0]*X[0] + W[1]*X[1] + ... + W[nrOfLayers-1]*X[nrOfLayers-1] simde__m128i y = simde_mm_set1_epi16(0); // Y = W[0]*X[0] + W[1]*X[1] + ... + W[nrOfLayers-1]*X[nrOfLayers-1]
for(int nl=0; nl<n_layers; nl++){ for(int nl = 0; nl < n_layers; nl++) {
prec_weight.r = pmi_pdu->weights[nl][ant].precoder_weight_Re;
prec_weight.i = pmi_pdu->weights[nl][ant].precoder_weight_Im;
const simde__m128i x = simde_mm_loadu_epi32(&txdataF_res_mapped[nl][symbol][sc]); const simde__m128i x = simde_mm_loadu_epi32(&txdataF_res_mapped[nl][symbol][sc]);
// Rearrange precoding matrix weight to match complex multiplication and broadcast it to match SIMD size // Rearrange precoding matrix weight to match complex multiplication and broadcast it to match SIMD size
const simde__m128i w_c = simde_mm_set1_epi32(c16toI32(c16conj(prec_matrix[nl]))); // broadcast conjugate of w const simde__m128i w_c = simde_mm_set1_epi32(c16toI32(c16conj(prec_weight))); // broadcast conjugate of w
const simde__m128i w_s = simde_mm_set1_epi32(c16toI32(c16swap(prec_matrix[nl]))); // broadcast swapped real and img of w const simde__m128i w_s = simde_mm_set1_epi32(c16toI32(c16swap(prec_weight))); // broadcast swapped real and img of w
// Multiplication and shift // Multiplication and shift
const simde__m128i reals = simde_mm_srai_epi32(simde_mm_madd_epi16(x, w_c), 15); // (int32_t) .r = (x.r * w.r - x.i * w.i) >> 15 const simde__m128i reals = simde_mm_srai_epi32(simde_mm_madd_epi16(x, w_c), 15); // (int32_t) .r = (x.r * w.r - x.i * w.i) >> 15
......
...@@ -138,11 +138,13 @@ void apply_nr_rotation_RX(NR_DL_FRAME_PARMS *frame_parms, ...@@ -138,11 +138,13 @@ void apply_nr_rotation_RX(NR_DL_FRAME_PARMS *frame_parms,
@param[in] n_layers, number of DLSCH layers @param[in] n_layers, number of DLSCH layers
*/ */
int nr_layer_precoder(int16_t **datatx_F_precoding, const char *prec_matrix, uint8_t n_layers, int32_t re_offset); int nr_layer_precoder(int16_t **datatx_F_precoding, const char *prec_matrix, uint8_t n_layers, int32_t re_offset);
c16_t nr_layer_precoder_cm(int n_layers, c16_t nr_layer_precoder_cm(int n_layers,
int n_symbols, int n_symbols,
int symSz, int symSz,
c16_t datatx_F_precoding[n_layers][n_symbols][symSz], c16_t datatx_F_precoding[n_layers][n_symbols][symSz],
c16_t *prec_matrix, int ap,
nfapi_nr_pm_pdu_t *pmi_pdu,
int symbol, int symbol,
int offset); int offset);
...@@ -156,7 +158,8 @@ void nr_layer_precoder_simd(const int n_layers, ...@@ -156,7 +158,8 @@ void nr_layer_precoder_simd(const int n_layers,
const int n_symbols, const int n_symbols,
const int symSz, const int symSz,
const c16_t txdataF_res_mapped[n_layers][n_symbols][symSz], const c16_t txdataF_res_mapped[n_layers][n_symbols][symSz],
const c16_t prec_matrix[n_layers], const int ant,
const nfapi_nr_pm_pdu_t *pmi_pdu,
const int symbol, const int symbol,
const int sc_offset, const int sc_offset,
const int re_cnt, const int re_cnt,
......
...@@ -535,58 +535,52 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx, int frame, int slot) ...@@ -535,58 +535,52 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx, int frame, int slot)
} }
} }
else { // non-unitary Precoding else { // non-unitary Precoding
if(frame_parms->nb_antennas_tx == 1){ // no precoding matrix defined AssertFatal(frame_parms->nb_antennas_tx > 1, "No precoding can be done with a single antenna port\n");
memcpy(&txdataF[ant][txdataF_offset_per_symbol + subCarrier], //get the precoding matrix weights:
&txdataF_precoding[ant][l_symbol][subCarrier], nfapi_nr_pm_pdu_t *pmi_pdu = &gNB->gNB_config.pmi_list.pmi_pdu[pmi - 1]; // pmi 0 is identity matrix
re_cnt * sizeof(**txdataF)); AssertFatal(pmi == pmi_pdu->pm_idx, "PMI %d doesn't match to the one in precoding matrix %d\n",
pmi, pmi_pdu->pm_idx);
AssertFatal(ant < pmi_pdu->num_ant_ports, "Antenna port index %d exceeds precoding matrix AP size %d\n",
ant, pmi_pdu->num_ant_ports);
AssertFatal(rel15->nrOfLayers == pmi_pdu->numLayers, "Number of layers %d doesn't match to the one in precoding matrix %d\n",
rel15->nrOfLayers, pmi_pdu->numLayers);
if((subCarrier + re_cnt) < frame_parms->ofdm_symbol_size){ // within ofdm_symbol_size, use SIMDe
nr_layer_precoder_simd(rel15->nrOfLayers,
NR_SYMBOLS_PER_SLOT,
frame_parms->ofdm_symbol_size,
txdataF_precoding,
ant,
pmi_pdu,
l_symbol,
subCarrier,
re_cnt,
&txdataF[ant][txdataF_offset_per_symbol]);
subCarrier += re_cnt; subCarrier += re_cnt;
if (subCarrier >= frame_parms->ofdm_symbol_size) {
subCarrier -= frame_parms->ofdm_symbol_size;
}
} }
else { // precoding with more than 1 tx else{ // crossing ofdm_symbol_size, use simple arithmetic operations
//get the precoding matrix weights: for (int i = 0; i < re_cnt; i++) {
c16_t **mat = (c16_t**)gNB->nr_mimo_precoding_matrix[rel15->nrOfLayers - 1]; txdataF[ant][txdataF_offset_per_symbol + subCarrier] =
//i_row =0,...,dl_antenna_port nr_layer_precoder_cm(rel15->nrOfLayers,
//j_col =0,...,nrOfLayers NR_SYMBOLS_PER_SLOT,
//mat[pmi][i_rows*2+j_col] frame_parms->ofdm_symbol_size,
c16_t *W_prec = &mat[pmi][ant * rel15->nrOfLayers]; txdataF_precoding,
if((subCarrier + re_cnt) < frame_parms->ofdm_symbol_size){ // within ofdm_symbol_size, use SIMDe ant,
nr_layer_precoder_simd(rel15->nrOfLayers, pmi_pdu,
NR_SYMBOLS_PER_SLOT, l_symbol,
frame_parms->ofdm_symbol_size, subCarrier);
txdataF_precoding,
W_prec,
l_symbol,
subCarrier,
re_cnt,
&txdataF[ant][txdataF_offset_per_symbol]);
subCarrier += re_cnt;
}
else{ // crossing ofdm_symbol_size, use simple arithmetic operations
for (int i = 0; i < re_cnt; i++) {
txdataF[ant][txdataF_offset_per_symbol + subCarrier] =
nr_layer_precoder_cm(rel15->nrOfLayers,
NR_SYMBOLS_PER_SLOT,
frame_parms->ofdm_symbol_size,
txdataF_precoding,
W_prec,
l_symbol,
subCarrier);
#ifdef DEBUG_DLSCH_MAPPING #ifdef DEBUG_DLSCH_MAPPING
printf("antenna %d\t l %d \t subCarrier %d \t txdataF: %d %d\n", printf("antenna %d\t l %d \t subCarrier %d \t txdataF: %d %d\n",
ant, ant,
symbol, symbol,
subCarrier, subCarrier,
txdataF[ant][l_symbol * frame_parms->ofdm_symbol_size + subCarrier + txdataF_offset].r, txdataF[ant][l_symbol * frame_parms->ofdm_symbol_size + subCarrier + txdataF_offset].r,
txdataF[ant][l_symbol * frame_parms->ofdm_symbol_size + subCarrier + txdataF_offset].i); txdataF[ant][l_symbol * frame_parms->ofdm_symbol_size + subCarrier + txdataF_offset].i);
#endif #endif
if (++subCarrier >= frame_parms->ofdm_symbol_size) { if (++subCarrier >= frame_parms->ofdm_symbol_size) {
subCarrier -= frame_parms->ofdm_symbol_size; subCarrier -= frame_parms->ofdm_symbol_size;
}
} }
} // else{ // crossing ofdm_symbol_size, use simple arithmetic operations }
} // else { // precoding with more than 1 tx } // else{ // crossing ofdm_symbol_size, use simple arithmetic operations
} // else { // non-unitary Precoding } // else { // non-unitary Precoding
rb += rb_step; rb += rb_step;
......
...@@ -619,13 +619,6 @@ typedef struct PHY_VARS_gNB_s { ...@@ -619,13 +619,6 @@ typedef struct PHY_VARS_gNB_s {
/// PDSCH DMRS sequence /// PDSCH DMRS sequence
uint32_t ****nr_gold_pdsch_dmrs; uint32_t ****nr_gold_pdsch_dmrs;
/// PDSCH codebook I precoding LUTs
/// first dimension: Rank number [0,...,noOfLayers-1[
/// second dimension: PMI [0,...,CodeSize-1[
/// third dimension: [i_rows*noOfLayers+j_col], i_rows=0,...pdsch_AntennaPorts-1 and j_col=0,...,noOfLayers-1
int32_t ***nr_mimo_precoding_matrix;
int pmiq_size[NR_MAX_NB_LAYERS];
/// PUSCH DMRS /// PUSCH DMRS
uint32_t ****nr_gold_pusch_dmrs; uint32_t ****nr_gold_pusch_dmrs;
......
...@@ -79,7 +79,6 @@ ...@@ -79,7 +79,6 @@
#define NR_MAX_PDCCH_AGG_LEVEL 16 // 3GPP TS 38.211 V15.8 Section 7.3.2 Table 7.3.2.1-1: Supported PDCCH aggregation levels #define NR_MAX_PDCCH_AGG_LEVEL 16 // 3GPP TS 38.211 V15.8 Section 7.3.2 Table 7.3.2.1-1: Supported PDCCH aggregation levels
#define NR_MAX_NB_LAYERS 4 // 8
#define NR_MAX_NB_PORTS 32 #define NR_MAX_NB_PORTS 32
#define NR_MAX_PDSCH_TBS 3824 #define NR_MAX_PDSCH_TBS 3824
......
...@@ -223,35 +223,21 @@ nrUE_params_t *get_nrUE_params(void) { ...@@ -223,35 +223,21 @@ nrUE_params_t *get_nrUE_params(void) {
} }
void validate_input_pmi(nr_pdsch_AntennaPorts_t pdsch_AntennaPorts, int nrOfLayers, int pmi) void validate_input_pmi(nfapi_nr_config_request_scf_t *gNB_config,
nr_pdsch_AntennaPorts_t pdsch_AntennaPorts,
int nrOfLayers,
int pmi)
{ {
if (pmi == 0) if (pmi == 0)
return; return;
nfapi_nr_pm_pdu_t *pmi_pdu = &gNB_config->pmi_list.pmi_pdu[pmi - 1]; // pmi 0 is identity matrix
AssertFatal(pmi == pmi_pdu->pm_idx, "PMI %d doesn't match to the one in precoding matrix %d\n", pmi, pmi_pdu->pm_idx);
AssertFatal(nrOfLayers == pmi_pdu->numLayers, "Number of layers %d doesn't match to the one in precoding matrix %d for PMI %d\n",
nrOfLayers, pmi_pdu->numLayers, pmi);
int num_antenna_ports = pdsch_AntennaPorts.N1 * pdsch_AntennaPorts.N2 * pdsch_AntennaPorts.XP; int num_antenna_ports = pdsch_AntennaPorts.N1 * pdsch_AntennaPorts.N2 * pdsch_AntennaPorts.XP;
int N1 = pdsch_AntennaPorts.N1; AssertFatal(num_antenna_ports == pmi_pdu->num_ant_ports, "Configured antenna ports %d does not match precoding matrix AP size %d for PMI %d\n",
int N2 = pdsch_AntennaPorts.N2; num_antenna_ports, pmi_pdu->num_ant_ports, pmi);
int O1 = N1 > 1 ? 4 : 1;
int O2 = N2 > 1 ? 4 : 1;
int K1, K2;
if (num_antenna_ports > 2)
get_K1_K2(N1, N2, &K1, &K2);
else {
K1 = 1; K2 = 1;
}
int num_pmi = 1; // pmi = 0 is the identity matrix
switch (nrOfLayers) {
case 1 :
num_pmi += N1 * O1 * N2 * O2 * 4;
AssertFatal(pmi < num_pmi, "Input PMI index %d exceeds the limit of configured matrices %d for %d layers\n", pmi, num_pmi, nrOfLayers);
return;
case 2 :
num_pmi += N1 * O1 * N2 * O2 * K1 * K2 * 2;
AssertFatal(pmi < num_pmi, "Input PMI index %d exceeds the limit of conigured matrices %d for %d layers\n", pmi, num_pmi, nrOfLayers);
break;
default :
AssertFatal(false, "Precoding with more than 2 nrOfLayers not yet supported\n");
}
} }
...@@ -709,7 +695,7 @@ int main(int argc, char **argv) ...@@ -709,7 +695,7 @@ int main(int argc, char **argv)
gNB->ap_N2 = pdsch_AntennaPorts.N2; gNB->ap_N2 = pdsch_AntennaPorts.N2;
gNB->ap_XP = pdsch_AntennaPorts.XP; gNB->ap_XP = pdsch_AntennaPorts.XP;
validate_input_pmi(pdsch_AntennaPorts, g_nrOfLayers, g_pmi); validate_input_pmi(&gNB_mac->config[0], pdsch_AntennaPorts, g_nrOfLayers, g_pmi);
NR_UE_NR_Capability_t* UE_Capability_nr = CALLOC(1,sizeof(NR_UE_NR_Capability_t)); NR_UE_NR_Capability_t* UE_Capability_nr = CALLOC(1,sizeof(NR_UE_NR_Capability_t));
prepare_sim_uecap(UE_Capability_nr,scc,mu, prepare_sim_uecap(UE_Capability_nr,scc,mu,
...@@ -849,7 +835,7 @@ int main(int argc, char **argv) ...@@ -849,7 +835,7 @@ int main(int argc, char **argv)
nr_gold_pdsch(UE, i, UE->scramblingID_dlsch[i]); nr_gold_pdsch(UE, i, UE->scramblingID_dlsch[i]);
} }
nr_l2_init_ue(); nr_l2_init_ue(1);
UE_mac = get_mac_inst(0); UE_mac = get_mac_inst(0);
ue_init_config_request(UE_mac, mu); ue_init_config_request(UE_mac, mu);
......
...@@ -690,8 +690,7 @@ int main(int argc, char *argv[]) ...@@ -690,8 +690,7 @@ int main(int argc, char *argv[])
} }
//Configure UE //Configure UE
nr_l2_init_ue(); nr_l2_init_ue(1);
NR_UE_MAC_INST_t* UE_mac = get_mac_inst(0); NR_UE_MAC_INST_t* UE_mac = get_mac_inst(0);
ue_init_config_request(UE_mac, mu); ue_init_config_request(UE_mac, mu);
......
...@@ -146,11 +146,16 @@ typedef struct f1ap_gnb_du_system_info_t { ...@@ -146,11 +146,16 @@ typedef struct f1ap_gnb_du_system_info_t {
} f1ap_gnb_du_system_info_t; } f1ap_gnb_du_system_info_t;
typedef struct f1ap_setup_req_s { typedef struct f1ap_setup_req_s {
/// ulong transaction id
uint64_t transaction_id;
// F1_Setup_Req payload // F1_Setup_Req payload
uint64_t gNB_DU_id; uint64_t gNB_DU_id;
char *gNB_DU_name; char *gNB_DU_name;
/// rrc version
uint8_t rrc_ver[3];
/// number of DU cells available /// number of DU cells available
uint16_t num_cells_available; //0< num_cells_available <= 512; uint16_t num_cells_available; //0< num_cells_available <= 512;
struct { struct {
...@@ -179,11 +184,17 @@ typedef struct served_cells_to_activate_s { ...@@ -179,11 +184,17 @@ typedef struct served_cells_to_activate_s {
} served_cells_to_activate_t; } served_cells_to_activate_t;
typedef struct f1ap_setup_resp_s { typedef struct f1ap_setup_resp_s {
/// ulong transaction id
uint64_t transaction_id;
/// string holding gNB_CU_name /// string holding gNB_CU_name
char *gNB_CU_name; char *gNB_CU_name;
/// number of DU cells to activate /// number of DU cells to activate
uint16_t num_cells_to_activate; //0< num_cells_to_activate <= 512; uint16_t num_cells_to_activate; //0< num_cells_to_activate <= 512;
served_cells_to_activate_t cells_to_activate[F1AP_MAX_NB_CELLS]; served_cells_to_activate_t cells_to_activate[F1AP_MAX_NB_CELLS];
/// rrc version
uint8_t rrc_ver[3];
} f1ap_setup_resp_t; } f1ap_setup_resp_t;
typedef struct f1ap_gnb_cu_configuration_update_s { typedef struct f1ap_gnb_cu_configuration_update_s {
......
...@@ -159,7 +159,6 @@ typedef struct RrcMacCcchDataInd_s { ...@@ -159,7 +159,6 @@ typedef struct RrcMacCcchDataInd_s {
} RrcMacCcchDataInd; } RrcMacCcchDataInd;
typedef struct NRRrcMacCcchDataInd_s { typedef struct NRRrcMacCcchDataInd_s {
uint16_t rnti;
uint32_t sdu_size; uint32_t sdu_size;
uint8_t sdu[CCCH_SDU_SIZE]; uint8_t sdu[CCCH_SDU_SIZE];
} NRRrcMacCcchDataInd; } NRRrcMacCcchDataInd;
......
...@@ -128,3 +128,5 @@ add_subdirectory(flexric/src/sm) ...@@ -128,3 +128,5 @@ add_subdirectory(flexric/src/sm)
add_subdirectory(flexric/src/util) add_subdirectory(flexric/src/util)
add_subdirectory(RAN_FUNCTION) add_subdirectory(RAN_FUNCTION)
add_library(e2_agent_arg STATIC e2_agent_arg.c)
add_dependencies(e2_agent_arg generate_T)
add_subdirectory(CUSTOMIZED) add_library(e2_ran_func_cuup STATIC
add_subdirectory(O-RAN) init_ran_func.c
read_setup_ran.c
../flexric/test/rnd/fill_rnd_data_e2_setup_req.c # this is not rnd data; it is used to fill E2 Node Component Configuration Addition List in E2 Setup Request message
CUSTOMIZED/ran_func_gtp.c # current implementation doesn't take split architecture into account, neither CU/DU nor CU-UP/CU-CP
CUSTOMIZED/ran_func_pdcp.c # current implementation doesn't take split architecture into account, neither CU/DU nor CU-UP/CU-CP
CUSTOMIZED/ran_func_tc.c # currently, not implemented; therefore, filling rnd data
../flexric/test/rnd/fill_rnd_data_tc.c
O-RAN/ran_func_kpm.c # this file should only contain PDCP-U/GTP; to be done in the future
../flexric/test/rnd/fill_rnd_data_kpm.c # this dependancy will be taken out once RAN Function Definition is implemented
O-RAN/ran_func_rc.c # this file should only contain PDCP-U/GTP; to be done in the future
../flexric/test/rnd/fill_rnd_data_rc.c # this dependancy will be taken out once RAN Function Definition is implemented
)
add_library(e2_ran_func STATIC target_link_libraries(e2_ran_func_cuup PUBLIC asn1_nr_rrc nr_rrc asn1_nr_rrc_hdrs e2_time_obj kpm_ric_info_common_obj 3gpp_derived_ie_obj)
init_ran_func.c target_compile_definitions(e2_ran_func_cuup PUBLIC ${E2AP_VERSION} ${KPM_VERSION} NGRAN_GNB_CUUP)
read_setup_ran.c
../flexric/test/rnd/fill_rnd_data_e2_setup_req.c
)
target_link_libraries(e2_ran_func
PUBLIC
e2_ran_func_cust
e2_ran_func_oran
)
# This dependency sucks! Create pointers and forward declarations! add_library(e2_ran_func_du_cucp_cuup STATIC
target_compile_definitions(e2_ran_func PRIVATE ${E2AP_VERSION} ${KPM_VERSION}) init_ran_func.c
read_setup_ran.c
../flexric/test/rnd/fill_rnd_data_e2_setup_req.c # this is not rnd data; it is used to fill E2 Node Component Configuration Addition List in E2 Setup Request message
CUSTOMIZED/ran_func_gtp.c # current implementation doesn't take split architecture into account, neither CU/DU nor CU-UP/CU-CP
CUSTOMIZED/ran_func_pdcp.c # current implementation doesn't take split architecture into account, neither CU/DU nor CU-UP/CU-CP
O-RAN/ran_func_kpm.c # this file should only contain RRC/PDCP-C; to be done in the future
# when nr-softmodem is divided in separate executables
../flexric/test/rnd/fill_rnd_data_kpm.c # this dependancy will be taken out once RAN Function Definition is implemented
O-RAN/ran_func_rc.c # this file should only contain RRC/PDCP-C; to be done in the future
# when nr-softmodem is divided in separate executables
../flexric/test/rnd/fill_rnd_data_rc.c # this dependancy will be taken out once RAN Function Definition is implemented
CUSTOMIZED/ran_func_mac.c
CUSTOMIZED/ran_func_rlc.c
CUSTOMIZED/ran_func_slice.c
CUSTOMIZED/ran_func_tc.c
../flexric/test/rnd/fill_rnd_data_tc.c
../flexric/test/rnd/fill_rnd_data_slice.c
)
target_link_libraries(e2_ran_func_du_cucp_cuup PUBLIC asn1_nr_rrc nr_rrc asn1_nr_rrc_hdrs e2_time_obj kpm_ric_info_common_obj 3gpp_derived_ie_obj)
target_compile_definitions(e2_ran_func_du_cucp_cuup PUBLIC ${E2AP_VERSION} ${KPM_VERSION} NGRAN_GNB_DU NGRAN_GNB_CUCP NGRAN_GNB_CUUP)
add_library(e2_ran_func_cust STATIC
ran_func_gtp.c
ran_func_mac.c
ran_func_pdcp.c
ran_func_rlc.c
ran_func_slice.c
ran_func_tc.c
# For testing purposes
../../flexric/test/rnd/fill_rnd_data_gtp.c
../../flexric/test/rnd/fill_rnd_data_tc.c
../../flexric/test/rnd/fill_rnd_data_mac.c
../../flexric/test/rnd/fill_rnd_data_rlc.c
../../flexric/test/rnd/fill_rnd_data_pdcp.c
../../flexric/test/rnd/fill_rnd_data_slice.c
../../flexric/src/util/time_now_us.c
)
target_link_libraries(e2_ran_func_cust PUBLIC asn1_nr_rrc nr_rrc asn1_nr_rrc_hdrs)
# This dependency sucks! Create pointers and forward declarations!
target_compile_definitions(e2_ran_func_cust PRIVATE ${E2AP_VERSION} ${KPM_VERSION} )
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include "openair2/E2AP/flexric/src/agent/../sm/sm_io.h" #include "openair2/E2AP/flexric/src/agent/../sm/sm_io.h"
void read_gtp_sm(void*); bool read_gtp_sm(void*);
void read_gtp_setup_sm(void*); void read_gtp_setup_sm(void*);
......
...@@ -20,14 +20,13 @@ ...@@ -20,14 +20,13 @@
*/ */
#include "ran_func_mac.h" #include "ran_func_mac.h"
#include "openair2/E2AP/flexric/test/rnd/fill_rnd_data_mac.h"
#include <assert.h> #include <assert.h>
static static
const int mod_id = 0; const int mod_id = 0;
void read_mac_sm(void* data) bool read_mac_sm(void* data)
{ {
assert(data != NULL); assert(data != NULL);
...@@ -110,6 +109,8 @@ void read_mac_sm(void* data) ...@@ -110,6 +109,8 @@ void read_mac_sm(void* data)
++i; ++i;
} }
return num_ues > 0;
} }
void read_mac_setup_sm(void* data) void read_mac_setup_sm(void* data)
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#include "openair2/E2AP/flexric/src/util/time_now_us.h" #include "openair2/E2AP/flexric/src/util/time_now_us.h"
void read_mac_sm(void*); bool read_mac_sm(void*);
void read_mac_setup_sm(void*); void read_mac_setup_sm(void*);
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include "openair2/E2AP/flexric/src/agent/../sm/sm_io.h" #include "openair2/E2AP/flexric/src/agent/../sm/sm_io.h"
void read_pdcp_sm(void*); bool read_pdcp_sm(void*);
void read_pdcp_setup_sm(void* data); void read_pdcp_setup_sm(void* data);
......
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
#include "openair2/LAYER2/NR_MAC_gNB/mac_proto.h" #include "openair2/LAYER2/NR_MAC_gNB/mac_proto.h"
#include "openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h" #include "openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h"
#include "openair2/E2AP/flexric/src/util/time_now_us.h" #include "openair2/E2AP/flexric/src/util/time_now_us.h"
#include "openair2/E2AP/flexric/test/rnd/fill_rnd_data_rlc.h"
static static
const int mod_id = 0; const int mod_id = 0;
...@@ -67,7 +66,7 @@ void active_avg_to_tx(NR_UEs_t* const UE_info) ...@@ -67,7 +66,7 @@ void active_avg_to_tx(NR_UEs_t* const UE_info)
} }
} }
void read_rlc_sm(void* data) bool read_rlc_sm(void* data)
{ {
assert(data != NULL); assert(data != NULL);
// assert(data->type == RLC_STATS_V0); // assert(data->type == RLC_STATS_V0);
...@@ -161,6 +160,8 @@ void read_rlc_sm(void* data) ...@@ -161,6 +160,8 @@ void read_rlc_sm(void* data)
++i; ++i;
} }
} }
return act_rb > 0;
} }
void read_rlc_setup_sm(void* data) void read_rlc_setup_sm(void* data)
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include "openair2/E2AP/flexric/src/agent/../sm/sm_io.h" #include "openair2/E2AP/flexric/src/agent/../sm/sm_io.h"
void read_rlc_sm(void*); bool read_rlc_sm(void*);
void read_rlc_setup_sm(void* data); void read_rlc_setup_sm(void* data);
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
flexric @ 70dd779f
Subproject commit 93961d2480b2c7a5721e03435cb34cf9446d1ad1 Subproject commit 70dd779f5339f4dac3ac176a24b49c45046a59fa
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment