2017-06-21 19:24:23 +03:00
/*
* Copyright ( c ) 2016 Fabien Siron < fabien . siron @ epita . fr >
* Copyright ( c ) 2017 JingPiao Chen < chenjingpiao @ gmail . com >
2018-06-14 14:00:00 +03:00
* Copyright ( c ) 2016 - 2018 The strace developers .
2017-06-21 19:24:23 +03:00
* All rights reserved .
*
2018-12-10 03:00:00 +03:00
* SPDX - License - Identifier : LGPL - 2.1 - or - later
2017-06-21 19:24:23 +03:00
*/
# ifndef STRACE_NLATTR_H
2018-12-30 18:35:21 +03:00
# define STRACE_NLATTR_H
2017-06-21 19:24:23 +03:00
2018-12-30 18:35:21 +03:00
# include "xlat.h"
2018-05-07 09:40:02 +03:00
struct decode_nla_xlat_opts {
const struct xlat * xlat ;
size_t xlat_size ; /* is not needed for XT_NORMAL */
const char * dflt ;
enum xlat_type xt ;
enum xlat_style style ;
2018-05-18 18:36:00 +03:00
const char * prefix ;
const char * suffix ;
uint64_t ( * process_fn ) ( uint64_t val ) ;
2018-05-23 19:50:48 +03:00
size_t size ;
2018-05-07 09:40:02 +03:00
} ;
2018-05-18 18:42:18 +03:00
/*
* Used for IFLA_LINKINFO decoding . Since there are no other indicators
* regarding the nature of data except for previously provided string
* in an IFLA_LINKINFO_KIND attribute , we have to store it in order to pass
* between calls as an opaque data .
*/
struct ifla_linkinfo_ctx {
char kind [ 16 ] ;
} ;
2017-06-28 04:40:00 +03:00
typedef bool ( * nla_decoder_t ) ( struct tcb * , kernel_ulong_t addr ,
Adjust prototypes of netlink parsing functions
Change the type of "len" argument that is based
on struct nlmsghdr.nlmsg_len from kernel_ulong_t to unsigned int.
* defs.h (netlink_decoder_t, DECL_NETLINK): Change "len" argument type
from kernel_ulong_t to unsigned int.
* netlink.c (decode_nlmsgerr_attr_cookie, decode_nlmsgerr,
decode_payload): Likewise.
* netlink_selinux.c (decode_netlink_selinux): Likewise.
* netlink_sock_diag.c (decode_family, decode_unix_diag_req,
decode_meminfo, decode_unix_diag_vfs, decode_unix_diag_inode,
decode_unix_diag_rqlen, decode_unix_diag_msg, decode_netlink_diag_req,
print_group, decode_netlink_diag_ring, decode_netlink_diag_flags,
decode_netlink_diag_msg, decode_packet_diag_req,
decode_packet_diag_info, decode_packet_diag_mclist,
decode_packet_diag_ring, decode_packet_diag_filter,
decode_packet_diag_msg, decode_inet_addr, decode_inet_diag_hostcond,
decode_inet_diag_markcond, decode_bytecode_data, decode_inet_diag_bc_op,
decode_inet_diag_req_compat, decode_inet_diag_req_v2,
decode_inet_diag_req, decode_inet_diag_meminfo, decode_tcpvegas_info,
decode_tcp_dctcp_info, decode_tcp_bbr_info, decode_inet_diag_msg,
decode_smc_diag_req, decode_smc_diag_conninfo, decode_smc_diag_lgrinfo,
decode_smc_diag_msg, netlink_diag_decoder_t, decode_netlink_sock_diag):
Likewise.
* nlattr.c (fetch_nlattr, decode_nlattr_with_data, decode_nlattr,
decode_nla_str, decode_nla_strn, DECODE_NLA_INTEGER): Likewise.
* nlattr.h (nla_decoder_t, DECL_NLA, decode_nlattr): Likewise.
2017-07-19 13:07:34 +03:00
unsigned int len , const void * opaque_data ) ;
2018-05-07 09:28:38 +03:00
/**
* The case of non - NULL decoders and zero size is handled in a special way :
* the zeroth decoder is always called with nla_type being passed as opaque
* data .
*/
2017-06-21 19:24:23 +03:00
extern void
2017-06-28 04:40:00 +03:00
decode_nlattr ( struct tcb * ,
kernel_ulong_t addr ,
Adjust prototypes of netlink parsing functions
Change the type of "len" argument that is based
on struct nlmsghdr.nlmsg_len from kernel_ulong_t to unsigned int.
* defs.h (netlink_decoder_t, DECL_NETLINK): Change "len" argument type
from kernel_ulong_t to unsigned int.
* netlink.c (decode_nlmsgerr_attr_cookie, decode_nlmsgerr,
decode_payload): Likewise.
* netlink_selinux.c (decode_netlink_selinux): Likewise.
* netlink_sock_diag.c (decode_family, decode_unix_diag_req,
decode_meminfo, decode_unix_diag_vfs, decode_unix_diag_inode,
decode_unix_diag_rqlen, decode_unix_diag_msg, decode_netlink_diag_req,
print_group, decode_netlink_diag_ring, decode_netlink_diag_flags,
decode_netlink_diag_msg, decode_packet_diag_req,
decode_packet_diag_info, decode_packet_diag_mclist,
decode_packet_diag_ring, decode_packet_diag_filter,
decode_packet_diag_msg, decode_inet_addr, decode_inet_diag_hostcond,
decode_inet_diag_markcond, decode_bytecode_data, decode_inet_diag_bc_op,
decode_inet_diag_req_compat, decode_inet_diag_req_v2,
decode_inet_diag_req, decode_inet_diag_meminfo, decode_tcpvegas_info,
decode_tcp_dctcp_info, decode_tcp_bbr_info, decode_inet_diag_msg,
decode_smc_diag_req, decode_smc_diag_conninfo, decode_smc_diag_lgrinfo,
decode_smc_diag_msg, netlink_diag_decoder_t, decode_netlink_sock_diag):
Likewise.
* nlattr.c (fetch_nlattr, decode_nlattr_with_data, decode_nlattr,
decode_nla_str, decode_nla_strn, DECODE_NLA_INTEGER): Likewise.
* nlattr.h (nla_decoder_t, DECL_NLA, decode_nlattr): Likewise.
2017-07-19 13:07:34 +03:00
unsigned int len ,
2017-06-28 04:40:00 +03:00
const struct xlat * ,
const char * dflt ,
2018-05-07 09:28:38 +03:00
const nla_decoder_t * decoders ,
2017-06-28 04:40:00 +03:00
unsigned int size ,
const void * opaque_data ) ;
2018-12-30 18:35:21 +03:00
# define DECL_NLA(name) \
2017-06-28 04:40:00 +03:00
extern bool \
decode_nla_ # # name ( struct tcb * , kernel_ulong_t addr , \
2017-07-25 13:57:11 +03:00
unsigned int len , const void * ) \
/* End of DECL_NLA definition. */
nlattr: add unsigned int decoders that print in hex form
* nlattr.h (DECL_NLA(x8), DECL_NLA(x16), DECL_NLA(x32), DECL_NLA(x64)):
New declarations.
* nlattr.c (DECODE_NLA_INTEGER(x8, uint8_t, "%#" PRIx8),
DECODE_NLA_INTEGER(x16, uint16_t, "%#" PRIx16),
DECODE_NLA_INTEGER(x32, uint32_t, "%#" PRIx32),
DECODE_NLA_INTEGER(x64, uint64_t, "%#" PRIx64)): New decoders.
2018-05-18 18:38:43 +03:00
DECL_NLA ( x8 ) ;
DECL_NLA ( x16 ) ;
DECL_NLA ( x32 ) ;
DECL_NLA ( x64 ) ;
2017-06-28 04:40:00 +03:00
DECL_NLA ( u8 ) ;
DECL_NLA ( u16 ) ;
DECL_NLA ( u32 ) ;
DECL_NLA ( u64 ) ;
DECL_NLA ( s8 ) ;
DECL_NLA ( s16 ) ;
DECL_NLA ( s32 ) ;
DECL_NLA ( s64 ) ;
2017-08-27 19:46:22 +03:00
DECL_NLA ( be16 ) ;
2017-08-27 19:33:30 +03:00
DECL_NLA ( be64 ) ;
2018-05-07 09:40:02 +03:00
DECL_NLA ( xval ) ;
2018-05-07 09:40:02 +03:00
DECL_NLA ( flags ) ;
2017-06-28 04:40:00 +03:00
DECL_NLA ( str ) ;
DECL_NLA ( strn ) ;
2017-11-15 18:30:49 +03:00
DECL_NLA ( fd ) ;
2018-05-18 19:06:38 +03:00
DECL_NLA ( uid ) ;
DECL_NLA ( gid ) ;
2017-08-22 18:24:45 +03:00
DECL_NLA ( ifindex ) ;
2018-05-18 18:37:51 +03:00
DECL_NLA ( ether_proto ) ;
2018-04-16 03:02:18 +03:00
DECL_NLA ( ip_proto ) ;
2018-08-19 15:37:12 +03:00
DECL_NLA ( in_addr ) ;
DECL_NLA ( in6_addr ) ;
2017-07-19 13:07:34 +03:00
DECL_NLA ( meminfo ) ;
2017-08-29 13:09:04 +03:00
DECL_NLA ( rt_class ) ;
2018-04-16 03:02:18 +03:00
DECL_NLA ( rt_proto ) ;
rtnl_tc: decode tcmsg netlink attributes
* configure.ac (AC_CHECK_TYPES): Check for gnet_stats_basic,
gnet_stats_queue, gnet_stats_rate_est,
and gnet_stats_rate_est64 structures in <linux/gen_stats.h>.
And check for struct tc_sizespec in <linux/pkt_sched.h>.
* nlattr.h (tc_stats): New prototype.
* rtnl_tc.c: Include <linux/gen_stats.h>, <linux/pkt_sched.h>,
"xlat/rtnl_tca_stab_attrs.h" and "xlat/rtnl_tca_stats_attrs.h".
(decode_tc_stats, decode_tc_estimator, decode_gnet_stats_basic,
decode_gnet_stats_rate_est, decode_gnet_stats_queue,
decode_gnet_stats_rate_est64, decode_nla_tc_stats,
decode_tc_sizespec, print_stab_data, decode_tca_stab_data,
decode_tca_stab): New functions.
(tca_stats_nla_decoders, tca_stab_nla_decoders,
tcmsg_nla_decoders): New arrays.
(decode_tcmsg): Use tcmsg_nla_decoders.
* xlat/rtnl_tca_stab_attrs.in: New file.
* xlat/rtnl_tca_stats_attrs.in: Likewise.
2017-09-04 09:56:24 +03:00
DECL_NLA ( tc_stats ) ;
2017-06-21 19:24:23 +03:00
# endif /* !STRACE_NLATTR_H */