tcp.h 1.6 KB

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