]> granicus.if.org Git - strace/commitdiff
rtnl_addrlabel: decode ifaddrlblmsg netlink attributes
authorJingPiao Chen <chenjingpiao@gmail.com>
Wed, 30 Aug 2017 13:14:05 +0000 (21:14 +0800)
committerDmitry V. Levin <ldv@altlinux.org>
Fri, 1 Sep 2017 08:41:08 +0000 (08:41 +0000)
* rtnl_addrlabel.c (decode_ifal_address): New function.
(ifaddrlblmsg_nla_decoders): New array.
(decode_ifaddrlblmsg): Use it.

rtnl_addrlabel.c

index 53cfb2c71e6d5b1b5385d60f3b98247d820826c0..7fc48751f208b8f9f75a67de4f6dad57af1c01b7 100644 (file)
 
 # include "xlat/rtnl_addrlabel_attrs.h"
 
+static bool
+decode_ifal_address(struct tcb *const tcp,
+                   const kernel_ulong_t addr,
+                   const unsigned int len,
+                   const void *const opaque_data)
+{
+       const struct ifaddrlblmsg *const ifal = opaque_data;
+
+       decode_inet_addr(tcp, addr, len, ifal->ifal_family, NULL);
+
+       return true;
+}
+
+static const nla_decoder_t ifaddrlblmsg_nla_decoders[] = {
+       [IFAL_ADDRESS]  = decode_ifal_address,
+       [IFAL_LABEL]    = decode_nla_u32
+};
+
 DECL_NETLINK_ROUTE_DECODER(decode_ifaddrlblmsg)
 {
        struct ifaddrlblmsg ifal = { .ifal_family = family };
@@ -67,7 +85,9 @@ DECL_NETLINK_ROUTE_DECODER(decode_ifaddrlblmsg)
        if (decode_nla && len > offset) {
                tprints(", ");
                decode_nlattr(tcp, addr + offset, len - offset,
-                             rtnl_addrlabel_attrs, "IFAL_???", NULL, 0, NULL);
+                             rtnl_addrlabel_attrs, "IFAL_???",
+                             ifaddrlblmsg_nla_decoders,
+                             ARRAY_SIZE(ifaddrlblmsg_nla_decoders), &ifal);
        }
 }