!38 update to libnl-3.7.0

From: @chengyechun 
Reviewed-by: @seuzw 
Signed-off-by: @seuzw
This commit is contained in:
openeuler-ci-bot 2022-11-09 03:34:16 +00:00 committed by Gitee
commit 85cb15fe9a
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
12 changed files with 9 additions and 915 deletions

View File

@ -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

View File

@ -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, &params, 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, &params);
+ };
+ 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, &params);
+ 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

View File

@ -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

View File

@ -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;

View File

@ -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]);

View File

@ -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,

View File

@ -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)];

View File

@ -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

Binary file not shown.

View File

@ -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

View File

@ -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"