2017-06-22 00:24:23 +08:00
/*
* Copyright ( c ) 2016 Fabien Siron < fabien . siron @ epita . fr >
* Copyright ( c ) 2017 JingPiao Chen < chenjingpiao @ gmail . com >
2018-06-14 11:00:00 +00:00
* Copyright ( c ) 2016 - 2018 The strace developers .
2017-06-22 00:24:23 +08:00
* 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 .
*/
# ifndef STRACE_NLATTR_H
# define STRACE_NLATTR_H
2018-05-07 08:40:02 +02:00
# include "xlat.h"
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 17:36:00 +02:00
const char * prefix ;
const char * suffix ;
uint64_t ( * process_fn ) ( uint64_t val ) ;
2018-05-23 18:50:48 +02:00
size_t size ;
2018-05-07 08:40:02 +02:00
} ;
2018-05-18 17:42:18 +02: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 09:40:00 +08: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 10:07:34 +00:00
unsigned int len , const void * opaque_data ) ;
2018-05-07 08:28:38 +02: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-22 00:24:23 +08:00
extern void
2017-06-28 09:40:00 +08: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 10:07:34 +00:00
unsigned int len ,
2017-06-28 09:40:00 +08:00
const struct xlat * ,
const char * dflt ,
2018-05-07 08:28:38 +02:00
const nla_decoder_t * decoders ,
2017-06-28 09:40:00 +08:00
unsigned int size ,
const void * opaque_data ) ;
# define DECL_NLA(name) \
extern bool \
decode_nla_ # # name ( struct tcb * , kernel_ulong_t addr , \
2017-07-25 12:57:11 +02: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 17:38:43 +02:00
DECL_NLA ( x8 ) ;
DECL_NLA ( x16 ) ;
DECL_NLA ( x32 ) ;
DECL_NLA ( x64 ) ;
2017-06-28 09:40:00 +08: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-28 00:46:22 +08:00
DECL_NLA ( be16 ) ;
2017-08-28 00:33:30 +08:00
DECL_NLA ( be64 ) ;
2018-05-07 08:40:02 +02:00
DECL_NLA ( xval ) ;
2018-05-07 08:40:02 +02:00
DECL_NLA ( flags ) ;
2017-06-28 09:40:00 +08:00
DECL_NLA ( str ) ;
DECL_NLA ( strn ) ;
2017-11-15 15:30:49 +00:00
DECL_NLA ( fd ) ;
2018-05-18 18:06:38 +02:00
DECL_NLA ( uid ) ;
DECL_NLA ( gid ) ;
2017-08-22 23:24:45 +08:00
DECL_NLA ( ifindex ) ;
2018-05-18 17:37:51 +02:00
DECL_NLA ( ether_proto ) ;
2018-04-16 02:02:18 +02:00
DECL_NLA ( ip_proto ) ;
2017-07-19 10:07:34 +00:00
DECL_NLA ( meminfo ) ;
2017-08-29 10:09:04 +00:00
DECL_NLA ( rt_class ) ;
2018-04-16 02:02:18 +02: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 14:56:24 +08:00
DECL_NLA ( tc_stats ) ;
2017-06-22 00:24:23 +08:00
# endif /* !STRACE_NLATTR_H */