<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title></title>
</head>
<body>
<div name="messageBodySection">
<div dir="auto"><span style="color:#000000;font-family:Helvetica;font-size: 12px">Hi all,</span><span style="font-size: 12px"><br>
</span><span style="font-size: 12px"><br>
</span><span style="color:#000000;font-family:Helvetica;font-size: 12px">I apologize for this basic question, but I haven’t been able to figure it out on my own.</span><span style="font-size: 12px"><br>
</span><span style="font-size: 12px"><br>
</span><span style="color:#000000;font-family:Helvetica;font-size: 12px">I’m working on an embedded device, which includes a little GUI that (among other things) allows the user to specify a static IPv4 address (and netmask and gateway) to be associated with
 a given Ethernet port on the device.</span><span style="font-size: 12px"><br>
</span><span style="font-size: 12px"><br>
</span><span style="color:#000000;font-family:Helvetica;font-size: 12px">The user enters the IPv4 settings-values he wants into the GUI, clicks “Apply”, and the server runs a couple of simple shell commands:</span><span style="font-size: 12px"><br>
</span><span style="font-size: 12px"><br>
</span><span style="color:#000000;font-family:Helvetica;font-size: 12px"><span style="white-space:pre">/sbin/ip -4 a add 192.168.2.88/24 dev eno1 label eno1:p0s0</span></span><span style="font-size: 12px"><br>
</span><span style="color:#000000;font-family:Helvetica;font-size: 12px"><span style="white-space:pre">/bin/arping -c 3 -A -I eno1 192.168.2.88</span></span><span style="font-size: 12px"><br>
</span><span style="font-size: 12px"><br>
</span><span style="color:#000000;font-family:Helvetica;font-size: 12px">… et voila, Ethernet device eno1 now uses the IP address 192.168.2.88 (associated with the label eno1:p0s0), as shown in ifconfig:</span><span style="font-size: 12px"><br>
</span><span style="font-size: 12px"><br>
</span><span style="white-space:pre">root@embedded-device:~# ifconfig</span><br>
<span style="white-space:pre">[…]</span><br>
<span style="white-space:pre"></span><br>
<span style="white-space:pre">eno1:p0s0 Link encap:Ethernet HWaddr 00:07:32:95:93:7D </span><br>
<span style="white-space:pre">inet addr:192.168.2.88 Bcast:0.0.0.0 Mask:255.255.255.0</span><br>
<span style="white-space:pre">UP BROADCAST MULTICAST MTU:1500 Metric:1</span><br>
<span style="white-space:pre">Memory:a5b00000-a5b1ffff</span><br>
<br>
<span style="color:#000000;font-family:Helvetica;font-size: 12px">If the user later changes his mind and wants to clear his IPv4 settings, he can do that and the server will run this shell command:</span><span style="font-size: 12px"><br>
</span><span style="font-size: 12px"><br>
</span><span style="color:#000000;font-family:Helvetica;font-size: 12px"><span style="white-space:pre">/sbin/ip -4 addr flush label eno1:p0s0</span></span><span style="font-size: 12px"><br>
</span><span style="font-size: 12px"><br>
</span><span style="color:#000000;font-family:Helvetica;font-size: 12px">This all works fine and has for a long time; the problem is that the new version of the device is running systemd.networkd and networkd has some functionality in it where it detects when
 an Ethernet device has lost its carrier, and responds by removing all the IPv4 addresses associated with that Ethernet device.</span><span style="font-size: 12px"><br>
</span><span style="font-size: 12px"><br>
</span><span style="color:#000000;font-family:Helvetica;font-size: 12px">The user-visible result of that behavior is that if the user unplugs his Ethernet cable and then plugs it in again, his IPv4 settings are no longer in effect (at least not until he goes
 and re-enters them into the GUI again to re-establish them).</span><span style="font-size: 12px"><br>
</span><span style="font-size: 12px"><br>
</span><span style="color:#000000;font-family:Helvetica;font-size: 12px">The behavior I would like is that this manually-assigned IPv4 address is left alone by systemd, and doesn’t change unless/until the user explicitly updates it using the GUI.  Is there
 some way to convince networkd to leave my server’s IPv4 settings alone?</span><span style="font-size: 12px"><br>
</span><span style="font-size: 12px"><br>
</span><span style="color:#000000;font-family:Helvetica;font-size: 12px">I tried various permutations of config files, like the one shown below, but they didn’t seem to have any effect on networkd's behavior.</span><span style="font-size: 12px"><br>
</span><span style="font-size: 12px"><br>
</span><span style="color:#000000;font-family:Helvetica;font-size: 12px"><span style="white-space:pre"></span></span>root@embedded-device:~# cat /etc/systemd/network/eno1.network <br>
<span style="white-space:pre">[Match]</span><br>
<span style="white-space:pre">Name=eno1</span><br>
<br>
<span style="white-space:pre">[Network]</span><br>
<span style="white-space:pre">DHCP=no</span><br>
<span style="white-space:pre">IgnoreCarrierLoss=yes</span><br>
<br>
<span style="white-space:pre">[Link]</span><br>
<span style="white-space:pre">ActivationPolicy=always-up</span><br>
<br>
Thanks,<br>
Jeremy</div>
</div>
NOTICE: This email may contain confidential information. Please see https://meyersound.com/legal/#email-policy for our complete policy.
</body>
</html>