boardfarmdevs · EasyMesh labs · the labs as built · 30 September 2026
The labs, running
Five lab VMs on three hosts: what runs inside each, where the optimizer runs, and the
address to open. The addresses are on the lab network.
rev140
Builds the images (Yocto). Runs the two optimizer labs, rdk-1001 and prpl-1001. Busy with a lab up: run room browsers from rev150.
rev120
Runs rdk-emosa-1001 (the RDK lab with EMOSA) and the physical lab, whose USB Ethernet adapter and Wi-Fi clients are plugged in here. RDK only: no prplMesh.
rev150
Runs the OpenSync reference lab, emosa-osl-0925. The room browser for the other two hosts, container builds, fuzzing.
the gateway bpibroadband (RDK's controller, its own agent, em_cli); Wi-Fi extenders bpiap, bpiap-001…003; the wired extender bpiap-004; 100 wlan-client-*; boardfarm's WAN (docker wan-cpe1, dhcp-cpe1)
In the VM
hwsim radios, wmediumd and Console NG from gen/medium; the room service (easymesh-optimizer's, started by gen/rooms/room-service)
Optimizer
runs in the room service (easymesh-room-service.service), from gen/optimizer (easymesh-optimizer); it acts through em_cli
Open
room http://192.168.2.140:27292/ · em_cli :27290 · Console NG :27291
wmediumd and Console NG from medium/; the room service (easymesh-optimizer's, started by rooms/room-service); the controller dashboard controller-ui; the topology adapter
Optimizer
runs in the room service (prplmesh-room-service.service), from optimizer/ (easymesh-optimizer); it acts through prplMesh's NBAPI
Open
room http://192.168.2.140:45822/ · dashboard :45820 · Console NG :45821
Optimizer lab · prplMesh
rev120 · meta-cmf EASYMESH_EMOSA=1 gen/vm/lxd/build.sh build + emosa-lab deploy/rdk-lab/lab.sh up
rdk-emosa-1001 · RDK lab + EMOSA
Inside
everything in rdk-1001, plus emosa (the fleet, one agent per pod in Python or C, the MQTT broker), em-gtp (the pods' onboarding network) and pod-1, pod-2: unchanged OpenSync 6.6.1 pods
Pods
onboarded by RDK's controller as EasyMesh agents, on a Wi-Fi backhaul; the controller can move a pod's backhaul
Optimizer
the RDK lab's, in the room service; it steers clients on the pods too
Open
room http://192.168.2.120:21892/ · em_cli :21890 · Console NG :21891
the mv3 router; pod-1…3 with two clients each; local-noc (their cloud, docker); em-ctl (a prplMesh controller); emosa; em-gtp; clients em-wc1…6; boardfarm's WAN
Purpose
EMOSA's reference lab: several pods, the 900-second fault workload, the pods' Wi-Fi backhaul
rev120 · easymesh-lab deploy/lxd-vm/build_vm.py + the USB handover
easymesh-lab · physical protocol lab
Inside
the Python controller and panel in the VM; a USB Ethernet adapter to a TP-Link RE653BE (the primary agent); a second extender on a Wi-Fi backhaul; managed USB Wi-Fi 7 clients; phones, tablets, laptops
Optimizer
its own, small: optimizer.py
Open
panel http://192.168.2.120:8765/ · speed test :8766 (from rev120's own address)
Real hardware
in every lab VM · easymesh-medium observer/
Console NG · the medium, live
Shows
every radio and directed path of the medium, frames, drops, SNR and airtime, read-only
Open
the :…1 port of each lab: 27291 (RDK), 45821 (prplMesh), 21891 (RDK + EMOSA)
Core 1 at work
Inside an optimizer lab
a host (rev140, rev120)
one LXD VM: its own kernel, radios and medium
hwsim radiosabout 105–115, one per client and several per agent easymesh-medium hwsim/
wmediumddelivers each frame by the room's RF easymesh-medium wmediumd/
Console NGport 8890 easymesh-medium observer/
Room service + optimizerport 8891, the live room gen/optimizer (room_service) · gen/demo
boardfarm WANdocker: WAN and DHCP
nested LXD containers, each with its own radios
Gatewaycontroller, its agent, the controller's web UI