735 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#undef TRACE_SYSTEM3#define TRACE_SYSTEM tcp4 5#if !defined(_TRACE_TCP_H) || defined(TRACE_HEADER_MULTI_READ)6#define _TRACE_TCP_H7 8#include <linux/ipv6.h>9#include <linux/tcp.h>10#include <linux/tracepoint.h>11#include <net/ipv6.h>12#include <net/tcp.h>13#include <linux/sock_diag.h>14#include <net/rstreason.h>15 16/*17 * tcp event with arguments sk and skb18 *19 * Note: this class requires a valid sk pointer; while skb pointer could20 * be NULL.21 */22DECLARE_EVENT_CLASS(tcp_event_sk_skb,23 24 TP_PROTO(const struct sock *sk, const struct sk_buff *skb),25 26 TP_ARGS(sk, skb),27 28 TP_STRUCT__entry(29 __field(const void *, skbaddr)30 __field(const void *, skaddr)31 __field(int, state)32 __field(__u16, sport)33 __field(__u16, dport)34 __field(__u16, family)35 __array(__u8, saddr, 4)36 __array(__u8, daddr, 4)37 __array(__u8, saddr_v6, 16)38 __array(__u8, daddr_v6, 16)39 ),40 41 TP_fast_assign(42 const struct inet_sock *inet = inet_sk(sk);43 __be32 *p32;44 45 __entry->skbaddr = skb;46 __entry->skaddr = sk;47 __entry->state = sk->sk_state;48 49 __entry->sport = ntohs(inet->inet_sport);50 __entry->dport = ntohs(inet->inet_dport);51 __entry->family = sk->sk_family;52 53 p32 = (__be32 *) __entry->saddr;54 *p32 = inet->inet_saddr;55 56 p32 = (__be32 *) __entry->daddr;57 *p32 = inet->inet_daddr;58 59 TP_STORE_ADDRS(__entry, inet->inet_saddr, inet->inet_daddr,60 sk->sk_v6_rcv_saddr, sk->sk_v6_daddr);61 ),62 63 TP_printk("skbaddr=%p skaddr=%p family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c state=%s",64 __entry->skbaddr, __entry->skaddr,65 show_family_name(__entry->family),66 __entry->sport, __entry->dport, __entry->saddr, __entry->daddr,67 __entry->saddr_v6, __entry->daddr_v6,68 show_tcp_state_name(__entry->state))69);70 71DEFINE_EVENT(tcp_event_sk_skb, tcp_retransmit_skb,72 73 TP_PROTO(const struct sock *sk, const struct sk_buff *skb),74 75 TP_ARGS(sk, skb)76);77 78#undef FN79#define FN(reason) TRACE_DEFINE_ENUM(SK_RST_REASON_##reason);80DEFINE_RST_REASON(FN, FN)81 82#undef FN83#undef FNe84#define FN(reason) { SK_RST_REASON_##reason, #reason },85#define FNe(reason) { SK_RST_REASON_##reason, #reason }86 87/*88 * skb of trace_tcp_send_reset is the skb that caused RST. In case of89 * active reset, skb should be NULL90 */91TRACE_EVENT(tcp_send_reset,92 93 TP_PROTO(const struct sock *sk,94 const struct sk_buff *skb__nullable,95 const enum sk_rst_reason reason),96 97 TP_ARGS(sk, skb__nullable, reason),98 99 TP_STRUCT__entry(100 __field(const void *, skbaddr)101 __field(const void *, skaddr)102 __field(int, state)103 __field(enum sk_rst_reason, reason)104 __array(__u8, saddr, sizeof(struct sockaddr_in6))105 __array(__u8, daddr, sizeof(struct sockaddr_in6))106 ),107 108 TP_fast_assign(109 __entry->skbaddr = skb__nullable;110 __entry->skaddr = sk;111 /* Zero means unknown state. */112 __entry->state = sk ? sk->sk_state : 0;113 114 memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));115 memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));116 117 if (sk && sk_fullsock(sk)) {118 const struct inet_sock *inet = inet_sk(sk);119 120 TP_STORE_ADDR_PORTS(__entry, inet, sk);121 } else if (skb__nullable) {122 const struct tcphdr *th = (const struct tcphdr *)skb__nullable->data;123 /*124 * We should reverse the 4-tuple of skb, so later125 * it can print the right flow direction of rst.126 */127 TP_STORE_ADDR_PORTS_SKB(skb__nullable, th, entry->daddr, entry->saddr);128 }129 __entry->reason = reason;130 ),131 132 TP_printk("skbaddr=%p skaddr=%p src=%pISpc dest=%pISpc state=%s reason=%s",133 __entry->skbaddr, __entry->skaddr,134 __entry->saddr, __entry->daddr,135 __entry->state ? show_tcp_state_name(__entry->state) : "UNKNOWN",136 __print_symbolic(__entry->reason, DEFINE_RST_REASON(FN, FNe)))137);138 139#undef FN140#undef FNe141 142/*143 * tcp event with arguments sk144 *145 * Note: this class requires a valid sk pointer.146 */147DECLARE_EVENT_CLASS(tcp_event_sk,148 149 TP_PROTO(struct sock *sk),150 151 TP_ARGS(sk),152 153 TP_STRUCT__entry(154 __field(const void *, skaddr)155 __field(__u16, sport)156 __field(__u16, dport)157 __field(__u16, family)158 __array(__u8, saddr, 4)159 __array(__u8, daddr, 4)160 __array(__u8, saddr_v6, 16)161 __array(__u8, daddr_v6, 16)162 __field(__u64, sock_cookie)163 ),164 165 TP_fast_assign(166 struct inet_sock *inet = inet_sk(sk);167 __be32 *p32;168 169 __entry->skaddr = sk;170 171 __entry->sport = ntohs(inet->inet_sport);172 __entry->dport = ntohs(inet->inet_dport);173 __entry->family = sk->sk_family;174 175 p32 = (__be32 *) __entry->saddr;176 *p32 = inet->inet_saddr;177 178 p32 = (__be32 *) __entry->daddr;179 *p32 = inet->inet_daddr;180 181 TP_STORE_ADDRS(__entry, inet->inet_saddr, inet->inet_daddr,182 sk->sk_v6_rcv_saddr, sk->sk_v6_daddr);183 184 __entry->sock_cookie = sock_gen_cookie(sk);185 ),186 187 TP_printk("family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c sock_cookie=%llx",188 show_family_name(__entry->family),189 __entry->sport, __entry->dport,190 __entry->saddr, __entry->daddr,191 __entry->saddr_v6, __entry->daddr_v6,192 __entry->sock_cookie)193);194 195DEFINE_EVENT(tcp_event_sk, tcp_receive_reset,196 197 TP_PROTO(struct sock *sk),198 199 TP_ARGS(sk)200);201 202DEFINE_EVENT(tcp_event_sk, tcp_destroy_sock,203 204 TP_PROTO(struct sock *sk),205 206 TP_ARGS(sk)207);208 209DEFINE_EVENT(tcp_event_sk, tcp_rcv_space_adjust,210 211 TP_PROTO(struct sock *sk),212 213 TP_ARGS(sk)214);215 216TRACE_EVENT(tcp_retransmit_synack,217 218 TP_PROTO(const struct sock *sk, const struct request_sock *req),219 220 TP_ARGS(sk, req),221 222 TP_STRUCT__entry(223 __field(const void *, skaddr)224 __field(const void *, req)225 __field(__u16, sport)226 __field(__u16, dport)227 __field(__u16, family)228 __array(__u8, saddr, 4)229 __array(__u8, daddr, 4)230 __array(__u8, saddr_v6, 16)231 __array(__u8, daddr_v6, 16)232 ),233 234 TP_fast_assign(235 struct inet_request_sock *ireq = inet_rsk(req);236 __be32 *p32;237 238 __entry->skaddr = sk;239 __entry->req = req;240 241 __entry->sport = ireq->ir_num;242 __entry->dport = ntohs(ireq->ir_rmt_port);243 __entry->family = sk->sk_family;244 245 p32 = (__be32 *) __entry->saddr;246 *p32 = ireq->ir_loc_addr;247 248 p32 = (__be32 *) __entry->daddr;249 *p32 = ireq->ir_rmt_addr;250 251 TP_STORE_ADDRS(__entry, ireq->ir_loc_addr, ireq->ir_rmt_addr,252 ireq->ir_v6_loc_addr, ireq->ir_v6_rmt_addr);253 ),254 255 TP_printk("family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c",256 show_family_name(__entry->family),257 __entry->sport, __entry->dport,258 __entry->saddr, __entry->daddr,259 __entry->saddr_v6, __entry->daddr_v6)260);261 262#include <trace/events/net_probe_common.h>263 264TRACE_EVENT(tcp_probe,265 266 TP_PROTO(struct sock *sk, struct sk_buff *skb),267 268 TP_ARGS(sk, skb),269 270 TP_STRUCT__entry(271 /* sockaddr_in6 is always bigger than sockaddr_in */272 __array(__u8, saddr, sizeof(struct sockaddr_in6))273 __array(__u8, daddr, sizeof(struct sockaddr_in6))274 __field(__u16, sport)275 __field(__u16, dport)276 __field(__u16, family)277 __field(__u32, mark)278 __field(__u16, data_len)279 __field(__u32, snd_nxt)280 __field(__u32, snd_una)281 __field(__u32, snd_cwnd)282 __field(__u32, ssthresh)283 __field(__u32, snd_wnd)284 __field(__u32, srtt)285 __field(__u32, rcv_wnd)286 __field(__u64, sock_cookie)287 __field(const void *, skbaddr)288 __field(const void *, skaddr)289 ),290 291 TP_fast_assign(292 const struct tcphdr *th = (const struct tcphdr *)skb->data;293 const struct inet_sock *inet = inet_sk(sk);294 const struct tcp_sock *tp = tcp_sk(sk);295 296 memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));297 memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));298 299 TP_STORE_ADDR_PORTS(__entry, inet, sk);300 301 /* For filtering use */302 __entry->sport = ntohs(inet->inet_sport);303 __entry->dport = ntohs(inet->inet_dport);304 __entry->mark = skb->mark;305 __entry->family = sk->sk_family;306 307 __entry->data_len = skb->len - __tcp_hdrlen(th);308 __entry->snd_nxt = tp->snd_nxt;309 __entry->snd_una = tp->snd_una;310 __entry->snd_cwnd = tcp_snd_cwnd(tp);311 __entry->snd_wnd = tp->snd_wnd;312 __entry->rcv_wnd = tp->rcv_wnd;313 __entry->ssthresh = tcp_current_ssthresh(sk);314 __entry->srtt = tp->srtt_us >> 3;315 __entry->sock_cookie = sock_gen_cookie(sk);316 317 __entry->skbaddr = skb;318 __entry->skaddr = sk;319 ),320 321 TP_printk("family=%s src=%pISpc dest=%pISpc mark=%#x data_len=%d snd_nxt=%#x snd_una=%#x snd_cwnd=%u ssthresh=%u snd_wnd=%u srtt=%u rcv_wnd=%u sock_cookie=%llx skbaddr=%p skaddr=%p",322 show_family_name(__entry->family),323 __entry->saddr, __entry->daddr, __entry->mark,324 __entry->data_len, __entry->snd_nxt, __entry->snd_una,325 __entry->snd_cwnd, __entry->ssthresh, __entry->snd_wnd,326 __entry->srtt, __entry->rcv_wnd, __entry->sock_cookie,327 __entry->skbaddr, __entry->skaddr)328);329 330/*331 * tcp event with only skb332 */333DECLARE_EVENT_CLASS(tcp_event_skb,334 335 TP_PROTO(const struct sk_buff *skb),336 337 TP_ARGS(skb),338 339 TP_STRUCT__entry(340 __field(const void *, skbaddr)341 __array(__u8, saddr, sizeof(struct sockaddr_in6))342 __array(__u8, daddr, sizeof(struct sockaddr_in6))343 ),344 345 TP_fast_assign(346 const struct tcphdr *th = (const struct tcphdr *)skb->data;347 __entry->skbaddr = skb;348 349 memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));350 memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));351 352 TP_STORE_ADDR_PORTS_SKB(skb, th, __entry->saddr, __entry->daddr);353 ),354 355 TP_printk("skbaddr=%p src=%pISpc dest=%pISpc",356 __entry->skbaddr, __entry->saddr, __entry->daddr)357);358 359DEFINE_EVENT(tcp_event_skb, tcp_bad_csum,360 361 TP_PROTO(const struct sk_buff *skb),362 363 TP_ARGS(skb)364);365 366TRACE_EVENT(tcp_cong_state_set,367 368 TP_PROTO(struct sock *sk, const u8 ca_state),369 370 TP_ARGS(sk, ca_state),371 372 TP_STRUCT__entry(373 __field(const void *, skaddr)374 __field(__u16, sport)375 __field(__u16, dport)376 __field(__u16, family)377 __array(__u8, saddr, 4)378 __array(__u8, daddr, 4)379 __array(__u8, saddr_v6, 16)380 __array(__u8, daddr_v6, 16)381 __field(__u8, cong_state)382 ),383 384 TP_fast_assign(385 struct inet_sock *inet = inet_sk(sk);386 __be32 *p32;387 388 __entry->skaddr = sk;389 390 __entry->sport = ntohs(inet->inet_sport);391 __entry->dport = ntohs(inet->inet_dport);392 __entry->family = sk->sk_family;393 394 p32 = (__be32 *) __entry->saddr;395 *p32 = inet->inet_saddr;396 397 p32 = (__be32 *) __entry->daddr;398 *p32 = inet->inet_daddr;399 400 TP_STORE_ADDRS(__entry, inet->inet_saddr, inet->inet_daddr,401 sk->sk_v6_rcv_saddr, sk->sk_v6_daddr);402 403 __entry->cong_state = ca_state;404 ),405 406 TP_printk("family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c cong_state=%u",407 show_family_name(__entry->family),408 __entry->sport, __entry->dport,409 __entry->saddr, __entry->daddr,410 __entry->saddr_v6, __entry->daddr_v6,411 __entry->cong_state)412);413 414DECLARE_EVENT_CLASS(tcp_hash_event,415 416 TP_PROTO(const struct sock *sk, const struct sk_buff *skb),417 418 TP_ARGS(sk, skb),419 420 TP_STRUCT__entry(421 __field(__u64, net_cookie)422 __field(const void *, skbaddr)423 __field(const void *, skaddr)424 __field(int, state)425 426 /* sockaddr_in6 is always bigger than sockaddr_in */427 __array(__u8, saddr, sizeof(struct sockaddr_in6))428 __array(__u8, daddr, sizeof(struct sockaddr_in6))429 __field(int, l3index)430 431 __field(__u16, sport)432 __field(__u16, dport)433 __field(__u16, family)434 435 __field(bool, fin)436 __field(bool, syn)437 __field(bool, rst)438 __field(bool, psh)439 __field(bool, ack)440 ),441 442 TP_fast_assign(443 const struct tcphdr *th = (const struct tcphdr *)skb->data;444 445 __entry->net_cookie = sock_net(sk)->net_cookie;446 __entry->skbaddr = skb;447 __entry->skaddr = sk;448 __entry->state = sk->sk_state;449 450 memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));451 memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));452 TP_STORE_ADDR_PORTS_SKB(skb, th, __entry->saddr, __entry->daddr);453 __entry->l3index = inet_sdif(skb) ? inet_iif(skb) : 0;454 455 /* For filtering use */456 __entry->sport = ntohs(th->source);457 __entry->dport = ntohs(th->dest);458 __entry->family = sk->sk_family;459 460 __entry->fin = th->fin;461 __entry->syn = th->syn;462 __entry->rst = th->rst;463 __entry->psh = th->psh;464 __entry->ack = th->ack;465 ),466 467 TP_printk("net=%llu state=%s family=%s src=%pISpc dest=%pISpc L3index=%d [%c%c%c%c%c]",468 __entry->net_cookie,469 show_tcp_state_name(__entry->state),470 show_family_name(__entry->family),471 __entry->saddr, __entry->daddr,472 __entry->l3index,473 __entry->fin ? 'F' : ' ',474 __entry->syn ? 'S' : ' ',475 __entry->rst ? 'R' : ' ',476 __entry->psh ? 'P' : ' ',477 __entry->ack ? '.' : ' ')478);479 480DEFINE_EVENT(tcp_hash_event, tcp_hash_bad_header,481 482 TP_PROTO(const struct sock *sk, const struct sk_buff *skb),483 TP_ARGS(sk, skb)484);485 486DEFINE_EVENT(tcp_hash_event, tcp_hash_md5_required,487 488 TP_PROTO(const struct sock *sk, const struct sk_buff *skb),489 TP_ARGS(sk, skb)490);491 492DEFINE_EVENT(tcp_hash_event, tcp_hash_md5_unexpected,493 494 TP_PROTO(const struct sock *sk, const struct sk_buff *skb),495 TP_ARGS(sk, skb)496);497 498DEFINE_EVENT(tcp_hash_event, tcp_hash_md5_mismatch,499 500 TP_PROTO(const struct sock *sk, const struct sk_buff *skb),501 TP_ARGS(sk, skb)502);503 504DEFINE_EVENT(tcp_hash_event, tcp_hash_ao_required,505 506 TP_PROTO(const struct sock *sk, const struct sk_buff *skb),507 TP_ARGS(sk, skb)508);509 510DECLARE_EVENT_CLASS(tcp_ao_event,511 512 TP_PROTO(const struct sock *sk, const struct sk_buff *skb,513 const __u8 keyid, const __u8 rnext, const __u8 maclen),514 515 TP_ARGS(sk, skb, keyid, rnext, maclen),516 517 TP_STRUCT__entry(518 __field(__u64, net_cookie)519 __field(const void *, skbaddr)520 __field(const void *, skaddr)521 __field(int, state)522 523 /* sockaddr_in6 is always bigger than sockaddr_in */524 __array(__u8, saddr, sizeof(struct sockaddr_in6))525 __array(__u8, daddr, sizeof(struct sockaddr_in6))526 __field(int, l3index)527 528 __field(__u16, sport)529 __field(__u16, dport)530 __field(__u16, family)531 532 __field(bool, fin)533 __field(bool, syn)534 __field(bool, rst)535 __field(bool, psh)536 __field(bool, ack)537 538 __field(__u8, keyid)539 __field(__u8, rnext)540 __field(__u8, maclen)541 ),542 543 TP_fast_assign(544 const struct tcphdr *th = (const struct tcphdr *)skb->data;545 546 __entry->net_cookie = sock_net(sk)->net_cookie;547 __entry->skbaddr = skb;548 __entry->skaddr = sk;549 __entry->state = sk->sk_state;550 551 memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));552 memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));553 TP_STORE_ADDR_PORTS_SKB(skb, th, __entry->saddr, __entry->daddr);554 __entry->l3index = inet_sdif(skb) ? inet_iif(skb) : 0;555 556 /* For filtering use */557 __entry->sport = ntohs(th->source);558 __entry->dport = ntohs(th->dest);559 __entry->family = sk->sk_family;560 561 __entry->fin = th->fin;562 __entry->syn = th->syn;563 __entry->rst = th->rst;564 __entry->psh = th->psh;565 __entry->ack = th->ack;566 567 __entry->keyid = keyid;568 __entry->rnext = rnext;569 __entry->maclen = maclen;570 ),571 572 TP_printk("net=%llu state=%s family=%s src=%pISpc dest=%pISpc L3index=%d [%c%c%c%c%c] keyid=%u rnext=%u maclen=%u",573 __entry->net_cookie,574 show_tcp_state_name(__entry->state),575 show_family_name(__entry->family),576 __entry->saddr, __entry->daddr,577 __entry->l3index,578 __entry->fin ? 'F' : ' ',579 __entry->syn ? 'S' : ' ',580 __entry->rst ? 'R' : ' ',581 __entry->psh ? 'P' : ' ',582 __entry->ack ? '.' : ' ',583 __entry->keyid, __entry->rnext, __entry->maclen)584);585 586DEFINE_EVENT(tcp_ao_event, tcp_ao_handshake_failure,587 TP_PROTO(const struct sock *sk, const struct sk_buff *skb,588 const __u8 keyid, const __u8 rnext, const __u8 maclen),589 TP_ARGS(sk, skb, keyid, rnext, maclen)590);591 592DEFINE_EVENT(tcp_ao_event, tcp_ao_wrong_maclen,593 TP_PROTO(const struct sock *sk, const struct sk_buff *skb,594 const __u8 keyid, const __u8 rnext, const __u8 maclen),595 TP_ARGS(sk, skb, keyid, rnext, maclen)596);597 598DEFINE_EVENT(tcp_ao_event, tcp_ao_mismatch,599 TP_PROTO(const struct sock *sk, const struct sk_buff *skb,600 const __u8 keyid, const __u8 rnext, const __u8 maclen),601 TP_ARGS(sk, skb, keyid, rnext, maclen)602);603 604DEFINE_EVENT(tcp_ao_event, tcp_ao_key_not_found,605 TP_PROTO(const struct sock *sk, const struct sk_buff *skb,606 const __u8 keyid, const __u8 rnext, const __u8 maclen),607 TP_ARGS(sk, skb, keyid, rnext, maclen)608);609 610DEFINE_EVENT(tcp_ao_event, tcp_ao_rnext_request,611 TP_PROTO(const struct sock *sk, const struct sk_buff *skb,612 const __u8 keyid, const __u8 rnext, const __u8 maclen),613 TP_ARGS(sk, skb, keyid, rnext, maclen)614);615 616DECLARE_EVENT_CLASS(tcp_ao_event_sk,617 618 TP_PROTO(const struct sock *sk, const __u8 keyid, const __u8 rnext),619 620 TP_ARGS(sk, keyid, rnext),621 622 TP_STRUCT__entry(623 __field(__u64, net_cookie)624 __field(const void *, skaddr)625 __field(int, state)626 627 /* sockaddr_in6 is always bigger than sockaddr_in */628 __array(__u8, saddr, sizeof(struct sockaddr_in6))629 __array(__u8, daddr, sizeof(struct sockaddr_in6))630 631 __field(__u16, sport)632 __field(__u16, dport)633 __field(__u16, family)634 635 __field(__u8, keyid)636 __field(__u8, rnext)637 ),638 639 TP_fast_assign(640 const struct inet_sock *inet = inet_sk(sk);641 642 __entry->net_cookie = sock_net(sk)->net_cookie;643 __entry->skaddr = sk;644 __entry->state = sk->sk_state;645 646 memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));647 memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));648 TP_STORE_ADDR_PORTS(__entry, inet, sk);649 650 /* For filtering use */651 __entry->sport = ntohs(inet->inet_sport);652 __entry->dport = ntohs(inet->inet_dport);653 __entry->family = sk->sk_family;654 655 __entry->keyid = keyid;656 __entry->rnext = rnext;657 ),658 659 TP_printk("net=%llu state=%s family=%s src=%pISpc dest=%pISpc keyid=%u rnext=%u",660 __entry->net_cookie,661 show_tcp_state_name(__entry->state),662 show_family_name(__entry->family),663 __entry->saddr, __entry->daddr,664 __entry->keyid, __entry->rnext)665);666 667DEFINE_EVENT(tcp_ao_event_sk, tcp_ao_synack_no_key,668 TP_PROTO(const struct sock *sk, const __u8 keyid, const __u8 rnext),669 TP_ARGS(sk, keyid, rnext)670);671 672DECLARE_EVENT_CLASS(tcp_ao_event_sne,673 674 TP_PROTO(const struct sock *sk, __u32 new_sne),675 676 TP_ARGS(sk, new_sne),677 678 TP_STRUCT__entry(679 __field(__u64, net_cookie)680 __field(const void *, skaddr)681 __field(int, state)682 683 /* sockaddr_in6 is always bigger than sockaddr_in */684 __array(__u8, saddr, sizeof(struct sockaddr_in6))685 __array(__u8, daddr, sizeof(struct sockaddr_in6))686 687 __field(__u16, sport)688 __field(__u16, dport)689 __field(__u16, family)690 691 __field(__u32, new_sne)692 ),693 694 TP_fast_assign(695 const struct inet_sock *inet = inet_sk(sk);696 697 __entry->net_cookie = sock_net(sk)->net_cookie;698 __entry->skaddr = sk;699 __entry->state = sk->sk_state;700 701 memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));702 memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));703 TP_STORE_ADDR_PORTS(__entry, inet, sk);704 705 /* For filtering use */706 __entry->sport = ntohs(inet->inet_sport);707 __entry->dport = ntohs(inet->inet_dport);708 __entry->family = sk->sk_family;709 710 __entry->new_sne = new_sne;711 ),712 713 TP_printk("net=%llu state=%s family=%s src=%pISpc dest=%pISpc sne=%u",714 __entry->net_cookie,715 show_tcp_state_name(__entry->state),716 show_family_name(__entry->family),717 __entry->saddr, __entry->daddr,718 __entry->new_sne)719);720 721DEFINE_EVENT(tcp_ao_event_sne, tcp_ao_snd_sne_update,722 TP_PROTO(const struct sock *sk, __u32 new_sne),723 TP_ARGS(sk, new_sne)724);725 726DEFINE_EVENT(tcp_ao_event_sne, tcp_ao_rcv_sne_update,727 TP_PROTO(const struct sock *sk, __u32 new_sne),728 TP_ARGS(sk, new_sne)729);730 731#endif /* _TRACE_TCP_H */732 733/* This part must be outside protection */734#include <trace/define_trace.h>735