diff options
author | Eugene Syromyatnikov <evgsyr@gmail.com> | 2020-04-14 04:24:58 +0200 |
---|---|---|
committer | Eugene Syromyatnikov <evgsyr@gmail.com> | 2020-04-19 12:19:54 +0200 |
commit | 610f0023719585ceb9a588dea249dec79c7c2a42 (patch) | |
tree | 6865e5213d52ea8632599f2cf13a1048cb3e6d40 | |
parent | e76e6d83c7d216e626d226f2878f011ca9c9c7ef (diff) | |
download | strace-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.c | 1 | ||||
-rw-r--r-- | tests/.gitignore | 1 | ||||
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/gen_tests.in | 1 | ||||
-rw-r--r-- | tests/nlattr_ifla_xdp-y.c | 3 | ||||
-rw-r--r-- | tests/nlattr_ifla_xdp.c | 43 | ||||
-rw-r--r-- | xlat/rtnl_ifla_xdp_attrs.in | 4 |
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 |