Skip to content

Add a Wake-on-LAN network/wake module (type: wol) #216

Description

@Ulrond

RAFT can control device power (hs100 / apc / apcAos / olimex / kasa / tapo / SLP / none), but it has no way to wake a device that is asleep or in a Wake-on-LAN soft-off state.

Some targets (e.g. STB panels that aggressively deep-sleep) drop their console when idle and can only be brought back by a Wake-on-LAN magic packet. Today RAFT cannot do this, so test runs against such targets need an out-of-band wake step before the session can be opened.

Proposal

Wake-on-LAN is a network (layer-2) action, not a power action — it sends a UDP magic packet, cannot power a device off, and supports none of the power-metering contract. So add it as a dedicated network/wake controller rather than a power module:

  • framework/core/networkModules/wol.py (networkWol) — a wake() verb that sends the WoL magic packet (6×0xFF + target MAC ×16) to broadcast:port.
  • framework/core/networkControl.py (networkControlClass) — dispatches type: "wol", mirroring powerControl (retry via retryCount / retryDelay).
  • Wired into deviceManager via a device network: block → exposed as dut.networkController (alongside powerControl, hdmiCECController, avSyncController).
  • Standard-library only (socket) — no new dependencies.
network:
  type: "wol"
  mac: "aa:bb:cc:dd:ee:ff"
  broadcast: "255.255.255.255"   # optional
  port: 9                        # optional (7 or 9)
dut.networkController.wake()

Verification

Sends a valid magic packet and wakes a real armv7 target on the same broadcast domain; invalid / missing MAC is rejected with a clear error.

Delivered in #217.


Note: an earlier draft placed this under powerModules (type: "wol" on powerSwitch:); it was re-homed to the network seam for the reasons above.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions