strace/rtnl_link-decode-named-constants-for-IFLA_XDP_ATTACH.patch

130 lines
3.7 KiB
Diff
Raw Normal View History

2019-09-30 11:17:43 -04:00
From d029a5efd1e8bc5273473f0a7991a5d93f10f5cf Mon Sep 17 00:00:00 2001
From: Eugene Syromyatnikov <evgsyr@gmail.com>
Date: Sun, 19 Aug 2018 11:31:34 +0200
Subject: [PATCH 025/293] rtnl_link: decode named constants for
IFLA_XDP_ATTACHED attribute value
* 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 | 20 +++++++++++++++++++-
tests/nlattr_ifla_xdp.c | 30 ++++++++++++++++++++++++++++++
xlat/rtnl_ifla_xdp_attached_mode.in | 6 ++++++
3 files changed, 55 insertions(+), 1 deletion(-)
create mode 100644 xlat/rtnl_ifla_xdp_attached_mode.in
diff --git a/rtnl_link.c b/rtnl_link.c
index 6f63d7f..2421088 100644
--- a/rtnl_link.c
+++ b/rtnl_link.c
@@ -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,
diff --git a/tests/nlattr_ifla_xdp.c b/tests/nlattr_ifla_xdp.c
index c98f8a3..a44b798 100644
--- a/tests/nlattr_ifla_xdp.c
+++ b/tests/nlattr_ifla_xdp.c
@@ -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
index 0000000..f374230
--- /dev/null
+++ b/xlat/rtnl_ifla_xdp_attached_mode.in
@@ -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
--
1.7.12.4