From 88c74dc07fe599666aeafa6e534de58f119e65eb Mon Sep 17 00:00:00 2001 From: Teodora Date: Thu, 22 Jan 2026 18:29:24 +0100 Subject: [PATCH] Correct the MTU for 7.2 config files Even though the jumbo frame has 9600 bytes by the spec, the max MTU is limited to the MTU of a switch, if any used. However, the value can be < max MTU of a switch. This is very important for fragmentation purposes. If not properly set, the PDSCH packets will be missing. --- .../gnb.sa.band77.273prb.fhi72.4x4-vvdn.conf | 2 +- ...sa.band78.273prb.fhi72.4x4-benetel550.conf | 2 +- doc/ORAN_FHI7.2_Tutorial.md | 26 +++++++++---------- radio/fhi_72/oran-config.c | 8 +++--- ...sa.band77.273prb.fhi72.4x4-benetel650.conf | 2 +- ...7.273prb.fhi72.4x4-das-benetel650_650.conf | 2 +- ...and77.273prb.fhi72.8x8-benetel650_650.conf | 2 +- .../gnb.sa.band77.106prb.fhi72.4x4-vvdn.conf | 2 +- ....sa.band77.273prb.fhi72.2x2-vvdn-16b.conf} | 2 +- .../gnb.sa.band77.273prb.fhi72.4x4-vvdn.conf | 2 +- ...sa.band78.273prb.fhi72.4x2-benetel550.conf | 2 +- ...sa.band78.273prb.fhi72.4x4-benetel550.conf | 2 +- ...nb.sa.band78.273prb.fhi72.4x4-foxconn.conf | 2 +- ...gnb.sa.band78.273prb.fhi72.4x4-liteon.conf | 2 +- 14 files changed, 29 insertions(+), 29 deletions(-) rename targets/PROJECTS/GENERIC-NR-5GC/CONF/{gnb.sa.band77.273prb.fhi72.2x2-vvdn.conf => gnb.sa.band77.273prb.fhi72.2x2-vvdn-16b.conf} (99%) diff --git a/ci-scripts/conf_files/gnb.sa.band77.273prb.fhi72.4x4-vvdn.conf b/ci-scripts/conf_files/gnb.sa.band77.273prb.fhi72.4x4-vvdn.conf index b066c27810..c01c9afc79 100644 --- a/ci-scripts/conf_files/gnb.sa.band77.273prb.fhi72.4x4-vvdn.conf +++ b/ci-scripts/conf_files/gnb.sa.band77.273prb.fhi72.4x4-vvdn.conf @@ -251,7 +251,7 @@ fhi_72 = { io_core = 1; worker_cores = (2); ru_addr = ("98:ae:71:04:83:e3", "98:ae:71:04:83:e3"); - mtu = 9600; + mtu = 9216; fh_config = ({ T1a_cp_dl = (285, 470); T1a_cp_ul = (285, 429); diff --git a/ci-scripts/conf_files/gnb.sa.band78.273prb.fhi72.4x4-benetel550.conf b/ci-scripts/conf_files/gnb.sa.band78.273prb.fhi72.4x4-benetel550.conf index ee2930f8ad..885f561bec 100644 --- a/ci-scripts/conf_files/gnb.sa.band78.273prb.fhi72.4x4-benetel550.conf +++ b/ci-scripts/conf_files/gnb.sa.band78.273prb.fhi72.4x4-benetel550.conf @@ -258,7 +258,7 @@ fhi_72 = { io_core = 1; worker_cores = (2); ru_addr = ("70:b3:d5:e1:5b:81", "70:b3:d5:e1:5b:81"); - mtu = 9600; + mtu = 9216; fh_config = ({ T1a_cp_dl = (419, 470); T1a_cp_ul = (285, 336); diff --git a/doc/ORAN_FHI7.2_Tutorial.md b/doc/ORAN_FHI7.2_Tutorial.md index 0443089e47..6c18d02e5d 100644 --- a/doc/ORAN_FHI7.2_Tutorial.md +++ b/doc/ORAN_FHI7.2_Tutorial.md @@ -526,7 +526,7 @@ Contact the RU vendor and get the configuration manual to understand the below c The OAI configuration file [`gnb-du.sa.band77.273prb.fhi72.4x4-benetel650.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.4x4-benetel650.conf) corresponds to: - TDD pattern `DDDSU`, 2.5ms - Bandwidth 100MHz -- MTU 9600 +- MTU 9216 - 4TX4R ##### RU configuration @@ -552,7 +552,7 @@ dl_ul_tuning_special_slot=0xfd00000 The OAI configuration file [`gnb.sa.band78.273prb.fhi72.4x4-benetel550.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-benetel550.conf) corresponds to: - TDD pattern `DDDDDDDSUU`, 5ms - Bandwidth 100MHz -- MTU 9600 +- MTU 9216 - 4TX4R ##### RU configuration @@ -579,7 +579,7 @@ The OAI configuration file [`gnb.sa.band78.273prb.fhi72.4x4-liteon.conf`](../tar - TDD pattern `DDDSU`, 2.5ms - Bandwidth 100MHz - MTU 1500 -- MTU 9600: v02.00.10 +- MTU 9216: v02.00.10 ##### RU configuration @@ -618,7 +618,7 @@ jumboframe 1 # enable jumbo frame The OAI configuration file [`gnb.sa.band77.273prb.fhi72.4x4-vvdn.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.273prb.fhi72.4x4-vvdn.conf) corresponds to: - TDD pattern `DDDSU`, 2.5ms - Bandwidth 100MHz -- MTU 9600 +- MTU 9216 ##### RU configuration @@ -692,7 +692,7 @@ At this stage, RU must be rebooted so the changes apply. The OAI configuration file [`gnb.sa.band78.273prb.fhi72.4X4-foxconn.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4X4-foxconn.conf) corresponds to: - TDD pattern `DDDSU`, 2.5ms - Bandwidth 100MHz -- MTU 9600 +- MTU 9216 ##### RU configuration @@ -895,7 +895,7 @@ We recommand to put the above four steps into one script file to quickly repeat set -x IF_NAME=eno12409 MAX_RING_BUFFER_SIZE=4096 -MTU=9600 +MTU=9216 DU_U_PLANE_MAC_ADD=00:11:22:33:44:66 DU_C_PLANE_MAC_ADD=00:11:22:33:44:67 VLAN=3 @@ -931,7 +931,7 @@ Sample configuration files for OAI gNB, specific to the manufacturer of the radi 2. VVDN RU: [`gnb.sa.band77.273prb.fhi72.4x4-vvdn.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.273prb.fhi72.4x4-vvdn.conf) [`gnb.sa.band77.106prb.fhi72.4x4-vvdn.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.106prb.fhi72.4x4-vvdn.conf) -[`gnb.sa.band77.273prb.fhi72.2x2-vvdn.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.273prb.fhi72.2x2-vvdn.conf) +[`gnb.sa.band77.273prb.fhi72.2x2-vvdn-16b.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.273prb.fhi72.2x2-vvdn-16b.conf) 3. Benetel 650 RU: [`gnb-du.sa.band77.273prb.fhi72.4x4-benetel650.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.4x4-benetel650.conf) 4. Benetel 550 RU: @@ -970,7 +970,7 @@ Edit the sample OAI gNB configuration file and check following parameters: * `io_core`: absolute CPU core ID for XRAN library, it should be an isolated core, in our environment we are using CPU 4 * `worker_cores`: array of absolute CPU core IDs for XRAN library, they should be isolated cores, in our environment we are using CPU 2 * `ru_addr`: RU U- and C-plane MAC-addresses (format `UU:VV:WW:XX:YY:ZZ`, hexadecimal numbers) - * `mtu`: Maximum Transmission Unit for the RU, specified by RU vendor; either 1500 or 9600 B (Jumbo Frames); if not set, 1500 is used + * `mtu`: Maximum Transmission Unit for the RU, specified by RU vendor; either 1500 or 9600 B (Jumbo Frames); if not set, 1500 is used; if the testbed contains a switch, and its max supported MTU < 9600, then please set the same value in the config file as well * `file_prefix` : used to specify a unique prefix for shared memory and files created by multiple DPDK processes; if not set, default value of `wls_0` is used * `dpdk_mem_size`: the huge page size that should be pre-allocated by DPDK _for NUMA node 0_; by default, this is 8192 MiB (corresponding to 8 huge @@ -1171,7 +1171,7 @@ fhi_72 = { io_core = 1; worker_cores = (2); ru_addr = ("8c:1f:64:d1:10:46","8c:1f:64:d1:10:46","8c:1f:64:d1:10:43","8c:1f:64:d1:10:43") - mtu = 9600; + mtu = 9216; fh_config = ( # RAN650 #1 { @@ -1587,11 +1587,11 @@ sequenceDiagram [HW] [MPLANE] Watchdog timer answer: 2025-03-30T08:52:31+02:00 -[HW] [MPLANE] Interface MTU 1500 unreliable/not correctly reported by Benetel O-RU, hardcoding to 9600. +[HW] [MPLANE] Interface MTU 1500 unreliable/not correctly reported by Benetel O-RU, hardcoding to 9216. [HW] [MPLANE] IQ bitwidth 16 unreliable/not correctly reported by Benetel O-RU, hardcoding to 9. [HW] [MPLANE] Storing the following information to forward to xran: RU MAC address 8c:1f:64:d1:11:c0 - MTU 9600 + MTU 9216 IQ bitwidth 9 PRACH offset 4 DU port bitmask 61440 @@ -2238,11 +2238,11 @@ sequenceDiagram [HW] [MPLANE] Watchdog timer answer: 2025-08-29T06:49:32+02:00 -[HW] [MPLANE] Interface MTU 1500 unreliable/not correctly reported by Benetel O-RU, hardcoding to 9600. +[HW] [MPLANE] Interface MTU 1500 unreliable/not correctly reported by Benetel O-RU, hardcoding to 9216. [HW] [MPLANE] IQ bitwidth 16 unreliable/not correctly reported by Benetel O-RU, hardcoding to 9. [HW] [MPLANE] Storing the following information to forward to xran: RU MAC address 70:b3:d5:e1:5b:81 - MTU 9600 + MTU 9216 IQ bitwidth 9 PRACH offset 4 DU port bitmask 61440 diff --git a/radio/fhi_72/oran-config.c b/radio/fhi_72/oran-config.c index 00c13bc64d..921ea13e16 100644 --- a/radio/fhi_72/oran-config.c +++ b/radio/fhi_72/oran-config.c @@ -687,8 +687,8 @@ static bool set_fh_init(void *mplane_api, struct xran_fh_init *fh_init, enum xra if (!set_fh_eaxcid_conf_mplane(&fh_init->eAxCId_conf, xran_cat, ru_session_list)) return false; /* maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be - communicated in a single xRAN network layer transaction. Supported 1500 bytes and 9600 bytes (Jumbo Frame); - xran only checks if (MTU <= 1500), therefore setting any value > 1500, xran assumes 9600 value is used */ + communicated in a single xRAN network layer transaction. Based on the MTU size, xran calculates the number + of DL fragments (nPrbElm) needed for transmission of one symbol. */ fh_init->mtu = ru_session_list->ru_session[0].xran_mplane.mtu; // we suppose that each RU supports the same MTU size int num_ru_addr = (fh_init->io_cfg.one_vf_cu_plane) ? num_rus : 2*num_rus; @@ -711,8 +711,8 @@ static bool set_fh_init(void *mplane_api, struct xran_fh_init *fh_init, enum xra if (!set_fh_eaxcid_conf(&fh_init->eAxCId_conf, xran_cat)) return false; /* maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be - communicated in a single xRAN network layer transaction. Supported 1500 bytes and 9600 bytes (Jumbo Frame); - xran only checks if (MTU <= 1500), therefore setting any value > 1500, xran assumes 9600 value is used */ + communicated in a single xRAN network layer transaction. Based on the MTU size, xran calculates the number + of DL fragments (nPrbElm) needed for transmission of one symbol. */ fh_init->mtu = *gpd(fhip, nump, ORAN_CONFIG_MTU)->uptr; int num_ru_addr = gpd(fhip, nump, ORAN_CONFIG_RU_ADDR)->numelt; fh_init->p_o_ru_addr = calloc(num_ru_addr, sizeof(struct rte_ether_addr)); diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.4x4-benetel650.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.4x4-benetel650.conf index 1652758e4e..e590443239 100644 --- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.4x4-benetel650.conf +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.4x4-benetel650.conf @@ -237,7 +237,7 @@ fhi_72 = { io_core = 1; worker_cores = (2); ru_addr = ("8c:1f:64:d1:10:46","8c:1f:64:d1:10:46"); - mtu = 9600; + mtu = 9216; fh_config = ({ T1a_cp_dl = (419, 470); T1a_cp_ul = (285, 336); diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.4x4-das-benetel650_650.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.4x4-das-benetel650_650.conf index 1650f8a4e1..4a5553006a 100644 --- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.4x4-das-benetel650_650.conf +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.4x4-das-benetel650_650.conf @@ -241,7 +241,7 @@ fhi_72 = { io_core = 1; worker_cores = (2); ru_addr = ("8c:1f:64:d1:10:46","8c:1f:64:d1:10:46","8c:1f:64:d1:10:43","8c:1f:64:d1:10:43"); # if two VFs, set two RU MAC addresses (one per RU) - mtu = 9600; + mtu = 9216; fh_config = ( # RAN650 #1 { diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.8x8-benetel650_650.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.8x8-benetel650_650.conf index fdad2726c2..253d312eb0 100644 --- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.8x8-benetel650_650.conf +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.8x8-benetel650_650.conf @@ -237,7 +237,7 @@ fhi_72 = { io_core = 1; worker_cores = (2); ru_addr = ("8c:1f:64:d1:10:46","8c:1f:64:d1:10:46","8c:1f:64:d1:10:43","8c:1f:64:d1:10:43"); # if two VFs, set two RU MAC addresses (one per RU) - mtu = 9600; + mtu = 9216; fh_config = ( # RAN650 #1 { diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.106prb.fhi72.4x4-vvdn.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.106prb.fhi72.4x4-vvdn.conf index f7f8390b33..5ff25d5f43 100644 --- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.106prb.fhi72.4x4-vvdn.conf +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.106prb.fhi72.4x4-vvdn.conf @@ -256,7 +256,7 @@ fhi_72 = { io_core = 1; worker_cores = (2); ru_addr = ("98:ae:71:04:83:e3", "98:ae:71:04:83:e3"); - mtu = 9600; + mtu = 9216; fh_config = ({ T1a_cp_dl = (285, 470); T1a_cp_ul = (285, 429); diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.273prb.fhi72.2x2-vvdn.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.273prb.fhi72.2x2-vvdn-16b.conf similarity index 99% rename from targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.273prb.fhi72.2x2-vvdn.conf rename to targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.273prb.fhi72.2x2-vvdn-16b.conf index d68e67c96f..92ba13f7ce 100644 --- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.273prb.fhi72.2x2-vvdn.conf +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.273prb.fhi72.2x2-vvdn-16b.conf @@ -253,7 +253,7 @@ fhi_72 = { io_core = 1; worker_cores = (2); ru_addr = ("98:ae:71:04:83:e3", "98:ae:71:04:83:e3"); - mtu = 9600; + mtu = 9216; fh_config = ({ T1a_cp_dl = (285, 470); T1a_cp_ul = (285, 429); diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.273prb.fhi72.4x4-vvdn.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.273prb.fhi72.4x4-vvdn.conf index 7e13bf7dec..2e16cf50a5 100644 --- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.273prb.fhi72.4x4-vvdn.conf +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.273prb.fhi72.4x4-vvdn.conf @@ -255,7 +255,7 @@ fhi_72 = { io_core = 1; worker_cores = (2); ru_addr = ("98:ae:71:04:83:e3", "98:ae:71:04:83:e3"); - mtu = 9600; + mtu = 9216; fh_config = ({ T1a_cp_dl = (285, 470); T1a_cp_ul = (285, 429); diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x2-benetel550.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x2-benetel550.conf index 715dcda78c..43d6ffd760 100644 --- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x2-benetel550.conf +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x2-benetel550.conf @@ -255,7 +255,7 @@ fhi_72 = { io_core = 1; worker_cores = (2); ru_addr = ("70:b3:d5:e1:5b:81", "70:b3:d5:e1:5b:81"); - mtu = 9600; + mtu = 9216; fh_config = ({ T1a_cp_dl = (419, 470); T1a_cp_ul = (285, 336); diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-benetel550.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-benetel550.conf index 2788e7f5f5..39636baa54 100644 --- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-benetel550.conf +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-benetel550.conf @@ -257,7 +257,7 @@ fhi_72 = { io_core = 1; worker_cores = (2); ru_addr = ("70:b3:d5:e1:5b:81", "70:b3:d5:e1:5b:81"); - mtu = 9600; + mtu = 9216; fh_config = ({ T1a_cp_dl = (419, 470); T1a_cp_ul = (285, 336); diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-foxconn.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-foxconn.conf index e26e446f46..7f6845d8cd 100644 --- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-foxconn.conf +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-foxconn.conf @@ -254,7 +254,7 @@ fhi_72 = { io_core = 1; worker_cores = (2); ru_addr = ("6c:ad:ad:00:04:dc", "6c:ad:ad:00:04:dc"); - mtu = 9600; + mtu = 9216; fh_config = ({ T1a_cp_dl = (285, 470); T1a_cp_ul = (285, 429); diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-liteon.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-liteon.conf index 2419df21bb..0c1ef0b2e8 100644 --- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-liteon.conf +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-liteon.conf @@ -254,7 +254,7 @@ fhi_72 = { io_core = 1; worker_cores = (2); ru_addr = ("e8:c7:4f:25:81:b3", "e8:c7:4f:25:81:b3"); - mtu = 9600; # note: 1500 works as well, with both E and F releases + mtu = 9216; # note: 1500 works as well, with both E and F releases fh_config = ({ T1a_cp_dl = (285, 429); T1a_cp_ul = (285, 429);