[systemd-devel] NOARP support (systemd-networkd)

Jukka Aho jukka.aho at iki.fi
Sun Jul 31 03:08:32 UTC 2016


I have searched high and low for this but cannot figure how to make 
systemd-networkd disable the ARP protocol for a given interface. (Note: 
This is _not_ about the dhcpd ARP probe but a different thing.)

What I mean is the effect of doing...

ip link set dev eth0 arp off

...which results in the "NOARP" flag appearing in the flags listed by 
ifconfig for that interface:

     eth0: flags=4291<UP,BROADCAST,RUNNING,NOARP,MULTICAST>

If there is such an option supported by systemd-networkd, I would 
imagine it being part of the /etc/systemd/network .link, .netdev, or 
.network configuration files syntax. Alas, I could not find anything.

The rationale for wanting to do this is creating multiple MACVLAN or 
VLAN virtual interfaces atop a single lower-level physical interface 
(say, "eth0") which will then only serve as a link/"bridge" device 
aggregating traffic to the same physical link and not participate in the 
network otherwise. But it seems that even if I do not configure an IP 
address for that lower (physical) interface, there will be some weird 
ARP cache action going on by default which will interfere with the 
virtual interfaces and cause intermittent, spurious connectivity 
problems. This might be a case of so-called "ARP Flux Problem", or 
something related; I did not investigate thoroughly yet, but the problem 
can be prevented by switching ARP completely off for the interface (as 
it is not needed or wanted and the interface does not do anything 
sensible with it, why have it running there), which will make any 
incorrect entries related to that interface's MAC address go away from 
"arp -a", "ip neighbor show" and other such listings and resolve the 
problem.

If there is a supported way of switching the "NOARP" mode on for a given 
interface, or a workaround, I'd be interested in hearing about it. If 
there is no support for this at all, I would suggest adding it.

(My network configuration is complex. There are multiple physical and 
virtual interfaces with varying configuration needs. Any supported 
method should only configure "NOARP" on when a particular, predefined 
interface is coming up, and do it consistently again if that interface 
is later brought down and then back up.)


More information about the systemd-devel mailing list