]> granicus.if.org Git - strace/commitdiff
rtnl_link: decode named constants for IFLA_XDP_ATTACHED attribute value
authorEugene Syromyatnikov <evgsyr@gmail.com>
Sun, 19 Aug 2018 09:31:34 +0000 (11:31 +0200)
committerDmitry V. Levin <ldv@altlinux.org>
Mon, 27 Aug 2018 23:41:41 +0000 (23:41 +0000)
* xlat/rtnl_ifla_xdp_attached_mode.in: New file.
* rtnl_link.c: Include "xlat/rtnl_ifla_xdp_attached_mode.h".
(decode_ifla_xdp_attached): New function.
(ifla_xdp_nla_decoders) <[IFLA_XDP_ATTACHED]>: Use
decode_ifla_xdp_attached instead of decode_nla_u8.
* tests/nlattr_ifla_xdp.c: Add checks for IFLA_XDP_ATTACHED decoding.

rtnl_link.c
tests/nlattr_ifla_xdp.c
xlat/rtnl_ifla_xdp_attached_mode.in [new file with mode: 0644]

index 6f63d7fcbf0053c031e842af9a1430d8f3ede8b5..2421088a967a7a27330f38cfcfc1c14f588aa435 100644 (file)
@@ -54,6 +54,7 @@
 #include "xlat/rtnl_ifla_info_data_tun_attrs.h"
 #include "xlat/rtnl_ifla_port_attrs.h"
 #include "xlat/rtnl_ifla_vf_port_attrs.h"
+#include "xlat/rtnl_ifla_xdp_attached_mode.h"
 #include "xlat/rtnl_ifla_xdp_attrs.h"
 #include "xlat/rtnl_link_attrs.h"
 #include "xlat/snmp_icmp6_stats.h"
@@ -574,9 +575,26 @@ decode_ifla_xdp_flags(struct tcb *const tcp,
        return true;
 }
 
+bool
+decode_ifla_xdp_attached(struct tcb *const tcp,
+                        const kernel_ulong_t addr,
+                        const unsigned int len,
+                        const void *const opaque_data)
+{
+       const struct decode_nla_xlat_opts opts = {
+               .xlat = rtnl_ifla_xdp_attached_mode,
+               .xlat_size = ARRAY_SIZE(rtnl_ifla_xdp_attached_mode),
+               .xt = XT_INDEXED,
+               .dflt = "XDP_ATTACHED_???",
+               .size = 1,
+       };
+
+       return decode_nla_xval(tcp, addr, len, &opts);
+}
+
 static const nla_decoder_t ifla_xdp_nla_decoders[] = {
        [IFLA_XDP_FD]           = decode_nla_fd,
-       [IFLA_XDP_ATTACHED]     = decode_nla_u8,
+       [IFLA_XDP_ATTACHED]     = decode_ifla_xdp_attached,
        [IFLA_XDP_FLAGS]        = decode_ifla_xdp_flags,
        [IFLA_XDP_PROG_ID]      = decode_nla_u32,
        [IFLA_XDP_DRV_PROG_ID]  = decode_nla_u32,
index c98f8a3f3dd9d4fc70a4ef307b5c91c8b6e9c622..a44b798cc1833fa824b11a958494140ad64821b8 100644 (file)
@@ -44,6 +44,10 @@ enum { IFLA_XDP = 43 };
 # 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
@@ -60,6 +64,14 @@ enum { IFLA_XDP = 43 };
 # define IFLA_XDP_HW_PROG_ID 7
 #endif
 
+#ifndef XDP_ATTACHED_NONE
+# define XDP_ATTACHED_NONE 0
+#endif
+
+#ifndef XDP_ATTACHED_MULTI
+# define XDP_ATTACHED_MULTI 4
+#endif
+
 #define IFLA_ATTR IFLA_XDP
 #include "nlattr_ifla.h"
 
@@ -81,6 +93,24 @@ main(void)
                                  IFLA_XDP_FD, pattern, num,
                                  printf("%d", num));
 
+       static const struct {
+               uint8_t val;
+               const char *str;
+       } attach_types[] = {
+               { ARG_STR(XDP_ATTACHED_NONE) },
+               { ARG_STR(XDP_ATTACHED_MULTI) },
+               { ARG_STR(0x5)  " /* XDP_ATTACHED_??? */" },
+               { ARG_STR(0xfe) " /* XDP_ATTACHED_??? */" },
+       };
+
+       for (size_t i = 0; i < ARRAY_SIZE(attach_types); i++) {
+               TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+                                         init_ifinfomsg, print_ifinfomsg,
+                                         IFLA_XDP_ATTACHED, pattern,
+                                         attach_types[i].val,
+                                         printf("%s", attach_types[i].str));
+       }
+
 #ifdef XDP_FLAGS_UPDATE_IF_NOEXIST
        const uint32_t flags = XDP_FLAGS_UPDATE_IF_NOEXIST;
        TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
diff --git a/xlat/rtnl_ifla_xdp_attached_mode.in b/xlat/rtnl_ifla_xdp_attached_mode.in
new file mode 100644 (file)
index 0000000..f374230
--- /dev/null
@@ -0,0 +1,6 @@
+#value_indexed
+XDP_ATTACHED_NONE      0
+XDP_ATTACHED_DRV       1
+XDP_ATTACHED_SKB       2
+XDP_ATTACHED_HW                3
+XDP_ATTACHED_MULTI     4