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