diff --git a/doc/ORAN_FHI7.2_Tutorial.md b/doc/ORAN_FHI7.2_Tutorial.md
index 1d7169f29f..5f95921a64 100644
--- a/doc/ORAN_FHI7.2_Tutorial.md
+++ b/doc/ORAN_FHI7.2_Tutorial.md
@@ -1243,8 +1243,8 @@ In OAI gNB, we support:
```
The reference specifications:
-* `O-RAN.WG4.MP.0-v05.00`
-* `O-RAN.WG4.MP-YANGs-v04.00`
+* `O-RAN.WG4.MP.0-R004-v16.01`
+* `O-RAN.WG4.MP-YANGs-R004-v16.01`
## M-plane prerequisites
Before proceeding, please make sure you have a support for 7.2 interface, as described in [Prerequisites](#prerequisites).
@@ -1366,7 +1366,7 @@ sudo ldconfig
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.
+Note: RAN550/650 v1.2.2 and v1.4.1 have been successfully tested.
### One time steps
Connect to the RU as user `root`, enable the mplane service, and reboot:
@@ -1400,6 +1400,8 @@ 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 Tx gain `att_tx` in RU section, as well as the `fhi_72` section in the configuration file.
+
+**Important note: Benetel v1.4.1 requires only one VF if the same VLAN tag is used for both C-/U-planes. Otherwise, C-plane will not be properly configured. Benetel v1.2.2 will receive the C-plane packets no matter the DU MAC address value.**
Example for one RU:
```bash
fhi_72 = {
@@ -1573,14 +1575,14 @@ sequenceDiagram
-4x4 MIMO and 100MHz BW with Benetel 550 RU example run
+4x4 MIMO and 100MHz BW with Benetel 550 RU v1.2.2 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] RU is in "LOCKED" sync state.
[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".
@@ -2223,6 +2225,861 @@ sequenceDiagram
```
+
+4x4 MIMO and 100MHz BW with Benetel 550 RU v1.4.1 example run
+
+```
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = with username "oranbenetel" and port ID "830".
+[HW] [MPLANE] Successfuly connected to RU "192.168.81.4" with username "oranbenetel" and port ID "830".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = operational datastore.
+[HW] [MPLANE] Successfully retrieved operational datastore from RU "192.168.81.4".
+[HW] [MPLANE] RU is already PTP synchronized.
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = with stream "NETCONF" and filter "(null)".
+[HW] [MPLANE] RPC reply = OK.
+[HW] [MPLANE] Successfully subscribed to all notifications from RU "192.168.81.4".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = "
+65535
+65535
+".
+[HW] [MPLANE] Successfully updated supervision timer to (65535+65535)[s] for RU "192.168.81.4".
+[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] 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
+ 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
+ max Tx gain 24.0
+[HW] [MPLANE] Successfully retrieved all the U-plane info - interface name, TX/RX carrier names, and TX/RX endpoint names.
+[HW] [MPLANE] Successfully retreived all performance measurement names.
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = for module "ietf-yang-metadata".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = for module "yang".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = for module "ietf-inet-types".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = for module "ietf-yang-types".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = for module "ietf-yang-schema-mount".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = for module "ietf-yang-structure-ext".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = for module "ietf-datastores".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = for module "sysrepo".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = for module "ietf-netconf-acm".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = for module "ietf-factory-default".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = for module "sysrepo-factory-default".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = for module "ietf-yang-library".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = for module "sysrepo-monitoring".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = for module "sysrepo-plugind".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = for module "ietf-netconf".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = for module "ietf-netconf-with-defaults".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = for module "ietf-netconf-notifications".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = for module "ietf-origin".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = for module "ietf-netconf-monitoring".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = for module "ietf-netconf-nmda".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = 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.81.4".
+[HW] [MPLANE] Unable to load all yang modules from operational datastore for RU "192.168.81.4". Using yang models present in "models" subfolder.
+[HW] [MPLANE] Successfully loaded all yang modules for RU "192.168.81.4".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = :
+
+
+ INTERFACE_0
+ ianaift:l2vlan
+ true
+ 70:b3:d5:e1:5b:81
+ eth0
+ 3
+
+
+
+ 10
+ 10
+ 10
+
+ RX_ON_TIME
+ false
+ RU
+ COUNT
+
+
+ RX_EARLY
+ false
+ RU
+ COUNT
+
+
+ RX_LATE
+ false
+ RU
+ COUNT
+
+
+ RX_TOTAL
+ false
+ RU
+ COUNT
+
+
+ RX_ON_TIME_C
+ false
+ RU
+ COUNT
+
+
+ RX_EARLY_C
+ false
+ RU
+ COUNT
+
+
+ RX_LATE_C
+ false
+ RU
+ COUNT
+
+
+ TX_TOTAL
+ false
+ RU
+ COUNT
+
+
+
+ ETH-INTERFACE
+
+ PLANE_0
+
+ INTERFACE_0
+
+ 70:b3:d5:e1:5b:81
+ 3
+ 00:11:22:33:44:66
+
+
+
+
+
+
+ PdschLink0
+ PLANE_0
+ TxArray0
+ LowLevelTxEndpoint0
+
+
+ PdschLink1
+ PLANE_0
+ TxArray1
+ LowLevelTxEndpoint1
+
+
+ PdschLink2
+ PLANE_0
+ TxArray2
+ LowLevelTxEndpoint2
+
+
+ PdschLink3
+ PLANE_0
+ TxArray3
+ LowLevelTxEndpoint3
+
+
+ PuschLink0
+ PLANE_0
+ RxArray0
+ LowLevelRxEndpoint0
+
+
+ PrachLink0
+ PLANE_0
+ RxArray0
+ LowLevelRxPrachEndpoint0
+
+
+ PuschLink1
+ PLANE_0
+ RxArray1
+ LowLevelRxEndpoint1
+
+
+ PrachLink1
+ PLANE_0
+ RxArray1
+ LowLevelRxPrachEndpoint1
+
+
+ PuschLink2
+ PLANE_0
+ RxArray2
+ LowLevelRxEndpoint2
+
+
+ PrachLink2
+ PLANE_0
+ RxArray2
+ LowLevelRxPrachEndpoint2
+
+
+ PuschLink3
+ PLANE_0
+ RxArray3
+ LowLevelRxEndpoint3
+
+
+ PrachLink3
+ PLANE_0
+ RxArray3
+ LowLevelRxPrachEndpoint3
+
+
+ LowLevelTxEndpoint0
+
+ 9
+ STATIC
+
+ 193
+ NORMAL
+ 352
+ 288
+ 0
+
+ 61440
+ 3840
+ 240
+ 15
+ 0
+
+
+
+ LowLevelTxEndpoint1
+
+ 9
+ STATIC
+
+ 193
+ NORMAL
+ 352
+ 288
+ 0
+
+ 61440
+ 3840
+ 240
+ 15
+ 1
+
+
+
+ LowLevelTxEndpoint2
+
+ 9
+ STATIC
+
+ 193
+ NORMAL
+ 352
+ 288
+ 0
+
+ 61440
+ 3840
+ 240
+ 15
+ 2
+
+
+
+ LowLevelTxEndpoint3
+
+ 9
+ STATIC
+
+ 193
+ NORMAL
+ 352
+ 288
+ 0
+
+ 61440
+ 3840
+ 240
+ 15
+ 3
+
+
+
+ LowLevelRxEndpoint0
+
+ 9
+ STATIC
+
+ 193
+ NORMAL
+ 352
+ 288
+ 0
+
+ KHZ_30
+ 0
+
+
+ 61440
+ 3840
+ 240
+ 15
+ 0
+
+ true
+
+
+ LowLevelRxPrachEndpoint0
+
+ 9
+ STATIC
+
+ 193
+ NORMAL
+ 352
+ 288
+ 0
+
+ KHZ_30
+ 0
+
+
+ 61440
+ 3840
+ 240
+ 15
+ 4
+
+ true
+
+
+ LowLevelRxEndpoint1
+
+ 9
+ STATIC
+
+ 193
+ NORMAL
+ 352
+ 288
+ 0
+
+ KHZ_30
+ 0
+
+
+ 61440
+ 3840
+ 240
+ 15
+ 1
+
+ true
+
+
+ LowLevelRxPrachEndpoint1
+
+ 9
+ STATIC
+
+ 193
+ NORMAL
+ 352
+ 288
+ 0
+
+ KHZ_30
+ 0
+
+
+ 61440
+ 3840
+ 240
+ 15
+ 5
+
+ true
+
+
+ LowLevelRxEndpoint2
+
+ 9
+ STATIC
+
+ 193
+ NORMAL
+ 352
+ 288
+ 0
+
+ KHZ_30
+ 0
+
+
+ 61440
+ 3840
+ 240
+ 15
+ 2
+
+ true
+
+
+ LowLevelRxPrachEndpoint2
+
+ 9
+ STATIC
+
+ 193
+ NORMAL
+ 352
+ 288
+ 0
+
+ KHZ_30
+ 0
+
+
+ 61440
+ 3840
+ 240
+ 15
+ 6
+
+ true
+
+
+ LowLevelRxEndpoint3
+
+ 9
+ STATIC
+
+ 193
+ NORMAL
+ 352
+ 288
+ 0
+
+ KHZ_30
+ 0
+
+
+ 61440
+ 3840
+ 240
+ 15
+ 3
+
+ true
+
+
+ LowLevelRxPrachEndpoint3
+
+ 9
+ STATIC
+
+ 193
+ NORMAL
+ 352
+ 288
+ 0
+
+ KHZ_30
+ 0
+
+
+ 61440
+ 3840
+ 240
+ 15
+ 7
+
+ true
+
+
+ TxArray0
+ 623334
+ 3350010000
+ 100000000
+ ACTIVE
+ 24.0
+ 0
+ 0
+
+
+ TxArray1
+ 623334
+ 3350010000
+ 100000000
+ ACTIVE
+ 24.0
+ 0
+ 0
+
+
+ TxArray2
+ 623334
+ 3350010000
+ 100000000
+ ACTIVE
+ 24.0
+ 0
+ 0
+
+
+ TxArray3
+ 623334
+ 3350010000
+ 100000000
+ ACTIVE
+ 24.0
+ 0
+ 0
+
+
+ RxArray0
+ 623334
+ 3350010000
+ 100000000
+ ACTIVE
+ 0
+ 0
+ 0.0
+ 0
+
+
+ RxArray1
+ 623334
+ 3350010000
+ 100000000
+ ACTIVE
+ 0
+ 0
+ 0.0
+ 0
+
+
+ RxArray2
+ 623334
+ 3350010000
+ 100000000
+ ACTIVE
+ 0
+ 0
+ 0.0
+ 0
+
+
+ RxArray3
+ 623334
+ 3350010000
+ 100000000
+ ACTIVE
+ 0
+ 0
+ 0.0
+ 0
+
+
+
+[HW] [MPLANE] RPC reply = OK.
+[HW] [MPLANE] Successfully edited the candidate datastore for RU "192.168.81.4".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = candidate datastore.
+[HW] [MPLANE] RPC reply = OK.
+[HW] [MPLANE] Successfully validated candidate datastore for RU "192.168.81.4".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = candidate datastore.
+[HW] [MPLANE] RPC reply = OK.
+[HW] [MPLANE] Successfully commited configuration into running datastore for RU "192.168.81.4".
+[HW] [MPLANE] Received notification from RU "192.168.81.4" at (2025-08-28T10:37:19.335228846+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.81.4" at (2025-08-28T10:37:19.368360865+00:00)
+{
+ "o-ran-uplane-conf:rx-array-carriers-state-change": {
+ "rx-array-carriers": [
+ {
+ "name": "RxArray1",
+ "state": "BUSY"
+ }
+ ]
+ }
+}
+
+[HW] [MPLANE] Received notification from RU "192.168.81.4" at (2025-08-28T10:37:19.414703766+00:00)
+{
+ "o-ran-uplane-conf:rx-array-carriers-state-change": {
+ "rx-array-carriers": [
+ {
+ "name": "RxArray2",
+ "state": "BUSY"
+ }
+ ]
+ }
+}
+
+[HW] [MPLANE] Received notification from RU "192.168.81.4" at (2025-08-28T10:37:19.452921618+00:00)
+{
+ "o-ran-uplane-conf:rx-array-carriers-state-change": {
+ "rx-array-carriers": [
+ {
+ "name": "RxArray3",
+ "state": "BUSY"
+ }
+ ]
+ }
+}
+
+[HW] [MPLANE] Received notification from RU "192.168.81.4" at (2025-08-28T10:37:19.471419021+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] Received notification from RU "192.168.81.4" at (2025-08-28T10:37:19.678251110+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.81.4" at (2025-08-28T10:37:19.715498360+00:00)
+{
+ "o-ran-uplane-conf:tx-array-carriers-state-change": {
+ "tx-array-carriers": [
+ {
+ "name": "TxArray1",
+ "state": "BUSY"
+ }
+ ]
+ }
+}
+
+[HW] [MPLANE] Received notification from RU "192.168.81.4" at (2025-08-28T10:37:19.830268973+00:00)
+{
+ "o-ran-uplane-conf:tx-array-carriers-state-change": {
+ "tx-array-carriers": [
+ {
+ "name": "TxArray2",
+ "state": "BUSY"
+ }
+ ]
+ }
+}
+
+[HW] [MPLANE] Received notification from RU "192.168.81.4" at (2025-08-28T10:37:19.853387657+00:00)
+{
+ "o-ran-uplane-conf:tx-array-carriers-state-change": {
+ "tx-array-carriers": [
+ {
+ "name": "TxArray3",
+ "state": "BUSY"
+ }
+ ]
+ }
+}
+
+[HW] [MPLANE] Received notification from RU "192.168.81.4" at (2025-08-28T10:37:24.515262267+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.81.4" at (2025-08-28T10:37:24.535692962+00:00)
+{
+ "o-ran-uplane-conf:rx-array-carriers-state-change": {
+ "rx-array-carriers": [
+ {
+ "name": "RxArray1",
+ "state": "READY"
+ }
+ ]
+ }
+}
+
+[HW] [MPLANE] Received notification from RU "192.168.81.4" at (2025-08-28T10:37:24.557423764+00:00)
+{
+ "o-ran-uplane-conf:rx-array-carriers-state-change": {
+ "rx-array-carriers": [
+ {
+ "name": "RxArray2",
+ "state": "READY"
+ }
+ ]
+ }
+}
+
+[HW] [MPLANE] Received notification from RU "192.168.81.4" at (2025-08-28T10:37:24.579066867+00:00)
+{
+ "o-ran-uplane-conf:rx-array-carriers-state-change": {
+ "rx-array-carriers": [
+ {
+ "name": "RxArray3",
+ "state": "READY"
+ }
+ ]
+ }
+}
+
+[HW] [MPLANE] Received notification from RU "192.168.81.4" at (2025-08-28T10:37:24.604192995+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.81.4" at (2025-08-28T10:37:24.629830498+00:00)
+{
+ "o-ran-uplane-conf:tx-array-carriers-state-change": {
+ "tx-array-carriers": [
+ {
+ "name": "TxArray1",
+ "state": "READY"
+ }
+ ]
+ }
+}
+
+[HW] [MPLANE] Received notification from RU "192.168.81.4" at (2025-08-28T10:37:24.651062685+00:00)
+{
+ "o-ran-uplane-conf:tx-array-carriers-state-change": {
+ "tx-array-carriers": [
+ {
+ "name": "TxArray2",
+ "state": "READY"
+ }
+ ]
+ }
+}
+
+[HW] [MPLANE] Received notification from RU "192.168.81.4" at (2025-08-28T10:37:24.672865767+00:00)
+{
+ "o-ran-uplane-conf:tx-array-carriers-state-change": {
+ "tx-array-carriers": [
+ {
+ "name": "TxArray3",
+ "state": "READY"
+ }
+ ]
+ }
+}
+
+[HW] [MPLANE] RU "192.168.81.4" is now ready.
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = :
+
+ 10
+ 10
+ 10
+
+ RX_ON_TIME
+ true
+ RU
+ COUNT
+
+
+ RX_EARLY
+ true
+ RU
+ COUNT
+
+
+ RX_LATE
+ true
+ RU
+ COUNT
+
+
+ RX_TOTAL
+ true
+ RU
+ COUNT
+
+
+ RX_ON_TIME_C
+ true
+ RU
+ COUNT
+
+
+ RX_EARLY_C
+ true
+ RU
+ COUNT
+
+
+ RX_LATE_C
+ true
+ RU
+ COUNT
+
+
+ TX_TOTAL
+ true
+ RU
+ COUNT
+
+
+
+[HW] [MPLANE] RPC reply = OK.
+[HW] [MPLANE] Successfully edited the candidate datastore for RU "192.168.81.4".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = candidate datastore.
+[HW] [MPLANE] RPC reply = OK.
+[HW] [MPLANE] Successfully validated candidate datastore for RU "192.168.81.4".
+[HW] [MPLANE] RPC request to RU "192.168.81.4" = candidate datastore.
+[HW] [MPLANE] RPC reply = OK.
+[HW] [MPLANE] Successfully commited configuration into running datastore for RU "192.168.81.4".
+[HW] [MPLANE] Sucessfully activated PM after start-up procedure for RU "192.168.81.4".
+```
+
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.