Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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