From: Cyril Bur <cyrilbur@gmail.com>
To: OpenBMC Patches <openbmc-patches@stwcx.xyz>
Cc: openbmc@lists.ozlabs.org
Subject: Re: [PATCH phosphor-networkd] Adding org.openbmc.NetworkManager dbus interface for network configuation.
Date: Thu, 21 Jan 2016 16:15:20 +1100 [thread overview]
Message-ID: <20160121161520.1557ad04@camb691> (raw)
In-Reply-To: <1453296634-21470-2-git-send-email-openbmc-patches@stwcx.xyz>
On Wed, 20 Jan 2016 07:30:34 -0600
OpenBMC Patches <openbmc-patches@stwcx.xyz> wrote:
> From: Hariharasubramanian R <hramasub@in.ibm.com>
>
Hi, Hariharasubramanian
So this looks like it is designed to run with your previous patch on the list.
Which answers one question I had.
It looks like this simply just bounces the dbus call along to systemd
or network manager. Why could your previous patch not do this directly?
As I'm not all that proficient in python, I'll leave the actual code review to
someone who knows a thing or two about python.
> ---
> netman.py | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 111 insertions(+)
> create mode 100755 netman.py
>
> diff --git a/netman.py b/netman.py
> new file mode 100755
> index 0000000..bc46fd1
> --- /dev/null
> +++ b/netman.py
> @@ -0,0 +1,111 @@
> +#!/usr/bin/env python
> +
> +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',
> + 'object_name' : '/org/freedesktop/network1/network/default',
> + 'interface_name' : 'org.freedesktop.network1.Network',
> + 'method' : 'org.freedesktop.network1.Network.SetAddr'
> + },
> + 'NetworkManager' : {
> + 'bus_name' : 'org.freedesktop.NetworkManager',
> + 'object_name' : '/org/freedesktop/NetworkManager',
> + 'interface_name' : 'org.freedesktop.NetworkManager',
> + 'method' : 'org.freedesktop.NetworkManager' # FIXME:
> + },
> +}
> +
> +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 ['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']
> + obj_path = netprov ['object_name']
> +
> + if (target == "ip"):
> + intf_name = 'org.freedesktop.network1.Network'
> +
> + if (target == "mac"):
> + intf_name = 'org.freedesktop.network1.Link'
> +
> + obj = self.bus.get_object(bus_name, obj_path)
> + intf = dbus.Interface(obj, intf_name)
> + return intf.GetAddress (device)
> +
> +
> + @dbus.service.method(DBUS_NAME, "", "")
> + def test(self):
> + print("TEST")
> +
> + @dbus.service.method(DBUS_NAME, "ssss", "x")
> + def AddAddress4 (self, device, ipaddr, netmask, 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):
> + return self._setAddr ("del", device, ipaddr, netmask, 2, 0, 253, gateway)
> +
> + @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())
prev parent reply other threads:[~2016-01-21 5:15 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-20 13:30 [PATCH phosphor-networkd] Adding org.openbmc.NetworkManager dbus interface for network config OpenBMC Patches
2016-01-20 13:30 ` [PATCH phosphor-networkd] Adding org.openbmc.NetworkManager dbus interface for network configuation OpenBMC Patches
2016-01-21 5:15 ` Cyril Bur [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160121161520.1557ad04@camb691 \
--to=cyrilbur@gmail.com \
--cc=openbmc-patches@stwcx.xyz \
--cc=openbmc@lists.ozlabs.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.