* rtnl_link.c: Include "nlattr.h" and "xlat/rtnl_link_attrs.h".
(decode_ifinfomsg): Call decode_nlattr.
* xlat/rtnl_link_attrs.in: New file.

Co-authored-by: Fabien Siron <fabien.si...@epita.fr>
---
 rtnl_link.c             | 14 +++++++++++++-
 xlat/rtnl_link_attrs.in | 45 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 58 insertions(+), 1 deletion(-)
 create mode 100644 xlat/rtnl_link_attrs.in

diff --git a/rtnl_link.c b/rtnl_link.c
index d1e9bb8..18897f3 100644
--- a/rtnl_link.c
+++ b/rtnl_link.c
@@ -29,15 +29,19 @@
 
 #include "defs.h"
 #include "netlink_route.h"
+#include "nlattr.h"
 #include "print_fields.h"
 
 #include "netlink.h"
 #include <linux/rtnetlink.h>
 
+#include "xlat/rtnl_link_attrs.h"
+
 DECL_NETLINK_ROUTE_DECODER(decode_ifinfomsg)
 {
        struct ifinfomsg ifinfo = { .ifi_family = family };
-       const size_t offset = sizeof(ifinfo.ifi_family);
+       size_t offset = sizeof(ifinfo.ifi_family);
+       bool decode_nla = false;
 
        PRINT_FIELD_XVAL("{", ifinfo, ifi_family, addrfams, "AF_???");
 
@@ -52,8 +56,16 @@ DECL_NETLINK_ROUTE_DECODER(decode_ifinfomsg)
                        PRINT_FIELD_FLAGS(", ", ifinfo, ifi_flags,
                                          iffflags, "IFF_???");
                        PRINT_FIELD_X(", ", ifinfo, ifi_change);
+                       decode_nla = true;
                }
        } else
                tprints("...");
        tprints("}");
+
+       offset = NLMSG_ALIGN(sizeof(ifinfo));
+       if (decode_nla && len > offset) {
+               tprints(", ");
+               decode_nlattr(tcp, addr + offset, len - offset,
+                             rtnl_link_attrs, "IFLA_???", NULL, 0, NULL);
+       }
 }
diff --git a/xlat/rtnl_link_attrs.in b/xlat/rtnl_link_attrs.in
new file mode 100644
index 0000000..eb7f475
--- /dev/null
+++ b/xlat/rtnl_link_attrs.in
@@ -0,0 +1,45 @@
+IFLA_UNSPEC            0
+IFLA_ADDRESS           1
+IFLA_BROADCAST         2
+IFLA_IFNAME            3
+IFLA_MTU               4
+IFLA_LINK              5
+IFLA_QDISC             6
+IFLA_STATS             7
+IFLA_COST              8
+IFLA_PRIORITY          9
+IFLA_MASTER            10
+IFLA_WIRELESS          11
+IFLA_PROTINFO          12
+IFLA_TXQLEN            13
+IFLA_MAP               14
+IFLA_WEIGHT            15
+IFLA_OPERSTATE         16
+IFLA_LINKMODE          17
+IFLA_LINKINFO          18
+IFLA_NET_NS_PID                19
+IFLA_IFALIAS           20
+IFLA_NUM_VF            21
+IFLA_VFINFO_LIST       22
+IFLA_STATS64           23
+IFLA_VF_PORTS          24
+IFLA_PORT_SELF         25
+IFLA_AF_SPEC           26
+IFLA_GROUP             27
+IFLA_NET_NS_FD         28
+IFLA_EXT_MASK          29
+IFLA_PROMISCUITY       30
+IFLA_NUM_TX_QUEUES     31
+IFLA_NUM_RX_QUEUES     32
+IFLA_CARRIER           33
+IFLA_PHYS_PORT_ID      34
+IFLA_CARRIER_CHANGES   35
+IFLA_PHYS_SWITCH_ID    36
+IFLA_LINK_NETNSID      37
+IFLA_PHYS_PORT_NAME    38
+IFLA_PROTO_DOWN                39
+IFLA_GSO_MAX_SEGS      40
+IFLA_GSO_MAX_SIZE      41
+IFLA_PAD               42
+IFLA_XDP               43
+IFLA_EVENT             44
-- 
2.7.4


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to