blob: 3e57e1ae1c6b0c30e65a95f9d9ee7db0353a6df7 [file] [log] [blame]
Cong Wange0861012017-10-13 13:03:16 -07001#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
Song Liuf6e37b22017-10-23 09:20:22 -070012/*
13 * tcp event with arguments sk and skb
14 *
15 * Note: this class requires a valid sk pointer; while skb pointer could
16 * be NULL.
17 */
18DECLARE_EVENT_CLASS(tcp_event_sk_skb,
Cong Wange0861012017-10-13 13:03:16 -070019
Song Liu7344e292017-10-23 09:20:23 -070020 TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
Cong Wange0861012017-10-13 13:03:16 -070021
22 TP_ARGS(sk, skb),
23
24 TP_STRUCT__entry(
Song Liu7344e292017-10-23 09:20:23 -070025 __field(const void *, skbaddr)
26 __field(const void *, skaddr)
Cong Wange0861012017-10-13 13:03:16 -070027 __field(__u16, sport)
28 __field(__u16, dport)
29 __array(__u8, saddr, 4)
30 __array(__u8, daddr, 4)
31 __array(__u8, saddr_v6, 16)
32 __array(__u8, daddr_v6, 16)
33 ),
34
35 TP_fast_assign(
Cong Wange0861012017-10-13 13:03:16 -070036 struct inet_sock *inet = inet_sk(sk);
37 struct in6_addr *pin6;
38 __be32 *p32;
39
40 __entry->skbaddr = skb;
41 __entry->skaddr = sk;
42
43 __entry->sport = ntohs(inet->inet_sport);
44 __entry->dport = ntohs(inet->inet_dport);
45
46 p32 = (__be32 *) __entry->saddr;
47 *p32 = inet->inet_saddr;
48
49 p32 = (__be32 *) __entry->daddr;
50 *p32 = inet->inet_daddr;
51
David Ahern89005672017-10-18 08:17:29 -070052#if IS_ENABLED(CONFIG_IPV6)
53 if (sk->sk_family == AF_INET6) {
Cong Wange0861012017-10-13 13:03:16 -070054 pin6 = (struct in6_addr *)__entry->saddr_v6;
David Ahern386fd5d2017-10-16 15:32:07 -070055 *pin6 = sk->sk_v6_rcv_saddr;
Cong Wange0861012017-10-13 13:03:16 -070056 pin6 = (struct in6_addr *)__entry->daddr_v6;
David Ahern386fd5d2017-10-16 15:32:07 -070057 *pin6 = sk->sk_v6_daddr;
David Ahern89005672017-10-18 08:17:29 -070058 } else
59#endif
60 {
Cong Wange0861012017-10-13 13:03:16 -070061 pin6 = (struct in6_addr *)__entry->saddr_v6;
62 ipv6_addr_set_v4mapped(inet->inet_saddr, pin6);
63 pin6 = (struct in6_addr *)__entry->daddr_v6;
64 ipv6_addr_set_v4mapped(inet->inet_daddr, pin6);
65 }
66 ),
67
David Ahernfb6ff752017-10-16 14:24:02 -070068 TP_printk("sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c",
Cong Wange0861012017-10-13 13:03:16 -070069 __entry->sport, __entry->dport, __entry->saddr, __entry->daddr,
70 __entry->saddr_v6, __entry->daddr_v6)
71);
72
Song Liuf6e37b22017-10-23 09:20:22 -070073DEFINE_EVENT(tcp_event_sk_skb, tcp_retransmit_skb,
74
Song Liu7344e292017-10-23 09:20:23 -070075 TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
Song Liuf6e37b22017-10-23 09:20:22 -070076
77 TP_ARGS(sk, skb)
78);
79
Song Liuc24b14c2017-10-23 09:20:24 -070080/*
81 * skb of trace_tcp_send_reset is the skb that caused RST. In case of
82 * active reset, skb should be NULL
83 */
84DEFINE_EVENT(tcp_event_sk_skb, tcp_send_reset,
85
86 TP_PROTO(const struct sock *sk, const struct sk_buff *skb),
87
88 TP_ARGS(sk, skb)
89);
90
Cong Wange0861012017-10-13 13:03:16 -070091#endif /* _TRACE_TCP_H */
92
93/* This part must be outside protection */
94#include <trace/define_trace.h>