diff --git a/doc/ORAN_FHI7.2_Tutorial.md b/doc/ORAN_FHI7.2_Tutorial.md
index 8da06fe15e..da82f69734 100644
--- a/doc/ORAN_FHI7.2_Tutorial.md
+++ b/doc/ORAN_FHI7.2_Tutorial.md
@@ -964,7 +964,7 @@ Layer mapping (eAxC offsets) happens as follows:
**Note**
- At the moment, OAI is compatible with CAT A O-RU only. Therefore, SRS is not supported.
-- XRAN retreives DU MAC address with `rte_eth_macaddr_get()` function. Hence, `fhi_72.du_addr` parameter is not taken into account.
+- XRAN retrieves DU MAC address with `rte_eth_macaddr_get()` function. Hence, `fhi_72.du_addr` parameter is not taken into account.
# Start and Operation of OAI gNB
@@ -1173,6 +1173,815 @@ Note the eight entries after `avg_IO`.
You should be able to connect a UE now.
+
+# OAI Management Plane
+We support Configuration Management in OAI gNB, where gNB configures CU-planes, interfaces, TX/RX antennas, and TX/RX carriers for the RU.
+The reference specifications:
+* `O-RAN.WG4.MP.0-v05.00`
+* `O-RAN.WG4.MP-YANGs-v04.00`
+
+## M-plane prerequisites
+Before proceeding, please make sure you have a support for 7.2 interface, as described in [Prerequisites](#prerequisites).
+
+### DHCP server
+The M-plane requires a DHCP server, where the M-plane connection can be established over untagged or tagged VLAN. We tested with untagged (the default VLAN is 1).
+Please modify `/etc/dhcp/dhcpd.conf` configuration based on your testbed.
+
+
+Example DHCP server configuration
+
+```
+class "vendor-class" {
+ match option vendor-class-identifier;
+}
+subclass "vendor-class" "o-ran-ru2/Benetel" {
+ vendor-option-space VC;
+}
+option space VC;
+option VC.server-address code 129 = array of ip-address;
+option VC.server-fqdn code 130 = string;
+# Netconf client IP address - DHCP option 43
+option VC.server-address 192.168.80.1;
+option VC.server-fqdn "o_du_1.operator.com";
+set vendor-string = option vendor-class-identifier;
+# option 143 - DHCPv4 SZTP Redirect Option (RFC8572)
+# 2 bytes of URI's length + URI
+option sztp code 143 = { unsigned integer 16, string };
+option sztp 15 "https://192.168.80.1";
+# port is optional in URI, e.g. "https://192.168.80.1:222"
+#option sztp 20 "https://192.168.80.1:2222";
+subnet 192.168.80.0 netmask 255.255.255.0 {
+ option routers 192.168.80.1;
+ option subnet-mask 255.255.255.0;
+ option domain-name "oai.com";
+ option domain-name-servers 172.21.3.100;
+ host benetel_ru {
+ # RU MAC address
+ hardware ethernet ;
+ # RU IP address
+ fixed-address ;
+ }
+}
+```
+
+
+Please, configure the interface as:
+```bash
+sudo ip address add 192.168.80.1/24 dev
+```
+
+### Mandatory packages
+* On Fedora (we haven't yet tested RHEL):
+```bash
+sudo dnf install pcre-devel libssh-devel libxml2-devel libyang2-devel libnetconf2-devel
+```
+
+* On Ubuntu:
+```bash
+sudo apt-get install libpcre3-dev libssh-dev libxml2-dev
+```
+
+On Ubuntu, please note: `sudo apt-get install libyang2-dev libnetconf2-dev` will install unsupported versions (i.e. v2.0.112/v2.0.24 for `libyang2-dev`/`libnetconf2-dev`, but minimum required are v2.1.4/v2.1.25).
+Therefore, please compile these libraries from source, as following:
+
+
+Installing latest v2 libyang2 and libnetconf2 libraries
+
+```
+rm -rf /tmp/build_mplane_v2
+mkdir /tmp/build_mplane_v2
+
+# libyang
+cd /tmp/build_mplane_v2
+git clone https://github.com/CESNET/libyang.git
+cd libyang
+git checkout v2.1.111
+mkdir build && cd build
+cmake -DENABLE_TESTS=OFF \
+ -DENABLE_VALGRIND_TESTS=OFF \
+ -DCMAKE_INSTALL_PREFIX=/usr/local \
+ -DCMAKE_INSTALL_RPATH=/usr/local/lib \
+ -DPLUGINS_DIR=/usr/local/lib/libyang \
+ -DPLUGINS_DIR_EXTENSIONS=/usr/local/lib/libyang/extensions \
+ -DPLUGINS_DIR_TYPES=/usr/local/lib/libyang/types \
+ -DYANG_MODULE_DIR=/usr/local/share/yang/modules/libyang ..
+make -j8
+sudo make install
+sudo ldconfig
+
+#libnetconf
+cd /tmp/build_mplane_v2
+git clone https://github.com/CESNET/libnetconf2.git
+cd libnetconf2
+git checkout v2.1.37
+mkdir build && cd build
+cmake -DENABLE_TESTS=OFF \
+ -DENABLE_EXAMPLES=OFF \
+ -DENABLE_VALGRIND_TESTS=OFF \
+ -DCLIENT_SEARCH_DIR=/usr/local/share/yang/modules \
+ -DCMAKE_INSTALL_PREFIX=/usr/local \
+ -DCMAKE_INSTALL_RPATH=/usr/local/lib \
+ -DLIBYANG_INCLUDE_DIR=/usr/local/include \
+ -DLIBYANG_LIBRARY=/usr/local/lib/libyang.so \
+ -DLY_VERSION_PATH=/usr/local/include \
+ -DYANG_MODULE_DIR=/usr/local/share/yang/modules/libnetconf2 ..
+make -j8
+sudo make install
+sudo ldconfig
+
+# to uninstall libraries
+# cd /tmp/build_mplane_v2/libyang/build && sudo make uninstall
+# cd /tmp/build_mplane_v2/libnetconf2/build && sudo make uninstall
+# cd
+# rm -rf /tmp/build_mplane_v2
+```
+
+
+If you would like to install these libraries in the custom path, please replace `/usr/local` default path to e.g. `/opt/mplane-v2`.
+
+## Benetel O-RU
+Note: Only v1.2.2 RAN550 and RAN650 have been successfully tested.
+
+### One time steps
+Connect to the RU as user `root`, enable the mplane service, and reboot:
+```bash
+ssh root@
+systemctl enable mplane
+reboot
+```
+Once the mplane service is successfully enabled on the RU, two new users are being added in `/etc/passwd`:
+```bash
+...
+oranbenetel:x:1000:1000::/home/oranbenetel:/bin/sh
+oranext:x:1001:1001::/home/oranext:/bin/sh
+```
+Create `oranbenetel` home directory:
+```bash
+mkdir /home/oranbenetel && chown oranbenetel:oranbenetel /home/oranbenetel
+```
+Connect to the RU as user `oranbenetel`, generate ssh keys, and copy DU public key into RU for NETCONF authentication:
+```bash
+ssh oranbenetel@
+ssh-keygen
+echo "" >> ~/.ssh/authorized_keys
+```
+
+
+## gNB configuration
+The reference gNB configuration file for one Benetel RAN550:
+[`gnb.sa.band78.273prb.fhi72.4x4-benetel550-mplane.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-benetel550-mplane.conf)
+The reference DU configuration file for two Benetel RAN650:
+[gnb-du.sa.band77.273prb.fhi72.8x8-benetel650_650-mplane.conf](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.8x8-benetel650_650-mplane.conf)
+
+In order to run gNB/DU with M-plane, we need to modify the `fhi_72` section in the configuration file.
+Example for one RU:
+```bash
+fhi_72 = {
+ dpdk_devices = ("0000:c3:11.0", "0000:c3:11.1"); # one VF can be used as well
+ system_core = 0;
+ io_core = 1;
+ worker_cores = (2);
+ du_key_pair = ("/.ssh/id_rsa.pub", "/.ssh/id_rsa");
+ du_addr = ("00:11:22:33:44:66", "00:11:22:33:44:67"); # only one needed if one VF configured
+ vlan_tag = (9, 9); # only one needed if one VF configured
+ ru_ip_addr = ("192.168.80.9");
+ fh_config = ({
+ T1a_cp_dl = (419, 470);
+ T1a_cp_ul = (285, 336);
+ T1a_up = (294, 345);
+ Ta4 = (0, 200);
+ });
+};
+```
+Example for two RUs:
+```bash
+fhi_72 = {
+ dpdk_devices = ("0000:c3:11.0", "0000:c3:11.1", "0000:c3:11.2", "0000:c3:11.3"); # two VFs can be used as well
+ system_core = 0;
+ io_core = 1;
+ worker_cores = (2);
+ du_key_pair = ("/home/oaicicd/.ssh/id_rsa.pub", "/home/oaicicd/.ssh/id_rsa");
+ du_addr = ("00:11:22:33:44:66", "00:11:22:33:44:67", "00:11:22:33:44:68", "00:11:22:33:44:69"); # only two needed if two VFs configured
+ vlan_tag = (9, 9, 11, 11); # only two needed if two VFs configured
+ ru_ip_addr = ("192.168.80.9", "192.168.80.10");
+ fh_config = (
+# RAN550 #1
+ {
+ T1a_cp_dl = (419, 470);
+ T1a_cp_ul = (285, 336);
+ T1a_up = (294, 345);
+ Ta4 = (0, 200);
+ },
+# RAN550 #2
+ {
+ T1a_cp_dl = (419, 470);
+ T1a_cp_ul = (285, 336);
+ T1a_up = (294, 345);
+ Ta4 = (0, 200);
+ });
+};
+```
+
+* `fhi_72` :
+ * `dpdk_devices`: [*]
+ * `system_core`: [*]
+ * `io_core`: [*]
+ * `worker_cores`: [*]
+ * `file_prefix`: [*]
+ * `du_key_pair`: ssh public and private keys to authenticate RU with NETCONF
+ * `du_addr`: DU MAC address(es) to create CU-plane interface(s) in the RU
+ * `vlan_tag`: VLAN U and C plane tags to create CU-plane interface(s) in the RU
+ * `ru_ip_addr`: RU IP address to connect to the RU via M-plane
+ * `dpdk_mem_size`: [*]
+ * `dpdk_iova_mode`: [*]
+ * `owdm_enable`: [*]
+ * `fh_config`: only DU delay profile (`T1a` and `Ta4`)
+
+[*] see [Configure OAI gNB](#configure-oai-gnb) for more details
+
+The following parameters are retrieved from the RU and forwarded to the xran:
+* `MTU`
+* `RU MAC address`
+* `IQ compression`: if RU supports multiple, the first value in the list is taken; please note that the same value is used for PxSCH/PRACH
+* `PRACH offset`: hardcoded based on the RU vendor (i.e. for Benetel `max(Nrx,Ntx)`)
+
+## Build and compile gNB
+The following cmake options are available:
+* `OAI_FHI72` = CUS support
+* `OAI_FHI72_MPLANE` = M support
+
+Compiled libraries:
+* `OAI_FHI72` <=> `oran_fhlib_5g`
+* `OAI_FHI72` && `OAI_FHI72_MPLANE` <=> `oran_fhlib_5g` (CUS) && `oran_fhlib_5g_mplane` (CUSM)
+
+### Using build_oai script
+```bash
+git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g
+cd ~/openairinterface5g/cmake_targets/
+./build_oai -I # if you never installed OAI, use this command once before the next line
+./build_oai --install-optional-packages # for pcre/libpcre3, libssh, and libxml2 library installation
+./build_oai --gNB --ninja -t oran_fhlib_5g_mplane --cmake-opt -Dxran_LOCATION=$HOME/phy/fhi_lib/lib
+# if libyang2 and libnetconf2 are installed in `/opt/mplane-v2`, please use the following command:
+PKG_CONFIG_PATH=/opt/mplane-v2/lib/pkgconfig ./build_oai --gNB --ninja -t oran_fhlib_5g_mplane --cmake-opt -Dxran_LOCATION=$HOME/phy/fhi_lib/lib
+```
+
+### Using cmake directly
+```bash
+git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g
+cd ~/openairinterface5g/
+mkdir build && cd build
+cmake .. -GNinja -DOAI_FHI72=ON -DOAI_FHI72_MPLANE=ON -Dxran_LOCATION=$HOME/phy/fhi_lib/lib
+# if libyang2 and libnetconf2 are installed in `/opt/mplane-v2`, please use the following command:
+PKG_CONFIG_PATH=/opt/mplane-v2/lib/pkgconfig cmake .. -GNinja -DOAI_FHI72=ON -DOAI_FHI72_MPLANE=ON -Dxran_LOCATION=$HOME/phy/fhi_lib/lib
+ninja nr-softmodem oran_fhlib_5g_mplane params_libconfig
+```
+
+## Start the gNB
+Run the `nr-softmodem` from the build directory:
+```bash
+cd ~/openairinterface5g/cmake_targets/ran_build/build
+sudo ./nr-softmodem -O --thread-pool
+```
+
+**Warning**: Make sure that the configuration file you add after the `-O` option is adapted to your machine, especially to its isolated cores.
+
+M-plane sequence diagram:
+
+```mermaid
+sequenceDiagram
+ participant dhcp as DHCP server
+ participant du as O-DU
+ participant ru as O-RU
+
+ dhcp->ru: 1. Transport Layer Initialization
+ note over dhcp,ru: (a) perform VLAN scan (untagged or tagged VLAN)
(b) DHCP assigns IP address to RU
(c) DHCP sends DU IP address to RU
+
+ du->ru: 2. NETCONF/SSH connect
+
+ du->>ru: 3. DU retrieves RU info
+ note left of du:
+
+ note over du: Check if RU is PTP synced
+
+ du->>ru: 4. DU subscribes to all RU notifications
+ note left of du:
+
+ du->>ru: 5. DU updates the supervision timer
+ note left of du:
+
+ note over du: Store RU MAC, MTU, IQ bitwidth, and PRACH offset info for xran
+
+ note over du: Store all the RU U-plane info - interface name, TX/RX carrier, and TX/RX endpoint names
+
+ du->>ru: 6. DU loads yang models
+ note left of du:
+ note right of ru: ietf-netconf-monitoring.yang
+
+ du->>ru: 7. DU performs CU-plane configuration
+ note left of du:
+
+ note over ru: (1) o-ran-interface.yang - create new interface with VLAN tag, DU and RU MAC addresses
(2)(opt.) o-ran-transceiver.yang - for file upload
(3) o-ran-processing-elements.yang - element with which RU ports should be assigned
(4) o-ran-uplane-conf.yang
#8193;(4a) low-level-tx/rx-endpoints - PxSCH, PRACH
#8193;(4b) tx/rx-array-carriers - center frequency, BW, gain, ACTIVE,...
#8193;(4c) low-level-tx/rx-links - mapping endpoints, carriers and processing element
#8193;(4d)(opt.) if CAT B, SRS configuration
#8193;(4e)(opt.) TDD configuration
+
+ du->>ru: 8. DU checks if CU-plane configuration is valid
+ note left of du:
+
+ du->>ru: 9. If valid, DU commits the changes
+ note left of du:
+
+ du->>ru: 10. DU retrieves RU states
+ note right of ru: ietf-hardware.yang
+ note left of du:
+ note over ru: admin-state, power-state, oper-state,
availability-state, usage-state
+
+ ru->>du: 11. RU notifies DU about the configuration change
+
+ note over du: DU configures xran
+
+ du->ru: 12. DU and RU exchange packets
+```
+
+
+
+4x4 MIMO and 100MHz BW with Benetel 550 RU example run
+
+```
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = with username "oranbenetel" and port ID "830".
+[HW] [MPLANE] Successfuly connected to RU "192.168.80.9" with username "oranbenetel" and port ID "830".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = operational datastore.
+[HW] [MPLANE] Successfully retrieved operational datastore from RU "192.168.80.9".
+[HW] [MPLANE] RU is already PTP synchronized.
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = with stream "NETCONF" and filter "(null)".
+[HW] [MPLANE] RPC reply = OK.
+[HW] [MPLANE] Successfully subscribed to all notifications from RU "192.168.80.9".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = "
+65535
+65535
+".
+[HW] [MPLANE] Successfully updated supervision timer to (65535+65535)[s] for RU "192.168.80.9".
+[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] 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
+ IQ bitwidth 9
+ PRACH offset 4
+ DU port bitmask 61440
+ Band sector bitmask 3840
+ CC ID bitmask 240
+ RU port ID bitmask 15
+ DU port ID 0
+ Band sector ID 0
+ CC ID 0
+ RU port ID 0
+[HW] [MPLANE] Successfully retrieved all the U-plane info - interface name, TX/RX carrier names, and TX/RX endpoint names.
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "ietf-yang-metadata".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "yang".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "ietf-inet-types".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "ietf-yang-types".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "ietf-yang-schema-mount".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "ietf-yang-structure-ext".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "ietf-datastores".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "sysrepo".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "ietf-netconf-acm".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "ietf-factory-default".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "sysrepo-factory-default".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "ietf-yang-library".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "sysrepo-monitoring".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "sysrepo-plugind".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "ietf-netconf".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "ietf-netconf-with-defaults".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "ietf-netconf-notifications".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "ietf-origin".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "ietf-netconf-monitoring".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "ietf-netconf-nmda".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = for module "nc-notifications".
+[HW] [MPLANE] [LIBYANG] ERROR: Data model "notifications" not found in local searchdirs. (path: (null)).
+[HW] [MPLANE] [LIBYANG] ERROR: Loading "notifications" module failed. (path: (null)).
+[HW] [MPLANE] [LIBYANG] ERROR: Parsing module "nc-notifications" failed. (path: (null)).
+[HW] [MPLANE] Unable to load module "nc-notifications" from RU "192.168.80.9".
+[HW] [MPLANE] Unable to load all yang modules from operational datastore for RU "192.168.80.9". Using yang models present in "models" subfolder.
+[HW] [MPLANE] Successfully loaded all yang modules for RU "192.168.80.9".
+[HW] [MPLANE] The VLAN tags for C and U plane for the RU "192.168.80.9" are the same. Therefore, configuring one common interface and one processing element.
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = :
+
+
+ INTERFACE_0
+ ianaift:l2vlan
+ true
+ 8c:1f:64:d1:11:c0
+ eth0
+ 9
+
+
+
+ ETH-INTERFACE
+
+ PLANE_0
+
+ INTERFACE_0
+
+ 8c:1f:64:d1:11:c0
+ 9
+ 00:11:22:33:44:66
+
+
+
+
+
+
+ PdschLink0
+ PLANE_0
+ TxArray0
+ LowLevelTxEndpoint0
+
+
+ PdschLink1
+ PLANE_0
+ TxArray0
+ LowLevelTxEndpoint1
+
+
+ PdschLink2
+ PLANE_0
+ TxArray0
+ LowLevelTxEndpoint2
+
+
+ PdschLink3
+ PLANE_0
+ TxArray0
+ LowLevelTxEndpoint3
+
+
+ PuschLink0
+ PLANE_0
+ RxArray0
+ LowLevelRxEndpoint0
+
+
+ PrachLink0
+ PLANE_0
+ RxArray0
+ LowLevelRxPrachEndpoint0
+
+
+ PuschLink1
+ PLANE_0
+ RxArray0
+ LowLevelRxEndpoint1
+
+
+ PrachLink1
+ PLANE_0
+ RxArray0
+ LowLevelRxPrachEndpoint1
+
+
+ PuschLink2
+ PLANE_0
+ RxArray0
+ LowLevelRxEndpoint2
+
+
+ PrachLink2
+ PLANE_0
+ RxArray0
+ LowLevelRxPrachEndpoint2
+
+
+ PuschLink3
+ PLANE_0
+ RxArray0
+ LowLevelRxEndpoint3
+
+
+ PrachLink3
+ PLANE_0
+ RxArray0
+ LowLevelRxPrachEndpoint3
+
+
+ LowLevelTxEndpoint0
+
+ 9
+ STATIC
+
+ 0
+ 0
+ 0
+
+ 61440
+ 3840
+ 240
+ 15
+ 0
+
+
+
+ LowLevelTxEndpoint1
+
+ 9
+ STATIC
+
+ 0
+ 0
+ 0
+
+ 61440
+ 3840
+ 240
+ 15
+ 1
+
+
+
+ LowLevelTxEndpoint2
+
+ 9
+ STATIC
+
+ 0
+ 0
+ 0
+
+ 61440
+ 3840
+ 240
+ 15
+ 2
+
+
+
+ LowLevelTxEndpoint3
+
+ 9
+ STATIC
+
+ 0
+ 0
+ 0
+
+ 61440
+ 3840
+ 240
+ 15
+ 3
+
+
+
+ LowLevelRxEndpoint0
+
+ 9
+ STATIC
+
+ 0
+ 0
+ 0
+
+ 61440
+ 3840
+ 240
+ 15
+ 0
+
+
+
+ LowLevelRxPrachEndpoint0
+
+ 9
+ STATIC
+
+ 0
+ 0
+ 0
+
+ 61440
+ 3840
+ 240
+ 15
+ 4
+
+
+
+ LowLevelRxEndpoint1
+
+ 9
+ STATIC
+
+ 0
+ 0
+ 0
+
+ 61440
+ 3840
+ 240
+ 15
+ 1
+
+
+
+ LowLevelRxPrachEndpoint1
+
+ 9
+ STATIC
+
+ 0
+ 0
+ 0
+
+ 61440
+ 3840
+ 240
+ 15
+ 5
+
+
+
+ LowLevelRxEndpoint2
+
+ 9
+ STATIC
+
+ 0
+ 0
+ 0
+
+ 61440
+ 3840
+ 240
+ 15
+ 2
+
+
+
+ LowLevelRxPrachEndpoint2
+
+ 9
+ STATIC
+
+ 0
+ 0
+ 0
+
+ 61440
+ 3840
+ 240
+ 15
+ 6
+
+
+
+ LowLevelRxEndpoint3
+
+ 9
+ STATIC
+
+ 0
+ 0
+ 0
+
+ 61440
+ 3840
+ 240
+ 15
+ 3
+
+
+
+ LowLevelRxPrachEndpoint3
+
+ 9
+ STATIC
+
+ 0
+ 0
+ 0
+
+ 61440
+ 3840
+ 240
+ 15
+ 7
+
+
+
+ TxArray0
+ 663360
+ 3950400000
+ 100000000
+ ACTIVE
+ 0.0
+ 0
+ 0
+
+
+ RxArray0
+ 663360
+ 3950400000
+ 100000000
+ ACTIVE
+ 0
+ 0
+ 0.0
+ 0
+
+
+
+[HW] [MPLANE] RPC reply = OK.
+[HW] [MPLANE] Successfully edited the candidate datastore for RU "192.168.80.9".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = candidate datastore.
+[HW] [MPLANE] RPC reply = OK.
+[HW] [MPLANE] Successfully validated candidate datastore for RU "192.168.80.9".
+[HW] [MPLANE] RPC request to RU "192.168.80.9" = candidate datastore.
+[HW] [MPLANE] RPC reply = OK.
+[HW] [MPLANE] Successfully commited CU-planes configuration into running datastore for RU "192.168.80.9".
+[HW] [MPLANE] Usage state = "idle" for RU "192.168.80.9".
+[HW] [MPLANE] Received notification from RU "192.168.80.9" at (2025-03-29T12:40:23.049085102+00:00)
+{
+ "o-ran-uplane-conf:rx-array-carriers-state-change": {
+ "rx-array-carriers": [
+ {
+ "name": "RxArray0",
+ "state": "BUSY"
+ }
+ ]
+ }
+}
+
+[HW] [MPLANE] Received notification from RU "192.168.80.9" at (2025-03-29T12:40:23.058136880+00:00)
+{
+ "o-ran-uplane-conf:tx-array-carriers-state-change": {
+ "tx-array-carriers": [
+ {
+ "name": "TxArray0",
+ "state": "BUSY"
+ }
+ ]
+ }
+}
+
+[HW] [MPLANE] Received notification from RU "192.168.80.9" at (2025-03-29T12:40:23.078776163+00:00)
+{
+ "o-ran-uplane-conf:rx-array-carriers-state-change": {
+ "rx-array-carriers": [
+ {
+ "name": "RxArray0",
+ "state": "READY"
+ }
+ ]
+ }
+}
+
+[HW] [MPLANE] Received notification from RU "192.168.80.9" at (2025-03-29T12:40:23.093039138+00:00)
+{
+ "o-ran-uplane-conf:tx-array-carriers-state-change": {
+ "tx-array-carriers": [
+ {
+ "name": "TxArray0",
+ "state": "READY"
+ }
+ ]
+ }
+}
+
+[HW] [MPLANE] Received notification from RU "192.168.80.9" at (2025-03-29T12:40:23.452751936+00:00)
+{
+ "ietf-netconf-notifications:netconf-config-change": {
+ "changed-by": {
+ "username": "root",
+ "session-id": 0
+ },
+ "datastore": "running",
+ "edit": [
+ {
+ "target": "/ietf-interfaces:interfaces/interface[name='INTERFACE_0']",
+ "operation": "create"
+ },
+ {
+ "target": "/ietf-interfaces:interfaces/interface[name='INTERFACE_0']/name",
+ "operation": "create"
+ },
+...
+}
+
+[HW] [MPLANE] RU "192.168.80.9" is now ready.
+```
+
+
+
+Note: If you wish to run the fronthaul without M-plane, no need for recompilation, as the library `oran_fhlib_5g` already exists.
+The only mandatory step is to link `oran_fhlib_5g` to `oai_transpro` library.
+```bash
+cd ~/openairinterface5g/cmake_targets/ran_build/build
+rm liboai_transpro.so
+ln -s liboran_fhlib_5g.so liboai_transpro.so
+sudo ./nr-softmodem -O --thread-pool
+```
+
+
# Contact in case of questions
You can ask your question on the [mailing lists](https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList).