Glam Prestige Journal

Bright entertainment trends with youth appeal.

I have a machine running Ubuntu Server 18.04. The network is configured using Netplan, so I have this config in /etc/netplan/01-netcfg.yaml:

network: version: 2 renderer: networkd ethernets: enp1s0f0: optional: false addresses: - 10.0.0.1/24 wifis: wlp2s0: optional: true dhcp4: yes access-points: [...]

enp1s0f0 is connected to a device that may or may not be on (at boot or any other time). I want to run a DHCP server on this interface.

The trouble is, when I boot there's a delay of a few minutes and I see this message:

A start job is running for Wait for Network to be Configured

Eventually it times out, the boot continues, but enp1s0f0 is never configured or brought up. ip link show enp1s0f0 gives:

2: enp1s0f0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000 link/ether 10:dd:b1:ef:65:21 brd ff:ff:ff:ff:ff:ff

I have no idea what the significance of NO-CARRIER is, but in case it's relevant, here's the output of sudo lspci -v:

01:00.0 Ethernet controller: Broadcom Limited NetXtreme BCM57766 Gigabit Ethernet PCIe (rev 01) Subsystem: Broadcom Limited NetXtreme BCM57766 Gigabit Ethernet PCIe Flags: bus master, fast devsel, latency 0, IRQ 16 Memory at a0400000 (64-bit, prefetchable) [size=64K] Memory at a0410000 (64-bit, prefetchable) [size=64K] Capabilities: [48] Power Management version 3 Capabilities: [50] Vital Product Data Capabilities: [58] MSI: Enable- Count=1/8 Maskable- 64bit+ Capabilities: [a0] MSI-X: Enable+ Count=6 Masked- Capabilities: [ac] Express Endpoint, MSI 00 Capabilities: [100] Advanced Error Reporting Capabilities: [13c] Device Serial Number 00-00-10-dd-b1-ef-65-21 Capabilities: [150] Power Budgeting <?> Capabilities: [160] Virtual Channel Capabilities: [1b0] Latency Tolerance Reporting Kernel driver in use: tg3 Kernel modules: tg3

Now if I turn the attached device on, sure enough enp1s0f0 comes up:

2: enp1s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether 10:dd:b1:ef:65:21 brd ff:ff:ff:ff:ff:ff

But it's of no use at this point — the DHCP server won't work, because it couldn't start with enp1s0f0 no up at boot time. I need enp1s0f0 up and configured during boot, which I thought was the whole point of a static IP configuration. Even stranger is that it always has an IPv6 address, even when it's down:

2: enp1s0f0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000 link/ether 10:dd:b1:ef:65:21 brd ff:ff:ff:ff:ff:ff inet6 fe80::12dd:b1ff:feef:6521/64 scope link valid_lft forever preferred_lft forever

If I check Netplan's debug output, I see:

$ sudo netplan --debug apply
** (generate:1555): DEBUG: 20:39:27.253: Processing input file //etc/netplan/01-netcfg.yaml..
** (generate:1555): DEBUG: 20:39:27.254: starting new processing pass
** (generate:1555): DEBUG: 20:39:27.254: wlp2s0: adding wifi AP 'Jeff Winger's Wireless Hairbrush'
** (generate:1555): DEBUG: 20:39:27.254: wlp2s0: setting default backend to 1
** (generate:1555): DEBUG: 20:39:27.254: enp1s0f0: setting default backend to 1
** (generate:1555): DEBUG: 20:39:27.254: Generating output files..
** (generate:1555): DEBUG: 20:39:27.254: wlp2s0: Creating wpa_supplicant configuration file run/netplan/wpa-wlp2s0.conf
** (generate:1555): DEBUG: 20:39:27.254: Creating wpa_supplicant service enablement link /run/systemd/system/
** (generate:1555): DEBUG: 20:39:27.254: NetworkManager: definition wlp2s0 is not for us (backend 1)
** (generate:1555): DEBUG: 20:39:27.254: NetworkManager: definition enp1s0f0 is not for us (backend 1)
DEBUG:netplan generated networkd configuration exists, restarting networkd
DEBUG:no netplan generated NM configuration exists
DEBUG:replug enp1s0f0: unbinding 0000:01:00.0 from /sys/bus/pci/drivers/tg3
DEBUG:replug enp1s0f0: rebinding 0000:01:00.0 to /sys/bus/pci/drivers/tg3
DEBUG:device wlp2s0 operstate is up, not replugging
DEBUG:netplan triggering .link rules for wlp2s0
DEBUG:device lo operstate is unknown, not replugging
DEBUG:netplan triggering .link rules for lo

My configuration for isc-dhcp-server is to have /etc/default/isc-dhcp-server contain:

INTERFACESv4="enp1s0f0"

...and /etc/dhcp/dhcpd.conf contain (amongst other things):

subnet 10.0.0.0 netmask 255.255.255.0 {
...
}

In theory, this should serve DHCP over enp1s0f0. However, since enp1s0f0 is never brought up, the DHCP server fails to start:

No subnet declaration for enp1s0f0 (no IPv4 addresses).
** Ignoring requests on enp1s0f0. If this is not what you want, please write a subnet declaration in your dhcpd.conf file for the network segment to which interface enp1s0f0 is attached. **
Not configured to listen on any interfaces!

This wasn't an issue under ifupdown (I have no idea why enp1s0f0 doesn't just come up during boot, whether or not anything is at the other end of the cable; I thought that was the whole point of having a static IP). Is it possible to get it working in Netplan? Or is it possible to have the DHCP server start when enp1s0f0 is up?

0

2 Answers

It looks like you're hitting the bug that will be solved by - currently devices will only be configured if they have a carrier, but that requirement is going away.

In the mean time, you can probably fix this by configuring the device with systemd-networkd directly. Remove the enp1s0f0 stanza from the netplan config and add something like this (untested) systemd config in /etc/systemd/network/10-enp1s0f0.network:

[Match]
Name=enp1s0f0
[Link]
RequiredForOnline=no
[Network]
ConfigureWithoutCarrier=true
Address=10.0.0.1/24

The key bit is the ConfigureWithoutCarrier which I have pulled directly from the pull request.

(You can see what netplan generates and go from there - the file will be in /run/systemd/network.)

Alternatively, you can make use of the fact that netplan and ifupdown can coexist, apt install ifupdown and configure enp1s0f0 with ifupdown.

6

It looks like Netplan has a smart system of figuring out when the iface has a link or not and assign addresses only when the link is up, automatically.

When that interface has no link (carrier signal), it remains unconfigured, however, if I turn on the other device in the other end of the cable, the interface automatically brings itself up with IP address and everything it needs.

For DHCP, a solution would be not to bind it to a specific interface...

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy