!38 update to libnl-3.7.0
From: @chengyechun Reviewed-by: @seuzw Signed-off-by: @seuzw
This commit is contained in:
commit
85cb15fe9a
@ -1,44 +0,0 @@
|
||||
From 92d64e75d74aa7343769f9923d0a9294caa0cadd Mon Sep 17 00:00:00 2001
|
||||
From: chengyechun <chengyechun1@huawei.com>
|
||||
Date: Thu, 16 Dec 2021 22:13:04 +0800
|
||||
Subject: [PATCH] add a test:test add route
|
||||
|
||||
---
|
||||
tests/test-add-route.c | 25 +++++++++++++++++++++++++
|
||||
1 file changed, 25 insertions(+)
|
||||
create mode 100644 tests/test-add-route.c
|
||||
|
||||
diff --git a/tests/test-add-route.c b/tests/test-add-route.c
|
||||
new file mode 100644
|
||||
index 0000000..b93db60
|
||||
--- /dev/null
|
||||
+++ b/tests/test-add-route.c
|
||||
@@ -0,0 +1,25 @@
|
||||
+#include <netlink/cli/utils.h>
|
||||
+#include <netlink/cli/route.h>
|
||||
+#include <netlink/cli/link.h>
|
||||
+#include <linux/netlink.h>
|
||||
+
|
||||
+
|
||||
+int main(int argc, char *argv[])
|
||||
+{
|
||||
+ struct nl_sock *sk;
|
||||
+ struct rtnl_route *route;
|
||||
+ struct nl_cache *link_cache, *route_cache;
|
||||
+ char dst_addr[] = "10.10.10.0/23";
|
||||
+ char nexthop[] = "dev=eth0, via=10.10.10.10.1";
|
||||
+ int err;
|
||||
+ sk = nl_cli_alloc_socket();
|
||||
+ nl_cli_connect(sk, NETLINK_ROUTE);
|
||||
+ link_cache = nl_cli_link_alloc_cache(sk);
|
||||
+ route_cache = nl_cli_route_alloc_cache(sk);
|
||||
+ route = nl_cli_route_alloc();
|
||||
+ nl_Cli_route_parse_dst(route, dst_addr);
|
||||
+ nl_cli_route_parse_nexthop(route, nexthop, link_cache);
|
||||
+ if ((err = rtnl_route_add(sk, route, NLM_F_EXCL)) < 0)
|
||||
+ nl_cli_fatal(err, "Unable to add route: %s", nl_geterror(err));
|
||||
+ return 0;
|
||||
+}
|
||||
--
|
||||
2.23.0
|
||||
|
||||
@ -1,533 +0,0 @@
|
||||
From f595a06ee2e7048b02bbdd4d69a9dd160f1819ef Mon Sep 17 00:00:00 2001
|
||||
From: chengyechun <chengyechun1@huawei.com>
|
||||
Date: Sat, 18 Dec 2021 22:03:11 +0800
|
||||
Subject: [PATCH] add some tests
|
||||
|
||||
---
|
||||
test-add-rule.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++
|
||||
test-addr-add.c | 23 ++++++++++++++++++++
|
||||
test-addr-delete.c | 23 ++++++++++++++++++++
|
||||
test-class-add.c | 40 +++++++++++++++++++++++++++++++++++
|
||||
test-class-delete.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
test-genl-connect.c | 29 ++++++++++++++++++++++++++
|
||||
test-link.c | 50 ++++++++++++++++++++++++++++++++++++++++++++
|
||||
test-neigh-add.c | 26 +++++++++++++++++++++++
|
||||
test-neigh-delete.c | 26 +++++++++++++++++++++++
|
||||
test-qdisc-add.c | 35 +++++++++++++++++++++++++++++++
|
||||
test-qdisc-delete.c | 35 +++++++++++++++++++++++++++++++
|
||||
test-route-delete.c | 25 ++++++++++++++++++++++
|
||||
13 files changed, 434 insertions(+), 1 deletion(-)
|
||||
create mode 100644 test-add-rule.c
|
||||
create mode 100644 test-addr-add.c
|
||||
create mode 100644 test-addr-delete.c
|
||||
create mode 100644 test-class-add.c
|
||||
create mode 100644 test-class-delete.c
|
||||
create mode 100644 test-genl-connect.c
|
||||
create mode 100644 test-link.c
|
||||
create mode 100644 test-neigh-add.c
|
||||
create mode 100644 test-neigh-delete.c
|
||||
create mode 100644 test-qdisc-add.c
|
||||
create mode 100644 test-qdisc-delete.c
|
||||
create mode 100644 test-route-delete.c
|
||||
|
||||
diff --git a/test-add-rule.c b/test-add-rule.c
|
||||
new file mode 100644
|
||||
index 0000000..f18a520
|
||||
--- /dev/null
|
||||
+++ b/test-add-rule.c
|
||||
@@ -0,0 +1,54 @@
|
||||
+#include <netlink/route/rule.h>
|
||||
+#include <netlink/netlink.h>
|
||||
+#include <linux/netlink.h>
|
||||
+
|
||||
+
|
||||
+#define IPv6
|
||||
+
|
||||
+int main(int argc, char *argv[])
|
||||
+{
|
||||
+ struct nl_sock *sk;
|
||||
+ struct rtnl_rule *rule;
|
||||
+ struct nl_addr *src, *dst;
|
||||
+ char baddr[4] = { 0x1, 0x2, 0x3, 0x4 };
|
||||
+ char baddr2[6] = { 0x1, 0x2, 0x3, 0x4, 0x5, 0x6 };
|
||||
+ int err;
|
||||
+
|
||||
+ src = nl_addr_build(AF_UNSPEC, baddr, 4);
|
||||
+ dst = nl_addr_build(AF_UNSPEC, baddr2, 6);
|
||||
+
|
||||
+ sk = nl_socket_alloc();
|
||||
+ if ((err = nl_connect(sk, NETLINK_ROUTE)) < 0) {
|
||||
+ nl_perror(err, "Unable to connect socket");
|
||||
+ return err;
|
||||
+ }
|
||||
+ rule = rtnl_rule_alloc();
|
||||
+ rtnl_rule_set_family(rule, AF_INET);
|
||||
+ rtnl_rule_set_prio(rule, 12);
|
||||
+ rtnl_rule_set_mark(rule, 12);
|
||||
+ rtnl_rule_set_mask(rule, 16);
|
||||
+ rtnl_rule_set_table(rule, 254);
|
||||
+ rtnl_rule_set_dsfield(rule, 4);
|
||||
+ rtnl_rule_set_src(rule, src);
|
||||
+ rtnl_rule_set_dst(rule, dst);
|
||||
+ rtnl_rule_set_iif(rule, "enp2s2");
|
||||
+ rtnl_rule_set_oif(rule, "enp2s7")
|
||||
+ rtnl_rule_set_action(rule, 2);
|
||||
+ rtnl_rule_set_l3mdev(rule, 1);
|
||||
+ rtnl_rule_set_protocol(rule, 4);
|
||||
+ rtnl_rule_get_family(rule);
|
||||
+ rtnl_rule_get_prio(rule);
|
||||
+ rtnl_rule_get_mark(rule);
|
||||
+ rtnl_rule_get_mask(rule);
|
||||
+ rtnl_rule_get_table(rule);
|
||||
+ rtnl_rule_get_dsfield(rule);
|
||||
+ rtnl_rule_get_src(rule);
|
||||
+ rtnl_rule_get_dst(rule);
|
||||
+ rtnl_rule_get_iif(rule);
|
||||
+ rtnl_rule_get_oif(rule)
|
||||
+ rtnl_rule_get_action(rule);
|
||||
+ rtnl_rule_get_l3mdev(rule);
|
||||
+ rtnl_rule_get_protocol(rule);
|
||||
+ rtnl_rule_add(sk, rule, 4);
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/test-addr-add.c b/test-addr-add.c
|
||||
new file mode 100644
|
||||
index 0000000..e7a8483
|
||||
--- /dev/null
|
||||
+++ b/test-addr-add.c
|
||||
@@ -0,0 +1,23 @@
|
||||
+#include <netlink/cli/utils.h>
|
||||
+#include <netlink/cli/addr.h>
|
||||
+#include <netlink/cli/link.h>
|
||||
+#include <linux/netlink.h>
|
||||
+
|
||||
+
|
||||
+int main(int argc, char *argv[])
|
||||
+{
|
||||
+ struct nl_sock *sock;
|
||||
+ struct rtnl_addr *addr;
|
||||
+ struct nl_cache *link_cache;
|
||||
+ int err, nlflags = NLM_F_CREATE;
|
||||
+ sock = nl_cli_alloc_socket();
|
||||
+ nl_cli_connect(sock, NETLINK_ROUTE);
|
||||
+ link_cache = nl_cli_link_alloc_cache(sock);
|
||||
+ addr = nl_cli_addr_alloc();
|
||||
+ nl_cli_addr_parse_local(addr, "10.10.16.2");
|
||||
+ nl_cli_addr_parse_dev(addr, link_cache, "eth0");
|
||||
+ nl_cli_addr_parse_family(addr, "AF_INET");
|
||||
+ if ((err = rtnl_addr_add(sock, addr, nlflags)) < 0)
|
||||
+ nl_cli_fatal(err, "Unable to add address: %s", nl_geterror(err));
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/test-addr-delete.c b/test-addr-delete.c
|
||||
new file mode 100644
|
||||
index 0000000..e1e392b
|
||||
--- /dev/null
|
||||
+++ b/test-addr-delete.c
|
||||
@@ -0,0 +1,23 @@
|
||||
+#include <netlink/cli/utils.h>
|
||||
+#include <netlink/cli/addr.h>
|
||||
+#include <netlink/cli/link.h>
|
||||
+#include <linux/netlink.h>
|
||||
+
|
||||
+
|
||||
+int main(int argc, char *argv[])
|
||||
+{
|
||||
+ struct nl_sock *sock;
|
||||
+ struct rtnl_addr *addr;
|
||||
+ struct nl_cache *link_cache;
|
||||
+ int err, nlflags = NLM_F_CREATE;
|
||||
+ sock = nl_cli_alloc_socket();
|
||||
+ nl_cli_connect(sock, NETLINK_ROUTE);
|
||||
+ link_cache = nl_cli_link_alloc_cache(sock);
|
||||
+ addr = nl_cli_addr_alloc();
|
||||
+ nl_cli_addr_parse_local(addr, "10.10.16.2");
|
||||
+ nl_cli_addr_parse_dev(addr, link_cache, "eth0");
|
||||
+ nl_cli_addr_parse_family(addr, "AF_INET");
|
||||
+ if ((err = rtnl_addr_delete(sock, addr, nlflags)) < 0)
|
||||
+ nl_cli_fatal(err, "Unable to delete address: %s", nl_geterror(err));
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/test-class-add.c b/test-class-add.c
|
||||
new file mode 100644
|
||||
index 0000000..3ab3449
|
||||
--- /dev/null
|
||||
+++ b/test-class-add.c
|
||||
@@ -0,0 +1,40 @@
|
||||
+#include <netlink/cli/utils.h>
|
||||
+#include <netlink/cli/tc.h>
|
||||
+#include <netlink/cli/qdisc.h>
|
||||
+#include <netlink/cli/link.h>
|
||||
+#include <netlink-private/route/tc-api.h>
|
||||
+#include <linux/netlink.h>
|
||||
+
|
||||
+
|
||||
+int main(int argc, char *argv[])
|
||||
+{
|
||||
+ struct nl_sock *sk;
|
||||
+ struct rtnl_class *class;
|
||||
+ struct rtnl_tc *tc;
|
||||
+ struct nl_cache *link_cache;
|
||||
+ struct nl_cli_tc_module *tm;
|
||||
+ struct rtnl_tc_ops *ops;
|
||||
+ int err, flags = NLM_C_CREATE | NLM_F_EXCL;
|
||||
+ char kind[] = "htb";
|
||||
+ char *rate[] = {"--rate=100mbit"};
|
||||
+ sk = nl_cli_alloc_socket();
|
||||
+ nl_cli_connect(sk, NETLINK_ROUTE);
|
||||
+ link_cache = nl_cli_link_alloc_cache(sk);
|
||||
+ class = nl_cli_class_alloc();
|
||||
+ tc = (struct rtnl_tc *) class;
|
||||
+ nl_cli_tc_prase_dev(tc, link_cache, "eth0");
|
||||
+ nl_cli_tc_parse_parent(tc, "root");
|
||||
+ if (!rtnl_tc_get_ifindex(tc))
|
||||
+ nl_cli_fatal(EINVAL, "You must specify a network device XXX");
|
||||
+ if (!rtnl_tc_get_parent(tc))
|
||||
+ nl_cli_fatal(EINVAL, "You must specify a parent XXX");
|
||||
+ rtnl_tc_set_kind(tc, kind);
|
||||
+ if (!(ops = rtnl_tc_get_ops(tc)))
|
||||
+ nl_cli_fatal(ENOENT, "Unknown class %s", kind);
|
||||
+ if (!(tm = nl_cli_tc_lookup(ops)))
|
||||
+ nl_cli_fatal(ENOTSUP, "class type %s not supported", kind);
|
||||
+ tm->tm_parse_argv(tc, 1, rate);
|
||||
+ if ((err = rtnl_class_add(sk, class, flags)) < 0)
|
||||
+ nl_cli_fatal(EINVAL, "Unable to add class: %s", nl_geterror(err));
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/test-class-delete.c b/test-class-delete.c
|
||||
new file mode 100644
|
||||
index 0000000..0443b96
|
||||
--- /dev/null
|
||||
+++ b/test-class-delete.c
|
||||
@@ -0,0 +1,60 @@
|
||||
+#include <netlink/cli/utils.h>
|
||||
+#include <netlink/cli/tc.h>
|
||||
+#include <netlink/cli/qdisc.h>
|
||||
+#include <netlink/cli/link.h>
|
||||
+#include <netlink-private/route/tc-api.h>
|
||||
+#include <linux/netlink.h>
|
||||
+
|
||||
+
|
||||
+static int quiet = 0, default_yes = 0, deleted = 0, interactive = 0;
|
||||
+static struct nl_sock *sock;
|
||||
+
|
||||
+
|
||||
+static void delete_cb(struct nl_object *obj, void *arg)
|
||||
+{
|
||||
+ struct rtnl_class *class = nl_object_priv(obj);
|
||||
+ struct nl_dump_params params = {
|
||||
+ .dp_type = NL_DUMP_LIVE,
|
||||
+ .pd_fd = stdout,
|
||||
+ };
|
||||
+ int err;
|
||||
+ if (interactive && !nl_cli_confirm(obj, ¶ms, default_yes));
|
||||
+ return;
|
||||
+ if ((err = rtnl_class_delete(sock, class)) < 0)
|
||||
+ nl_cli_fatal(err, "Unable to delete class :%s\n", nl_geterror(err));
|
||||
+ if (!quiet){
|
||||
+ printf("deleted\n");
|
||||
+ nl_object_dump(obj, ¶ms);
|
||||
+ };
|
||||
+ deleted++;
|
||||
+}
|
||||
+
|
||||
+int main(int argc, char *argv[])
|
||||
+{
|
||||
+ struct nl_sock *sk;
|
||||
+ struct rtnl_class *class;
|
||||
+ struct rtnl_tc *tc;
|
||||
+ struct nl_cache *link_cache, class_cache;
|
||||
+ struct rtnl_tc_ops *ops;
|
||||
+ struct nl_cli_tc_module *tm;
|
||||
+ char kind[] = "htb";
|
||||
+ sk = nl_cli_alloc_socket();
|
||||
+ nl_cli_connect(sk, NETLINK_ROUTE);
|
||||
+ link_cache = nl_cli_link_alloc_cache(sk);
|
||||
+ class = nl_cli_class_alloc();
|
||||
+ tc = (struct rtnl_tc *) class;
|
||||
+ nl_cli_tc_prase_dev(tc, link_cache, "eth0");
|
||||
+ nl_cli_tc_parse_parent(tc, "root");
|
||||
+ if (!rtnl_tc_get_ifindex(tc))
|
||||
+ nl_cli_fatal(EINVAL, "You must specify a network device XXX");
|
||||
+ if (!rtnl_tc_get_parent(tc))
|
||||
+ nl_cli_fatal(EINVAL, "You must specify a parent XXX");
|
||||
+ rtnl_tc_set_kind(tc, kind);
|
||||
+ if (!(ops = rtnl_tc_get_ops(tc)))
|
||||
+ nl_cli_fatal(ENOENT, "Unknown class %s", kind);
|
||||
+ if (!(tm = nl_cli_tc_lookup(ops)))
|
||||
+ nl_cli_fatal(ENOTSUP, "class type %s not supported", kind);
|
||||
+ class_cache = nl_cli_class_alloc(sk, rtnl_tc_get_ifindex(tc));
|
||||
+ nl_cache_foreach_filter(class_cache, OBJ_CAST(class), delete_b, NULL);
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/test-genl-connect.c b/test-genl-connect.c
|
||||
new file mode 100644
|
||||
index 0000000..f1d9690
|
||||
--- /dev/null
|
||||
+++ b/test-genl-connect.c
|
||||
@@ -0,0 +1,29 @@
|
||||
+#include <linux/genetlink.h>
|
||||
+#include <netlink/socket.h>
|
||||
+#include <netlink/cli/utils.h>
|
||||
+#include <stdio.h>
|
||||
+
|
||||
+
|
||||
+int main(int argc, char *argv[])
|
||||
+{
|
||||
+ struct nl_sock *sk;
|
||||
+ struct nl_cache *family_cache;
|
||||
+ struct nl_dump_params params = {
|
||||
+ .dp_type = NL_DUMP_LINE,
|
||||
+ .dp_fd = stdout,
|
||||
+ };
|
||||
+ int err;
|
||||
+
|
||||
+ sk = nl_socket_alloc();
|
||||
+ if ((err = genl_connect(sk)) < 0)
|
||||
+ printf("Unable create socket: %s", nl_geterror(err));
|
||||
+ nl_socket_enable_auto_ack(sk);
|
||||
+ nl_socket_disable_auto_ack(sk);
|
||||
+ nl_socket_set_buffer_size(sk, 2000, 2000);
|
||||
+ nl_socket_get_fd(sk);
|
||||
+ if ((err = nl_socket_add_membership(sk, 3456)) < 0)
|
||||
+ printf("Unable join group 3456 %s", nl_geterror(err));
|
||||
+ family_cache = nl_cli_alloc_cache(sk, "generic netlink family", genl_ctrl_alloc_cache);
|
||||
+ nl_cache_dump(family_cache, ¶ms);
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/test-link.c b/test-link.c
|
||||
new file mode 100644
|
||||
index 0000000..87af00f
|
||||
--- /dev/null
|
||||
+++ b/test-link.c
|
||||
@@ -0,0 +1,50 @@
|
||||
+#include <netlink/socket.h>
|
||||
+#include <netlink/netlink.h>
|
||||
+#include <netlink/cli/utils.h>
|
||||
+#include <netlink/cli/link.h>
|
||||
+#include <netlink/route/link.h>
|
||||
+#include <unistd.h>
|
||||
+
|
||||
+static int self_def_cb = NL_CB_DEBUG
|
||||
+
|
||||
+int main(int argc, char *argv[])
|
||||
+{
|
||||
+ struct nl_sock *sk;
|
||||
+ struct nl_cache *link_cache;
|
||||
+ struct rtnl_link *link;
|
||||
+ struct nl_addr *addr;
|
||||
+ struct nl_cb *cb;
|
||||
+ int err, ifindex, pid;
|
||||
+ char *buf;
|
||||
+ cb = nl_cb_alloc(self_def_cb);
|
||||
+ if (!(sk = nl_socket_alloc_cb(cb)))
|
||||
+ nl_cli_fatal(ENOBUFS, "Unable to allocate netlink socket");
|
||||
+ nl_cli_connect(sk, NETLINK_ROUTE);
|
||||
+ nl_socket_disable_seq_check(sk);
|
||||
+ nl_socket_disable_auto_ack(sk);
|
||||
+ pid = getpid();
|
||||
+ nl_socket_set_local_port(sk, pid);
|
||||
+ nl_join_groups(sk, pid);
|
||||
+ nl_socket_drop_membership(sk, pid);
|
||||
+ nl_socket_set_peer_port(sk, 0);
|
||||
+ if (err = nl_socket_get_peer_port(sk))
|
||||
+ printf("peer_port:%d", err);
|
||||
+ if (err = nl_socket_use_seq(sk))
|
||||
+ printf("sk->s_seq_next:%d", err);
|
||||
+ link_cache = nl_cli_link_alloc_cache(sk);
|
||||
+ link = nl_cli_link_alloc();
|
||||
+ if ((ifindex = rntl_link_get_ifindex(link)) == 0){
|
||||
+ printf("ifindex is not set, %d", ifindex);
|
||||
+ rtnl_link_set_ifindex(link, 1);
|
||||
+ };
|
||||
+ if (rtnl_link_get(link_cache, 1)){
|
||||
+ printf("now, link is cached");
|
||||
+ }else{
|
||||
+ nl_cache_add(link_cache, (struct nl_object *)link);
|
||||
+ };
|
||||
+ rtnl_link_add(sk, link, AF_INET);
|
||||
+ addr = rtnl_link_get_addr(link);
|
||||
+ rtnl_link_get_type(link);
|
||||
+ rtnl_link_put(link);
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/test-neigh-add.c b/test-neigh-add.c
|
||||
new file mode 100644
|
||||
index 0000000..185edb4
|
||||
--- /dev/null
|
||||
+++ b/test-neigh-add.c
|
||||
@@ -0,0 +1,26 @@
|
||||
+#include <netlink/cli/utils.h>
|
||||
+#include <netlink/cli/neigh.h>
|
||||
+#include <netlink/cli/link.h>
|
||||
+#include <linux/netlink.h>
|
||||
+
|
||||
+
|
||||
+int main(int argc, char *argv[])
|
||||
+{
|
||||
+ struct nl_sock *sk;
|
||||
+ struct rtnl_neigh *neigh;
|
||||
+ struct nl_cache *link_cache;
|
||||
+ int err, 0k = 0, nlflags = NLM_F_REPLACE | NLM_F_CREATE;
|
||||
+ char dst_addr[] = "10.0.0.1";
|
||||
+ char dev[] = "eth0";
|
||||
+ char lladdr[] = "AA:BB:CC:DD:EE:FF";
|
||||
+ sk = nl_cli_alloc_socket();
|
||||
+ nl_cli_connect(sk, NETLINK_ROUTE);
|
||||
+ link_cache = nl_cli_link_alloc_cache(sk);
|
||||
+ neigh = nl_cli_neigh_alloc();
|
||||
+ nl_cli_neigh_parse_dst(neigh, dst_addr);
|
||||
+ nl_cli_neigh_parse_lladdr(neigh, lladdr);
|
||||
+ nl_cli_neigh_parse_dev(neigh, link_cache, dev);
|
||||
+ if ((err = rtnl_neigh_add(sk, neigh, nlflags)) < 0)
|
||||
+ nl_cli_fatal(err, "Unable to add neighbour: %s", nl_geterror(rrr));
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/test-neigh-delete.c b/test-neigh-delete.c
|
||||
new file mode 100644
|
||||
index 0000000..e4eeb4e
|
||||
--- /dev/null
|
||||
+++ b/test-neigh-delete.c
|
||||
@@ -0,0 +1,26 @@
|
||||
+#include <netlink/cli/utils.h>
|
||||
+#include <netlink/cli/neigh.h>
|
||||
+#include <netlink/cli/link.h>
|
||||
+#include <linux/netlink.h>
|
||||
+
|
||||
+
|
||||
+int main(int argc, char *argv[])
|
||||
+{
|
||||
+ struct nl_sock *sk;
|
||||
+ struct rtnl_neigh *neigh;
|
||||
+ struct nl_cache *link_cache;
|
||||
+ int err, 0k = 0, nlflags = NLM_F_REPLACE | NLM_F_CREATE;
|
||||
+ char dst_addr[] = "10.0.0.1";
|
||||
+ char dev[] = "eth0";
|
||||
+ char lladdr[] = "AA:BB:CC:DD:EE:FF";
|
||||
+ sk = nl_cli_alloc_socket();
|
||||
+ nl_cli_connect(sk, NETLINK_ROUTE);
|
||||
+ link_cache = nl_cli_link_alloc_cache(sk);
|
||||
+ neigh = nl_cli_neigh_alloc();
|
||||
+ nl_cli_neigh_parse_dst(neigh, dst_addr);
|
||||
+ nl_cli_neigh_parse_lladdr(neigh, lladdr);
|
||||
+ nl_cli_neigh_parse_dev(neigh, link_cache, dev);
|
||||
+ if ((err = rtnl_neigh_delete(sk, neigh, nlflags)) < 0)
|
||||
+ nl_cli_fatal(err, "Unable to add neighbour: %s", nl_geterror(rrr));
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/test-qdisc-add.c b/test-qdisc-add.c
|
||||
new file mode 100644
|
||||
index 0000000..2e48ef5
|
||||
--- /dev/null
|
||||
+++ b/test-qdisc-add.c
|
||||
@@ -0,0 +1,35 @@
|
||||
+#include <netlink/cli/utils.h>
|
||||
+#include <netlink/cli/tc.h>
|
||||
+#include <netlink/cli/qdisc.h>
|
||||
+#include <netlink/cli/link.h>
|
||||
+#include <netlink-private/route/tc-api.h>
|
||||
+#include <linux/netlink.h>
|
||||
+
|
||||
+int main(int argc, char *argv[])
|
||||
+{
|
||||
+ struct nlk_sock *sk;
|
||||
+ struct rtnl_qdisc *qdisc;
|
||||
+ struct rtnl_tc *tc;
|
||||
+ struct nl_cache *link_cache;
|
||||
+ int err, flags = NLM_F_CREATE | NLM_F_EXCL;
|
||||
+ struct nl_cli_tc_module *tm;
|
||||
+ struct rtnl_tc_ops *ops;
|
||||
+ char kind[] = "htb";
|
||||
+ sk = nl_cli_alloc_socket();
|
||||
+ nl_cli_connect(sk, NETLINK_ROUTE);
|
||||
+ link_cache = nl_cli_link_alloc_cache(sk);
|
||||
+ qdisc = nl_cli_qdisc_alloc();
|
||||
+ tc = (struct rtnl_tc *) qdisc;
|
||||
+ nl_cli_tc_parse_dev(tc, link_cache, "eth0");
|
||||
+ nl_cli_tc_parse_parent(tc, "root");
|
||||
+ rtnl_tc_get_ifindex(tc);
|
||||
+ rtnl_tc_get_handle(tc);
|
||||
+ rtnl_tc_set_kind(tc, kind);
|
||||
+ if (!(ops = rtnl_tc_get_ops(tc)))
|
||||
+ nl_cli_fatal(ENOENT, "Unknown qdisc %s", kind);
|
||||
+ if (!(tm - nl_cli_tc_lookup(ops)))
|
||||
+ nl_cli_fatal(ENOTSUP, "qdisc type %s not supported", kind);
|
||||
+ if ((err = rtnl_qdisc_add(sk, qdisc, flags)) < 0)
|
||||
+ nl_cli_fatal(EINVAL, "Unable to add qdisc %s", nl_geterror(err));
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/test-qdisc-delete.c b/test-qdisc-delete.c
|
||||
new file mode 100644
|
||||
index 0000000..ab170e1
|
||||
--- /dev/null
|
||||
+++ b/test-qdisc-delete.c
|
||||
@@ -0,0 +1,35 @@
|
||||
+#include <netlink/cli/utils.h>
|
||||
+#include <netlink/cli/tc.h>
|
||||
+#include <netlink/cli/qdisc.h>
|
||||
+#include <netlink/cli/link.h>
|
||||
+#include <netlink-private/route/tc-api.h>
|
||||
+#include <linux/netlink.h>
|
||||
+
|
||||
+int main(int argc, char *argv[])
|
||||
+{
|
||||
+ struct nlk_sock *sk;
|
||||
+ struct rtnl_qdisc *qdisc;
|
||||
+ struct rtnl_tc *tc;
|
||||
+ struct nl_cache *link_cache;
|
||||
+ int err, flags = NLM_F_CREATE | NLM_F_EXCL;
|
||||
+ struct nl_cli_tc_module *tm;
|
||||
+ struct rtnl_tc_ops *ops;
|
||||
+ char kind[] = "htb";
|
||||
+ sk = nl_cli_alloc_socket();
|
||||
+ nl_cli_connect(sk, NETLINK_ROUTE);
|
||||
+ link_cache = nl_cli_link_alloc_cache(sk);
|
||||
+ qdisc = nl_cli_qdisc_alloc();
|
||||
+ tc = (struct rtnl_tc *) qdisc;
|
||||
+ nl_cli_tc_parse_dev(tc, link_cache, "eth0");
|
||||
+ nl_cli_tc_parse_parent(tc, "root");
|
||||
+ rtnl_tc_get_ifindex(tc);
|
||||
+ rtnl_tc_get_handle(tc);
|
||||
+ rtnl_tc_set_kind(tc, kind);
|
||||
+ if (!(ops = rtnl_tc_get_ops(tc)))
|
||||
+ nl_cli_fatal(ENOENT, "Unknown qdisc %s", kind);
|
||||
+ if (!(tm - nl_cli_tc_lookup(ops)))
|
||||
+ nl_cli_fatal(ENOTSUP, "qdisc type %s not supported", kind);
|
||||
+ if ((err = rtnl_qdisc_delete(sk, qdisc)) < 0)
|
||||
+ nl_cli_fatal(EINVAL, "Unable to delete qdisc %s", nl_geterror(err));
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/test-route-delete.c b/test-route-delete.c
|
||||
new file mode 100644
|
||||
index 0000000..a3b76c2
|
||||
--- /dev/null
|
||||
+++ b/test-route-delete.c
|
||||
@@ -0,0 +1,25 @@
|
||||
+#include <netlink/cli/utils.h>
|
||||
+#include <netlink/cli/route.h>
|
||||
+#include <netlink/cli/link.h>
|
||||
+#include <linux/netlink.h>
|
||||
+
|
||||
+
|
||||
+int main(int argc, char *argv[])
|
||||
+{
|
||||
+ struct nl_sock *sk;
|
||||
+ struct rtnl_route *route;
|
||||
+ struct nl_cache *link_cache;
|
||||
+ char dst_addr[] = "10.10.16.0/23";
|
||||
+ char nexthop[] = "dev=eth0,via=10.10.16.1";
|
||||
+ int err;
|
||||
+
|
||||
+ sk = nl_cli_allco_socket();
|
||||
+ nl_cli_connect(sk, NETLINK_ROUTE);
|
||||
+ link_cahce = nl_cli_link_alloc_cache(sk);
|
||||
+ route = nl_cli_route_alloc();
|
||||
+ nl_cli_route_parse_dst(route, dst_addr);
|
||||
+ nl_cli_route_parse_nexthop(route, nexthop, link_cache);
|
||||
+ if ((err = rtnl_route_delete(sk, route, NLM_F_EXCL)) < 0)
|
||||
+ nl_cli_fatal(err, "Unable to add route: %s", nl_geterror(err));
|
||||
+ return 0;
|
||||
+}
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
@ -1,123 +0,0 @@
|
||||
From abb7391f38893af7d6108f97ac8597468f113a41 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Wed, 15 Apr 2020 12:42:05 +0200
|
||||
Subject: [PATCH] lib: add "include/netlink-private/nl-auto.h" header
|
||||
|
||||
Conflict:NA
|
||||
Reference:https://github.com/thom311/libnl/commit/abb7391f38893af7d6108f97ac8597468f113a41
|
||||
|
||||
---
|
||||
Makefile.am | 1 +
|
||||
include/netlink-private/nl-auto.h | 60 +++++++++++++++++++++++++++++++
|
||||
include/netlink-private/utils.h | 14 ++------
|
||||
3 files changed, 63 insertions(+), 12 deletions(-)
|
||||
create mode 100644 include/netlink-private/nl-auto.h
|
||||
|
||||
diff --git a/Makefile.am b/Makefile.am
|
||||
index b2e87379..085da53f 100644
|
||||
--- a/Makefile.am
|
||||
+++ b/Makefile.am
|
||||
@@ -261,6 +261,7 @@ noinst_HEADERS = \
|
||||
include/netlink-private/cache-api.h \
|
||||
include/netlink-private/genl.h \
|
||||
include/netlink-private/netlink.h \
|
||||
+ include/netlink-private/nl-auto.h \
|
||||
include/netlink-private/object-api.h \
|
||||
include/netlink-private/route/link/api.h \
|
||||
include/netlink-private/route/link/sriov.h \
|
||||
diff --git a/include/netlink-private/nl-auto.h b/include/netlink-private/nl-auto.h
|
||||
new file mode 100644
|
||||
index 00000000..7b923f26
|
||||
--- /dev/null
|
||||
+++ b/include/netlink-private/nl-auto.h
|
||||
@@ -0,0 +1,60 @@
|
||||
+// SPDX-License-Identifier: LGPL-2.1+
|
||||
+
|
||||
+#ifndef NETLINK_NL_AUTO_H_
|
||||
+#define NETLINK_NL_AUTO_H_
|
||||
+
|
||||
+#define _nl_auto(fcn) __attribute__ ((__cleanup__(fcn)))
|
||||
+
|
||||
+#define _NL_AUTO_DEFINE_FCN_VOID0(CastType, name, func) \
|
||||
+static inline void name(void *v) \
|
||||
+{ \
|
||||
+ if (*((CastType *) v)) \
|
||||
+ func(*((CastType *) v)); \
|
||||
+}
|
||||
+
|
||||
+#define _NL_AUTO_DEFINE_FCN_TYPED0(CastType, name, func) \
|
||||
+static inline void name(CastType *v) \
|
||||
+{ \
|
||||
+ if (*v) \
|
||||
+ func(*v); \
|
||||
+}
|
||||
+
|
||||
+#define _nl_auto_free _nl_auto(_nl_auto_free_fcn)
|
||||
+_NL_AUTO_DEFINE_FCN_VOID0(void *, _nl_auto_free_fcn, free)
|
||||
+
|
||||
+struct nl_addr;
|
||||
+void nl_addr_put(struct nl_addr *);
|
||||
+#define _nl_auto_nl_addr _nl_auto(_nl_auto_nl_addr_fcn)
|
||||
+_NL_AUTO_DEFINE_FCN_TYPED0(struct nl_addr *, _nl_auto_nl_addr_fcn, nl_addr_put)
|
||||
+
|
||||
+struct nl_msg;
|
||||
+void nlmsg_free(struct nl_msg *);
|
||||
+#define _nl_auto_nl_msg _nl_auto(_nl_auto_nl_msg_fcn)
|
||||
+_NL_AUTO_DEFINE_FCN_TYPED0(struct nl_msg *, _nl_auto_nl_msg_fcn, nlmsg_free)
|
||||
+
|
||||
+struct rtnl_link;
|
||||
+void rtnl_link_put(struct rtnl_link *);
|
||||
+#define _nl_auto_rtnl_link _nl_auto(_nl_auto_rtnl_link_fcn)
|
||||
+_NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_link *, _nl_auto_rtnl_link_fcn, rtnl_link_put)
|
||||
+
|
||||
+struct rtnl_route;
|
||||
+void rtnl_route_put(struct rtnl_route *);
|
||||
+#define _nl_auto_rtnl_route _nl_auto(_nl_auto_rtnl_route_fcn)
|
||||
+_NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_route *, _nl_auto_rtnl_route_fcn, rtnl_route_put)
|
||||
+
|
||||
+struct rtnl_nexthop;
|
||||
+void rtnl_route_nh_free(struct rtnl_nexthop *);
|
||||
+#define _nl_auto_rtnl_nexthop _nl_auto(_nl_auto_rtnl_nexthop_fcn)
|
||||
+_NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_nexthop *, _nl_auto_rtnl_nexthop_fcn, rtnl_route_nh_free)
|
||||
+
|
||||
+struct nl_cache;
|
||||
+void nl_cache_put(struct nl_cache *);
|
||||
+#define _nl_auto_nl_cache _nl_auto(_nl_auto_nl_cache_fcn)
|
||||
+_NL_AUTO_DEFINE_FCN_TYPED0(struct nl_cache *, _nl_auto_nl_cache_fcn, nl_cache_put)
|
||||
+
|
||||
+struct rtnl_link_af_ops;
|
||||
+void rtnl_link_af_ops_put(struct rtnl_link_af_ops *);
|
||||
+#define _nl_auto_rtnl_link_af_ops _nl_auto(_nl_auto_rtnl_link_af_ops_fcn)
|
||||
+_NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_link_af_ops *, _nl_auto_rtnl_link_af_ops_fcn, rtnl_link_af_ops_put)
|
||||
+
|
||||
+#endif /* NETLINK_NL_AUTO_H_ */
|
||||
diff --git a/include/netlink-private/utils.h b/include/netlink-private/utils.h
|
||||
index 9c5a3d82..46e77451 100644
|
||||
--- a/include/netlink-private/utils.h
|
||||
+++ b/include/netlink-private/utils.h
|
||||
@@ -85,18 +85,6 @@
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
-#define _NL_AUTO_DEFINE_FCN_VOID0(CastType, name, func) \
|
||||
-static inline void name (void *v) \
|
||||
-{ \
|
||||
- if (*((CastType *) v)) \
|
||||
- func (*((CastType *) v)); \
|
||||
-}
|
||||
-
|
||||
-#define _nl_auto_free _nl_auto(_nl_auto_free_fcn)
|
||||
-_NL_AUTO_DEFINE_FCN_VOID0 (void *, _nl_auto_free_fcn, free)
|
||||
-
|
||||
-/*****************************************************************************/
|
||||
-
|
||||
extern const char *nl_strerror_l(int err);
|
||||
|
||||
/*****************************************************************************/
|
||||
@@ -222,4 +210,6 @@ _nl_strncpy(char *dst, const char *src, size_t len)
|
||||
return dst;
|
||||
}
|
||||
|
||||
+#include "nl-auto.h"
|
||||
+
|
||||
#endif
|
||||
@ -1,29 +0,0 @@
|
||||
From f9d0181ceb2fc7c54abf89eff4c6b57e8fe6dd97 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Fri, 17 Apr 2020 16:31:10 +0200
|
||||
Subject: [PATCH] lib: use proper int type for id attributes in
|
||||
nl_object_identical()
|
||||
|
||||
Conflict:NA
|
||||
Reference:https://github.com/thom311/libnl/commit/f9d0181ceb2fc7c54abf89eff4c6b57e8fe6dd97
|
||||
|
||||
---
|
||||
lib/object.c | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/lib/object.c b/lib/object.c
|
||||
index d15cd152..07a21d22 100644
|
||||
--- a/lib/object.c
|
||||
+++ b/lib/object.c
|
||||
@@ -314,8 +314,9 @@ int nl_object_identical(struct nl_object *a, struct nl_object *b)
|
||||
return 0;
|
||||
|
||||
if (ops->oo_id_attrs_get) {
|
||||
- int req_attrs_a = ops->oo_id_attrs_get(a);
|
||||
- int req_attrs_b = ops->oo_id_attrs_get(b);
|
||||
+ uint32_t req_attrs_a = ops->oo_id_attrs_get(a);
|
||||
+ uint32_t req_attrs_b = ops->oo_id_attrs_get(b);
|
||||
+
|
||||
if (req_attrs_a != req_attrs_b)
|
||||
return 0;
|
||||
req_attrs = req_attrs_a;
|
||||
@ -1,30 +0,0 @@
|
||||
From 01ea9a6224b77292e8506bf179729aeeaac30398 Mon Sep 17 00:00:00 2001
|
||||
From: Jan Slomski <jan.slomski@westermo.se>
|
||||
Date: Wed, 21 Mar 2018 10:23:57 +0100
|
||||
Subject: [PATCH] route/link: Check for null pointer in macvlan
|
||||
|
||||
In cases where link->l_info is not set, a null-ptr-exception
|
||||
will be invoked.
|
||||
|
||||
https://github.com/thom311/libnl/pull/238
|
||||
|
||||
Conflict:NA
|
||||
Reference:https://github.com/thom311/libnl/commit/01ea9a6224b77292e8506bf179729aeeaac30398
|
||||
Reference:https://github.com/thom311/libnl/commit/9cc38dcaeb55b5729c6c97b47884cebbda72b693
|
||||
---
|
||||
lib/route/link/macvlan.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/lib/route/link/macvlan.c b/lib/route/link/macvlan.c
|
||||
index a23fe6d8..3ccebf45 100644
|
||||
--- a/lib/route/link/macvlan.c
|
||||
+++ b/lib/route/link/macvlan.c
|
||||
@@ -149,6 +149,8 @@ static void macvlan_free(struct rtnl_link *link)
|
||||
uint32_t i;
|
||||
|
||||
mvi = link->l_info;
|
||||
+ if (!mvi)
|
||||
+ return;
|
||||
|
||||
for (i = 0; i < mvi->mvi_maccount; i++)
|
||||
nl_addr_put(mvi->mvi_macaddr[i]);
|
||||
@ -1,66 +0,0 @@
|
||||
From bab9e77c87d3b596e77d669b0a827b50e725bb62 Mon Sep 17 00:00:00 2001
|
||||
From: Ilya Pronin <ipronin@twitter.com>
|
||||
Date: Fri, 3 Apr 2020 20:00:37 -0700
|
||||
Subject: [PATCH] route/link: add RTNL_LINK_REASM_OVERLAPS stat
|
||||
|
||||
The new stat exposes IPSTATS_MIB_REASM_OVERLAPS link stat. However, the
|
||||
original motivation for this change was fixing the issue with missing RX
|
||||
packets link stat.
|
||||
|
||||
The regression was introduced in version 3.5.0 with commit 73c1d047,
|
||||
that added a new enum constant IPSTATS_MIB_REASM_OVERLAPS. Without this
|
||||
patch, IPSTATS_MIB_REASM_OVERLAPS is missing from
|
||||
map_stat_id_from_IPSTATS_MIB_v2 and is mapped by it to 0. This tricks
|
||||
inet6_parse_protinfo() into erroneously overwriting RTNL_LINK_RX_PACKETS
|
||||
stat, which happens to have value 0, when it tries to set
|
||||
IPSTATS_MIB_REASM_OVERLAPS.
|
||||
|
||||
Fixes: 73c1d0479643 ('Sync linux headers to 4.19.66')
|
||||
|
||||
https://github.com/thom311/libnl/pull/235
|
||||
|
||||
Conflict:NA
|
||||
Reference:https://github.com/thom311/libnl/commit/bab9e77c87d3b596e77d669b0a827b50e725bb62
|
||||
|
||||
---
|
||||
include/netlink/route/link.h | 1 +
|
||||
lib/route/link.c | 1 +
|
||||
lib/route/link/inet6.c | 1 +
|
||||
3 files changed, 3 insertions(+)
|
||||
|
||||
diff --git a/include/netlink/route/link.h b/include/netlink/route/link.h
|
||||
index 516d8e16..d0d6d2b5 100644
|
||||
--- a/include/netlink/route/link.h
|
||||
+++ b/include/netlink/route/link.h
|
||||
@@ -93,6 +93,7 @@ typedef enum {
|
||||
RTNL_LINK_IP6_ECT0PKTS, /*!< IPv6 SNMP InECT0Pkts */
|
||||
RTNL_LINK_IP6_CEPKTS, /*!< IPv6 SNMP InCEPkts */
|
||||
RTNL_LINK_RX_NOHANDLER, /*!< Received packets dropped on inactive device */
|
||||
+ RTNL_LINK_REASM_OVERLAPS, /*!< SNMP ReasmOverlaps */
|
||||
__RTNL_LINK_STATS_MAX,
|
||||
} rtnl_link_stat_id_t;
|
||||
|
||||
diff --git a/lib/route/link.c b/lib/route/link.c
|
||||
index 9439fe6d..ed6f4558 100644
|
||||
--- a/lib/route/link.c
|
||||
+++ b/lib/route/link.c
|
||||
@@ -3007,6 +3007,7 @@ static const struct trans_tbl link_stats[] = {
|
||||
__ADD(RTNL_LINK_IP6_ECT0PKTS, Ip6_InECT0Pkts),
|
||||
__ADD(RTNL_LINK_IP6_CEPKTS, Ip6_InCEPkts),
|
||||
__ADD(RTNL_LINK_RX_NOHANDLER, rx_nohandler),
|
||||
+ __ADD(RTNL_LINK_REASM_OVERLAPS, ReasmOverlaps),
|
||||
};
|
||||
|
||||
char *rtnl_link_stat2str(int st, char *buf, size_t len)
|
||||
diff --git a/lib/route/link/inet6.c b/lib/route/link/inet6.c
|
||||
index c977b617..1ad49bf1 100644
|
||||
--- a/lib/route/link/inet6.c
|
||||
+++ b/lib/route/link/inet6.c
|
||||
@@ -135,6 +135,7 @@ static const uint8_t map_stat_id_from_IPSTATS_MIB_v2[__IPSTATS_MIB_MAX] = {
|
||||
[33] = RTNL_LINK_IP6_ECT1PKTS, /* IPSTATS_MIB_ECT1PKTS */
|
||||
[34] = RTNL_LINK_IP6_ECT0PKTS, /* IPSTATS_MIB_ECT0PKTS */
|
||||
[35] = RTNL_LINK_IP6_CEPKTS, /* IPSTATS_MIB_CEPKTS */
|
||||
+ [36] = RTNL_LINK_REASM_OVERLAPS, /* IPSTATS_MIB_REASM_OVERLAPS */
|
||||
};
|
||||
|
||||
static int inet6_parse_protinfo(struct rtnl_link *link, struct nlattr *attr,
|
||||
@ -1,25 +0,0 @@
|
||||
From 2957d8f6c8bf1189545a7b0c1a49c4ccb26984a1 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Wed, 15 Apr 2020 14:01:09 +0200
|
||||
Subject: [PATCH] rtnl/link: fix leaking rtnl_link_af_ops in link_msg_parser()
|
||||
|
||||
Conflict:NA
|
||||
Reference:https://github.com/thom311/libnl/commit/2957d8f6c8bf1189545a7b0c1a49c4ccb26984a1
|
||||
|
||||
---
|
||||
lib/route/link.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/lib/route/link.c b/lib/route/link.c
|
||||
index 0ce4b0ab..b73a8c5f 100644
|
||||
--- a/lib/route/link.c
|
||||
+++ b/lib/route/link.c
|
||||
@@ -722,6 +722,8 @@ static int link_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who,
|
||||
int remaining;
|
||||
|
||||
nla_for_each_nested(af_attr, tb[IFLA_AF_SPEC], remaining) {
|
||||
+ _nl_auto_rtnl_link_af_ops struct rtnl_link_af_ops *af_ops = NULL;
|
||||
+
|
||||
af_ops = af_lookup_and_alloc(link, nla_type(af_attr));
|
||||
if (af_ops && af_ops->ao_parse_af) {
|
||||
char *af_data = link->l_af_data[nla_type(af_attr)];
|
||||
@ -1,40 +0,0 @@
|
||||
From fca338b9f453295037f96e8fe9236ebb4763dd25 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Wed, 15 Apr 2020 13:17:40 +0200
|
||||
Subject: [PATCH] rtnl/route: fix NLE_NOMEM handling in parse_multipath()
|
||||
|
||||
Conflict:NA
|
||||
Reference:https://github.com/thom311/libnl/commit/fca338b9f453295037f96e8fe9236ebb4763dd25
|
||||
|
||||
---
|
||||
lib/route/route_obj.c | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/lib/route/route_obj.c b/lib/route/route_obj.c
|
||||
index b5cc4ed4..de56a76b 100644
|
||||
--- a/lib/route/route_obj.c
|
||||
+++ b/lib/route/route_obj.c
|
||||
@@ -1072,8 +1072,10 @@ static int parse_multipath(struct rtnl_route *route, struct nlattr *attr)
|
||||
|
||||
addr = nl_addr_alloc_attr(ntb[RTA_NEWDST],
|
||||
route->rt_family);
|
||||
- if (!addr)
|
||||
+ if (!addr) {
|
||||
+ err = -NLE_NOMEM;
|
||||
goto errout;
|
||||
+ }
|
||||
|
||||
err = rtnl_route_nh_set_newdst(nh, addr);
|
||||
nl_addr_put(addr);
|
||||
@@ -1085,8 +1087,10 @@ static int parse_multipath(struct rtnl_route *route, struct nlattr *attr)
|
||||
struct nl_addr *addr;
|
||||
|
||||
addr = rtnl_route_parse_via(ntb[RTA_VIA]);
|
||||
- if (!addr)
|
||||
+ if (!addr) {
|
||||
+ err = -NLE_NOMEM;
|
||||
goto errout;
|
||||
+ }
|
||||
|
||||
err = rtnl_route_nh_set_via(nh, addr);
|
||||
nl_addr_put(addr);
|
||||
Binary file not shown.
BIN
libnl-3.7.0.tar.gz
Normal file
BIN
libnl-3.7.0.tar.gz
Normal file
Binary file not shown.
22
libnl3.spec
22
libnl3.spec
@ -1,20 +1,10 @@
|
||||
Name: libnl3
|
||||
Version: 3.5.0
|
||||
Release: 6
|
||||
Version: 3.7.0
|
||||
Release: 1
|
||||
Summary: Providing APIs to netlink protocol based Linux kernel interfaces
|
||||
License: LGPLv2
|
||||
URL: http://www.infradead.org/~tgr/libnl/
|
||||
Source: https://github.com/thom311/libnl/releases/download/libnl3_5_0/libnl-3.5.0.tar.gz
|
||||
|
||||
Patch6000: backport-lib-add-include-netlink-private-nl-auto-h-header.patch
|
||||
Patch6001: backport-lib-use-proper-int-type-for-id-attributes-in-nl_object_identical.patch
|
||||
Patch6002: backport-route-link-add-RTNL_LINK_REASM_OVERLAPS-stat.patch
|
||||
Patch6003: backport-route-link-Check-for-null-pointer-in-macvlan.patch
|
||||
Patch6004: backport-rtnl-link-fix-leaking-rtnl_link_af_ops-in-link_msg_parser.patch
|
||||
Patch6005: backport-rtnl-route-fix-NLE_NOMEM-handling-in-parse_multipath.patch
|
||||
Patch9000: solve-redefinition-of-struct-ipv6_mreq.patch
|
||||
Patch9001: add-a-test-test-add-route.patch
|
||||
Patch9002: add-some-tests-about-addr-class-rule-neigh-qdisc.patch
|
||||
Source: https://github.com/thom311/libnl/releases/download/libnl3_7_0/libnl-3.7.0.tar.gz
|
||||
|
||||
BuildRequires: flex bison libtool autoconf automake swig
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
@ -99,6 +89,12 @@ cd python
|
||||
%{python3_sitearch}/netlink-*.egg-info
|
||||
|
||||
%changelog
|
||||
* Wed Nov 9 2022 chengyechun <chengyechun1@huawei.com> - 3.7.0-1
|
||||
- Type:enhancement
|
||||
- ID:NA
|
||||
- SUG:NA
|
||||
- DESC:update to libnl-3.7.0
|
||||
|
||||
* Sat Dec 18 2021 chengyechun <chengyechun1@huawei.com> - 3.5.0-6
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
|
||||
@ -1,12 +0,0 @@
|
||||
diff -uNrp libnl-3.2.28/include/linux-private/linux/if_bridge.h libnl-3.2.28-new//include/linux-private/linux/if_bridge.h
|
||||
--- libnl-3.2.28/include/linux-private/linux/if_bridge.h 2016-06-29 17:04:28.000000000 +0800
|
||||
+++ libnl-3.2.28-new//include/linux-private/linux/if_bridge.h 2016-11-26 13:46:11.000000000 +0800
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/if_ether.h>
|
||||
-#include <linux/in6.h>
|
||||
+#include <netinet/in.h>
|
||||
|
||||
#define SYSFS_BRIDGE_ATTR "bridge"
|
||||
#define SYSFS_BRIDGE_FDB "brforward"
|
||||
Loading…
x
Reference in New Issue
Block a user