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 16 TRACE_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); 71 DEFINE_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 */ 82 TRACE_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 */ 138 DECLARE_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 186 DEFINE_EVENT(tcp_event_sk, tcp_receive_reset, 187 188 TP_PROTO(struct sock *sk), 189 190 TP_ARGS(sk) 191 ); 192 193 DEFINE_EVENT(tcp_event_sk, tcp_destroy_sock, 194 195 TP_PROTO(struct sock *sk), 196 197 TP_ARGS(sk) 198 ); 199 200 DEFINE_EVENT(tcp_event_sk, tcp_rcv_space_adjust, 201 202 TP_PROTO(struct sock *sk), 203 204 TP_ARGS(sk) 205 ); 206 207 TRACE_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(__u32, rcv_ssthresh) 222 __field(__u32, window_clamp) 223 __field(__u32, rcv_wnd) 224 __field(__u8, scaling_ratio) 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 __field(const void *, skaddr) 233 __field(__u64, sock_cookie) 234 ), 235 236 TP_fast_assign( 237 struct inet_sock *inet = inet_sk(sk); 238 struct tcp_sock *tp = tcp_sk(sk); 239 __be32 *p32; 240 241 __entry->time = time; 242 __entry->rtt_us = tp->rcv_rtt_est.rtt_us >> 3; 243 __entry->copied = tp->copied_seq - tp->rcvq_space.seq; 244 __entry->inq = tp->rcv_nxt - tp->copied_seq; 245 __entry->space = tp->rcvq_space.space; 246 __entry->ooo_space = RB_EMPTY_ROOT(&tp->out_of_order_queue) ? 0 : 247 TCP_SKB_CB(tp->ooo_last_skb)->end_seq - 248 tp->rcv_nxt; 249 250 __entry->rcvbuf = sk->sk_rcvbuf; 251 __entry->rcv_ssthresh = tp->rcv_ssthresh; 252 __entry->window_clamp = tp->window_clamp; 253 __entry->rcv_wnd = tp->rcv_wnd; 254 __entry->scaling_ratio = tp->scaling_ratio; 255 __entry->sport = ntohs(inet->inet_sport); 256 __entry->dport = ntohs(inet->inet_dport); 257 __entry->family = sk->sk_family; 258 259 p32 = (__be32 *) __entry->saddr; 260 *p32 = inet->inet_saddr; 261 262 p32 = (__be32 *) __entry->daddr; 263 *p32 = inet->inet_daddr; 264 265 TP_STORE_ADDRS(__entry, inet->inet_saddr, inet->inet_daddr, 266 sk->sk_v6_rcv_saddr, sk->sk_v6_daddr); 267 268 __entry->skaddr = sk; 269 __entry->sock_cookie = sock_gen_cookie(sk); 270 ), 271 272 TP_printk("time=%u rtt_us=%u copied=%u inq=%u space=%u ooo=%u scaling_ratio=%u rcvbuf=%u " 273 "rcv_ssthresh=%u window_clamp=%u rcv_wnd=%u " 274 "family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 " 275 "saddrv6=%pI6c daddrv6=%pI6c skaddr=%p sock_cookie=%llx", 276 __entry->time, __entry->rtt_us, __entry->copied, 277 __entry->inq, __entry->space, __entry->ooo_space, 278 __entry->scaling_ratio, __entry->rcvbuf, 279 __entry->rcv_ssthresh, __entry->window_clamp, 280 __entry->rcv_wnd, 281 show_family_name(__entry->family), 282 __entry->sport, __entry->dport, 283 __entry->saddr, __entry->daddr, 284 __entry->saddr_v6, __entry->daddr_v6, 285 __entry->skaddr, 286 __entry->sock_cookie) 287 ); 288 289 TRACE_EVENT(tcp_retransmit_synack, 290 291 TP_PROTO(const struct sock *sk, const struct request_sock *req), 292 293 TP_ARGS(sk, req), 294 295 TP_STRUCT__entry( 296 __field(const void *, skaddr) 297 __field(const void *, req) 298 __field(__u16, sport) 299 __field(__u16, dport) 300 __field(__u16, family) 301 __array(__u8, saddr, 4) 302 __array(__u8, daddr, 4) 303 __array(__u8, saddr_v6, 16) 304 __array(__u8, daddr_v6, 16) 305 ), 306 307 TP_fast_assign( 308 struct inet_request_sock *ireq = inet_rsk(req); 309 __be32 *p32; 310 311 __entry->skaddr = sk; 312 __entry->req = req; 313 314 __entry->sport = ireq->ir_num; 315 __entry->dport = ntohs(ireq->ir_rmt_port); 316 __entry->family = sk->sk_family; 317 318 p32 = (__be32 *) __entry->saddr; 319 *p32 = ireq->ir_loc_addr; 320 321 p32 = (__be32 *) __entry->daddr; 322 *p32 = ireq->ir_rmt_addr; 323 324 TP_STORE_ADDRS(__entry, ireq->ir_loc_addr, ireq->ir_rmt_addr, 325 ireq->ir_v6_loc_addr, ireq->ir_v6_rmt_addr); 326 ), 327 328 TP_printk("family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c", 329 show_family_name(__entry->family), 330 __entry->sport, __entry->dport, 331 __entry->saddr, __entry->daddr, 332 __entry->saddr_v6, __entry->daddr_v6) 333 ); 334 335 TRACE_EVENT(tcp_sendmsg_locked, 336 TP_PROTO(const struct sock *sk, const struct msghdr *msg, 337 const struct sk_buff *skb, int size_goal), 338 339 TP_ARGS(sk, msg, skb, size_goal), 340 341 TP_STRUCT__entry( 342 __field(const void *, skb_addr) 343 __field(int, skb_len) 344 __field(int, msg_left) 345 __field(int, size_goal) 346 ), 347 348 TP_fast_assign( 349 __entry->skb_addr = skb; 350 __entry->skb_len = skb ? skb->len : 0; 351 __entry->msg_left = msg_data_left(msg); 352 __entry->size_goal = size_goal; 353 ), 354 355 TP_printk("skb_addr %p skb_len %d msg_left %d size_goal %d", 356 __entry->skb_addr, __entry->skb_len, __entry->msg_left, 357 __entry->size_goal)); 358 359 DECLARE_TRACE(tcp_cwnd_reduction, 360 TP_PROTO(const struct sock *sk, int newly_acked_sacked, 361 int newly_lost, int flag), 362 TP_ARGS(sk, newly_acked_sacked, newly_lost, flag) 363 ); 364 365 #include <trace/events/net_probe_common.h> 366 367 TRACE_EVENT(tcp_probe, 368 369 TP_PROTO(struct sock *sk, const struct sk_buff *skb), 370 371 TP_ARGS(sk, skb), 372 373 TP_STRUCT__entry( 374 /* sockaddr_in6 is always bigger than sockaddr_in */ 375 __array(__u8, saddr, sizeof(struct sockaddr_in6)) 376 __array(__u8, daddr, sizeof(struct sockaddr_in6)) 377 __field(__u16, sport) 378 __field(__u16, dport) 379 __field(__u16, family) 380 __field(__u32, mark) 381 __field(__u16, data_len) 382 __field(__u32, snd_nxt) 383 __field(__u32, snd_una) 384 __field(__u32, snd_cwnd) 385 __field(__u32, ssthresh) 386 __field(__u32, snd_wnd) 387 __field(__u32, srtt) 388 __field(__u32, rcv_wnd) 389 __field(__u64, sock_cookie) 390 __field(const void *, skbaddr) 391 __field(const void *, skaddr) 392 ), 393 394 TP_fast_assign( 395 const struct tcphdr *th = (const struct tcphdr *)skb->data; 396 const struct inet_sock *inet = inet_sk(sk); 397 const struct tcp_sock *tp = tcp_sk(sk); 398 399 memset(__entry->saddr, 0, sizeof(struct sockaddr_in6)); 400 memset(__entry->daddr, 0, sizeof(struct sockaddr_in6)); 401 402 TP_STORE_ADDR_PORTS(__entry, inet, sk); 403 404 /* For filtering use */ 405 __entry->sport = ntohs(inet->inet_sport); 406 __entry->dport = ntohs(inet->inet_dport); 407 __entry->mark = skb->mark; 408 __entry->family = sk->sk_family; 409 410 __entry->data_len = skb->len - __tcp_hdrlen(th); 411 __entry->snd_nxt = tp->snd_nxt; 412 __entry->snd_una = tp->snd_una; 413 __entry->snd_cwnd = tcp_snd_cwnd(tp); 414 __entry->snd_wnd = tp->snd_wnd; 415 __entry->rcv_wnd = tp->rcv_wnd; 416 __entry->ssthresh = tcp_current_ssthresh(sk); 417 __entry->srtt = tp->srtt_us >> 3; 418 __entry->sock_cookie = sock_gen_cookie(sk); 419 420 __entry->skbaddr = skb; 421 __entry->skaddr = sk; 422 ), 423 424 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", 425 show_family_name(__entry->family), 426 __entry->saddr, __entry->daddr, __entry->mark, 427 __entry->data_len, __entry->snd_nxt, __entry->snd_una, 428 __entry->snd_cwnd, __entry->ssthresh, __entry->snd_wnd, 429 __entry->srtt, __entry->rcv_wnd, __entry->sock_cookie, 430 __entry->skbaddr, __entry->skaddr) 431 ); 432 433 /* 434 * tcp event with only skb 435 */ 436 DECLARE_EVENT_CLASS(tcp_event_skb, 437 438 TP_PROTO(const struct sk_buff *skb), 439 440 TP_ARGS(skb), 441 442 TP_STRUCT__entry( 443 __field(const void *, skbaddr) 444 __array(__u8, saddr, sizeof(struct sockaddr_in6)) 445 __array(__u8, daddr, sizeof(struct sockaddr_in6)) 446 ), 447 448 TP_fast_assign( 449 const struct tcphdr *th = (const struct tcphdr *)skb->data; 450 __entry->skbaddr = skb; 451 452 memset(__entry->saddr, 0, sizeof(struct sockaddr_in6)); 453 memset(__entry->daddr, 0, sizeof(struct sockaddr_in6)); 454 455 TP_STORE_ADDR_PORTS_SKB(skb, th, __entry->saddr, __entry->daddr); 456 ), 457 458 TP_printk("skbaddr=%p src=%pISpc dest=%pISpc", 459 __entry->skbaddr, __entry->saddr, __entry->daddr) 460 ); 461 462 DEFINE_EVENT(tcp_event_skb, tcp_bad_csum, 463 464 TP_PROTO(const struct sk_buff *skb), 465 466 TP_ARGS(skb) 467 ); 468 469 TRACE_EVENT(tcp_cong_state_set, 470 471 TP_PROTO(struct sock *sk, const u8 ca_state), 472 473 TP_ARGS(sk, ca_state), 474 475 TP_STRUCT__entry( 476 __field(const void *, skaddr) 477 __field(__u16, sport) 478 __field(__u16, dport) 479 __field(__u16, family) 480 __array(__u8, saddr, 4) 481 __array(__u8, daddr, 4) 482 __array(__u8, saddr_v6, 16) 483 __array(__u8, daddr_v6, 16) 484 __field(__u8, cong_state) 485 ), 486 487 TP_fast_assign( 488 struct inet_sock *inet = inet_sk(sk); 489 __be32 *p32; 490 491 __entry->skaddr = sk; 492 493 __entry->sport = ntohs(inet->inet_sport); 494 __entry->dport = ntohs(inet->inet_dport); 495 __entry->family = sk->sk_family; 496 497 p32 = (__be32 *) __entry->saddr; 498 *p32 = inet->inet_saddr; 499 500 p32 = (__be32 *) __entry->daddr; 501 *p32 = inet->inet_daddr; 502 503 TP_STORE_ADDRS(__entry, inet->inet_saddr, inet->inet_daddr, 504 sk->sk_v6_rcv_saddr, sk->sk_v6_daddr); 505 506 __entry->cong_state = ca_state; 507 ), 508 509 TP_printk("family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c cong_state=%u", 510 show_family_name(__entry->family), 511 __entry->sport, __entry->dport, 512 __entry->saddr, __entry->daddr, 513 __entry->saddr_v6, __entry->daddr_v6, 514 __entry->cong_state) 515 ); 516 517 DECLARE_EVENT_CLASS(tcp_hash_event, 518 519 TP_PROTO(const struct sock *sk, const struct sk_buff *skb), 520 521 TP_ARGS(sk, skb), 522 523 TP_STRUCT__entry( 524 __field(__u64, net_cookie) 525 __field(const void *, skbaddr) 526 __field(const void *, skaddr) 527 __field(int, state) 528 529 /* sockaddr_in6 is always bigger than sockaddr_in */ 530 __array(__u8, saddr, sizeof(struct sockaddr_in6)) 531 __array(__u8, daddr, sizeof(struct sockaddr_in6)) 532 __field(int, l3index) 533 534 __field(__u16, sport) 535 __field(__u16, dport) 536 __field(__u16, family) 537 538 __field(bool, fin) 539 __field(bool, syn) 540 __field(bool, rst) 541 __field(bool, psh) 542 __field(bool, ack) 543 ), 544 545 TP_fast_assign( 546 const struct tcphdr *th = (const struct tcphdr *)skb->data; 547 548 __entry->net_cookie = sock_net(sk)->net_cookie; 549 __entry->skbaddr = skb; 550 __entry->skaddr = sk; 551 __entry->state = sk->sk_state; 552 553 memset(__entry->saddr, 0, sizeof(struct sockaddr_in6)); 554 memset(__entry->daddr, 0, sizeof(struct sockaddr_in6)); 555 TP_STORE_ADDR_PORTS_SKB(skb, th, __entry->saddr, __entry->daddr); 556 __entry->l3index = inet_sdif(skb) ? inet_iif(skb) : 0; 557 558 /* For filtering use */ 559 __entry->sport = ntohs(th->source); 560 __entry->dport = ntohs(th->dest); 561 __entry->family = sk->sk_family; 562 563 __entry->fin = th->fin; 564 __entry->syn = th->syn; 565 __entry->rst = th->rst; 566 __entry->psh = th->psh; 567 __entry->ack = th->ack; 568 ), 569 570 TP_printk("net=%llu state=%s family=%s src=%pISpc dest=%pISpc L3index=%d [%c%c%c%c%c]", 571 __entry->net_cookie, 572 show_tcp_state_name(__entry->state), 573 show_family_name(__entry->family), 574 __entry->saddr, __entry->daddr, 575 __entry->l3index, 576 __entry->fin ? 'F' : ' ', 577 __entry->syn ? 'S' : ' ', 578 __entry->rst ? 'R' : ' ', 579 __entry->psh ? 'P' : ' ', 580 __entry->ack ? '.' : ' ') 581 ); 582 583 DEFINE_EVENT(tcp_hash_event, tcp_hash_bad_header, 584 585 TP_PROTO(const struct sock *sk, const struct sk_buff *skb), 586 TP_ARGS(sk, skb) 587 ); 588 589 DEFINE_EVENT(tcp_hash_event, tcp_hash_md5_required, 590 591 TP_PROTO(const struct sock *sk, const struct sk_buff *skb), 592 TP_ARGS(sk, skb) 593 ); 594 595 DEFINE_EVENT(tcp_hash_event, tcp_hash_md5_unexpected, 596 597 TP_PROTO(const struct sock *sk, const struct sk_buff *skb), 598 TP_ARGS(sk, skb) 599 ); 600 601 DEFINE_EVENT(tcp_hash_event, tcp_hash_md5_mismatch, 602 603 TP_PROTO(const struct sock *sk, const struct sk_buff *skb), 604 TP_ARGS(sk, skb) 605 ); 606 607 DEFINE_EVENT(tcp_hash_event, tcp_hash_ao_required, 608 609 TP_PROTO(const struct sock *sk, const struct sk_buff *skb), 610 TP_ARGS(sk, skb) 611 ); 612 613 DECLARE_EVENT_CLASS(tcp_ao_event, 614 615 TP_PROTO(const struct sock *sk, const struct sk_buff *skb, 616 const __u8 keyid, const __u8 rnext, const __u8 maclen), 617 618 TP_ARGS(sk, skb, keyid, rnext, maclen), 619 620 TP_STRUCT__entry( 621 __field(__u64, net_cookie) 622 __field(const void *, skbaddr) 623 __field(const void *, skaddr) 624 __field(int, state) 625 626 /* sockaddr_in6 is always bigger than sockaddr_in */ 627 __array(__u8, saddr, sizeof(struct sockaddr_in6)) 628 __array(__u8, daddr, sizeof(struct sockaddr_in6)) 629 __field(int, l3index) 630 631 __field(__u16, sport) 632 __field(__u16, dport) 633 __field(__u16, family) 634 635 __field(bool, fin) 636 __field(bool, syn) 637 __field(bool, rst) 638 __field(bool, psh) 639 __field(bool, ack) 640 641 __field(__u8, keyid) 642 __field(__u8, rnext) 643 __field(__u8, maclen) 644 ), 645 646 TP_fast_assign( 647 const struct tcphdr *th = (const struct tcphdr *)skb->data; 648 649 __entry->net_cookie = sock_net(sk)->net_cookie; 650 __entry->skbaddr = skb; 651 __entry->skaddr = sk; 652 __entry->state = sk->sk_state; 653 654 memset(__entry->saddr, 0, sizeof(struct sockaddr_in6)); 655 memset(__entry->daddr, 0, sizeof(struct sockaddr_in6)); 656 TP_STORE_ADDR_PORTS_SKB(skb, th, __entry->saddr, __entry->daddr); 657 __entry->l3index = inet_sdif(skb) ? inet_iif(skb) : 0; 658 659 /* For filtering use */ 660 __entry->sport = ntohs(th->source); 661 __entry->dport = ntohs(th->dest); 662 __entry->family = sk->sk_family; 663 664 __entry->fin = th->fin; 665 __entry->syn = th->syn; 666 __entry->rst = th->rst; 667 __entry->psh = th->psh; 668 __entry->ack = th->ack; 669 670 __entry->keyid = keyid; 671 __entry->rnext = rnext; 672 __entry->maclen = maclen; 673 ), 674 675 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", 676 __entry->net_cookie, 677 show_tcp_state_name(__entry->state), 678 show_family_name(__entry->family), 679 __entry->saddr, __entry->daddr, 680 __entry->l3index, 681 __entry->fin ? 'F' : ' ', 682 __entry->syn ? 'S' : ' ', 683 __entry->rst ? 'R' : ' ', 684 __entry->psh ? 'P' : ' ', 685 __entry->ack ? '.' : ' ', 686 __entry->keyid, __entry->rnext, __entry->maclen) 687 ); 688 689 DEFINE_EVENT(tcp_ao_event, tcp_ao_handshake_failure, 690 TP_PROTO(const struct sock *sk, const struct sk_buff *skb, 691 const __u8 keyid, const __u8 rnext, const __u8 maclen), 692 TP_ARGS(sk, skb, keyid, rnext, maclen) 693 ); 694 695 #ifdef CONFIG_TCP_AO 696 DEFINE_EVENT(tcp_ao_event, tcp_ao_wrong_maclen, 697 TP_PROTO(const struct sock *sk, const struct sk_buff *skb, 698 const __u8 keyid, const __u8 rnext, const __u8 maclen), 699 TP_ARGS(sk, skb, keyid, rnext, maclen) 700 ); 701 702 DEFINE_EVENT(tcp_ao_event, tcp_ao_mismatch, 703 TP_PROTO(const struct sock *sk, const struct sk_buff *skb, 704 const __u8 keyid, const __u8 rnext, const __u8 maclen), 705 TP_ARGS(sk, skb, keyid, rnext, maclen) 706 ); 707 708 DEFINE_EVENT(tcp_ao_event, tcp_ao_key_not_found, 709 TP_PROTO(const struct sock *sk, const struct sk_buff *skb, 710 const __u8 keyid, const __u8 rnext, const __u8 maclen), 711 TP_ARGS(sk, skb, keyid, rnext, maclen) 712 ); 713 714 DEFINE_EVENT(tcp_ao_event, tcp_ao_rnext_request, 715 TP_PROTO(const struct sock *sk, const struct sk_buff *skb, 716 const __u8 keyid, const __u8 rnext, const __u8 maclen), 717 TP_ARGS(sk, skb, keyid, rnext, maclen) 718 ); 719 720 DECLARE_EVENT_CLASS(tcp_ao_event_sk, 721 722 TP_PROTO(const struct sock *sk, const __u8 keyid, const __u8 rnext), 723 724 TP_ARGS(sk, keyid, rnext), 725 726 TP_STRUCT__entry( 727 __field(__u64, net_cookie) 728 __field(const void *, skaddr) 729 __field(int, state) 730 731 /* sockaddr_in6 is always bigger than sockaddr_in */ 732 __array(__u8, saddr, sizeof(struct sockaddr_in6)) 733 __array(__u8, daddr, sizeof(struct sockaddr_in6)) 734 735 __field(__u16, sport) 736 __field(__u16, dport) 737 __field(__u16, family) 738 739 __field(__u8, keyid) 740 __field(__u8, rnext) 741 ), 742 743 TP_fast_assign( 744 const struct inet_sock *inet = inet_sk(sk); 745 746 __entry->net_cookie = sock_net(sk)->net_cookie; 747 __entry->skaddr = sk; 748 __entry->state = sk->sk_state; 749 750 memset(__entry->saddr, 0, sizeof(struct sockaddr_in6)); 751 memset(__entry->daddr, 0, sizeof(struct sockaddr_in6)); 752 TP_STORE_ADDR_PORTS(__entry, inet, sk); 753 754 /* For filtering use */ 755 __entry->sport = ntohs(inet->inet_sport); 756 __entry->dport = ntohs(inet->inet_dport); 757 __entry->family = sk->sk_family; 758 759 __entry->keyid = keyid; 760 __entry->rnext = rnext; 761 ), 762 763 TP_printk("net=%llu state=%s family=%s src=%pISpc dest=%pISpc keyid=%u rnext=%u", 764 __entry->net_cookie, 765 show_tcp_state_name(__entry->state), 766 show_family_name(__entry->family), 767 __entry->saddr, __entry->daddr, 768 __entry->keyid, __entry->rnext) 769 ); 770 771 DEFINE_EVENT(tcp_ao_event_sk, tcp_ao_synack_no_key, 772 TP_PROTO(const struct sock *sk, const __u8 keyid, const __u8 rnext), 773 TP_ARGS(sk, keyid, rnext) 774 ); 775 776 DECLARE_EVENT_CLASS(tcp_ao_event_sne, 777 778 TP_PROTO(const struct sock *sk, __u32 new_sne), 779 780 TP_ARGS(sk, new_sne), 781 782 TP_STRUCT__entry( 783 __field(__u64, net_cookie) 784 __field(const void *, skaddr) 785 __field(int, state) 786 787 /* sockaddr_in6 is always bigger than sockaddr_in */ 788 __array(__u8, saddr, sizeof(struct sockaddr_in6)) 789 __array(__u8, daddr, sizeof(struct sockaddr_in6)) 790 791 __field(__u16, sport) 792 __field(__u16, dport) 793 __field(__u16, family) 794 795 __field(__u32, new_sne) 796 ), 797 798 TP_fast_assign( 799 const struct inet_sock *inet = inet_sk(sk); 800 801 __entry->net_cookie = sock_net(sk)->net_cookie; 802 __entry->skaddr = sk; 803 __entry->state = sk->sk_state; 804 805 memset(__entry->saddr, 0, sizeof(struct sockaddr_in6)); 806 memset(__entry->daddr, 0, sizeof(struct sockaddr_in6)); 807 TP_STORE_ADDR_PORTS(__entry, inet, sk); 808 809 /* For filtering use */ 810 __entry->sport = ntohs(inet->inet_sport); 811 __entry->dport = ntohs(inet->inet_dport); 812 __entry->family = sk->sk_family; 813 814 __entry->new_sne = new_sne; 815 ), 816 817 TP_printk("net=%llu state=%s family=%s src=%pISpc dest=%pISpc sne=%u", 818 __entry->net_cookie, 819 show_tcp_state_name(__entry->state), 820 show_family_name(__entry->family), 821 __entry->saddr, __entry->daddr, 822 __entry->new_sne) 823 ); 824 825 DEFINE_EVENT(tcp_ao_event_sne, tcp_ao_snd_sne_update, 826 TP_PROTO(const struct sock *sk, __u32 new_sne), 827 TP_ARGS(sk, new_sne) 828 ); 829 830 DEFINE_EVENT(tcp_ao_event_sne, tcp_ao_rcv_sne_update, 831 TP_PROTO(const struct sock *sk, __u32 new_sne), 832 TP_ARGS(sk, new_sne) 833 ); 834 #endif /* CONFIG_TCP_AO */ 835 836 #endif /* _TRACE_TCP_H */ 837 838 /* This part must be outside protection */ 839 #include <trace/define_trace.h> 840