Merge remote-tracking branch 'origin/oran-fh-doc-fix' into integration_2025_w20 (!3394)

Fix Liteon with MTU 1500 and update the FHI docs

- Closes #884 - needed to update the max fragments needed for
  transmission of one symbol; technically, 5 are enough but due to wrong
  equation in the xran F release we had to increase to 6
- Clarify packet length for VFs
- Update Foxconn doc and config file with MTU set for jumbo frames
- Update Benetel docs with new version v1.2.2
This commit is contained in:
Robert Schmidt
2025-05-15 19:16:40 +02:00
6 changed files with 52 additions and 44 deletions
@@ -1,5 +1,5 @@
diff --git a/fhi_lib/app/src/common.h b/fhi_lib/app/src/common.h diff --git a/fhi_lib/app/src/common.h b/fhi_lib/app/src/common.h
index ac5f471..bbd39fe 100644 index ac5f471..9ebbcab 100644
--- a/fhi_lib/app/src/common.h --- a/fhi_lib/app/src/common.h
+++ b/fhi_lib/app/src/common.h +++ b/fhi_lib/app/src/common.h
@@ -28,7 +28,7 @@ @@ -28,7 +28,7 @@
@@ -7,7 +7,7 @@ index ac5f471..bbd39fe 100644
#include <rte_mbuf.h> #include <rte_mbuf.h>
-#define VERSIONX "oran_f_release_v1.0" -#define VERSIONX "oran_f_release_v1.0"
+#define VERSIONX "oran_f_release_v1.2" +#define VERSIONX "oran_f_release_v1.3"
#define APP_O_DU 0 #define APP_O_DU 0
#define APP_O_RU 1 #define APP_O_RU 1
@@ -164,9 +164,18 @@ index eccc4ae..b1b8f4b 100644
CPP_FLAGS_FULL := $(CPP_FLAGS) $(CPP_COMP) $(INC) $(DEF) CPP_FLAGS_FULL := $(CPP_FLAGS) $(CPP_COMP) $(INC) $(DEF)
CPP_FLAGS_FULL_SNC := $(CPP_FLAGS) $(CPP_COMP_SNC) $(INC) $(DEF) CPP_FLAGS_FULL_SNC := $(CPP_FLAGS) $(CPP_COMP_SNC) $(INC) $(DEF)
diff --git a/fhi_lib/lib/api/xran_fh_o_du.h b/fhi_lib/lib/api/xran_fh_o_du.h diff --git a/fhi_lib/lib/api/xran_fh_o_du.h b/fhi_lib/lib/api/xran_fh_o_du.h
index bacf597..90a42a2 100644 index bacf597..8bd7c66 100644
--- a/fhi_lib/lib/api/xran_fh_o_du.h --- a/fhi_lib/lib/api/xran_fh_o_du.h
+++ b/fhi_lib/lib/api/xran_fh_o_du.h +++ b/fhi_lib/lib/api/xran_fh_o_du.h
@@ -141,7 +141,7 @@ extern "C" {
#define XRAN_MAX_SECTIONS_PER_SYM (XRAN_MAX_SECTIONS_PER_SLOT) /**< Max number of different sections in single slot (section may be equal to RB allocation for UE) */
#define XRAN_MIN_SECTIONS_PER_SYM (XRAN_MIN_SECTIONS_PER_SLOT) /**< Min number of different sections in single slot (section may be equal to RB allocation for UE) */
-#define XRAN_MAX_FRAGMENT (4) /**< Max number of fragmentations in single symbol */
+#define XRAN_MAX_FRAGMENT (6) /**< Max number of fragmentations in single symbol */
#define XRAN_MAX_SET_BFWS (64) /**< Assumed 64Ant, BFP 9bit with 9K jumbo frame */
#define XRAN_MAX_PKT_BURST (448+4) /**< 4x14x8 symbols per ms */
@@ -1193,6 +1193,31 @@ int32_t xran_reg_physide_cb_by_dev_id(void *pHandle, xran_fh_tti_callback_fn Cb, @@ -1193,6 +1193,31 @@ int32_t xran_reg_physide_cb_by_dev_id(void *pHandle, xran_fh_tti_callback_fn Cb,
*/ */
int32_t xran_get_slot_idx (uint32_t PortId, uint32_t *nFrameIdx, uint32_t *nSubframeIdx, uint32_t *nSlotIdx, uint64_t *nSecond); int32_t xran_get_slot_idx (uint32_t PortId, uint32_t *nFrameIdx, uint32_t *nSubframeIdx, uint32_t *nSlotIdx, uint64_t *nSecond);
+21 -26
View File
@@ -66,15 +66,16 @@ PTP enabled switches and grandmaster clock we have in are lab:
We have only verified LLS-C3 configuration in our lab, i.e. using an external We have only verified LLS-C3 configuration in our lab, i.e. using an external
grandmaster, a switch as a boundary clock, and the gNB/DU and RU. We haven't grandmaster, a switch as a boundary clock, and the gNB/DU and RU. We haven't
tested any RU without S-plane. Radio units we are testing/integrating: tested any RU without S-plane.
We tested the category A radio units listed below.
|Vendor |Software Version | |Vendor |Software Version |
|-----------------|----------------------| |-----------------|---------------------------------------------|
|VVDN LPRU |03-v3.0.5 | |VVDN LPRU |03-v3.0.5 |
|LiteON RU |01.00.08/02.00.03 | |LiteON RU |01.00.08/02.00.03/02.00.10 |
|Benetel 650 |RAN650-1v1.0.4-dda1bf5| |Benetel 650 |RAN650-1v1.0.4-dda1bf5|RAN650-1v1.2.2-2fa04bc|
|Benetel 550 CAT-A|RAN550-1v1.0.4-605a25a| |Benetel 550 |RAN550-1v1.0.4-605a25a|RAN550-1v1.2.2-2fa04bc|
|Foxconn RPQN |v3.1.15q.551_rc10 | |Foxconn RPQN |v3.1.15q.551_rc10 |
Tested libxran releases: Tested libxran releases:
@@ -534,8 +535,6 @@ Contact the RU vendor and get the configuration manual to understand the below c
### Benetel 650 ### Benetel 650
**Valid only for version RAN650-1v1.0.4-dda1bf5**
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: 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 - TDD pattern `DDDSU`, 2.5ms
- Bandwidth 100MHz - Bandwidth 100MHz
@@ -562,8 +561,6 @@ dl_ul_tuning_special_slot=0xfd00000
### Benetel 550 ### Benetel 550
**Valid only for version RAN550-1v1.0.4-605a25a**
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: 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 - TDD pattern `DDDDDDDSUU`, 5ms
- Bandwidth 100MHz - Bandwidth 100MHz
@@ -590,11 +587,11 @@ dl_tuning_special_slot=0x13b6
### LITEON ### LITEON
**Verson 01.00.08**
The OAI configuration file [`gnb.sa.band78.273prb.fhi72.4x4-liteon.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-liteon.conf) corresponds to: The OAI configuration file [`gnb.sa.band78.273prb.fhi72.4x4-liteon.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-liteon.conf) corresponds to:
- TDD pattern `DDDSU`, 2.5ms - TDD pattern `DDDSU`, 2.5ms
- Bandwidth 100MHz - Bandwidth 100MHz
- MTU 1500 (the above mentioned LITEON version doesn't support jumbo frames) - MTU 1500
- MTU 9600: v02.00.10
#### RU configuration #### RU configuration
@@ -614,18 +611,16 @@ Once the RU is PTP synced, and RF state and DPD are `Ready`, write `configure te
- Bandwidth - Bandwidth
- Compression Bitwidth - Compression Bitwidth
- TX/RX attenuation - TX/RX attenuation
- PRACH eAxC IDs
- DU MAC address
...
After each reboot, the PRACH has to be manually configured. The configuration mode example:
To do so, please login to RU as user `root` and run below commands:
```bash ```bash
devmem 0x80001014 32 0x00050004 compression-bit 9 # set IQ bitwidth for PxSCH/PRACH
devmem 0x80001018 32 0x00070006 eAXC_id 4 5 6 7 # set PRACH eAxC IDs
devmem 0x8000201C 32 0x00000001 jumboframe 1 # enable jumbo frame
``` ...
If you have RU version that supports jumbo frames, please enable it as:
```bash
devmem 0x8000200C 32 0x00000001
``` ```
### VVDN LPRU ### VVDN LPRU
@@ -709,7 +704,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: 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 - TDD pattern `DDDSU`, 2.5ms
- Bandwidth 100MHz - Bandwidth 100MHz
- MTU 8000 - MTU 9600
#### RU configuration #### RU configuration
@@ -750,7 +745,7 @@ In the following, we will use these short hands:
- `IF_NAME`: Physical network interface through which you can access the RU - `IF_NAME`: Physical network interface through which you can access the RU
- `VLAN`: the VLAN tag as recommended by the RU vendor - `VLAN`: the VLAN tag as recommended by the RU vendor
- `MTU`: the MTU as specified by the RU vendor, and supported by the NIC - `MTU`: this MTU must be higher than supported by the RU vendor due to additional ethernet header of 14 B and DPDK packet header `RTE_PKTMBUF_HEADROOM` of 128 B
- `DU_U_PLANE_MAC_ADD`: DU U plane MAC address - `DU_U_PLANE_MAC_ADD`: DU U plane MAC address
- `U_PLANE_PCI_BUS_ADD`: PCI bus address of the VF for U plane - `U_PLANE_PCI_BUS_ADD`: PCI bus address of the VF for U plane
- `DU_C_PLANE_MAC_ADD`: DU C plane MAC address - `DU_C_PLANE_MAC_ADD`: DU C plane MAC address
+6 -3
View File
@@ -16,13 +16,16 @@ add_library(oran_fhlib_5g MODULE
oran-init.c oran-init.c
) )
set(E_VERSION 5.1.5)
set(F_VERSION 6.1.3)
find_package(xran REQUIRED) find_package(xran REQUIRED)
if(xran_VERSION VERSION_EQUAL 5.1.5) if(xran_VERSION VERSION_EQUAL E_VERSION)
target_compile_definitions(oran_fhlib_5g PRIVATE E_RELEASE) target_compile_definitions(oran_fhlib_5g PRIVATE E_RELEASE)
elseif(xran_VERSION VERSION_EQUAL 6.1.2) elseif(xran_VERSION VERSION_EQUAL F_VERSION)
target_compile_definitions(oran_fhlib_5g PRIVATE F_RELEASE) target_compile_definitions(oran_fhlib_5g PRIVATE F_RELEASE)
else() else()
message(FATAL_ERROR "Found xran version ${xran_VERSION} but needed 5.1.5 (E release) or 6.1.2 (F release)") message(FATAL_ERROR "Found xran version ${xran_VERSION} but needed ${E_VERSION} (E release) or ${F_VERSION} (F release)")
endif() endif()
# Ignore xran-specific warning: we don't care/can't change the following warning, so suppress # Ignore xran-specific warning: we don't care/can't change the following warning, so suppress
+2 -2
View File
@@ -6,9 +6,9 @@ add_library(oran_fhlib_5g_mplane MODULE
) )
add_dependencies(oran_fhlib_5g_mplane oran_fhlib_5g) add_dependencies(oran_fhlib_5g_mplane oran_fhlib_5g)
if(xran_VERSION VERSION_EQUAL 5.1.4) if(xran_VERSION VERSION_EQUAL E_VERSION)
target_compile_definitions(oran_fhlib_5g_mplane PRIVATE E_RELEASE) target_compile_definitions(oran_fhlib_5g_mplane PRIVATE E_RELEASE)
elseif(xran_VERSION VERSION_EQUAL 6.1.1) elseif(xran_VERSION VERSION_EQUAL F_VERSION)
target_compile_definitions(oran_fhlib_5g_mplane PRIVATE F_RELEASE) target_compile_definitions(oran_fhlib_5g_mplane PRIVATE F_RELEASE)
endif() endif()
@@ -257,7 +257,7 @@ fhi_72 = {
io_core = 1; io_core = 1;
worker_cores = (2); worker_cores = (2);
ru_addr = ("6c:ad:ad:00:04:dc", "6c:ad:ad:00:04:dc"); ru_addr = ("6c:ad:ad:00:04:dc", "6c:ad:ad:00:04:dc");
mtu = 8000; mtu = 9600;
fh_config = ({ fh_config = ({
T1a_cp_dl = (285, 470); T1a_cp_dl = (285, 470);
T1a_cp_ul = (285, 429); T1a_cp_ul = (285, 429);
@@ -19,7 +19,7 @@ gNBs =
pdsch_AntennaPorts_XP = 2; pdsch_AntennaPorts_XP = 2;
pdsch_AntennaPorts_N1 = 2; pdsch_AntennaPorts_N1 = 2;
maxMIMO_layers = 2; maxMIMO_layers = 4;
pusch_AntennaPorts = 4; pusch_AntennaPorts = 4;
do_CSIRS = 1; do_CSIRS = 1;
do_SRS = 0; do_SRS = 0;
@@ -33,12 +33,12 @@ gNBs =
# n_TimingAdvanceOffset = 0; # n_TimingAdvanceOffset = 0;
# downlinkConfigCommon # downlinkConfigCommon
#frequencyInfoDL #frequencyInfoDL
# center frequency = 3450.72 MHz # center frequency = 3350.01 MHz
# selected SSB frequency = 3450.72 MHz # selected SSB frequency = 3349.92 MHz
absoluteFrequencySSB = 630048; absoluteFrequencySSB = 623328;
dl_frequencyBand = 78; dl_frequencyBand = 78;
# frequency point A = 3401.58 MHz # frequency point A = 3300.87 MHz
dl_absoluteFrequencyPointA = 626772; dl_absoluteFrequencyPointA = 620058;
#scs-SpecificCarrierList #scs-SpecificCarrierList
dl_offstToCarrier = 0; dl_offstToCarrier = 0;
# subcarrierSpacing # subcarrierSpacing
@@ -257,15 +257,16 @@ fhi_72 = {
system_core = 0; system_core = 0;
io_core = 1; io_core = 1;
worker_cores = (2); worker_cores = (2);
ru_addr = ("e8:c7:4f:1e:c7:11", "e8:c7:4f:1e:c7:11"); 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
fh_config = ({ fh_config = ({
T1a_cp_dl = (285, 429); T1a_cp_dl = (285, 429);
T1a_cp_ul = (285, 429); T1a_cp_ul = (285, 429);
T1a_up = (96, 196); T1a_up = (96, 196);
Ta4 = (110, 180); Ta4 = (110, 180);
ru_config = { ru_config = {
iq_width = 8; iq_width = 9;
iq_width_prach = 8; iq_width_prach = 9;
}; };
prach_config = { prach_config = {
kbar = 0; kbar = 0;