Skip to content

Commit 3aba60f

Browse files
author
David Sommerseth
committed
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>
1 parent d345876 commit 3aba60f

File tree

1 file changed

+19
-49
lines changed

1 file changed

+19
-49
lines changed

python-ethtool/etherinfo.c

Lines changed: 19 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -100,49 +100,6 @@ static void callback_nl_link(struct nl_object *obj, void *arg)
100100
SET_STR_VALUE(ethi->hwaddress, hwaddr);
101101
}
102102

103-
/**
104-
* For use by callback_nl_address
105-
* Returns 0 for success; -1 for error (though this is currently ignored)
106-
*/
107-
static int
108-
append_object_for_netlink_address(struct etherinfo *ethi,
109-
struct rtnl_addr *addr)
110-
{
111-
PyObject *addr_obj;
112-
113-
assert(ethi);
114-
assert(ethi->ipv4_addresses);
115-
assert(ethi->ipv6_addresses);
116-
assert(addr);
117-
118-
addr_obj = make_python_address_from_rtnl_addr(addr);
119-
if (!addr_obj) {
120-
return -1;
121-
}
122-
123-
switch (rtnl_addr_get_family(addr)) {
124-
case AF_INET:
125-
if (-1 == PyList_Append(ethi->ipv4_addresses, addr_obj)) {
126-
Py_DECREF(addr_obj);
127-
return -1;
128-
}
129-
break;
130-
131-
case AF_INET6:
132-
if (-1 == PyList_Append(ethi->ipv6_addresses, addr_obj)) {
133-
Py_DECREF(addr_obj);
134-
return -1;
135-
}
136-
break;
137-
138-
default:
139-
return -1;
140-
}
141-
Py_DECREF(addr_obj);
142-
143-
/* Success */
144-
return 0;
145-
}
146103

147104
/**
148105
* 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)
155112
{
156113
struct etherinfo *ethi = (struct etherinfo *) arg;
157114
struct rtnl_addr *rtaddr = (struct rtnl_addr *) obj;
115+
PyObject *addr_obj = NULL;
116+
int af_family = -1;
158117

159118
if( ethi == NULL ) {
160119
return;
161120
}
121+
assert(ethi->ipv4_addresses);
122+
assert(ethi->ipv6_addresses);
162123

163-
switch( rtnl_addr_get_family(rtaddr) ) {
164-
case AF_INET:
165-
case AF_INET6:
166-
append_object_for_netlink_address(ethi, rtaddr);
124+
/* Ensure that we're processing only known address types.
125+
* Currently only IPv4 and IPv6 is handled
126+
*/
127+
af_family = rtnl_addr_get_family(rtaddr);
128+
if( af_family != AF_INET && af_family != AF_INET6 ) {
129+
return;
130+
}
131+
132+
/* Prepare a new Python object with the IP address */
133+
addr_obj = make_python_address_from_rtnl_addr(rtaddr);
134+
if (!addr_obj) {
167135
return;
168-
default:
169-
return;
170136
}
137+
/* Append the IP address object to the proper address list */
138+
PyList_Append((af_family == AF_INET6 ? ethi->ipv6_addresses : ethi->ipv4_addresses),
139+
addr_obj);
140+
Py_DECREF(addr_obj);
171141
}
172142

173143

0 commit comments

Comments
 (0)