The last post (January 2025) described how to install a WALT server machine. Right after installation, it was already usable for experiments with virtual nodes. Today we will connect real equipment (switches and Raspberry Pi nodes) to this platform.

As usual, you can get more details in the documentation pages for switch and node installation.

Connecting a network switch

For this kind of mini-platform, we recommend Netgear GS110TP switches. They provide PoE (Power-over-Ethernet) and they allow remote management using SNMP, two optional but highly recommended features WALT can make use of.

In any case, WALT automatically detects the network devices when they send their first DHCP request, so let’s start monitoring platform logs1:

etienne@asus-minipc:~$ walt log show --platform --realtime

And we can connect the switch on the bottom ethernet port of the mini-pc (black cable). Reminder: last month we decided to use this bottom ethernet port for the WALT network, since the top one is used for the local LAN (red cable).

switch-connected

After a few tens of seconds (or a few minutes if the switch was powered off), a log line appears:

etienne@asus-minipc:~$ walt log show --platform --realtime
13:43:59.622447 walt-server.platform.devices -> new device name=gs110tpv3-1b8b26 type=unknown mac=54:07:7d:1b:8b:26 ip=192.168.108.4
^C
etienne@asus-minipc:~$

WALT named this device “gs110tpv3-1b8b26”, but we can rename it with a shorter name:

etienne@asus-minipc:~# walt device rename gs110tpv3-1b8b26 sw1-gs110tp
etienne@asus-minipc:~#

Easy, isn’t it?

Connecting a Raspberry Pi node

We can now connect a Raspberry Pi node. I selected a Raspberry Pi 3B+ board with no SD card.

Let’s start again the command for monitoring logs:

etienne@asus-minipc:~$ walt log show --platform --realtime

Then we connect the Raspberry pi board:

rpi-connected

And here is what happens:

etienne@asus-minipc:~# walt log show --platform --realtime
14:18:37.966345 walt-server.platform.devices -> new device name=unknown-0daea1 type=unknown mac=b8:27:eb:0d:ae:a1 ip=192.168.108.5
14:18:37.973397 walt-server.platform.devices -> Device unknown-0daea1 is a walt node of type 'rpi-3-b-plus'.
14:18:37.974369 walt-server.platform.devices -> Trying to download a default image for 'rpi-3-b-plus' nodes: waltplatform/rpi-3-b-plus-default:latest...
14:18:57.605702 walt-server.platform.devices -> Image waltplatform/rpi-3-b-plus-default:latest was downloaded successfully.
14:18:57.610591 walt-server.platform.devices -> renamed unknown-0daea1 to node-0daea1 for clarity
14:18:57.616658 walt-server.platform.devices -> new node (device type previously unknown) name=node-0daea1 model=rpi-3-b-plus mac=b8:27:eb:0d:ae:a1 ip=192.168.108.5
14:19:46.670138 walt-server.platform.nodes -> node node-0daea1 is booted

These logs are quite explicit:

  1. The Raspberry Pi was first registered as a device with type=unknown (same as the switch) but, shortly after that, WALT identified it is actually a node of type ‘rpi-3-b-plus’.
  2. Since it was the first time this kind of node was detected on the platform, a default OS image has been downloaded from the docker hub.
  3. After 50 more seconds, the new node was booted with its default image.

Let’s rename it too.

etienne@asus-minipc:~# walt node rename node-0daea1 rpi3bp
etienne@asus-minipc:~#

Now, guess what will appear if I type walt node show

etienne@asus-minipc:~# walt node show

You currently own the following nodes:

name    type     model      image              ip             netsetup  booted
------  -------  ---------  -----------------  -------------  --------  ------
vnode1  virtual  pc-x86-64  pc-x86-64-default  192.168.108.2  LAN       yes
vnode2  virtual  pc-x86-64  pc-x86-64-default  192.168.108.3  LAN       yes

Re-run with --all to see all available nodes.
Type `walt help show node-ownership` for help.
etienne@asus-minipc:~#

You guessed wrong, right? We still have no rpi3bp listed there, only the 2 virtual nodes we created last time!

This is because walt node show only prints the nodes I own, and I do not own rpi3bp yet. Actually, WALT has no idea which user connected this board, so why would this node be mine?

Note that if I had typed walt node show --all instead, it would be listed. But let’s “acquire” this node and retry walt node show then:

etienne@asus-minipc:~# walt node acquire rpi3bp
Cloned rpi-default:latest, a defaut image for rpi-[b[-plus]|2-b|3-b[-plus]|4-b,400],qemu-arm-[32|64].
Node rpi3bp will now boot rpi-default:latest.
Node rpi3bp: rebooted ok.
etienne@asus-minipc:~#
etienne@asus-minipc:~# walt node show

You currently own the following nodes:

name    type      model         image              ip             netsetup  booted
------  --------  ------------  -----------------  -------------  --------  ------
rpi3bp  physical  rpi-3-b-plus  rpi-default        192.168.108.5  LAN       NO
vnode1  virtual   pc-x86-64     pc-x86-64-default  192.168.108.2  LAN       yes
vnode2  virtual   pc-x86-64     pc-x86-64-default  192.168.108.3  LAN       yes

Re-run with --all to see all available nodes.
Type `walt help show node-ownership` for help.
etienne@asus-minipc:~#

Right, it is listed now. Let’s try a shell session:

etienne@asus-minipc:~# walt node shell rpi3bp
Waiting for bootup of node rpi3bp... \
[...]
root@rpi3bp:~# uname -a
Linux rpi3bp 6.1.21-v7+ #1642 SMP Mon Apr  3 17:20:52 BST 2023 armv7l GNU/Linux
root@rpi3bp:~#

That’s working too, of course.

Bonus: using advanced switch features (Network discovery and PoE)

Did you notice that there is only one cable plugged into the Raspberry Pi on the picture? This is because the Netgear GS110TP switch provides PoE (Power-Over-Ethernet), and the Raspberry Pi is equipped with a PoE add-on board, so the ethernet cable can carry both Power and Data. This can simplify the deployment a little.

Another feature this switch provides is remote management, using SNMP: Simple Network Management Protocol. Thanks to this, WALT is able to retrieve some information, such as the neighbors of the switch, and then draw a tree view of the network (we will see that below).

Moreover, when both PoE and SNMP are available, WALT can provide additional features to PoE-powered nodes:

  • Hard-reboots: if ever a node is blocked (for instance if you modified the kernel and introduced a bug in it), WALT can force the reboot of a node by sending PoE requests to the switch (power off the relevant switch port, wait 2s, power on).
  • Power savings: WALT will automatically power off unused2 PoE-powered nodes.

Let’s configure WALT to enable these features. First, let’s recap the devices WALT knows, up to now:

etienne@asus-minipc:~# walt device show

The WalT network contains the following devices:

name         ip             mac                type             netsetup
-----------  -------------  -----------------  ---------------  --------
rpi3bp       192.168.108.5  b8:27:eb:0d:ae:a1  node (physical)  LAN
vnode1       192.168.108.2  52:54:00:e0:1b:4f  node (virtual)   LAN
vnode2       192.168.108.3  52:54:00:ac:11:fe  node (virtual)   LAN
walt-server  192.168.108.1  52:54:00:79:be:ab  server

[...]

WalT also detected the following devices but could not detect their type:

name         ip             mac                type     netsetup
-----------  -------------  -----------------  -------  --------
sw1-gs110tp  192.168.108.4  54:07:7d:1b:8b:26  unknown  LAN

If one of them is actually a switch, use 'walt device config <name> type=switch' to fix this.

etienne@asus-minipc:~#

We see that for now the type of sw1-gs110tp is unknown, and WALT proposes (last sentence above) to update this type if relevant. Indeed, sw1-gs110tp is a switch, so let’s update this:

etienne@asus-minipc:~# walt device config sw1-gs110tp type=switch
Done.
etienne@asus-minipc:~#
etienne@asus-minipc:~# walt device config sw1-gs110tp
Switch sw1-gs110tp has the following config applied:
expose=none
lldp.explore=false
netsetup=LAN
poe.reboots=false
snmp.community=<unspecified>
snmp.version=<unspecified>
etienne@asus-minipc:~#

OK, we see more configuration options now, including SNMP credentials for remote management. But this switch is brand new, so it does not accept SNMP requests yet. We must connect to its web interface and configure it first.

WALT provides handy network redirections to ease this kind of tasks. We just have to update the expose configuration option:

etienne@asus-minipc:~# walt device config sw1-gs110tp expose=80:8081
Done.
etienne@asus-minipc:~#

Now the WALT server is listening on TCP port 8081, and it will redirect client connections to port 80 of sw1-gs110tp. So, from my laptop, I can open my browser at URL http://<walt-server>:8081 and I will be redirected to the web interface of the switch! Let’s try:

sw-web-interface-1

It’s working! So now I can optionally follow Netgear registration procedure or directly access the configuration screens. By selecting menus System and SNMP, I can get to the following interface.

sw-web-interface-2

There I register an SNMP community called walt-rw with read-write access mode.

That’s all for the switch configuration, so let’s tell WALT we no longer need the port redirection.

etienne@asus-minipc:~# walt device config sw1-gs110tp expose=none
Done.
etienne@asus-minipc:~#

After this command, server port 8081 is released and can be reused by someone else.

Now, we have to mirror the SNMP credential data on WALT side:

etienne@asus-minipc:~# walt device config sw1-gs110tp snmp.community=walt-rw snmp.version=2
Done.
etienne@asus-minipc:~#

This allows us to enable the optional switch features lldp.explore (for network exploration) and poe.reboots (for PoE hard-reboots and powersave).

etienne@asus-minipc:~# walt device config sw1-gs110tp lldp.explore=true poe.reboots=true
Done.
etienne@asus-minipc:~#

Then we can use walt device rescan to trigger network exploration:

etienne@asus-minipc:~# walt device rescan
Querying sw1-gs110tp             OK (BRIDGE-only data)
Querying walt server             OK
etienne@asus-minipc:~#

And with this data just collected, walt device tree is able to display a network graph:

etienne@asus-minipc:~# walt device tree

-- sw1-gs110tp --
 ├─1: walt-server
 └─6: rpi3bp

note: this view comes from last network scan, issued 6 seconds ago (use 'walt device rescan' to update).
[...]

etienne@asus-minipc:~#

The network graph is obviously very small in this case. (This feature is more useful for a large WALT platform deployed in a building.) However, the fact WALT knows on which switch port rpi3bp is connected is also useful for PoE hard-reboots (and powersave):

etienne@asus-minipc:~# walt node reboot --hard rpi3bp
Node rpi3bp: rebooted ok.
etienne@asus-minipc:~#

If looking at the switch LEDs, we can verify that they were briefly toggled off during this operation.

Last words

As you can see, WALT offers both a plug-and-play experience for basic functionality and options to handle more advanced features.

Most importantly, did you realise that we instantly turned a Raspberry Pi board into a WALT node by just connecting it to the WALT network? There was no preparation phase of any sort for this board: we even plugged it without a SD card!

To be honest, this level of automation is not provided with all kinds of WALT nodes. Actually, Raspberry Pi 3B+ boards come with a firmware able to boot over the network, so we can bootstrap our own boot procedure. Older models do not offer this feature, so they need a SD card flashed with a network bootloader. Raspberry Pi 4 nodes are also able to boot over the network, but the network boot feature may or may not be activated when you receive the board. So you may have to boot the board once with a SD card, just for activation of this network boot feature, and then the SD card could be removed.

Similarly, PXE-enabled PC machines (x86 64bit CPU) instantly become WALT nodes once connected. Again, the node installation procedure has all the details.

Thanks to Jérémie Finiel for proofreading. If you have questions, we can answer you on the mailing list.


  1. If you already plugged a device and forgot to monitor the logs, you can replace option --realtime by --history -5m: for instance, to retrieve log lines issued during the last 5 minutes. See the help page for more info. ↩︎

  2. A node is considered “unused” if it remained “free” the last two hours. A node is considered “free” if it has not been “acquired” by anyone yet, or if the last owner “released” it (by using walt node release). ↩︎