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.

rev140 · meta-cmf-bananapi-vcpe · gen/vm/lxd/build.sh build

rdk-1001 · RDK optimizer lab

The RDK lab's live room, converged: twenty clients around the gateway, four Wi-Fi extenders and the wired extenderem_cli, the RDK controller's web UI, drawing the network topology: the controller, Agent-1, five extenders and the clients on their private and IoT networks
Inside
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
Optimizer lab · RDK

rev140 · prplmesh-lab · deploy/lxd-vm/build.sh build

prpl-1001 · prplMesh optimizer lab

The prplMesh lab's live room, converged: twenty clients around the controller and five agentsThe prplMesh controller dashboard drawing the topology, following the room's layout
Inside
prpl-controller; agents prpl-agent-01…05 (05 wired); 100 prpl-client-*
In the VM
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

The RDK lab's live room with Pod-1 and Pod-2 among the native extenders, convergedem_cli's topology with the two OpenSync pods drawn as pods next to the native extenders
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 end goal, on RDK

rev150 · opensync-lab setup-vm.sh · deploy-mvx.sh + emosa-lab deploy/opensync-lab/lab.sh

emosa-osl-0925 · OpenSync + EMOSA

The prplMesh controller's topology in the reference lab: three OpenSync pods as extenders under the controller, each with two clientslocal-noc, the lab's own OpenSync cloud, showing the mv3 router
Inside
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
Optimizer
none: EMOSA and the pods are the subject here
Open
controller http://192.168.2.150:8660/ · local-noc :8640
EMOSA's reference

rev120 · easymesh-lab deploy/lxd-vm/build_vm.py + the USB handover

easymesh-lab · physical protocol lab

The physical lab's teaching panel: the live 1905 oscilloscope with the controller's and the agent's messages
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

Console NG: the radios of the RDK lab in 3D and the table of maintained radios and directed paths
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
Extenders4 on Wi-Fi backhaul, 1 wired
100 clientswpa_supplicant, one radio each
With EMOSAemosa, em-gtp, two OpenSync pods

public · no lab needed

EMOSA explorer

The EMOSA site: put OpenSync pods into any EasyMesh network
Open
…/emosa-lab/
Follow a message

Kept in easymesh-labs site/posters/: update it when a lab is rebuilt.