Subject: Re: bug#68595: VLANs in static-networking-service-type hangs shepherd

From: Alexey Abramov <[email-masked]>
Date: Mon, 12 Feb 2024 12:59:26 +0100

Hi Lars,

Lars Rustand <[email-masked]> writes:

> Like the title says, if you add any VLAN in a
> static-networking-service-type it seems like the whole shepherd daemon
> freezes up and anything that depends on it stops responding.
> Additionally the networking does not get fully configured either.
>
> After configuring a VLAN `herd status`, `herd restart networking` and
> any other herd command hangs forever with no output. Even reboot is not
> working. The only remedy is to restart the system using the power
> button, but even after the restart the networking service still fails to
> start.
>
> VLANs are seemingly created, but no addresses are created.
>
> Steps to reproduce:
>
> 1. Add a static network with a VLAN to your system config (see below for
> minimal example)
> 2. Reconfigure your system
> 3. Restart the networking service with `sudo herd restart networking`
> 4. Observe that herd does not finish
> 5. Try to run `herd status`, `guix system reconfigure`, or `sudo reboot`.
> 6. Observe that none of the commands seem to have any effect, and that
> they hang indefinitely with no output
>
> --8<---------------cut here---------------start------------->8---
> (service static-networking-service-type
>   (list (static-networking
>          (links
>           (list (network-link
>                  (name "myvlan")
>                  (type 'vlan)
>                  (arguments '((id . 3)
>                               (link . "eth0"))))))
>          (addresses
>           (list (network-address
>                  (device "myvlan@eth0")
>                  (value "192.168.0.2/24")))))))
> --8<---------------cut here---------------end--------------->8---

I see, Could you please, replace the device name to "myvlan" and not
"myvlan@eth0" in the network-address.

Even though ip link (iproute2) shows you 'myvlan@eth0' this is not an
actual name of the interfaces.

> Alternatively here are the reproduction steps using VM:
>
> 1. Build a qcow2 image, make sure there is enough space to reconfigure
>    the system. Use --save-provenance so you have the config inside the
>    vm so you can reconfigure later.
>    `guix system image --image-type=qcow2 --image-size=30G --save-provenance minimal.scm`
> 2. Copy the qcow image to a writable directory.
> 3. Start up the vm.
> ```
> sudo qemu-system-x86_64 \
>    -nic user,model=virtio-net-pci \
>    -enable-kvm -m 2048 \
>    -device virtio-blk,drive=myhd \
>    -drive
>    if=none,file=1a7wi5mgcy3wrsx6pcnag6qjbb87djwl-image.qcow2,id=myhd
> ```
> 4. Edit /run/current-system/configuration.scm and uncomment the static
>    networking.
> 5. Reconfigure the system.
> 6. Try to restart the networking service. `herd restart networking`
> 7. The command will hang infinitely. Cancel it.
> 8. Check the network interfaces. The VLAN interface will have been
>    created, but it will not have any address.
> 9. The aforementioned commands will all be unresponsive now.
> 10. If you reboot your VM you will see that the networking service is
>    failed at startup, and if you try to restart the service you will get
>    an error: #<&netlink-response-error errno: 17>
>

We need to improve our error messaging. This means that the
interface is exist. 

-- 
Alexey