2017-10-13 23:03:16 +03:00
# undef TRACE_SYSTEM
# define TRACE_SYSTEM tcp
# if !defined(_TRACE_TCP_H) || defined(TRACE_HEADER_MULTI_READ)
# define _TRACE_TCP_H
# include <linux/ipv6.h>
# include <linux/tcp.h>
# include <linux/tracepoint.h>
# include <net/ipv6.h>
2017-12-21 21:29:09 +03:00
# define TP_STORE_V4MAPPED(__entry, saddr, daddr) \
do { \
struct in6_addr * pin6 ; \
\
pin6 = ( struct in6_addr * ) __entry - > saddr_v6 ; \
ipv6_addr_set_v4mapped ( saddr , pin6 ) ; \
pin6 = ( struct in6_addr * ) __entry - > daddr_v6 ; \
ipv6_addr_set_v4mapped ( daddr , pin6 ) ; \
} while ( 0 )
# if IS_ENABLED(CONFIG_IPV6)
# define TP_STORE_ADDRS(__entry, saddr, daddr, saddr6, daddr6) \
do { \
if ( sk - > sk_family = = AF_INET6 ) { \
struct in6_addr * pin6 ; \
\
pin6 = ( struct in6_addr * ) __entry - > saddr_v6 ; \
* pin6 = saddr6 ; \
pin6 = ( struct in6_addr * ) __entry - > daddr_v6 ; \
* pin6 = daddr6 ; \
} else { \
TP_STORE_V4MAPPED ( __entry , saddr , daddr ) ; \
} \
} while ( 0 )
# else
# define TP_STORE_ADDRS(__entry, saddr, daddr, saddr6, daddr6) \
TP_STORE_V4MAPPED ( __entry , saddr , daddr )
# endif
2017-10-23 19:20:22 +03:00
/*
* tcp event with arguments sk and skb
*
* Note : this class requires a valid sk pointer ; while skb pointer could
* be NULL .
*/
DECLARE_EVENT_CLASS ( tcp_event_sk_skb ,
2017-10-13 23:03:16 +03:00
2017-10-23 19:20:23 +03:00
TP_PROTO ( const struct sock * sk , const struct sk_buff * skb ) ,
2017-10-13 23:03:16 +03:00
TP_ARGS ( sk , skb ) ,
TP_STRUCT__entry (
2017-10-23 19:20:23 +03:00
__field ( const void * , skbaddr )
__field ( const void * , skaddr )
2017-10-13 23:03:16 +03:00
__field ( __u16 , sport )
__field ( __u16 , dport )
__array ( __u8 , saddr , 4 )
__array ( __u8 , daddr , 4 )
__array ( __u8 , saddr_v6 , 16 )
__array ( __u8 , daddr_v6 , 16 )
) ,
TP_fast_assign (
struct inet_sock * inet = inet_sk ( sk ) ;
__be32 * p32 ;
__entry - > skbaddr = skb ;
__entry - > skaddr = sk ;
__entry - > sport = ntohs ( inet - > inet_sport ) ;
__entry - > dport = ntohs ( inet - > inet_dport ) ;
p32 = ( __be32 * ) __entry - > saddr ;
* p32 = inet - > inet_saddr ;
p32 = ( __be32 * ) __entry - > daddr ;
* p32 = inet - > inet_daddr ;
2017-12-21 21:29:09 +03:00
TP_STORE_ADDRS ( __entry , inet - > inet_saddr , inet - > inet_daddr ,
sk - > sk_v6_rcv_saddr , sk - > sk_v6_daddr ) ;
2017-10-13 23:03:16 +03:00
) ,
2017-10-17 00:24:02 +03:00
TP_printk ( " sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c " ,
2017-10-13 23:03:16 +03:00
__entry - > sport , __entry - > dport , __entry - > saddr , __entry - > daddr ,
__entry - > saddr_v6 , __entry - > daddr_v6 )
) ;
2017-10-23 19:20:22 +03:00
DEFINE_EVENT ( tcp_event_sk_skb , tcp_retransmit_skb ,
2017-10-23 19:20:23 +03:00
TP_PROTO ( const struct sock * sk , const struct sk_buff * skb ) ,
2017-10-23 19:20:22 +03:00
TP_ARGS ( sk , skb )
) ;
2017-10-23 19:20:24 +03:00
/*
* skb of trace_tcp_send_reset is the skb that caused RST . In case of
* active reset , skb should be NULL
*/
DEFINE_EVENT ( tcp_event_sk_skb , tcp_send_reset ,
TP_PROTO ( const struct sock * sk , const struct sk_buff * skb ) ,
TP_ARGS ( sk , skb )
) ;
2017-10-23 19:20:25 +03:00
/*
* tcp event with arguments sk
*
* Note : this class requires a valid sk pointer .
*/
DECLARE_EVENT_CLASS ( tcp_event_sk ,
TP_PROTO ( const struct sock * sk ) ,
TP_ARGS ( sk ) ,
TP_STRUCT__entry (
__field ( const void * , skaddr )
__field ( __u16 , sport )
__field ( __u16 , dport )
__array ( __u8 , saddr , 4 )
__array ( __u8 , daddr , 4 )
__array ( __u8 , saddr_v6 , 16 )
__array ( __u8 , daddr_v6 , 16 )
) ,
TP_fast_assign (
struct inet_sock * inet = inet_sk ( sk ) ;
__be32 * p32 ;
__entry - > skaddr = sk ;
__entry - > sport = ntohs ( inet - > inet_sport ) ;
__entry - > dport = ntohs ( inet - > inet_dport ) ;
p32 = ( __be32 * ) __entry - > saddr ;
* p32 = inet - > inet_saddr ;
p32 = ( __be32 * ) __entry - > daddr ;
* p32 = inet - > inet_daddr ;
2017-12-21 21:29:09 +03:00
TP_STORE_ADDRS ( __entry , inet - > inet_saddr , inet - > inet_daddr ,
sk - > sk_v6_rcv_saddr , sk - > sk_v6_daddr ) ;
2017-10-23 19:20:25 +03:00
) ,
TP_printk ( " sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c " ,
__entry - > sport , __entry - > dport ,
__entry - > saddr , __entry - > daddr ,
__entry - > saddr_v6 , __entry - > daddr_v6 )
) ;
DEFINE_EVENT ( tcp_event_sk , tcp_receive_reset ,
TP_PROTO ( const struct sock * sk ) ,
TP_ARGS ( sk )
) ;
2017-10-23 19:20:26 +03:00
DEFINE_EVENT ( tcp_event_sk , tcp_destroy_sock ,
TP_PROTO ( const struct sock * sk ) ,
TP_ARGS ( sk )
) ;
2017-10-23 19:20:27 +03:00
TRACE_EVENT ( tcp_set_state ,
TP_PROTO ( const struct sock * sk , const int oldstate , const int newstate ) ,
TP_ARGS ( sk , oldstate , newstate ) ,
TP_STRUCT__entry (
__field ( const void * , skaddr )
__field ( int , oldstate )
__field ( int , newstate )
__field ( __u16 , sport )
__field ( __u16 , dport )
__array ( __u8 , saddr , 4 )
__array ( __u8 , daddr , 4 )
__array ( __u8 , saddr_v6 , 16 )
__array ( __u8 , daddr_v6 , 16 )
) ,
TP_fast_assign (
struct inet_sock * inet = inet_sk ( sk ) ;
__be32 * p32 ;
__entry - > skaddr = sk ;
__entry - > oldstate = oldstate ;
__entry - > newstate = newstate ;
__entry - > sport = ntohs ( inet - > inet_sport ) ;
__entry - > dport = ntohs ( inet - > inet_dport ) ;
p32 = ( __be32 * ) __entry - > saddr ;
* p32 = inet - > inet_saddr ;
p32 = ( __be32 * ) __entry - > daddr ;
* p32 = inet - > inet_daddr ;
2017-12-21 21:29:09 +03:00
TP_STORE_ADDRS ( __entry , inet - > inet_saddr , inet - > inet_daddr ,
sk - > sk_v6_rcv_saddr , sk - > sk_v6_daddr ) ;
2017-10-23 19:20:27 +03:00
) ,
TP_printk ( " sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c oldstate=%s newstate=%s " ,
__entry - > sport , __entry - > dport ,
__entry - > saddr , __entry - > daddr ,
__entry - > saddr_v6 , __entry - > daddr_v6 ,
show_tcp_state_name ( __entry - > oldstate ) ,
show_tcp_state_name ( __entry - > newstate ) )
) ;
2017-10-31 00:41:35 +03:00
TRACE_EVENT ( tcp_retransmit_synack ,
TP_PROTO ( const struct sock * sk , const struct request_sock * req ) ,
TP_ARGS ( sk , req ) ,
TP_STRUCT__entry (
__field ( const void * , skaddr )
__field ( const void * , req )
__field ( __u16 , sport )
__field ( __u16 , dport )
__array ( __u8 , saddr , 4 )
__array ( __u8 , daddr , 4 )
__array ( __u8 , saddr_v6 , 16 )
__array ( __u8 , daddr_v6 , 16 )
) ,
TP_fast_assign (
struct inet_request_sock * ireq = inet_rsk ( req ) ;
__be32 * p32 ;
__entry - > skaddr = sk ;
__entry - > req = req ;
__entry - > sport = ireq - > ir_num ;
__entry - > dport = ntohs ( ireq - > ir_rmt_port ) ;
p32 = ( __be32 * ) __entry - > saddr ;
* p32 = ireq - > ir_loc_addr ;
p32 = ( __be32 * ) __entry - > daddr ;
* p32 = ireq - > ir_rmt_addr ;
2017-12-21 21:29:09 +03:00
TP_STORE_ADDRS ( __entry , ireq - > ir_loc_addr , ireq - > ir_rmt_addr ,
ireq - > ir_v6_loc_addr , ireq - > ir_v6_rmt_addr ) ;
2017-10-31 00:41:35 +03:00
) ,
TP_printk ( " sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c " ,
__entry - > sport , __entry - > dport ,
__entry - > saddr , __entry - > daddr ,
__entry - > saddr_v6 , __entry - > daddr_v6 )
) ;
2017-10-13 23:03:16 +03:00
# endif /* _TRACE_TCP_H */
/* This part must be outside protection */
# include <trace/define_trace.h>