All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] Update to ell's rntl API
@ 2020-02-15  9:48 Daniel Wagner
  2020-02-15  9:48 ` [PATCH 1/3] netdev: Use ell's rtnl APIs Daniel Wagner
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Daniel Wagner @ 2020-02-15  9:48 UTC (permalink / raw)
  To: iwd

[-- Attachment #1: Type: text/plain, Size: 505 bytes --]

The rtnlutil code has been moved to ell, let's use it.

Daniel Wagner (3):
  netdev: Use ell's rtnl APIs
  netconfig: Use ell's rtnl API
  rtnlutil: Remove used rtnlutil

 Makefile.am     |   3 +-
 src/netconfig.c |  31 ++-
 src/netdev.c    |  22 +-
 src/rtnlutil.c  | 640 ------------------------------------------------
 src/rtnlutil.h  | 103 --------
 5 files changed, 28 insertions(+), 771 deletions(-)
 delete mode 100644 src/rtnlutil.c
 delete mode 100644 src/rtnlutil.h

-- 
2.25.0

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/3] netdev: Use ell's rtnl APIs
  2020-02-15  9:48 [PATCH 0/3] Update to ell's rntl API Daniel Wagner
@ 2020-02-15  9:48 ` Daniel Wagner
  2020-02-15  9:48 ` [PATCH 2/3] netconfig: Use ell's rtnl API Daniel Wagner
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Daniel Wagner @ 2020-02-15  9:48 UTC (permalink / raw)
  To: iwd

[-- Attachment #1: Type: text/plain, Size: 3810 bytes --]

---
 src/netdev.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/src/netdev.c b/src/netdev.c
index 1fbf3d3b89f3..f44c7ec215b4 100644
--- a/src/netdev.c
+++ b/src/netdev.c
@@ -341,7 +341,7 @@ int netdev_set_powered(struct netdev *netdev, bool powered,
 		return -EBUSY;
 
 	netdev->set_powered_cmd_id =
-		rtnl_set_powered(rtnl, netdev->index, powered,
+		l_rtnl_set_powered(rtnl, netdev->index, powered,
 					netdev_set_powered_result, netdev,
 					netdev_set_powered_destroy);
 	if (!netdev->set_powered_cmd_id)
@@ -632,7 +632,8 @@ static void netdev_shutdown_one(void *data, void *user_data)
 	struct netdev *netdev = data;
 
 	if (netdev_get_is_up(netdev))
-		rtnl_set_powered(rtnl, netdev->index, false, NULL, NULL, NULL);
+		l_rtnl_set_powered(rtnl, netdev->index, false,
+					NULL, NULL, NULL);
 }
 
 static bool netdev_match(const void *a, const void *b)
@@ -986,7 +987,7 @@ static void netdev_operstate_cb(int error, uint16_t type,
 
 static void netdev_connect_ok(struct netdev *netdev)
 {
-	rtnl_set_linkmode_and_operstate(rtnl, netdev->index,
+	l_rtnl_set_linkmode_and_operstate(rtnl, netdev->index,
 					IF_LINK_MODE_DORMANT, IF_OPER_UP,
 					netdev_operstate_cb,
 					L_UINT_TO_PTR(netdev->index), NULL);
@@ -3817,7 +3818,7 @@ static void netdev_set_iftype_cb(struct l_genl_msg *msg, void *user_data)
 		goto done;
 
 	netdev->set_powered_cmd_id =
-			rtnl_set_powered(rtnl, netdev->index, true,
+			l_rtnl_set_powered(rtnl, netdev->index, true,
 					netdev_set_iftype_up_cb, req,
 					netdev_set_iftype_request_destroy);
 	if (!netdev->set_powered_cmd_id) {
@@ -3913,7 +3914,7 @@ int netdev_set_iftype(struct netdev *netdev, enum netdev_iftype type,
 		l_genl_msg_unref(msg);
 	} else {
 		netdev->set_powered_cmd_id =
-			rtnl_set_powered(rtnl, netdev->index, false,
+			l_rtnl_set_powered(rtnl, netdev->index, false,
 					netdev_set_iftype_down_cb, req,
 					netdev_set_iftype_request_destroy);
 		if (netdev->set_powered_cmd_id)
@@ -4116,7 +4117,7 @@ static void netdev_initial_up_cb(int error, uint16_t type, const void *data,
 			return;
 	}
 
-	rtnl_set_linkmode_and_operstate(rtnl, netdev->index,
+	l_rtnl_set_linkmode_and_operstate(rtnl, netdev->index,
 					IF_LINK_MODE_DORMANT, IF_OPER_DOWN,
 					netdev_operstate_cb,
 					L_UINT_TO_PTR(netdev->index), NULL);
@@ -4146,7 +4147,7 @@ static void netdev_set_mac_cb(int error, uint16_t type, const void *data,
 			strerror(-error));
 
 	netdev->set_powered_cmd_id =
-		rtnl_set_powered(rtnl, netdev->index, true,
+		l_rtnl_set_powered(rtnl, netdev->index, true,
 					netdev_initial_up_cb, netdev, NULL);
 }
 
@@ -4158,7 +4159,7 @@ static bool netdev_check_set_mac(struct netdev *netdev)
 	l_debug("Setting initial address on ifindex: %d to: " MAC,
 		netdev->index, MAC_STR(netdev->set_mac_once));
 	netdev->set_powered_cmd_id =
-		rtnl_set_mac(rtnl, netdev->index, netdev->set_mac_once,
+		l_rtnl_set_mac(rtnl, netdev->index, netdev->set_mac_once,
 				netdev_set_mac_cb, netdev, NULL);
 	memset(netdev->set_mac_once, 0, 6);
 	return true;
@@ -4183,7 +4184,7 @@ static void netdev_initial_down_cb(int error, uint16_t type, const void *data,
 		return;
 
 	netdev->set_powered_cmd_id =
-		rtnl_set_powered(rtnl, netdev->index, true,
+		l_rtnl_set_powered(rtnl, netdev->index, true,
 					netdev_initial_up_cb, netdev, NULL);
 }
 
@@ -4228,7 +4229,7 @@ static void netdev_getlink_cb(int error, uint16_t type, const void *data,
 	cb = powered ? netdev_initial_down_cb : netdev_initial_up_cb;
 
 	netdev->set_powered_cmd_id =
-		rtnl_set_powered(rtnl, ifi->ifi_index, !powered, cb, netdev,
+		l_rtnl_set_powered(rtnl, ifi->ifi_index, !powered, cb, netdev,
 					NULL);
 }
 
-- 
2.25.0

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/3] netconfig: Use ell's rtnl API
  2020-02-15  9:48 [PATCH 0/3] Update to ell's rntl API Daniel Wagner
  2020-02-15  9:48 ` [PATCH 1/3] netdev: Use ell's rtnl APIs Daniel Wagner
@ 2020-02-15  9:48 ` Daniel Wagner
  2020-02-15  9:48 ` [PATCH 3/3] rtnlutil: Remove used rtnlutil Daniel Wagner
  2020-02-17 15:09 ` [PATCH 0/3] Update to ell's rntl API Denis Kenzior
  3 siblings, 0 replies; 5+ messages in thread
From: Daniel Wagner @ 2020-02-15  9:48 UTC (permalink / raw)
  To: iwd

[-- Attachment #1: Type: text/plain, Size: 5283 bytes --]

---
 src/netconfig.c | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/src/netconfig.c b/src/netconfig.c
index 327244f9b23f..e89f87f89e0c 100644
--- a/src/netconfig.c
+++ b/src/netconfig.c
@@ -502,8 +502,8 @@ static void netconfig_ifaddr_added(struct netconfig *netconfig,
 	ifaddr->family = ifa->ifa_family;
 	ifaddr->prefix_len = ifa->ifa_prefixlen;
 
-	rtnl_ifaddr_extract(ifa, len, &label, &ifaddr->ip,
-							&ifaddr->broadcast);
+	l_rtnl_ifaddr4_extract(ifa, len, &label, &ifaddr->ip,
+					&ifaddr->broadcast);
 
 	l_debug("%s: ifaddr %s/%u broadcast %s", label, ifaddr->ip,
 					ifaddr->prefix_len, ifaddr->broadcast);
@@ -519,7 +519,7 @@ static void netconfig_ifaddr_deleted(struct netconfig *netconfig,
 	struct netconfig_ifaddr *ifaddr;
 	struct netconfig_ifaddr query;
 
-	rtnl_ifaddr_extract(ifa, len, NULL, &query.ip, NULL);
+	l_rtnl_ifaddr4_extract(ifa, len, NULL, &query.ip, NULL);
 
 	query.family = ifa->ifa_family;
 	query.prefix_len = ifa->ifa_prefixlen;
@@ -586,7 +586,7 @@ static void netconfig_ifaddr_ipv6_added(struct netconfig *netconfig,
 	ifaddr->family = ifa->ifa_family;
 	ifaddr->prefix_len = ifa->ifa_prefixlen;
 
-	rtnl_ifaddr_ipv6_extract(ifa, len, &ifaddr->ip);
+	l_rtnl_ifaddr6_extract(ifa, len, &ifaddr->ip);
 
 	l_debug("ifindex %u: ifaddr %s/%u", netconfig->ifindex, ifaddr->ip,
 							ifaddr->prefix_len);
@@ -601,7 +601,7 @@ static void netconfig_ifaddr_ipv6_deleted(struct netconfig *netconfig,
 	struct netconfig_ifaddr *ifaddr;
 	struct netconfig_ifaddr query;
 
-	rtnl_ifaddr_ipv6_extract(ifa, len, &query.ip);
+	l_rtnl_ifaddr6_extract(ifa, len, &query.ip);
 
 	query.family = ifa->ifa_family;
 	query.prefix_len = ifa->ifa_prefixlen;
@@ -707,7 +707,7 @@ static bool netconfig_ipv4_routes_install(struct netconfig *netconfig,
 	if (!network)
 		return false;
 
-	if (!rtnl_route_ipv4_add_connected(rtnl, netconfig->ifindex,
+	if (!l_rtnl_route4_add_connected(rtnl, netconfig->ifindex,
 						ifaddr->prefix_len, network,
 						ifaddr->ip,
 						netconfig->rtm_protocol,
@@ -727,7 +727,7 @@ static bool netconfig_ipv4_routes_install(struct netconfig *netconfig,
 		return false;
 	}
 
-	if (!rtnl_route_ipv4_add_gateway(rtnl, netconfig->ifindex, gateway,
+	if (!l_rtnl_route4_add_gateway(rtnl, netconfig->ifindex, gateway,
 						ifaddr->ip,
 						ROUTE_PRIORITY_OFFSET,
 						netconfig->rtm_protocol,
@@ -806,7 +806,7 @@ static bool netconfig_ipv6_routes_install(struct netconfig *netconfig)
 		return false;
 	}
 
-	if (!rtnl_route_ipv6_add_gateway(rtnl, netconfig->ifindex, gateway,
+	if (!l_rtnl_route6_add_gateway(rtnl, netconfig->ifindex, gateway,
 						ROUTE_PRIORITY_OFFSET,
 						netconfig->rtm_v6_protocol,
 						netconfig_route_add_cmd_cb,
@@ -860,7 +860,7 @@ static void netconfig_install_address(struct netconfig *netconfig,
 
 	switch (ifaddr->family) {
 	case AF_INET:
-		if (rtnl_ifaddr_add(rtnl, netconfig->ifindex,
+		if (l_rtnl_ifaddr4_add(rtnl, netconfig->ifindex,
 					ifaddr->prefix_len, ifaddr->ip,
 					ifaddr->broadcast,
 					netconfig_ipv4_ifaddr_add_cmd_cb,
@@ -871,7 +871,7 @@ static void netconfig_install_address(struct netconfig *netconfig,
 							ifaddr->prefix_len);
 		break;
 	case AF_INET6:
-		if (rtnl_ifaddr_ipv6_add(rtnl, netconfig->ifindex,
+		if (l_rtnl_ifaddr6_add(rtnl, netconfig->ifindex,
 					ifaddr->prefix_len, ifaddr->ip,
 					netconfig_ipv6_ifaddr_add_cmd_cb,
 					netconfig, NULL))
@@ -916,7 +916,7 @@ static void netconfig_uninstall_address(struct netconfig *netconfig,
 
 	switch (ifaddr->family) {
 	case AF_INET:
-		if (rtnl_ifaddr_delete(rtnl, netconfig->ifindex,
+		if (l_rtnl_ifaddr4_delete(rtnl, netconfig->ifindex,
 					ifaddr->prefix_len, ifaddr->ip,
 					ifaddr->broadcast,
 					netconfig_ifaddr_del_cmd_cb, netconfig,
@@ -927,7 +927,7 @@ static void netconfig_uninstall_address(struct netconfig *netconfig,
 						ifaddr->ip, ifaddr->prefix_len);
 		break;
 	case AF_INET6:
-		if (rtnl_ifaddr_ipv6_delete(rtnl, netconfig->ifindex,
+		if (l_rtnl_ifaddr6_delete(rtnl, netconfig->ifindex,
 					ifaddr->prefix_len, ifaddr->ip,
 					netconfig_ifaddr_del_cmd_cb, netconfig,
 					NULL))
@@ -1094,7 +1094,7 @@ static void netconfig_ipv6_select_and_uninstall(struct netconfig *netconfig)
 	if (!gateway)
 		return;
 
-	if (!rtnl_route_ipv6_delete_gateway(rtnl, netconfig->ifindex,
+	if (!l_rtnl_route6_delete_gateway(rtnl, netconfig->ifindex,
 			gateway, ROUTE_PRIORITY_OFFSET,
 			netconfig->rtm_v6_protocol,
 			netconfig_route_del_cmd_cb, NULL, NULL)) {
@@ -1233,7 +1233,7 @@ static int netconfig_init(void)
 		goto error;
 	}
 
-	r = rtnl_ifaddr_get(rtnl, netconfig_ifaddr_cmd_cb, NULL, NULL);
+	r = l_rtnl_ifaddr4_dump(rtnl, netconfig_ifaddr_cmd_cb, NULL, NULL);
 	if (!r) {
 		l_error("netconfig: Failed to get addresses from RTNL link.");
 		goto error;
@@ -1247,7 +1247,7 @@ static int netconfig_init(void)
 		goto error;
 	}
 
-	r = rtnl_ifaddr_ipv6_get(rtnl, netconfig_ifaddr_ipv6_cmd_cb, NULL,
+	r = l_rtnl_ifaddr6_dump(rtnl, netconfig_ifaddr_ipv6_cmd_cb, NULL,
 									NULL);
 	if (!r) {
 		l_error("netconfig: Failed to get IPv6 addresses from RTNL"
-- 
2.25.0

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 3/3] rtnlutil: Remove used rtnlutil
  2020-02-15  9:48 [PATCH 0/3] Update to ell's rntl API Daniel Wagner
  2020-02-15  9:48 ` [PATCH 1/3] netdev: Use ell's rtnl APIs Daniel Wagner
  2020-02-15  9:48 ` [PATCH 2/3] netconfig: Use ell's rtnl API Daniel Wagner
@ 2020-02-15  9:48 ` Daniel Wagner
  2020-02-17 15:09 ` [PATCH 0/3] Update to ell's rntl API Denis Kenzior
  3 siblings, 0 replies; 5+ messages in thread
From: Daniel Wagner @ 2020-02-15  9:48 UTC (permalink / raw)
  To: iwd

[-- Attachment #1: Type: text/plain, Size: 23816 bytes --]

The rtnl code has been added to ELL. There is caller left in iwd,
therefore remove the rtnlutil file.
---
 Makefile.am     |   3 +-
 src/netconfig.c |   1 -
 src/netdev.c    |   1 -
 src/rtnlutil.c  | 640 ------------------------------------------------
 src/rtnlutil.h  | 103 --------
 5 files changed, 2 insertions(+), 746 deletions(-)
 delete mode 100644 src/rtnlutil.c
 delete mode 100644 src/rtnlutil.h

diff --git a/Makefile.am b/Makefile.am
index a9b48cd7a4b0..9d378d3d2e09 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -39,6 +39,7 @@ ell_headers = ell/util.h \
 			ell/netlink.h \
 			ell/genl.h \
 			ell/dbus.h \
+			ell/rtnl.h \
 			ell/dbus-service.h \
 			ell/dbus-client.h \
 			ell/hwdb.h \
@@ -84,6 +85,7 @@ ell_sources = ell/private.h \
 			ell/netlink.c \
 			ell/genl-private.h \
 			ell/genl.c \
+			ell/rtnl.c \
 			ell/dbus-private.h \
 			ell/dbus.c \
 			ell/dbus-message.c \
@@ -217,7 +219,6 @@ src_iwd_SOURCES = src/main.c linux/nl80211.h src/iwd.h src/missing.h \
 					src/manager.c \
 					src/erp.h src/erp.c \
 					src/fils.h src/fils.c \
-					src/rtnlutil.h src/rtnlutil.c \
 					src/auth-proto.h \
 					src/anqp.h src/anqp.c \
 					src/anqputil.h src/anqputil.c \
diff --git a/src/netconfig.c b/src/netconfig.c
index e89f87f89e0c..b0fee4977496 100644
--- a/src/netconfig.c
+++ b/src/netconfig.c
@@ -39,7 +39,6 @@
 #include "src/station.h"
 #include "src/common.h"
 #include "src/network.h"
-#include "src/rtnlutil.h"
 #include "src/resolve.h"
 #include "src/netconfig.h"
 
diff --git a/src/netdev.c b/src/netdev.c
index f44c7ec215b4..1dd1428f91ae 100644
--- a/src/netdev.c
+++ b/src/netdev.c
@@ -60,7 +60,6 @@
 #include "src/owe.h"
 #include "src/fils.h"
 #include "src/auth-proto.h"
-#include "src/rtnlutil.h"
 #include "src/frame-xchg.h"
 
 #ifndef ENOTSUPP
diff --git a/src/rtnlutil.c b/src/rtnlutil.c
deleted file mode 100644
index cd5c11a08e73..000000000000
--- a/src/rtnlutil.c
+++ /dev/null
@@ -1,640 +0,0 @@
-/*
- *
- *  Wireless daemon for Linux
- *
- *  Copyright (C) 2019  Intel Corporation. All rights reserved.
- *
- *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public
- *  License as published by the Free Software Foundation; either
- *  version 2.1 of the License, or (at your option) any later version.
- *
- *  This library is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this library; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <sys/socket.h>
-#include <linux/if.h>
-#include <linux/rtnetlink.h>
-#include <arpa/inet.h>
-
-#include <ell/ell.h>
-
-#include "src/rtnlutil.h"
-
-static size_t rta_add_u8(void *rta_buf, unsigned short type, uint8_t value)
-{
-	struct rtattr *rta = rta_buf;
-
-	rta->rta_len = RTA_LENGTH(sizeof(uint8_t));
-	rta->rta_type = type;
-	*((uint8_t *) RTA_DATA(rta)) = value;
-
-	return RTA_SPACE(sizeof(uint8_t));
-}
-
-static size_t rta_add_u32(void *rta_buf, unsigned short type, uint32_t value)
-{
-	struct rtattr *rta = rta_buf;
-
-	rta->rta_len = RTA_LENGTH(sizeof(uint32_t));
-	rta->rta_type = type;
-	*((uint32_t *) RTA_DATA(rta)) = value;
-
-	return RTA_SPACE(sizeof(uint32_t));
-}
-
-static size_t rta_add_data(void *rta_buf, unsigned short type, void *data,
-								size_t data_len)
-{
-	struct rtattr *rta = rta_buf;
-
-	rta->rta_len = RTA_LENGTH(data_len);
-	rta->rta_type = type;
-	memcpy(RTA_DATA(rta), data, data_len);
-
-	return RTA_SPACE(data_len);
-}
-
-uint32_t rtnl_set_linkmode_and_operstate(struct l_netlink *rtnl, int ifindex,
-					uint8_t linkmode, uint8_t operstate,
-					l_netlink_command_func_t cb,
-					void *user_data,
-					l_netlink_destroy_func_t destroy)
-{
-	struct ifinfomsg *rtmmsg;
-	void *rta_buf;
-	size_t bufsize;
-	uint32_t id;
-
-	bufsize = NLMSG_ALIGN(sizeof(struct ifinfomsg)) +
-		RTA_SPACE(sizeof(uint8_t)) + RTA_SPACE(sizeof(uint8_t));
-
-	rtmmsg = l_malloc(bufsize);
-	memset(rtmmsg, 0, bufsize);
-
-	rtmmsg->ifi_family = AF_UNSPEC;
-	rtmmsg->ifi_index = ifindex;
-
-	rta_buf = (void *) rtmmsg + NLMSG_ALIGN(sizeof(struct ifinfomsg));
-
-	rta_buf += rta_add_u8(rta_buf, IFLA_LINKMODE, linkmode);
-	rta_buf += rta_add_u8(rta_buf, IFLA_OPERSTATE, operstate);
-
-	id = l_netlink_send(rtnl, RTM_SETLINK, 0, rtmmsg,
-					rta_buf - (void *) rtmmsg,
-					cb, user_data, destroy);
-	l_free(rtmmsg);
-
-	return id;
-}
-
-uint32_t rtnl_set_mac(struct l_netlink *rtnl, int ifindex,
-					const uint8_t addr[static 6],
-					l_netlink_command_func_t cb,
-					void *user_data,
-					l_netlink_destroy_func_t destroy)
-{
-	struct ifinfomsg *rtmmsg;
-	void *rta_buf;
-	size_t bufsize;
-	uint32_t id;
-
-	bufsize = NLMSG_ALIGN(sizeof(struct ifinfomsg)) + RTA_SPACE(6);
-
-	rtmmsg = l_malloc(bufsize);
-	memset(rtmmsg, 0, bufsize);
-
-	rtmmsg->ifi_family = AF_UNSPEC;
-	rtmmsg->ifi_index = ifindex;
-
-	rta_buf = (void *) rtmmsg + NLMSG_ALIGN(sizeof(struct ifinfomsg));
-
-	rta_buf += rta_add_data(rta_buf, IFLA_ADDRESS, (void *) addr, 6);
-
-	id = l_netlink_send(rtnl, RTM_SETLINK, 0, rtmmsg,
-					rta_buf - (void *) rtmmsg,
-					cb, user_data, destroy);
-	l_free(rtmmsg);
-
-	return id;
-}
-
-uint32_t rtnl_set_powered(struct l_netlink *rtnl, int ifindex, bool powered,
-				l_netlink_command_func_t cb, void *user_data,
-				l_netlink_destroy_func_t destroy)
-{
-	struct ifinfomsg *rtmmsg;
-	size_t bufsize;
-	uint32_t id;
-
-	bufsize = NLMSG_ALIGN(sizeof(struct ifinfomsg));
-
-	rtmmsg = l_malloc(bufsize);
-	memset(rtmmsg, 0, bufsize);
-
-	rtmmsg->ifi_family = AF_UNSPEC;
-	rtmmsg->ifi_index = ifindex;
-	rtmmsg->ifi_change = IFF_UP;
-	rtmmsg->ifi_flags = powered ? IFF_UP : 0;
-
-	id = l_netlink_send(rtnl, RTM_SETLINK, 0, rtmmsg, bufsize,
-					cb, user_data, destroy);
-	l_free(rtmmsg);
-
-	return id;
-}
-
-void rtnl_ifaddr_extract(const struct ifaddrmsg *ifa, int bytes,
-				char **label, char **ip, char **broadcast)
-{
-	struct in_addr in_addr;
-	struct rtattr *attr;
-
-	for (attr = IFA_RTA(ifa); RTA_OK(attr, bytes);
-						attr = RTA_NEXT(attr, bytes)) {
-		switch (attr->rta_type) {
-		case IFA_LOCAL:
-			if (!ip)
-				break;
-
-			in_addr = *((struct in_addr *) RTA_DATA(attr));
-			*ip = l_strdup(inet_ntoa(in_addr));
-
-			break;
-		case IFA_BROADCAST:
-			if (!broadcast)
-				break;
-
-			in_addr = *((struct in_addr *) RTA_DATA(attr));
-			*broadcast = l_strdup(inet_ntoa(in_addr));
-
-			break;
-		case IFA_LABEL:
-			if (!label)
-				break;
-
-			*label = l_strdup(RTA_DATA(attr));
-			break;
-		}
-	}
-}
-
-uint32_t rtnl_ifaddr_get(struct l_netlink *rtnl, l_netlink_command_func_t cb,
-					void *user_data,
-					l_netlink_destroy_func_t destroy)
-{
-	struct ifaddrmsg *rtmmsg;
-	uint32_t id;
-
-	rtmmsg = l_malloc(sizeof(struct ifaddrmsg));
-	memset(rtmmsg, 0, sizeof(struct ifaddrmsg));
-
-	rtmmsg->ifa_family = AF_INET;
-
-	id = l_netlink_send(rtnl, RTM_GETADDR, NLM_F_DUMP, rtmmsg,
-				sizeof(struct ifaddrmsg), cb, user_data,
-				destroy);
-
-	l_free(rtmmsg);
-
-	return id;
-}
-
-static uint32_t rtnl_ifaddr_change(struct l_netlink *rtnl, uint16_t nlmsg_type,
-					int ifindex, uint8_t prefix_len,
-					const char *ip, const char *broadcast,
-					l_netlink_command_func_t
-					cb, void *user_data,
-					l_netlink_destroy_func_t destroy)
-{
-	struct ifaddrmsg *rtmmsg;
-	struct in_addr in_addr;
-	void *rta_buf;
-	size_t bufsize;
-	uint32_t id;
-
-	bufsize = NLMSG_ALIGN(sizeof(struct ifaddrmsg)) +
-					RTA_SPACE(sizeof(struct in_addr)) +
-					RTA_SPACE(sizeof(struct in_addr));
-
-	rtmmsg = l_malloc(bufsize);
-	memset(rtmmsg, 0, bufsize);
-
-	rtmmsg->ifa_index = ifindex;
-	rtmmsg->ifa_family = AF_INET;
-	rtmmsg->ifa_flags = IFA_F_PERMANENT;
-	rtmmsg->ifa_scope = RT_SCOPE_UNIVERSE;
-	rtmmsg->ifa_prefixlen = prefix_len;
-
-	rta_buf = (void *) rtmmsg + NLMSG_ALIGN(sizeof(struct ifaddrmsg));
-
-	if (inet_pton(AF_INET, ip, &in_addr) < 1) {
-		l_free(rtmmsg);
-		return 0;
-	}
-
-	rta_buf += rta_add_data(rta_buf, IFA_LOCAL, &in_addr,
-							sizeof(struct in_addr));
-
-	if (broadcast) {
-		if (inet_pton(AF_INET, broadcast, &in_addr) < 1) {
-			l_free(rtmmsg);
-			return 0;
-		}
-	} else {
-		in_addr.s_addr = in_addr.s_addr |
-					htonl(0xFFFFFFFFLU >> prefix_len);
-	}
-
-	rta_buf += rta_add_data(rta_buf, IFA_BROADCAST, &in_addr,
-							sizeof(struct in_addr));
-
-	id = l_netlink_send(rtnl, nlmsg_type, 0, rtmmsg,
-						rta_buf - (void *) rtmmsg, cb,
-						user_data, destroy);
-	l_free(rtmmsg);
-
-	return id;
-}
-
-uint32_t rtnl_ifaddr_add(struct l_netlink *rtnl, int ifindex,
-				uint8_t prefix_len, const char *ip,
-				const char *broadcast,
-				l_netlink_command_func_t cb, void *user_data,
-				l_netlink_destroy_func_t destroy)
-{
-	return rtnl_ifaddr_change(rtnl, RTM_NEWADDR, ifindex, prefix_len, ip,
-					broadcast, cb, user_data, destroy);
-}
-
-uint32_t rtnl_ifaddr_delete(struct l_netlink *rtnl, int ifindex,
-				uint8_t prefix_len, const char *ip,
-				const char *broadcast,
-				l_netlink_command_func_t cb, void *user_data,
-				l_netlink_destroy_func_t destroy)
-{
-	return rtnl_ifaddr_change(rtnl, RTM_DELADDR, ifindex, prefix_len, ip,
-					broadcast, cb, user_data, destroy);
-}
-
-void rtnl_route_extract_ipv4(const struct rtmsg *rtmsg, uint32_t len,
-				uint32_t *ifindex, char **dst, char **gateway,
-				char **src)
-{
-	struct in_addr in_addr;
-	struct rtattr *attr;
-
-	for (attr = RTM_RTA(rtmsg); RTA_OK(attr, len);
-						attr = RTA_NEXT(attr, len)) {
-		switch (attr->rta_type) {
-		case RTA_DST:
-			if (!dst)
-				break;
-
-			in_addr = *((struct in_addr *) RTA_DATA(attr));
-			*dst = l_strdup(inet_ntoa(in_addr));
-
-			break;
-		case RTA_GATEWAY:
-			if (!gateway)
-				break;
-
-			in_addr = *((struct in_addr *) RTA_DATA(attr));
-			*gateway = l_strdup(inet_ntoa(in_addr));
-
-			break;
-		case RTA_PREFSRC:
-			if (!src)
-				break;
-
-			in_addr = *((struct in_addr *) RTA_DATA(attr));
-			*src = l_strdup(inet_ntoa(in_addr));
-
-			break;
-		case RTA_OIF:
-			if (!ifindex)
-				break;
-
-			*ifindex = *((uint32_t *) RTA_DATA(attr));
-			break;
-		}
-	}
-}
-
-uint32_t rtnl_route_dump_ipv4(struct l_netlink *rtnl,
-				l_netlink_command_func_t cb, void *user_data,
-				l_netlink_destroy_func_t destroy)
-{
-	struct rtmsg rtmsg;
-
-	memset(&rtmsg, 0, sizeof(struct rtmsg));
-	rtmsg.rtm_family = AF_INET;
-
-	return l_netlink_send(rtnl, RTM_GETROUTE, NLM_F_DUMP, &rtmsg,
-					sizeof(struct rtmsg), cb, user_data,
-					destroy);
-}
-
-static uint32_t rtnl_route_add(struct l_netlink *rtnl, int ifindex,
-					uint8_t scope, uint8_t dst_len,
-					const char *dst, const char *gateway,
-					const char *src,
-					uint32_t priority_offset, uint8_t proto,
-					l_netlink_command_func_t cb,
-					void *user_data,
-					l_netlink_destroy_func_t destroy)
-{
-	L_AUTO_FREE_VAR(struct rtmsg *, rtmmsg) = NULL;
-	struct in_addr in_addr;
-	size_t bufsize;
-	void *rta_buf;
-	uint16_t flags;
-
-	if (!dst && !gateway)
-		return 0;
-
-	bufsize = NLMSG_ALIGN(sizeof(struct rtmsg)) +
-			RTA_SPACE(sizeof(uint32_t)) +
-			(priority_offset ? RTA_SPACE(sizeof(uint32_t)) : 0) +
-			(gateway ? RTA_SPACE(sizeof(struct in_addr)) : 0) +
-			(src ? RTA_SPACE(sizeof(struct in_addr)) : 0) +
-			(dst ? RTA_SPACE(sizeof(struct in_addr)) : 0);
-
-	rtmmsg = l_malloc(bufsize);
-	memset(rtmmsg, 0, bufsize);
-
-	rtmmsg->rtm_family = AF_INET;
-	rtmmsg->rtm_table = RT_TABLE_MAIN;
-	rtmmsg->rtm_protocol = proto;
-	rtmmsg->rtm_type = RTN_UNICAST;
-	rtmmsg->rtm_scope = scope;
-
-	flags = NLM_F_CREATE | NLM_F_REPLACE;
-
-	rta_buf = (void *) rtmmsg + NLMSG_ALIGN(sizeof(struct rtmsg));
-	rta_buf += rta_add_u32(rta_buf, RTA_OIF, ifindex);
-
-	if (priority_offset)
-		rta_buf += rta_add_u32(rta_buf, RTA_PRIORITY,
-						priority_offset + ifindex);
-
-	if (dst) {
-		if (inet_pton(AF_INET, dst, &in_addr) < 1)
-			return 0;
-
-		rtmmsg->rtm_dst_len = dst_len;
-		rta_buf += rta_add_data(rta_buf, RTA_DST, &in_addr,
-							sizeof(struct in_addr));
-	}
-
-	if (gateway) {
-		if (inet_pton(AF_INET, gateway, &in_addr) < 1)
-			return 0;
-
-		rta_buf += rta_add_data(rta_buf, RTA_GATEWAY, &in_addr,
-							sizeof(struct in_addr));
-	}
-
-	if (src) {
-		if (inet_pton(AF_INET, src, &in_addr) < 1)
-			return 0;
-
-		rtmmsg->rtm_src_len = 32;
-		rta_buf += rta_add_data(rta_buf, RTA_PREFSRC, &in_addr,
-							sizeof(struct in_addr));
-	}
-
-	return l_netlink_send(rtnl, RTM_NEWROUTE, flags, rtmmsg,
-				rta_buf - (void *) rtmmsg, cb, user_data,
-								destroy);
-}
-
-uint32_t rtnl_route_ipv4_add_connected(struct l_netlink *rtnl, int ifindex,
-					uint8_t dst_len, const char *dst,
-					const char *src, uint8_t proto,
-					l_netlink_command_func_t cb,
-					void *user_data,
-					l_netlink_destroy_func_t destroy)
-{
-	return rtnl_route_add(rtnl, ifindex, RT_SCOPE_LINK, dst_len, dst, NULL,
-				src, 0, proto, cb, user_data, destroy);
-}
-
-uint32_t rtnl_route_ipv4_add_gateway(struct l_netlink *rtnl, int ifindex,
-					const char *gateway, const char *src,
-					uint32_t priority_offset,
-					uint8_t proto,
-					l_netlink_command_func_t cb,
-					void *user_data,
-					l_netlink_destroy_func_t destroy)
-{
-	return rtnl_route_add(rtnl, ifindex, RT_SCOPE_UNIVERSE, 0, NULL,
-				gateway, src, priority_offset, proto, cb,
-				user_data, destroy);
-}
-
-void rtnl_ifaddr_ipv6_extract(const struct ifaddrmsg *ifa, int len, char **ip)
-{
-	struct in6_addr in6_addr;
-	struct rtattr *attr;
-	char address[128];
-
-	for (attr = IFA_RTA(ifa); RTA_OK(attr, len);
-						attr = RTA_NEXT(attr, len)) {
-		switch (attr->rta_type) {
-		case IFA_ADDRESS:
-			if (!ip)
-				break;
-
-			memcpy(&in6_addr.s6_addr, RTA_DATA(attr),
-						sizeof(in6_addr.s6_addr));
-
-			if (!inet_ntop(AF_INET6, &in6_addr, address,
-							INET6_ADDRSTRLEN)) {
-
-				l_error("rtnl: Failed to extract IPv6 address");
-				break;
-			}
-
-			*ip = l_strdup(address);
-
-			break;
-		}
-	}
-}
-
-uint32_t rtnl_ifaddr_ipv6_get(struct l_netlink *rtnl,
-				l_netlink_command_func_t cb, void *user_data,
-				l_netlink_destroy_func_t destroy)
-{
-	struct ifaddrmsg *rtmmsg;
-	uint32_t id;
-
-	rtmmsg = l_malloc(sizeof(struct ifaddrmsg));
-	memset(rtmmsg, 0, sizeof(struct ifaddrmsg));
-
-	rtmmsg->ifa_family = AF_INET6;
-
-	id = l_netlink_send(rtnl, RTM_GETADDR, NLM_F_DUMP, rtmmsg,
-				sizeof(struct ifaddrmsg), cb, user_data,
-				destroy);
-
-	l_free(rtmmsg);
-
-	return id;
-}
-
-static uint32_t rtnl_ifaddr_ipv6_change(struct l_netlink *rtnl,
-					uint16_t nlmsg_type,
-					int ifindex, uint8_t prefix_len,
-					const char *ip,
-					l_netlink_command_func_t cb,
-					void *user_data,
-					l_netlink_destroy_func_t destroy)
-{
-	struct ifaddrmsg *rtmmsg;
-	struct in6_addr in6_addr;
-	void *rta_buf;
-	size_t bufsize;
-	uint32_t id;
-
-	bufsize = NLMSG_ALIGN(sizeof(struct ifaddrmsg)) +
-					RTA_SPACE(sizeof(struct in6_addr));
-
-	rtmmsg = l_malloc(bufsize);
-	memset(rtmmsg, 0, bufsize);
-
-	rtmmsg->ifa_index = ifindex;
-	rtmmsg->ifa_family = AF_INET6;
-	rtmmsg->ifa_flags = IFA_F_PERMANENT;
-	rtmmsg->ifa_scope = RT_SCOPE_UNIVERSE;
-	rtmmsg->ifa_prefixlen = prefix_len;
-
-	rta_buf = (void *) rtmmsg + NLMSG_ALIGN(sizeof(struct ifaddrmsg));
-
-	if (inet_pton(AF_INET6, ip, &in6_addr) < 1) {
-		l_free(rtmmsg);
-		return 0;
-	}
-
-	rta_buf += rta_add_data(rta_buf, IFA_LOCAL, &in6_addr,
-						sizeof(struct in6_addr));
-
-	id = l_netlink_send(rtnl, nlmsg_type, 0, rtmmsg,
-						rta_buf - (void *) rtmmsg, cb,
-						user_data, destroy);
-	l_free(rtmmsg);
-
-	return id;
-}
-
-uint32_t rtnl_ifaddr_ipv6_add(struct l_netlink *rtnl, int ifindex,
-				uint8_t prefix_len, const char *ip,
-				l_netlink_command_func_t cb, void *user_data,
-				l_netlink_destroy_func_t destroy)
-{
-	return rtnl_ifaddr_ipv6_change(rtnl, RTM_NEWADDR, ifindex, prefix_len,
-						ip, cb, user_data, destroy);
-}
-
-uint32_t rtnl_ifaddr_ipv6_delete(struct l_netlink *rtnl, int ifindex,
-					uint8_t prefix_len, const char *ip,
-					l_netlink_command_func_t cb,
-					void *user_data,
-					l_netlink_destroy_func_t destroy)
-{
-	return rtnl_ifaddr_ipv6_change(rtnl, RTM_DELADDR, ifindex, prefix_len,
-						ip, cb, user_data, destroy);
-}
-
-static uint32_t rtnl_route_ipv6_change(struct l_netlink *rtnl,
-					uint16_t nlmsg_type, int ifindex,
-					const char *gateway,
-					uint32_t priority_offset,
-					uint8_t proto,
-					l_netlink_command_func_t cb,
-					void *user_data,
-					l_netlink_destroy_func_t destroy)
-{
-	L_AUTO_FREE_VAR(struct rtmsg *, rtmmsg) = NULL;
-	struct in6_addr in6_addr;
-	size_t bufsize;
-	void *rta_buf;
-	uint16_t flags;
-
-	if (!gateway)
-		return 0;
-
-	bufsize = NLMSG_ALIGN(sizeof(struct rtmsg)) +
-			RTA_SPACE(sizeof(uint32_t)) +
-			(priority_offset ? RTA_SPACE(sizeof(uint32_t)) : 0) +
-			RTA_SPACE(sizeof(struct in6_addr));
-
-	rtmmsg = l_malloc(bufsize);
-	memset(rtmmsg, 0, bufsize);
-
-	rtmmsg->rtm_family = AF_INET6;
-	rtmmsg->rtm_table = RT_TABLE_MAIN;
-	rtmmsg->rtm_protocol = proto;
-	rtmmsg->rtm_type = RTN_UNICAST;
-	rtmmsg->rtm_scope = RT_SCOPE_UNIVERSE;
-
-	flags = NLM_F_CREATE | NLM_F_REPLACE;
-
-	rta_buf = (void *) rtmmsg + NLMSG_ALIGN(sizeof(struct rtmsg));
-	rta_buf += rta_add_u32(rta_buf, RTA_OIF, ifindex);
-
-	if (priority_offset)
-		rta_buf += rta_add_u32(rta_buf, RTA_PRIORITY,
-						priority_offset + ifindex);
-
-	if (gateway) {
-		if (inet_pton(AF_INET6, gateway, &in6_addr) < 1)
-			return 0;
-
-		rta_buf += rta_add_data(rta_buf, RTA_GATEWAY, &in6_addr,
-						sizeof(struct in6_addr));
-	}
-
-	return l_netlink_send(rtnl, nlmsg_type, flags, rtmmsg,
-				rta_buf - (void *) rtmmsg, cb, user_data,
-								destroy);
-}
-
-uint32_t rtnl_route_ipv6_add_gateway(struct l_netlink *rtnl, int ifindex,
-					const char *gateway,
-					uint32_t priority_offset,
-					uint8_t proto,
-					l_netlink_command_func_t cb,
-					void *user_data,
-					l_netlink_destroy_func_t destroy)
-{
-	return rtnl_route_ipv6_change(rtnl, RTM_NEWROUTE, ifindex, gateway,
-					priority_offset, proto, cb,
-					user_data, destroy);
-}
-
-uint32_t rtnl_route_ipv6_delete_gateway(struct l_netlink *rtnl, int ifindex,
-					const char *gateway,
-					uint32_t priority_offset,
-					uint8_t proto,
-					l_netlink_command_func_t cb,
-					void *user_data,
-					l_netlink_destroy_func_t destroy)
-{
-	return rtnl_route_ipv6_change(rtnl, RTM_DELROUTE, ifindex, gateway,
-					priority_offset, proto, cb,
-					user_data, destroy);
-}
diff --git a/src/rtnlutil.h b/src/rtnlutil.h
deleted file mode 100644
index dc0537831dcd..000000000000
--- a/src/rtnlutil.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- *
- *  Wireless daemon for Linux
- *
- *  Copyright (C) 2019  Intel Corporation. All rights reserved.
- *
- *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public
- *  License as published by the Free Software Foundation; either
- *  version 2.1 of the License, or (at your option) any later version.
- *
- *  This library is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this library; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-uint32_t rtnl_set_linkmode_and_operstate(struct l_netlink *rtnl, int ifindex,
-					uint8_t linkmode, uint8_t operstate,
-					l_netlink_command_func_t cb,
-					void *user_data,
-					l_netlink_destroy_func_t destroy);
-
-uint32_t rtnl_set_mac(struct l_netlink *rtnl, int ifindex,
-					const uint8_t addr[static 6],
-					l_netlink_command_func_t cb,
-					void *user_data,
-					l_netlink_destroy_func_t destroy);
-
-uint32_t rtnl_set_powered(struct l_netlink *rtnl, int ifindex, bool powered,
-				l_netlink_command_func_t cb, void *user_data,
-				l_netlink_destroy_func_t destroy);
-
-void rtnl_ifaddr_extract(const struct ifaddrmsg *ifa, int bytes,
-				char **label, char **ip, char **broadcast);
-uint32_t rtnl_ifaddr_get(struct l_netlink *rtnl, l_netlink_command_func_t cb,
-				void *user_data,
-				l_netlink_destroy_func_t destroy);
-uint32_t rtnl_ifaddr_add(struct l_netlink *rtnl, int ifindex,
-				uint8_t prefix_len, const char *ip,
-				const char *broadcast,
-				l_netlink_command_func_t cb, void *user_data,
-				l_netlink_destroy_func_t destroy);
-uint32_t rtnl_ifaddr_delete(struct l_netlink *rtnl, int ifindex,
-				uint8_t prefix_len, const char *ip,
-				const char *broadcast,
-				l_netlink_command_func_t cb, void *user_data,
-				l_netlink_destroy_func_t destroy);
-
-void rtnl_route_extract_ipv4(const struct rtmsg *rtmsg, uint32_t len,
-				uint32_t *ifindex, char **dst, char **gateway,
-				char **src);
-uint32_t rtnl_route_dump_ipv4(struct l_netlink *rtnl,
-				l_netlink_command_func_t cb, void *user_data,
-				l_netlink_destroy_func_t destroy);
-uint32_t rtnl_route_ipv4_add_connected(struct l_netlink *rtnl, int ifindex,
-					uint8_t dst_len, const char *dst,
-					const char *src, uint8_t proto,
-					l_netlink_command_func_t cb,
-					void *user_data,
-					l_netlink_destroy_func_t destroy);
-uint32_t rtnl_route_ipv4_add_gateway(struct l_netlink *rtnl, int ifindex,
-					const char *gateway, const char *src,
-					uint32_t priority_offset,
-					uint8_t proto,
-					l_netlink_command_func_t cb,
-					void *user_data,
-					l_netlink_destroy_func_t destroy);
-
-void rtnl_ifaddr_ipv6_extract(const struct ifaddrmsg *ifa, int bytes,
-								char **ip);
-uint32_t rtnl_ifaddr_ipv6_get(struct l_netlink *rtnl,
-				l_netlink_command_func_t cb,
-				void *user_data,
-				l_netlink_destroy_func_t destroy);
-uint32_t rtnl_ifaddr_ipv6_add(struct l_netlink *rtnl, int ifindex,
-				uint8_t prefix_len, const char *ip,
-				l_netlink_command_func_t cb, void *user_data,
-				l_netlink_destroy_func_t destroy);
-uint32_t rtnl_ifaddr_ipv6_delete(struct l_netlink *rtnl, int ifindex,
-					uint8_t prefix_len, const char *ip,
-					l_netlink_command_func_t cb,
-					void *user_data,
-					l_netlink_destroy_func_t destroy);
-uint32_t rtnl_route_ipv6_add_gateway(struct l_netlink *rtnl, int ifindex,
-					const char *gateway,
-					uint32_t priority_offset,
-					uint8_t proto,
-					l_netlink_command_func_t cb,
-					void *user_data,
-					l_netlink_destroy_func_t destroy);
-uint32_t rtnl_route_ipv6_delete_gateway(struct l_netlink *rtnl, int ifindex,
-					const char *gateway,
-					uint32_t priority_offset,
-					uint8_t proto,
-					l_netlink_command_func_t cb,
-					void *user_data,
-					l_netlink_destroy_func_t destroy);
-- 
2.25.0

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 0/3] Update to ell's rntl API
  2020-02-15  9:48 [PATCH 0/3] Update to ell's rntl API Daniel Wagner
                   ` (2 preceding siblings ...)
  2020-02-15  9:48 ` [PATCH 3/3] rtnlutil: Remove used rtnlutil Daniel Wagner
@ 2020-02-17 15:09 ` Denis Kenzior
  3 siblings, 0 replies; 5+ messages in thread
From: Denis Kenzior @ 2020-02-17 15:09 UTC (permalink / raw)
  To: iwd

[-- Attachment #1: Type: text/plain, Size: 293 bytes --]

Hi Daniel,

On 2/15/20 3:48 AM, Daniel Wagner wrote:
> The rtnlutil code has been moved to ell, let's use it.
> 
> Daniel Wagner (3):
>    netdev: Use ell's rtnl APIs
>    netconfig: Use ell's rtnl API
>    rtnlutil: Remove used rtnlutil
> 

All applied, thanks.

Regards,
-Denis

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-02-17 15:09 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-15  9:48 [PATCH 0/3] Update to ell's rntl API Daniel Wagner
2020-02-15  9:48 ` [PATCH 1/3] netdev: Use ell's rtnl APIs Daniel Wagner
2020-02-15  9:48 ` [PATCH 2/3] netconfig: Use ell's rtnl API Daniel Wagner
2020-02-15  9:48 ` [PATCH 3/3] rtnlutil: Remove used rtnlutil Daniel Wagner
2020-02-17 15:09 ` [PATCH 0/3] Update to ell's rntl API Denis Kenzior

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.