1 #undef TRACE_SYSTEM 2 #define TRACE_SYSTEM tcp 3 4 #if !defined(_TRACE_TCP_H) || defined(TRACE_HEADER_MULTI_READ) 5 #define _TRACE_TCP_H 6 7 #include <linux/ipv6.h> 8 #include <linux/tcp.h> 9 #include <linux/tracepoint.h> 10 #include <net/ipv6.h> 11 12 TRACE_EVENT(tcp_retransmit_skb, 13 14 TP_PROTO(struct sock *sk, struct sk_buff *skb), 15 16 TP_ARGS(sk, skb), 17 18 TP_STRUCT__entry( 19 __field(void *, skbaddr) 20 __field(void *, skaddr) 21 __field(__u16, sport) 22 __field(__u16, dport) 23 __array(__u8, saddr, 4) 24 __array(__u8, daddr, 4) 25 __array(__u8, saddr_v6, 16) 26 __array(__u8, daddr_v6, 16) 27 ), 28 29 TP_fast_assign( 30 struct ipv6_pinfo *np = inet6_sk(sk); 31 struct inet_sock *inet = inet_sk(sk); 32 struct in6_addr *pin6; 33 __be32 *p32; 34 35 __entry->skbaddr = skb; 36 __entry->skaddr = sk; 37 38 __entry->sport = ntohs(inet->inet_sport); 39 __entry->dport = ntohs(inet->inet_dport); 40 41 p32 = (__be32 *) __entry->saddr; 42 *p32 = inet->inet_saddr; 43 44 p32 = (__be32 *) __entry->daddr; 45 *p32 = inet->inet_daddr; 46 47 if (np) { 48 pin6 = (struct in6_addr *)__entry->saddr_v6; 49 *pin6 = np->saddr; 50 pin6 = (struct in6_addr *)__entry->daddr_v6; 51 *pin6 = *(np->daddr_cache); 52 } else { 53 pin6 = (struct in6_addr *)__entry->saddr_v6; 54 ipv6_addr_set_v4mapped(inet->inet_saddr, pin6); 55 pin6 = (struct in6_addr *)__entry->daddr_v6; 56 ipv6_addr_set_v4mapped(inet->inet_daddr, pin6); 57 } 58 ), 59 60 TP_printk("sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6 daddrv6=%pI6", 61 __entry->sport, __entry->dport, __entry->saddr, __entry->daddr, 62 __entry->saddr_v6, __entry->daddr_v6) 63 ); 64 65 #endif /* _TRACE_TCP_H */ 66 67 /* This part must be outside protection */ 68 #include <trace/define_trace.h> 69