diff --git a/rtnl_link.c b/rtnl_link.c index 1fbfd267..6f63d7fc 100644 --- a/rtnl_link.c +++ b/rtnl_link.c @@ -578,7 +578,10 @@ static const nla_decoder_t ifla_xdp_nla_decoders[] = { [IFLA_XDP_FD] = decode_nla_fd, [IFLA_XDP_ATTACHED] = decode_nla_u8, [IFLA_XDP_FLAGS] = decode_ifla_xdp_flags, - [IFLA_XDP_PROG_ID] = decode_nla_u32 + [IFLA_XDP_PROG_ID] = decode_nla_u32, + [IFLA_XDP_DRV_PROG_ID] = decode_nla_u32, + [IFLA_XDP_SKB_PROG_ID] = decode_nla_u32, + [IFLA_XDP_HW_PROG_ID] = decode_nla_u32, }; static bool diff --git a/tests/nlattr_ifla_xdp.c b/tests/nlattr_ifla_xdp.c index 93149fa9..c98f8a3f 100644 --- a/tests/nlattr_ifla_xdp.c +++ b/tests/nlattr_ifla_xdp.c @@ -44,6 +44,22 @@ enum { IFLA_XDP = 43 }; # define IFLA_XDP_FD 1 #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 + #define IFLA_ATTR IFLA_XDP #include "nlattr_ifla.h" @@ -73,6 +89,25 @@ main(void) printf("XDP_FLAGS_UPDATE_IF_NOEXIST")); #endif + static const struct { + uint32_t val; + const char *str; + } attrs[] = { + { ARG_STR(IFLA_XDP_PROG_ID) }, + { ARG_STR(IFLA_XDP_DRV_PROG_ID) }, + { ARG_STR(IFLA_XDP_SKB_PROG_ID) }, + { ARG_STR(IFLA_XDP_HW_PROG_ID) }, + }; + + for (size_t i = 0; i < ARRAY_SIZE(attrs); i++) { + TEST_NESTED_NLATTR_OBJECT_EX_(fd, nlh0, hdrlen, + init_ifinfomsg, print_ifinfomsg, + attrs[i].val, attrs[i].str, + pattern, num, + print_quoted_hex, 1, + printf("%u", num)); + } + puts("+++ exited with 0 +++"); return 0; } diff --git a/xlat/rtnl_ifla_xdp_attrs.in b/xlat/rtnl_ifla_xdp_attrs.in index ef3f458f..b12958f5 100644 --- a/xlat/rtnl_ifla_xdp_attrs.in +++ b/xlat/rtnl_ifla_xdp_attrs.in @@ -3,3 +3,6 @@ IFLA_XDP_FD 1 IFLA_XDP_ATTACHED 2 IFLA_XDP_FLAGS 3 IFLA_XDP_PROG_ID 4 +IFLA_XDP_DRV_PROG_ID 5 +IFLA_XDP_SKB_PROG_ID 6 +IFLA_XDP_HW_PROG_ID 7