netlink: add a basic rtnetlink parser of rule messages
* defs.h (routing_table_ids): New xlat prototype. * rtnl_rule.c: New file. * Makefile.am (strace_SOURCES): Add it. * defs.h (ip_type_of_services, routing_table_ids): New xlat prototypes. * netlink_route.h (decode_fib_rule_hdr): New prototype. * configure.ac (AC_CHECK_HEADERS): Add linux/fib_rules.h. * netlink_route.c (route_decoders): Add RTM_DELRULE, RTM_GETRULE, and RTM_NEWRULE. * xlat/fib_rule_actions.in: New file. * xlat/fib_rule_flags.in: Likewise. Co-authored-by: Fabien Siron <fabien.siron@epita.fr>
This commit is contained in:
parent
a114dd92fe
commit
a0d3f258d0
@ -250,6 +250,7 @@ strace_SOURCES = \
|
||||
rtnl_addr.c \
|
||||
rtnl_link.c \
|
||||
rtnl_route.c \
|
||||
rtnl_rule.c \
|
||||
sched.c \
|
||||
sched_attr.h \
|
||||
scsi.c \
|
||||
|
@ -377,6 +377,7 @@ AC_CHECK_HEADERS(m4_normalize([
|
||||
linux/dm-ioctl.h
|
||||
linux/dqblk_xfs.h
|
||||
linux/falloc.h
|
||||
linux/fib_rules.h
|
||||
linux/fiemap.h
|
||||
linux/genetlink.h
|
||||
linux/hiddev.h
|
||||
|
2
defs.h
2
defs.h
@ -292,6 +292,7 @@ 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 ip_type_of_services[];
|
||||
extern const struct xlat msg_flags[];
|
||||
extern const struct xlat netlink_protocols[];
|
||||
extern const struct xlat nl_route_types[];
|
||||
@ -299,6 +300,7 @@ extern const struct xlat open_access_modes[];
|
||||
extern const struct xlat open_mode_flags[];
|
||||
extern const struct xlat resource_flags[];
|
||||
extern const struct xlat routing_scopes[];
|
||||
extern const struct xlat routing_table_ids[];
|
||||
extern const struct xlat setns_types[];
|
||||
extern const struct xlat sg_io_info[];
|
||||
extern const struct xlat socketlayers[];
|
||||
|
@ -65,7 +65,11 @@ static const netlink_route_decoder_t route_decoders[] = {
|
||||
|
||||
[RTM_DELROUTE - RTM_BASE] = decode_rtmsg,
|
||||
[RTM_GETROUTE - RTM_BASE] = decode_rtmsg,
|
||||
[RTM_NEWROUTE - RTM_BASE] = decode_rtmsg
|
||||
[RTM_NEWROUTE - RTM_BASE] = decode_rtmsg,
|
||||
|
||||
[RTM_DELRULE - RTM_BASE] = decode_fib_rule_hdr,
|
||||
[RTM_GETRULE - RTM_BASE] = decode_fib_rule_hdr,
|
||||
[RTM_NEWRULE - RTM_BASE] = decode_fib_rule_hdr
|
||||
};
|
||||
|
||||
bool
|
||||
|
@ -39,6 +39,7 @@ route_decode_name(struct tcb *tcp, \
|
||||
unsigned int len) \
|
||||
/* End of DECL_NETLINK_ROUTE_DECODER definition. */
|
||||
|
||||
extern DECL_NETLINK_ROUTE_DECODER(decode_fib_rule_hdr);
|
||||
extern DECL_NETLINK_ROUTE_DECODER(decode_ifaddrmsg);
|
||||
extern DECL_NETLINK_ROUTE_DECODER(decode_ifinfomsg);
|
||||
extern DECL_NETLINK_ROUTE_DECODER(decode_rtmsg);
|
||||
|
78
rtnl_rule.c
Normal file
78
rtnl_rule.c
Normal file
@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
|
||||
* Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
|
||||
* Copyright (c) 2016-2017 The strace developers.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "defs.h"
|
||||
|
||||
#include "netlink_route.h"
|
||||
#include "print_fields.h"
|
||||
|
||||
#include "netlink.h"
|
||||
#include <linux/rtnetlink.h>
|
||||
#ifdef HAVE_LINUX_FIB_RULES_H
|
||||
# include <linux/fib_rules.h>
|
||||
#endif
|
||||
|
||||
#include "xlat/fib_rule_actions.h"
|
||||
#include "xlat/fib_rule_flags.h"
|
||||
|
||||
DECL_NETLINK_ROUTE_DECODER(decode_fib_rule_hdr)
|
||||
{
|
||||
/*
|
||||
* struct rtmsg and struct fib_rule_hdr are essentially
|
||||
* the same structure, use struct rtmsg but treat it as
|
||||
* struct fib_rule_hdr.
|
||||
*/
|
||||
struct rtmsg msg = { .rtm_family = family };
|
||||
const size_t offset = sizeof(msg.rtm_family);
|
||||
|
||||
tprints("{family=");
|
||||
printxval(addrfams, msg.rtm_family, "AF_???");
|
||||
|
||||
tprints(", ");
|
||||
if (len >= sizeof(msg)) {
|
||||
if (!umoven_or_printaddr(tcp, addr + offset,
|
||||
sizeof(msg) - offset,
|
||||
(void *) &msg + offset)) {
|
||||
tprintf("dst_len=%u, src_len=%u",
|
||||
msg.rtm_dst_len, msg.rtm_src_len);
|
||||
tprints(", tos=");
|
||||
printflags(ip_type_of_services, msg.rtm_tos,
|
||||
"IPTOS_TOS_???");
|
||||
tprints(", table=");
|
||||
printxval(routing_table_ids, msg.rtm_table, NULL);
|
||||
tprints(", action=");
|
||||
printxval(fib_rule_actions, msg.rtm_type, "FR_ACT_???");
|
||||
tprints(", flags=");
|
||||
printflags(fib_rule_flags, msg.rtm_flags,
|
||||
"FIB_RULE_???");
|
||||
}
|
||||
} else
|
||||
tprints("...");
|
||||
tprints("}");
|
||||
}
|
9
xlat/fib_rule_actions.in
Normal file
9
xlat/fib_rule_actions.in
Normal file
@ -0,0 +1,9 @@
|
||||
FR_ACT_UNSPEC 0
|
||||
FR_ACT_TO_TBL 1
|
||||
FR_ACT_GOTO 2
|
||||
FR_ACT_NOP 3
|
||||
FR_ACT_RES3 4
|
||||
FR_ACT_RES4 5
|
||||
FR_ACT_BLACKHOLE 6
|
||||
FR_ACT_UNREACHABLE 7
|
||||
FR_ACT_PROHIBIT 8
|
6
xlat/fib_rule_flags.in
Normal file
6
xlat/fib_rule_flags.in
Normal file
@ -0,0 +1,6 @@
|
||||
FIB_RULE_PERMANENT
|
||||
FIB_RULE_INVERT
|
||||
FIB_RULE_UNRESOLVED
|
||||
FIB_RULE_IIF_DETACHED
|
||||
FIB_RULE_OIF_DETACHED
|
||||
FIB_RULE_FIND_SADDR
|
Loading…
Reference in New Issue
Block a user