diff options
author | David Sommerseth <davids@redhat.com> | 2013-12-10 14:43:49 +0100 |
---|---|---|
committer | David Sommerseth <davids@redhat.com> | 2013-12-10 14:43:49 +0100 |
commit | 3aba60f5b7ad3014052415632b5c115eca915391 (patch) | |
tree | 3b3143231ce5bc576b07aa69b78f534806c04c71 | |
parent | d345876e7d52b4f743a37cfe5b390067bad0a956 (diff) | |
download | python-ethtool-3aba60f5b7ad3014052415632b5c115eca915391.tar.gz python-ethtool-3aba60f5b7ad3014052415632b5c115eca915391.tar.xz python-ethtool-3aba60f5b7ad3014052415632b5c115eca915391.zip |
Merge append_object_for_netlink_address() and callback_nl_address()
This is to simplify and clearify the code furhter. Simply reduce the
call chain.
Signed-off-by: David Sommerseth <davids@redhat.com>
-rw-r--r-- | python-ethtool/etherinfo.c | 68 |
1 files changed, 19 insertions, 49 deletions
diff --git a/python-ethtool/etherinfo.c b/python-ethtool/etherinfo.c index 3039a27..6670a85 100644 --- a/python-ethtool/etherinfo.c +++ b/python-ethtool/etherinfo.c @@ -100,49 +100,6 @@ static void callback_nl_link(struct nl_object *obj, void *arg) SET_STR_VALUE(ethi->hwaddress, hwaddr); } -/** - * For use by callback_nl_address - * Returns 0 for success; -1 for error (though this is currently ignored) - */ -static int -append_object_for_netlink_address(struct etherinfo *ethi, - struct rtnl_addr *addr) -{ - PyObject *addr_obj; - - assert(ethi); - assert(ethi->ipv4_addresses); - assert(ethi->ipv6_addresses); - assert(addr); - - addr_obj = make_python_address_from_rtnl_addr(addr); - if (!addr_obj) { - return -1; - } - - switch (rtnl_addr_get_family(addr)) { - case AF_INET: - if (-1 == PyList_Append(ethi->ipv4_addresses, addr_obj)) { - Py_DECREF(addr_obj); - return -1; - } - break; - - case AF_INET6: - if (-1 == PyList_Append(ethi->ipv6_addresses, addr_obj)) { - Py_DECREF(addr_obj); - return -1; - } - break; - - default: - return -1; - } - Py_DECREF(addr_obj); - - /* Success */ - return 0; -} /** * libnl callback function. Does the real parsing of a record returned by NETLINK. This function @@ -155,19 +112,32 @@ static void callback_nl_address(struct nl_object *obj, void *arg) { struct etherinfo *ethi = (struct etherinfo *) arg; struct rtnl_addr *rtaddr = (struct rtnl_addr *) obj; + PyObject *addr_obj = NULL; + int af_family = -1; if( ethi == NULL ) { return; } + assert(ethi->ipv4_addresses); + assert(ethi->ipv6_addresses); - switch( rtnl_addr_get_family(rtaddr) ) { - case AF_INET: - case AF_INET6: - append_object_for_netlink_address(ethi, rtaddr); + /* Ensure that we're processing only known address types. + * Currently only IPv4 and IPv6 is handled + */ + af_family = rtnl_addr_get_family(rtaddr); + if( af_family != AF_INET && af_family != AF_INET6 ) { + return; + } + + /* Prepare a new Python object with the IP address */ + addr_obj = make_python_address_from_rtnl_addr(rtaddr); + if (!addr_obj) { return; - default: - return; } + /* Append the IP address object to the proper address list */ + PyList_Append((af_family == AF_INET6 ? ethi->ipv6_addresses : ethi->ipv4_addresses), + addr_obj); + Py_DECREF(addr_obj); } |