summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Syromyatnikov <evgsyr@gmail.com>2020-04-14 04:24:58 +0200
committerEugene Syromyatnikov <evgsyr@gmail.com>2020-04-19 12:19:54 +0200
commit610f0023719585ceb9a588dea249dec79c7c2a42 (patch)
tree6865e5213d52ea8632599f2cf13a1048cb3e6d40
parente76e6d83c7d216e626d226f2878f011ca9c9c7ef (diff)
downloadstrace-610f0023719585ceb9a588dea249dec79c7c2a42.tar.gz
rtnl_link: support IFLA_XDP_EXPECTED_FD attribute decoding
Introduced by Linux commit v5.7-rc1~146^2~10^2~13^2~3. * xlat/rtnl_ifla_xdp_attrs.in: Add #enum, #include <netlink/in.h>, and #include <linux/rtnetlink.h> annotations. (IFLA_XDP_EXPECTED_FD): New constant. * rtnl_link.c (ifla_xdp_nla_decoders): Add [IFLA_XDP_EXPECTED_FD], set value to decode_nla_fd. * tests/nlattr_ifla_xdp-y.c: New file. * tests/.gitignore: Add nlattr_ifla_xdp-y. * tests/Makefile.am (check_PROGRAMS): Likewise. * tests/gen_tests.in: Add nlattr_ifla_xdp-y test. * tests/nlattr_ifla_xdp.c: Include "xlat/rtnl_ifla_xdp_attrs.h" under XLAT_MACROS_ONLY definition. (IFLA_XDP_FD, IFLA_XDP_ATTACHED, IFLA_XDP_PROG_ID, IFLA_XDP_DRV_PROG_ID, IFLA_XDP_SKB_PROG_ID, IFLA_XDP_HW_PROG_ID): Remove. [!FD9_PATH] (FD9_PATH): New macro, define to empty string. (main): Add checks for IFLA_XDP_EXPECTED_FD.
-rw-r--r--rtnl_link.c1
-rw-r--r--tests/.gitignore1
-rw-r--r--tests/Makefile.am1
-rw-r--r--tests/gen_tests.in1
-rw-r--r--tests/nlattr_ifla_xdp-y.c3
-rw-r--r--tests/nlattr_ifla_xdp.c43
-rw-r--r--xlat/rtnl_ifla_xdp_attrs.in4
7 files changed, 31 insertions, 23 deletions
diff --git a/rtnl_link.c b/rtnl_link.c
index c56040d59..7f81414a2 100644
--- a/rtnl_link.c
+++ b/rtnl_link.c
@@ -583,6 +583,7 @@ static const nla_decoder_t ifla_xdp_nla_decoders[] = {
[IFLA_XDP_DRV_PROG_ID] = decode_nla_u32,
[IFLA_XDP_SKB_PROG_ID] = decode_nla_u32,
[IFLA_XDP_HW_PROG_ID] = decode_nla_u32,
+ [IFLA_XDP_EXPECTED_FD] = decode_nla_fd,
};
static bool
diff --git a/tests/.gitignore b/tests/.gitignore
index 40f10fba4..796cce67c 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -421,6 +421,7 @@ nlattr_ifla_brport
nlattr_ifla_linkinfo
nlattr_ifla_port
nlattr_ifla_xdp
+nlattr_ifla_xdp-y
nlattr_inet_diag_msg
nlattr_inet_diag_req_compat
nlattr_inet_diag_req_v2
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 6c2c7084f..d4d43cb62 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -159,6 +159,7 @@ check_PROGRAMS = $(PURE_EXECUTABLES) \
msg_control-v \
net-accept-connect \
net-tpacket_stats-success \
+ nlattr_ifla_xdp-y \
netlink_inet_diag \
netlink_netlink_diag \
netlink_unix_diag \
diff --git a/tests/gen_tests.in b/tests/gen_tests.in
index 579329cef..a46c1df42 100644
--- a/tests/gen_tests.in
+++ b/tests/gen_tests.in
@@ -377,6 +377,7 @@ nlattr_ifla_brport +netlink_sock_diag.test
nlattr_ifla_linkinfo +netlink_sock_diag.test
nlattr_ifla_port +netlink_sock_diag.test
nlattr_ifla_xdp +netlink_sock_diag.test
+nlattr_ifla_xdp-y +netlink_sock_diag.test -y; exec 9</dev/full
nlattr_inet_diag_msg +netlink_sock_diag.test
nlattr_inet_diag_req_compat +netlink_sock_diag.test
nlattr_inet_diag_req_v2 +netlink_sock_diag.test
diff --git a/tests/nlattr_ifla_xdp-y.c b/tests/nlattr_ifla_xdp-y.c
new file mode 100644
index 000000000..791c2be9f
--- /dev/null
+++ b/tests/nlattr_ifla_xdp-y.c
@@ -0,0 +1,3 @@
+#define PRINT_SOCK 1
+#define FD9_PATH "</dev/full>"
+#include "nlattr_ifla_xdp.c"
diff --git a/tests/nlattr_ifla_xdp.c b/tests/nlattr_ifla_xdp.c
index 232f21452..7cc389d93 100644
--- a/tests/nlattr_ifla_xdp.c
+++ b/tests/nlattr_ifla_xdp.c
@@ -17,32 +17,13 @@
#endif
#include <linux/rtnetlink.h>
+#define XLAT_MACROS_ONLY
+# include "xlat/rtnl_ifla_xdp_attrs.h"
+#undef XLAT_MACROS_ONLY
+
#if !HAVE_DECL_IFLA_XDP
enum { IFLA_XDP = 43 };
#endif
-#ifndef IFLA_XDP_FD
-# define IFLA_XDP_FD 1
-#endif
-
-#ifndef IFLA_XDP_ATTACHED
-# define IFLA_XDP_ATTACHED 2
-#endif
-
-#ifndef IFLA_XDP_PROG_ID
-# define IFLA_XDP_PROG_ID 4
-#endif
-
-#ifndef IFLA_XDP_DRV_PROG_ID
-# define IFLA_XDP_DRV_PROG_ID 5
-#endif
-
-#ifndef IFLA_XDP_SKB_PROG_ID
-# define IFLA_XDP_SKB_PROG_ID 6
-#endif
-
-#ifndef IFLA_XDP_HW_PROG_ID
-# define IFLA_XDP_HW_PROG_ID 7
-#endif
#ifndef XDP_ATTACHED_NONE
# define XDP_ATTACHED_NONE 0
@@ -55,6 +36,10 @@ enum { IFLA_XDP = 43 };
#define IFLA_ATTR IFLA_XDP
#include "nlattr_ifla.h"
+#ifndef FD9_PATH
+#define FD9_PATH ""
+#endif
+
int
main(void)
{
@@ -118,6 +103,18 @@ main(void)
printf("%u", num));
}
+ /* IFLA_XDP_EXPECTED_FD */
+ TEST_NESTED_NLATTR_OBJECT_EX(fd, nlh0, hdrlen,
+ init_ifinfomsg, print_ifinfomsg,
+ IFLA_XDP_EXPECTED_FD, pattern, num, 1,
+ printf("%d", num));
+
+ int exp_fd = 9;
+ TEST_NESTED_NLATTR_OBJECT_EX(fd, nlh0, hdrlen,
+ init_ifinfomsg, print_ifinfomsg,
+ IFLA_XDP_EXPECTED_FD, pattern, exp_fd, 1,
+ printf("9" FD9_PATH));
+
puts("+++ exited with 0 +++");
return 0;
}
diff --git a/xlat/rtnl_ifla_xdp_attrs.in b/xlat/rtnl_ifla_xdp_attrs.in
index 9303f79d1..d743ac8a8 100644
--- a/xlat/rtnl_ifla_xdp_attrs.in
+++ b/xlat/rtnl_ifla_xdp_attrs.in
@@ -1,4 +1,7 @@
#value_indexed
+#enum
+#include <netinet/in.h>
+#include <linux/rtnetlink.h>
IFLA_XDP_UNSPEC 0
IFLA_XDP_FD 1
IFLA_XDP_ATTACHED 2
@@ -7,3 +10,4 @@ IFLA_XDP_PROG_ID 4
IFLA_XDP_DRV_PROG_ID 5
IFLA_XDP_SKB_PROG_ID 6
IFLA_XDP_HW_PROG_ID 7
+IFLA_XDP_EXPECTED_FD 8