[PATCH phosphor-networkd] AddAddress4 not setting the new IP

OpenBMC Patches openbmc-patches at stwcx.xyz
Tue Feb 2 11:30:28 AEDT 2016


From: Chris Austen <austenc at us.ibm.com>

Just a few changes to make it work...

1) Ensure the .network file is a known name.  It must be
   deleted before the new .network file is added since
   the other file also had the same interface and priority level
2) I got on the systemd channel because restarting the systemd
   service does not change the ip address.  You needed to
   flush the ip instead.

Notes on the networkd subject from the IRC channel...
>From the systemd-networkd manpage... "Network configurations applied
 before networkd is started are not removed"

I also learned from the IRC to use the 'ip addr flush <device>' to
force the network cleanup.  ...

<causten__> danderson, so if I setup a server on one subnet, rebooted, then wanted to change the ip I couldn't do it without rebooting?
<causten__> is there a workaround?  I mean switching ips in a lab to a different subnet is common
<danderson> either that, or manually clean up the interface configuration before restarting networkd
<danderson> i.e. `ip addr del 1.2.3.4 dev eno1` or whatever
<danderson> alternatively, you may want to just use a different network configuration manager (e.g. arch's netctl, or network-manager), if your use case is more complex
<danderson> networkd is by design aimed at one-time configuration on startup, and minor maintenance like keeping DHCP going
---
 netman.py | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

diff --git a/netman.py b/netman.py
index c63921f..9544d07 100755
--- a/netman.py
+++ b/netman.py
@@ -54,7 +54,7 @@ class NetMan (dbus.service.Object):
     def setNetworkProvider(self, provider):
         self.provider = provider
 
-    def _setAddr (self, op, device, ipaddr, netmask, family, flags, scope, gateway):
+    def _setAddr (self, op, device, ipaddr, netmask, family, flags, scope, ateway):
         netprov     = network_providers [self.provider]
         bus_name    = netprov ['bus_name']
         obj_path    = netprov ['ip_object_name']
@@ -63,10 +63,10 @@ class NetMan (dbus.service.Object):
         obj = self.bus.get_object(bus_name, obj_path)
         intf = dbus.Interface(obj, intf_name)
         if (op == "add"):
-            return intf.AddAddress (device, ipaddr, netmask, family, flags, scope, gateway)
+            return intf.AddAddress (device, ipaddr, netmask, family, flags, cope, gateway)
 
         if (op == "del"):
-            return intf.DelAddress (device, ipaddr, netmask, family, flags, scope, gateway)
+            return intf.DelAddress (device, ipaddr, netmask, family, flags, cope, gateway)
 
     def _getAddr (self, target, device):
         netprov     = network_providers [self.provider]
@@ -97,9 +97,7 @@ class NetMan (dbus.service.Object):
     @dbus.service.method(DBUS_NAME, "ssss", "x")
     def AddAddress4 (self, device, ipaddr, netmask, gateway):
         prefixLen = getPrefixLen (netmask)
-        confFile = "/etc/systemd/network/10-bmc-" + device + "-" + ipaddr + '_' + str(prefixLen) + ".network"
-        if os.path.exists(confFile):
-            return 0
+        confFile = "/etc/systemd/network/10-bmc-" + device + ".network"
 
         print("Making .network file...")
         networkconf = open (confFile, "w+") 
@@ -108,16 +106,17 @@ class NetMan (dbus.service.Object):
         networkconf.write ('[Network]' + '\n')
         networkconf.write ('Address=' + ipaddr + '/' + str(prefixLen) +  '\n')
         networkconf.write ('Gateway=' + gateway + '\n')
+        networkconf.close()
 
         print("Restarting networkd service...")
-        call(["systemctl", "restart", "systemd-networkd.service"])
+        call(["ip", "addr", "flush", device])
         return 0
-        #return self._setAddr ("add", device, ipaddr, netmask, 2, 0, 253, gateway)
+        #return self._setAddr ("add", device, ipaddr, netmask, 2, 0, 253, gateway
 
     @dbus.service.method(DBUS_NAME, "ssss", "x")
     def DelAddress4 (self, device, ipaddr, netmask, gateway):
         prefixLen = getPrefixLen (netmask)
-        confFile = "/etc/systemd/network/10-bmc-" + device + "-" + ipaddr + '_' + str(prefixLen) + ".network"
+        confFile = "/etc/systemd/network/10-bmc-" + device + ".network"
         if not (os.path.exists(confFile)):
             return 1
 
@@ -144,4 +143,4 @@ def main():
     mainloop.run()
 
 if __name__ == '__main__':
-    sys.exit(main())
+    sys.exit(main())
\ No newline at end of file
-- 
2.6.4




More information about the openbmc mailing list