The premise is fairly simple, given the below unit:

  [Unit]
  Description=dhcpcd on %I
  Wants=network.target
  Before=network.target
  After=sys-subsystem-net-devices-%i.device
  BindTo=sys-subsystem-net-devices-%i.device

  [Service]
  Type=forking
  PIDFile=/run/dhcpcd-%I.pid
  ExecStart=/sbin/dhcpcd -A -q -w %I
  ExecStop=/sbin/dhcpcd -k %I

  [Install]
  Alias=multi-user.target.wants/[email protected]

All I'm interested in is making sure that the device is available before
starting dhcpcd for an interface. However, when I enable this unit, the
device alias is inactive after booting:

  $ systemctl -t device --full --all --no-pager | grep net
  sys-devices-pci0000:00-0000:00:03.0-virtio0-net-eth0.device loaded active
  sys-subsystem-net-devices-eth0.device                       loaded inactive

The device node itself looks just fine, according to udev:

  $ udevadm info -q property /devices/pci0000:00/0000:00:03.0/virtio0/net/eth0
  DEVPATH=/devices/pci0000:00/0000:00:03.0/virtio0/net/eth0
  ID_BUS=pci
  ID_MODEL_FROM_DATABASE=Virtio network device
  ID_MODEL_ID=/sys/devices/pci0000:00/0000:00:03.0/virtio0
  ID_VENDOR_FROM_DATABASE=Red Hat, Inc
  ID_VENDOR_ID=0x1af4
  IFINDEX=2
  INTERFACE=eth0
  SUBSYSTEM=net
  SYSTEMD_ALIAS=/sys/subsystem/net/devices/eth0
  TAGS=:systemd:
  USEC_INITIALIZED=95201

Meanwhile, this of course means that [email protected] is sitting
idle:

  $ systemctl status [email protected]
  [email protected] - dhcpcd on eth0
      Loaded: loaded (/etc/systemd/system/[email protected]; enabled)
      Active: inactive (dead)
      CGroup: name=systemd:/system/[email protected]/eth0

As soon as I reboot without the After=/BindTo= ordering on [email protected],
the alias shows as active:

  $ systemctl status sys-subsystem-net-devices-eth0.device
  sys-devices-pci0000:00-0000:00:03.0-virtio0-net-eth0.device - Virtio network 
device
      Loaded: loaded
      Active: active (plugged) since Mon, 25 Jun 2012 16:16:52 -0400; 46s ago
      Device: /sys/devices/pci0000:00/0000:00:03.0/virtio0/net/eth0

Were device aliases not intended to be used this way? If not, what's the
purpose? How can I order a network service against a device to ensure
it's started properly?

Relevant: https://bugs.archlinux.org/task/30235

Cheers,
Dave

_______________________________________________
systemd-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to