On Tue, Aug 01, 2017 at 07:48:47AM +0800, JingPiao Chen wrote: > * netlink_route.h: New file. > * rtnl_link.c: Likewise. > * Makefile.am (strace_SOURCES): Add them. > * defs.h (arp_hardware_types, iffflags): New xlat prototypes. > * netlink_route.c: Include "netlink_route.h" > and <linux/rtnetlink.h>. > (netlink_route_decoder_t): New typedef. > (route_decoders): New array. > (decode_netlink_route): Use it. > > Co-authored-by: Fabien Siron <fabien.si...@epita.fr> > --- > Makefile.am | 2 ++ > defs.h | 2 ++ > netlink_route.c | 24 ++++++++++++++++++++++-- > netlink_route.h | 44 +++++++++++++++++++++++++++++++++++++++++++ > rtnl_link.c | 58 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 5 files changed, 128 insertions(+), 2 deletions(-) > create mode 100644 netlink_route.h > create mode 100644 rtnl_link.c > > diff --git a/Makefile.am b/Makefile.am > index d10811c..5981f4c 100644 > --- a/Makefile.am > +++ b/Makefile.am > @@ -189,6 +189,7 @@ strace_SOURCES = \ > netlink_netlink_diag.c \ > netlink_packet_diag.c \ > netlink_route.c \ > + netlink_route.h \ > netlink_selinux.c \ > netlink_smc_diag.c \ > netlink_sock_diag.c \ > @@ -242,6 +243,7 @@ strace_SOURCES = \ > rt_sigframe.c \ > rt_sigreturn.c \ > rtc.c \ > + rtnl_link.c \ > sched.c \ > sched_attr.h \ > scsi.c \ > diff --git a/defs.h b/defs.h > index d70323c..3da1184 100644 > --- a/defs.h > +++ b/defs.h > @@ -282,11 +282,13 @@ struct tcb { > #include "xlat.h" > > extern const struct xlat addrfams[]; > +extern const struct xlat arp_hardware_types[]; > extern const struct xlat at_flags[]; > extern const struct xlat clocknames[]; > extern const struct xlat dirent_types[]; > extern const struct xlat ethernet_protocols[]; > extern const struct xlat evdev_abs[]; > +extern const struct xlat iffflags[]; > extern const struct xlat inet_protocols[]; > extern const struct xlat msg_flags[]; > extern const struct xlat netlink_protocols[]; > diff --git a/netlink_route.c b/netlink_route.c > index dc5a13f..c6338fd 100644 > --- a/netlink_route.c > +++ b/netlink_route.c > @@ -29,6 +29,9 @@ > > #include "defs.h" > #include "netlink.h" > +#include "netlink_route.h" > + > +#include <linux/rtnetlink.h> > > #include "xlat/nl_route_types.h" > > @@ -46,19 +49,36 @@ decode_family(struct tcb *const tcp, const uint8_t family, > tprints("}"); > } > > +typedef DECL_NETLINK_ROUTE_DECODER((*netlink_route_decoder_t)); > + > +static const netlink_route_decoder_t route_decoders[] = { > + [RTM_DELLINK - RTM_BASE] = decode_ifinfomsg, > + [RTM_GETLINK - RTM_BASE] = decode_ifinfomsg, > + [RTM_NEWLINK - RTM_BASE] = decode_ifinfomsg, > + [RTM_SETLINK - RTM_BASE] = decode_ifinfomsg > +}; > + > bool > decode_netlink_route(struct tcb *const tcp, > const struct nlmsghdr *const nlmsghdr, > const kernel_ulong_t addr, > const unsigned int len) > { > + unsigned int type = nlmsghdr->nlmsg_type; > uint8_t family; > > if (nlmsghdr->nlmsg_type == NLMSG_DONE) > return false; > > - if (!umove_or_printaddr(tcp, addr, &family)) > - decode_family(tcp, family, addr, len); > + if (!umove_or_printaddr(tcp, addr, &family)) { > + if (type >= RTM_BASE > + && type - RTM_BASE < ARRAY_SIZE(route_decoders) > + && route_decoders[type - RTM_BASE]) { > + route_decoders[type - RTM_BASE](tcp, nlmsghdr, > + family, addr, len);
What if you assigned "type - RTM_BASE" to a variable and used it instead? -- ldv
signature.asc
Description: PGP signature
------------------------------------------------------------------------------ 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