[PATCH phosphor-networkd] org.openbmc.NetworkManager : Bug fixes, SetHwAddress & EnableDHCP
OpenBMC Patches
openbmc-patches at stwcx.xyz
Wed Feb 3 05:10:32 AEDT 2016
From: Hariharasubramanian R <hramasub at in.ibm.com>
---
netman.py | 324 ++++++++++++++++++++++++++++++++++----------------------------
1 file changed, 178 insertions(+), 146 deletions(-)
diff --git a/netman.py b/netman.py
index 8f0fb80..5b18712 100755
--- a/netman.py
+++ b/netman.py
@@ -1,146 +1,178 @@
-#!/usr/bin/env python
-
-from subprocess import call
-import sys
-import subprocess
-import dbus
-import string
-import os
-import fcntl
-import glib
-import gobject
-import dbus.service
-import dbus.mainloop.glib
-
-DBUS_NAME = 'org.openbmc.NetworkManager'
-OBJ_NAME = '/org/openbmc/NetworkManager/Interface'
-
-network_providers = {
- 'networkd' : {
- 'bus_name' : 'org.freedesktop.network1',
- 'ip_object_name' : '/org/freedesktop/network1/network/default',
- 'hw_object_name' : '/org/freedesktop/network1/link/_31',
- 'interface_name' : 'org.freedesktop.network1.Network',
- 'method' : 'org.freedesktop.network1.Network.SetAddr'
- },
- 'NetworkManager' : {
- 'bus_name' : 'org.freedesktop.NetworkManager',
- 'ip_object_name' : '/org/freedesktop/NetworkManager',
- 'hw_object_name' : '/org/freedesktop/NetworkManager',
- 'interface_name' : 'org.freedesktop.NetworkManager',
- 'method' : 'org.freedesktop.NetworkManager' # FIXME:
- },
-}
-
-def getPrefixLen(mask):
- prefixLen = sum([bin(int(x)).count('1') for x in mask.split('.')])
- return prefixLen
-
-class IfAddr ():
- def __init__ (self, family, scope, flags, prefixlen, addr, gw):
- self.family = family
- self.scope = scope
- self.flags = flags
- self.prefixlen = prefixlen
- self.addr = addr
- self.gw = gw
-
-class NetMan (dbus.service.Object):
- def __init__(self, bus, name):
- self.bus = bus
- self.name = name
- dbus.service.Object.__init__(self,bus,name)
-
- def setNetworkProvider(self, provider):
- self.provider = provider
-
- def _setAddr (self, op, device, ipaddr, netmask, family, flags, scope, gateway):
- netprov = network_providers [self.provider]
- bus_name = netprov ['bus_name']
- obj_path = netprov ['ip_object_name']
- intf_name = netprov ['interface_name']
-
- 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)
-
- if (op == "del"):
- return intf.DelAddress (device, ipaddr, netmask, family, flags, scope, gateway)
-
- def _getAddr (self, target, device):
- netprov = network_providers [self.provider]
- bus_name = netprov ['bus_name']
-
- if (target == "ip"):
- intf_name = 'org.freedesktop.network1.Network'
- obj_path = netprov ['ip_object_name']
- obj = self.bus.get_object(bus_name, obj_path)
- intf = dbus.Interface(obj, intf_name)
- return intf.GetAddress (device)
-
- if (target == "mac"):
- intf_name = 'org.freedesktop.network1.Link'
- obj_path = netprov ['hw_object_name']
- obj = self.bus.get_object(bus_name, obj_path)
- intf = dbus.Interface(obj, intf_name)
- mac = intf.GetAddress (device)
- print mac
- return mac
-
-
-
- @dbus.service.method(DBUS_NAME, "", "")
- def test(self):
- print("TEST")
-
- @dbus.service.method(DBUS_NAME, "ssss", "x")
- def AddAddress4 (self, device, ipaddr, netmask, gateway):
- prefixLen = getPrefixLen (netmask)
- confFile = "/etc/systemd/network/10-bmc-" + device + ".network"
-
- print("Making .network file...")
- networkconf = open (confFile, "w+")
- networkconf.write ('[Match]'+ '\n')
- networkconf.write ('Name=' + (device) + '\n')
- networkconf.write ('[Network]' + '\n')
- networkconf.write ('Address=' + ipaddr + '/' + str(prefixLen) + '\n')
- networkconf.write ('Gateway=' + gateway + '\n')
- networkconf.close()
-
- print("Restarting networkd service...")
- call(["ip", "addr", "flush", device])
- return 0
- #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 + ".network"
- if not (os.path.exists(confFile)):
- return 1
-
- self._setAddr ("del", device, ipaddr, netmask, 2, 0, 253, gateway)
- os.remove (confFile)
- return 0;
-
- @dbus.service.method(DBUS_NAME, "s", "a(iyyus)s")
- def GetAddress4 (self, device):
- return self._getAddr ("ip", device)
-
- @dbus.service.method(DBUS_NAME, "s", "s")
- def GetHwAddress (self, device):
- return self._getAddr ("mac", device)
-
-def main():
- dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
- bus = dbus.SystemBus()
- name = dbus.service.BusName(DBUS_NAME, bus)
- obj = NetMan (bus, OBJ_NAME)
- obj.setNetworkProvider ("networkd")
- mainloop = gobject.MainLoop()
- print("Started")
- mainloop.run()
-
-if __name__ == '__main__':
- sys.exit(main())
+#!/usr/bin/env python
+
+from subprocess import call
+import sys
+import subprocess
+import dbus
+import string
+import os
+import fcntl
+import glib
+import gobject
+import dbus.service
+import dbus.mainloop.glib
+
+DBUS_NAME = 'org.openbmc.NetworkManager'
+OBJ_NAME = '/org/openbmc/NetworkManager/Interface'
+
+network_providers = {
+ 'networkd' : {
+ 'bus_name' : 'org.freedesktop.network1',
+ 'ip_object_name' : '/org/freedesktop/network1/network/default',
+ 'hw_object_name' : '/org/freedesktop/network1/link/_31',
+ 'ip_if_name' : 'org.freedesktop.network1.Network',
+ 'hw_if_name' : 'org.freedesktop.network1.Link',
+ 'method' : 'org.freedesktop.network1.Network.SetAddr'
+ },
+ 'NetworkManager' : {
+ 'bus_name' : 'org.freedesktop.NetworkManager',
+ 'ip_object_name' : '/org/freedesktop/NetworkManager',
+ 'hw_object_name' : '/org/freedesktop/NetworkManager',
+ 'ip_if_name' : 'org.freedesktop.NetworkManager',
+ 'hw_if_name' : 'org.freedesktop.NetworkManager',
+ 'method' : 'org.freedesktop.NetworkManager' # FIXME:
+ },
+}
+
+def getPrefixLen(mask):
+ prefixLen = sum([bin(int(x)).count('1') for x in mask.split('.')])
+ return prefixLen
+
+class IfAddr ():
+ def __init__ (self, family, scope, flags, prefixlen, addr, gw):
+ self.family = family
+ self.scope = scope
+ self.flags = flags
+ self.prefixlen = prefixlen
+ self.addr = addr
+ self.gw = gw
+
+class NetMan (dbus.service.Object):
+ def __init__(self, bus, name):
+ self.bus = bus
+ self.name = name
+ dbus.service.Object.__init__(self,bus,name)
+
+ def setNetworkProvider(self, provider):
+ self.provider = provider
+
+ def _setAddr (self, op, device, ipaddr, netmask, family, flags, scope, gateway):
+ netprov = network_providers [self.provider]
+ bus_name = netprov ['bus_name']
+ obj_path = netprov ['ip_object_name']
+ intf_name = netprov ['ip_if_name']
+
+ 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)
+
+ if (op == "del"):
+ return intf.DelAddress (device, ipaddr, netmask, family, flags, scope, gateway)
+
+ def _getAddr (self, target, device):
+ netprov = network_providers [self.provider]
+ bus_name = netprov ['bus_name']
+
+ if (target == "ip"):
+ intf_name = netprov ['ip_if_name'] #'org.freedesktop.network1.Network'
+ obj_path = netprov ['ip_object_name']
+ obj = self.bus.get_object(bus_name, obj_path)
+ intf = dbus.Interface(obj, intf_name)
+ return intf.GetAddress (device)
+
+ if (target == "mac"):
+ intf_name = netprov ['hw_if_name'] #'org.freedesktop.network1.Link'
+ obj_path = netprov ['hw_object_name']
+ obj = self.bus.get_object(bus_name, obj_path)
+ intf = dbus.Interface(obj, intf_name)
+ mac = intf.GetAddress (device)
+ print mac
+ return mac
+
+ @dbus.service.method(DBUS_NAME, "", "")
+ def test(self):
+ print("TEST")
+
+ @dbus.service.method(DBUS_NAME, "s", "x")
+ def EnableDHCP (self, device):
+ confFile = "/etc/systemd/network/10-bmc-" + device + "-" + "dhcp.network"
+ if os.path.exists(confFile):
+ return 0
+
+ print("Making .network file...")
+ networkconf = open (confFile, "w+")
+ networkconf.write ('[Match]'+ '\n')
+ networkconf.write ('Name=' + (device) + '\n')
+ networkconf.write ('[Network]' + '\n')
+ networkconf.write ('DHCP=yes')
+ networkconf.close ()
+
+ print("Restarting networkd service...")
+ call(["systemctl", "restart", "systemd-networkd.service"])
+ return 0
+ #return self._setAddr ("add", device, ipaddr, netmask, 2, 0, 253, gateway)
+
+ @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
+
+ print("Making .network file...")
+ networkconf = open (confFile, "w+")
+ networkconf.write ('[Match]'+ '\n')
+ networkconf.write ('Name=' + (device) + '\n')
+ networkconf.write ('[Network]' + '\n')
+ networkconf.write ('Address=' + ipaddr + '/' + str(prefixLen) + '\n')
+ networkconf.write ('Gateway=' + gateway + '\n')
+ networkconf.close()
+
+ print("Restarting networkd service...")
+ call(["ip", "addr", "flush", device])
+ return 0
+ #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"
+ if not (os.path.exists(confFile)):
+ return 1
+
+ self._setAddr ("del", device, ipaddr, netmask, 2, 0, 253, gateway)
+ os.remove (confFile)
+ return 0;
+
+ @dbus.service.method(DBUS_NAME, "s", "a(iyyus)s")
+ def GetAddress4 (self, device):
+ return self._getAddr ("ip", device)
+
+ @dbus.service.method(DBUS_NAME, "s", "s")
+ def GetHwAddress (self, device):
+ return self._getAddr ("mac", device)
+
+ @dbus.service.method(DBUS_NAME, "ss", "s")
+ def SetHwAddress (self, device, mac):
+ netprov = network_providers [self.provider]
+ bus_name = netprov ['bus_name']
+ obj_path = netprov ['hw_object_name']
+ intf_name = netprov ['hw_if_name']
+
+ obj = self.bus.get_object(bus_name, obj_path)
+ intf = dbus.Interface(obj, intf_name)
+ return intf.SetAddress (device, mac)
+
+def main():
+ dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+ bus = dbus.SystemBus()
+ name = dbus.service.BusName(DBUS_NAME, bus)
+ obj = NetMan (bus, OBJ_NAME)
+ obj.setNetworkProvider ("networkd")
+ mainloop = gobject.MainLoop()
+ print("Started")
+ mainloop.run()
+
+if __name__ == '__main__':
+ sys.exit(main())
--
2.6.4
More information about the openbmc
mailing list