* configure.ac (AC_CHECK_TYPES): Check for
struct ifla_bridge_id in <linux/if_link.h>
* rtnl_link.c: Include "xlat/rtnl_ifla_brport_attrs.h".
(decode_ifla_bridge_id, decode_ifla_protinfo): New functions.
(ifla_brport_nla_decoders): New array.
(ifinfomsg_nla_decoders) <IFLA_PROTINFO>: Use decode_ifla_protinfo.
* xlat/rtnl_ifla_brport_attrs.in: New file.
---
 configure.ac                   |  5 ++-
 rtnl_link.c                    | 73 +++++++++++++++++++++++++++++++++++++++++-
 xlat/rtnl_ifla_brport_attrs.in | 31 ++++++++++++++++++
 3 files changed, 107 insertions(+), 2 deletions(-)
 create mode 100644 xlat/rtnl_ifla_brport_attrs.in

diff --git a/configure.ac b/configure.ac
index 28e9a34..81f7dad 100644
--- a/configure.ac
+++ b/configure.ac
@@ -460,7 +460,10 @@ AC_CHECK_TYPES(m4_normalize([
        struct ndt_stats
 ]),,, [#include <linux/neighbour.h>])
 
-AC_CHECK_TYPES([struct rtnl_link_stats64],,, [#include <linux/if_link.h>])
+AC_CHECK_TYPES(m4_normalize([
+       struct ifla_bridge_id,
+       struct rtnl_link_stats64
+]),,, [#include <linux/if_link.h>])
 AC_CHECK_MEMBERS(m4_normalize([
        struct rtnl_link_stats.rx_nohandler,
        struct rtnl_link_stats64.rx_nohandler
diff --git a/rtnl_link.c b/rtnl_link.c
index 227a452..9909684 100644
--- a/rtnl_link.c
+++ b/rtnl_link.c
@@ -38,6 +38,7 @@
 #endif
 #include <linux/rtnetlink.h>
 
+#include "xlat/rtnl_ifla_brport_attrs.h"
 #include "xlat/rtnl_link_attrs.h"
 
 static bool
@@ -91,6 +92,76 @@ decode_rtnl_link_stats(struct tcb *const tcp,
 }
 
 static bool
+decode_ifla_bridge_id(struct tcb *const tcp,
+                     const kernel_ulong_t addr,
+                     const unsigned int len,
+                     const void *const opaque_data)
+{
+#ifdef HAVE_STRUCT_IFLA_BRIDGE_ID
+       struct ifla_bridge_id id;
+
+       if (len < sizeof(id))
+               return false;
+       else if (!umove_or_printaddr(tcp, addr, &id)) {
+               tprintf("{prio=[%u, %u], addr=%02x:%02x:%02x:%02x:%02x:%02x}",
+                       id.prio[0], id.prio[1],
+                       id.addr[0], id.addr[1], id.addr[2],
+                       id.addr[3], id.addr[4], id.addr[5]);
+       }
+
+       return true;
+#else
+       return false;
+#endif
+}
+
+static const nla_decoder_t ifla_brport_nla_decoders[] = {
+       [IFLA_BRPORT_STATE]                     = decode_nla_u8,
+       [IFLA_BRPORT_PRIORITY]                  = decode_nla_u16,
+       [IFLA_BRPORT_COST]                      = decode_nla_u32,
+       [IFLA_BRPORT_MODE]                      = decode_nla_u8,
+       [IFLA_BRPORT_GUARD]                     = decode_nla_u8,
+       [IFLA_BRPORT_PROTECT]                   = decode_nla_u8,
+       [IFLA_BRPORT_FAST_LEAVE]                = decode_nla_u8,
+       [IFLA_BRPORT_LEARNING]                  = decode_nla_u8,
+       [IFLA_BRPORT_UNICAST_FLOOD]             = decode_nla_u8,
+       [IFLA_BRPORT_PROXYARP]                  = decode_nla_u8,
+       [IFLA_BRPORT_LEARNING_SYNC]             = decode_nla_u8,
+       [IFLA_BRPORT_PROXYARP_WIFI]             = decode_nla_u8,
+       [IFLA_BRPORT_ROOT_ID]                   = decode_ifla_bridge_id,
+       [IFLA_BRPORT_BRIDGE_ID]                 = decode_ifla_bridge_id,
+       [IFLA_BRPORT_DESIGNATED_PORT]           = decode_nla_u16,
+       [IFLA_BRPORT_DESIGNATED_COST]           = decode_nla_u16,
+       [IFLA_BRPORT_ID]                        = decode_nla_u16,
+       [IFLA_BRPORT_NO]                        = decode_nla_u16,
+       [IFLA_BRPORT_TOPOLOGY_CHANGE_ACK]       = decode_nla_u8,
+       [IFLA_BRPORT_CONFIG_PENDING]            = decode_nla_u8,
+       [IFLA_BRPORT_MESSAGE_AGE_TIMER]         = decode_nla_u64,
+       [IFLA_BRPORT_FORWARD_DELAY_TIMER]       = decode_nla_u64,
+       [IFLA_BRPORT_HOLD_TIMER]                = decode_nla_u64,
+       [IFLA_BRPORT_FLUSH]                     = NULL,
+       [IFLA_BRPORT_MULTICAST_ROUTER]          = decode_nla_u8,
+       [IFLA_BRPORT_PAD]                       = NULL,
+       [IFLA_BRPORT_MCAST_FLOOD]               = decode_nla_u8,
+       [IFLA_BRPORT_MCAST_TO_UCAST]            = decode_nla_u8,
+       [IFLA_BRPORT_VLAN_TUNNEL]               = decode_nla_u8,
+       [IFLA_BRPORT_BCAST_FLOOD]               = decode_nla_u8
+};
+
+static bool
+decode_ifla_protinfo(struct tcb *const tcp,
+                    const kernel_ulong_t addr,
+                    const unsigned int len,
+                    const void *const opaque_data)
+{
+       decode_nlattr(tcp, addr, len, rtnl_ifla_brport_attrs,
+                     "IFLA_BRPORT_???", ifla_brport_nla_decoders,
+                     ARRAY_SIZE(ifla_brport_nla_decoders), opaque_data);
+
+       return true;
+}
+
+static bool
 decode_rtnl_link_ifmap(struct tcb *const tcp,
                       const kernel_ulong_t addr,
                       const unsigned int len,
@@ -181,7 +252,7 @@ static const nla_decoder_t ifinfomsg_nla_decoders[] = {
        [IFLA_PRIORITY]         = NULL, /* unused */
        [IFLA_MASTER]           = decode_nla_u32,
        [IFLA_WIRELESS]         = NULL, /* unimplemented */
-       [IFLA_PROTINFO]         = NULL, /* unimplemented */
+       [IFLA_PROTINFO]         = decode_ifla_protinfo,
        [IFLA_TXQLEN]           = decode_nla_u32,
        [IFLA_MAP]              = decode_rtnl_link_ifmap,
        [IFLA_WEIGHT]           = decode_nla_u32,
diff --git a/xlat/rtnl_ifla_brport_attrs.in b/xlat/rtnl_ifla_brport_attrs.in
new file mode 100644
index 0000000..e18e8c5
--- /dev/null
+++ b/xlat/rtnl_ifla_brport_attrs.in
@@ -0,0 +1,31 @@
+IFLA_BRPORT_UNSPEC             0
+IFLA_BRPORT_STATE              1
+IFLA_BRPORT_PRIORITY           2
+IFLA_BRPORT_COST               3
+IFLA_BRPORT_MODE               4
+IFLA_BRPORT_GUARD              5
+IFLA_BRPORT_PROTECT            6
+IFLA_BRPORT_FAST_LEAVE         7
+IFLA_BRPORT_LEARNING           8
+IFLA_BRPORT_UNICAST_FLOOD      9
+IFLA_BRPORT_PROXYARP           10
+IFLA_BRPORT_LEARNING_SYNC      11
+IFLA_BRPORT_PROXYARP_WIFI      12
+IFLA_BRPORT_ROOT_ID            13
+IFLA_BRPORT_BRIDGE_ID          14
+IFLA_BRPORT_DESIGNATED_PORT    15
+IFLA_BRPORT_DESIGNATED_COST    16
+IFLA_BRPORT_ID                 17
+IFLA_BRPORT_NO                 18
+IFLA_BRPORT_TOPOLOGY_CHANGE_ACK        19
+IFLA_BRPORT_CONFIG_PENDING     20
+IFLA_BRPORT_MESSAGE_AGE_TIMER  21
+IFLA_BRPORT_FORWARD_DELAY_TIMER        22
+IFLA_BRPORT_HOLD_TIMER         23
+IFLA_BRPORT_FLUSH              24
+IFLA_BRPORT_MULTICAST_ROUTER   25
+IFLA_BRPORT_PAD                        26
+IFLA_BRPORT_MCAST_FLOOD                27
+IFLA_BRPORT_MCAST_TO_UCAST     28
+IFLA_BRPORT_VLAN_TUNNEL                29
+IFLA_BRPORT_BCAST_FLOOD                30
-- 
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