1. Scope
The scope of this activity to add support of MLO enabling / disabling via TR-181 Datamodel in RDK-B BPI Reference platform.
2. High Level Architecture

The internal functional entities of the OneWifi process are as shown in the above diagram. OneWifi software architecture is essentially a multi-threaded software architecture, the three main threads are
- Core thread: this thread is the fundamental engine of the process that is responsible for all configuration of WiFi parameters, command/control/status response and WiFi state indications. The core thread is also responsible for steering related activities.
- DML thread: this thread handles the TR-181 set/get handlers.
- Apps thread: this thread is responsible for supporting all WiFi related application/features such as harvester, motion sensing, blaster, single client measurements etc.
3. BPI-R4 Build instructions
repo init -u https://code.rdkcentral.com/r/manifests -b kirkstone -m rdkb-bpi-extsrc.xml
repo sync -j`nproc` --no-clone-bundle
MACHINE=bananapi4-rdk-broadband source meta-cmf-bananapi/setup-environment-refboard-rdkb
bitbake rdk-generic-broadband-image
Flashing Instructions (SD card)
Copy *.wic.bz2 from build machine (image path is ~/build-bananapi4-rdk-broadband/tmp/deploy/images/bananapi4-rdk-broadband/)
bzip2 -d <Path to ImageName.wic.bz2>
sudo -E bmaptool copy --nobmap <Path to ImageName.wic> <Path to SD card device file>
4. Test Procedure
4.1.1. Pre-requisites
- 802.11be enabled on all bands — 2.4 GHz, 5 GHz, and 6 GHz radios must each have 11be enabled (and be enabled).
- Same SSID on all VAPs participating in the MLO group.
- Same password on all VAPs participating in the MLO group.
- Security mode:
- 2.4 GHz & 5 GHz → WPA3-Personal-Transition, WPA3-Personal-Compatibility or WPA3-Personal
- 6 GHz → WPA3-Personal
- All participating VAPs enabled (one link per radio; STA/mesh VAPs excluded).
| Mismatched SSID, password, or an incompatible security mode causes that band's link to be silently excluded from the MLD group. |
4.1.2. Enable 3-link MLO for private VAPs via TR-181 DM
|
# Make sure BE mode is enabled.
dmcli eRT setv Device.WiFi.Radio.1.OperatingStandards string g,n,ax,be
dmcli eRT setv Device.WiFi.ApplyRadioSettings bool true
dmcli eRT setv Device.WiFi.SSID.1.X_RDK_MLDLinkID uint 2
dmcli eRT setv Device.WiFi.SSID.2.X_RDK_MLDLinkID uint 0
dmcli eRT setv Device.WiFi.SSID.17.X_RDK_MLDLinkID uint 1
dmcli eRT setv Device.WiFi.SSID.1.MLDUnit int 0
dmcli eRT setv Device.WiFi.SSID.2.MLDUnit int 0
dmcli eRT setv Device.WiFi.SSID.17.MLDUnit int 0
dmcli eRT setv Device.WiFi.ApplyAccessPointSettings bool true
sleep 30
|
Test Results
root@Filogic-GW:~# dmcli eRT setv Device.WiFi.SSID.1.X_RDK_MLDLinkID uint 2
CR component name is: eRT.com.cisco.spvtg.ccsp.CR
subsystem_prefix eRT.
Execution succeed.
root@Filogic-GW:~# dmcli eRT setv Device.WiFi.SSID.2.X_RDK_MLDLinkID uint 0
CR component name is: eRT.com.cisco.spvtg.ccsp.CR
subsystem_prefix eRT.
Execution succeed.
root@Filogic-GW:~# dmcli eRT setv Device.WiFi.SSID.17.X_RDK_MLDLinkID uint 1
CR component name is: eRT.com.cisco.spvtg.ccsp.CR
subsystem_prefix eRT.
Execution succeed.
root@Filogic-GW:~#
root@Filogic-GW:~# dmcli eRT setv Device.WiFi.SSID.1.MLDUnit int 0
CR component name is: eRT.com.cisco.spvtg.ccsp.CR
subsystem_prefix eRT.
Execution succeed.
root@Filogic-GW:~# dmcli eRT setv Device.WiFi.SSID.2.MLDUnit int 0
CR component name is: eRT.com.cisco.spvtg.ccsp.CR
subsystem_prefix eRT.
Execution succeed.
root@Filogic-GW:~# dmcli eRT setv Device.WiFi.SSID.17.MLDUnit int 0
CR component name is: eRT.com.cisco.spvtg.ccsp.CR
subsystem_prefix eRT.
Execution succeed.
root@Filogic-GW:~#
root@Filogic-GW:~# dmcli eRT setv Device.WiFi.ApplyAccessPointSettings bool true
CR component name is: eRT.com.cisco.spvtg.ccsp.CR
subsystem_prefix eRT.
Execution succeed.
root@Filogic-GW:~# iw dev
phy#0
Interface mld0
ifindex 21
wdev 0x4
addr 02:02:30:ec:07:95
ssid BPI-RDKB-MLO-AP-ec078e
type AP
multicast TXQ:
qsz-byt qsz-pkt flows drops marks overlmt hashcol tx-bytes tx-packets
0 0 0 0 0 0 0 0 0
MLD with links:
- link ID 0 link addr 02:02:10:ec:07:92
channel 1 (2412 MHz), width: 40 MHz, center1: 2422 MHz
txpower 6.00 dBm
- link ID 1 link addr 02:02:20:ec:07:93
channel 44 (5220 MHz), width: 80 MHz, center1: 5210 MHz
txpower 7.00 dBm
- link ID 2 link addr 02:02:30:ec:07:94
channel 37 (6135 MHz), width: 160 MHz, center1: 6185 MHz
txpower 12.00 dBm
Radios: 0 1 2
Interface wifi2
ifindex 20
wdev 0x3
addr 02:02:30:ec:07:94
type AP
txpower 12.00 dBm
multicast TXQ:
qsz-byt qsz-pkt flows drops marks overlmt hashcol tx-bytes tx-packets
0 0 0 0 0 0 0 0 0
Radios: 0 1 2
Interface wifi1
ifindex 19
wdev 0x2
addr 02:02:20:ec:07:93
type AP
txpower 7.00 dBm
multicast TXQ:
qsz-byt qsz-pkt flows drops marks overlmt hashcol tx-bytes tx-packets
0 0 0 0 0 0 0 0 0
Radios: 0 1 2
Interface wifi0
ifindex 18
wdev 0x1
addr 02:02:10:ec:07:92
type AP
txpower 6.00 dBm
multicast TXQ:
qsz-byt qsz-pkt flows drops marks overlmt hashcol tx-bytes tx-packets
0 0 0 0 0 0 0 0 0
Radios: 0 1 2
root@Filogic-GW:~#
4.1.3. Disable MLO for private vaps via TR-181 DM
# Whole group
dmcli eRT setv Device.WiFi.SSID.1.MLDUnit int -1
dmcli eRT setv Device.WiFi.SSID.2.MLDUnit int -1
dmcli eRT setv Device.WiFi.SSID.17.MLDUnit int -1
dmcli eRT setv Device.WiFi.ApplyAccessPointSettings bool true |
Test Results
root@Filogic-GW:~# iw dev
phy#0
Interface mld0
ifindex 21
wdev 0x4
addr 02:02:30:ec:07:95
ssid BPI-RDKB-MLO-AP-ec078e
type AP
multicast TXQ:
qsz-byt qsz-pkt flows drops marks overlmt hashcol tx-bytes tx-packets
0 0 0 0 0 0 0 0 0
MLD with links:
- link ID 0 link addr 02:02:10:ec:07:92
channel 1 (2412 MHz), width: 40 MHz, center1: 2422 MHz
txpower 6.00 dBm
- link ID 1 link addr 02:02:20:ec:07:93
channel 44 (5220 MHz), width: 80 MHz, center1: 5210 MHz
txpower 7.00 dBm
- link ID 2 link addr 02:02:30:ec:07:94
channel 37 (6135 MHz), width: 160 MHz, center1: 6185 MHz
txpower 12.00 dBm
Radios: 0 1 2
Interface wifi2
ifindex 20
wdev 0x3
addr 02:02:30:ec:07:94
type AP
multicast TXQ:
qsz-byt qsz-pkt flows drops marks overlmt hashcol tx-bytes tx-packets
0 0 0 0 0 0 0 0 0
Radios: 0 1 2
Interface wifi1
ifindex 19
wdev 0x2
addr 02:02:20:ec:07:93
type AP
multicast TXQ:
qsz-byt qsz-pkt flows drops marks overlmt hashcol tx-bytes tx-packets
0 0 0 0 0 0 0 0 0
Radios: 0 1 2
Interface wifi0
ifindex 18
wdev 0x1
addr 02:02:10:ec:07:92
type AP
multicast TXQ:
qsz-byt qsz-pkt flows drops marks overlmt hashcol tx-bytes tx-packets
0 0 0 0 0 0 0 0 0
Radios: 0 1 2
root@Filogic-GW:~#
root@Filogic-GW:~#
root@Filogic-GW:~# dmcli eRT setv Device.WiFi.SSID.1.MLDUnit int -1
CR component name is: eRT.com.cisco.spvtg.ccsp.CR
subsystem_prefix eRT.
Execution succeed.
root@Filogic-GW:~# dmcli eRT setv Device.WiFi.SSID.2.MLDUnit int -1
CR component name is: eRT.com.cisco.spvtg.ccsp.CR
subsystem_prefix eRT.
Execution succeed.
root@Filogic-GW:~# dmcli eRT setv Device.WiFi.SSID.17.MLDUnit int -1
CR component name is: eRT.com.cisco.spvtg.ccsp.CR
subsystem_prefix eRT.
Execution succeed.
root@Filogic-GW:~# dmcli eRT setv Device.WiFi.ApplyAccessPointSettings bool true
CR component name is: eRT.com.cisco.spvtg.ccsp.CR
subsystem_prefix eRT.
Execution succeed.
root@Filogic-GW:~# iw dev
phy#0
Interface mld0
ifindex 21
wdev 0x4
addr 02:02:30:ec:07:95
type AP
txpower 6.00 dBm
multicast TXQ:
qsz-byt qsz-pkt flows drops marks overlmt hashcol tx-bytes tx-packets
0 0 0 0 0 0 0 0 0
Radios: 0 1 2
Interface wifi2
ifindex 20
wdev 0x3
addr 02:02:30:ec:07:94
ssid BPI-RDKB-MLO-AP-ec078e
type AP
channel 37 (6135 MHz), width: 160 MHz, center1: 6185 MHz
txpower 12.00 dBm
multicast TXQ:
qsz-byt qsz-pkt flows drops marks overlmt hashcol tx-bytes tx-packets
0 0 0 0 0 0 0 0 0
Radios: 0 1 2
Interface wifi1
ifindex 19
wdev 0x2
addr 02:02:20:ec:07:93
ssid BPI-RDKB-MLO-AP-ec078e
type AP
channel 44 (5220 MHz), width: 80 MHz, center1: 5210 MHz
txpower 7.00 dBm
multicast TXQ:
qsz-byt qsz-pkt flows drops marks overlmt hashcol tx-bytes tx-packets
0 0 0 0 0 0 0 0 0
Radios: 0 1 2
Interface wifi0
ifindex 18
wdev 0x1
addr 02:02:10:ec:07:92
ssid BPI-RDKB-MLO-AP-ec078e
type AP
channel 1 (2412 MHz), width: 40 MHz, center1: 2422 MHz
txpower 6.00 dBm
multicast TXQ:
qsz-byt qsz-pkt flows drops marks overlmt hashcol tx-bytes tx-packets
0 0 0 0 0 0 0 0 0
Radios: 0 1 2
root@Filogic-GW:~#
==========================================================================================================================================
4.1.4. Deprecated old Read-only DML (Can be used only for debugging purposes)
dmcli eRT getv Device.WiFi.AccessPoint.1.MLD_Enable
dmcli eRT getv Device.WiFi.AccessPoint.1.MLD_ID
dmcli eRT getv Device.WiFi.AccessPoint.1.MLD_Link_ID
dmcli eRT getv Device.WiFi.AccessPoint.1.MLD_Addr
# dmcli eRT getv Device.WiFi.AccessPoint.1.MLD_Apply (Completly removed)
4.1.5. Banana Pi MLO config
Configuration for Banana Pi is slightly different from the ones we have for XB platform devices.
- we do not set Link_IDs. These are set by hostapd/rdk-wifi-hal and should be left untouched.
- legacy: there is still partial dependency left on InterfaceMap.json which will be removed in the future. Currently, the VAPs belonging to MLD group have to have common MLD name defined in the JSON.
- legacy: wireless MLD device has to be precreated prior to setup of the MLD
Below is how we setup MLO for VAPs as well as listings showing the legacy fields mentioned. Legacy fields will be made obsolete with further development and alignment toward unified handling.
|
#legacy nvram/IntefaceMap.json entry
{
"InterfaceName": "wifi2",
"MldName": "mld0",
"Bridge": "brlan0",
"vlanId": 0,
"vapIndex": 16,
"vapName": "private_ssid_6g"
}
#legacy wireless MLD setup of /usr/ccsp/wifi/onewifi_pre_start.sh
iw phy phy0 interface add mld0 type __ap radios all
|