net_probe_common.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #if !defined(_TRACE_NET_PROBE_COMMON_H) || defined(TRACE_HEADER_MULTI_READ)
  3. #define _TRACE_NET_PROBE_COMMON_H
  4. #define TP_STORE_ADDR_PORTS_V4(__entry, inet, sk) \
  5. do { \
  6. struct sockaddr_in *v4 = (void *)__entry->saddr; \
  7. \
  8. v4->sin_family = AF_INET; \
  9. v4->sin_port = inet->inet_sport; \
  10. v4->sin_addr.s_addr = inet->inet_saddr; \
  11. v4 = (void *)__entry->daddr; \
  12. v4->sin_family = AF_INET; \
  13. v4->sin_port = inet->inet_dport; \
  14. v4->sin_addr.s_addr = inet->inet_daddr; \
  15. } while (0)
  16. #if IS_ENABLED(CONFIG_IPV6)
  17. #define TP_STORE_ADDR_PORTS(__entry, inet, sk) \
  18. do { \
  19. if (sk->sk_family == AF_INET6) { \
  20. struct sockaddr_in6 *v6 = (void *)__entry->saddr; \
  21. \
  22. v6->sin6_family = AF_INET6; \
  23. v6->sin6_port = inet->inet_sport; \
  24. v6->sin6_addr = inet6_sk(sk)->saddr; \
  25. v6 = (void *)__entry->daddr; \
  26. v6->sin6_family = AF_INET6; \
  27. v6->sin6_port = inet->inet_dport; \
  28. v6->sin6_addr = sk->sk_v6_daddr; \
  29. } else \
  30. TP_STORE_ADDR_PORTS_V4(__entry, inet, sk); \
  31. } while (0)
  32. #else
  33. #define TP_STORE_ADDR_PORTS(__entry, inet, sk) \
  34. TP_STORE_ADDR_PORTS_V4(__entry, inet, sk);
  35. #endif
  36. #define TP_STORE_V4MAPPED(__entry, saddr, daddr) \
  37. do { \
  38. struct in6_addr *pin6; \
  39. \
  40. pin6 = (struct in6_addr *)__entry->saddr_v6; \
  41. ipv6_addr_set_v4mapped(saddr, pin6); \
  42. pin6 = (struct in6_addr *)__entry->daddr_v6; \
  43. ipv6_addr_set_v4mapped(daddr, pin6); \
  44. } while (0)
  45. #if IS_ENABLED(CONFIG_IPV6)
  46. #define TP_STORE_ADDRS(__entry, saddr, daddr, saddr6, daddr6) \
  47. do { \
  48. if (sk->sk_family == AF_INET6) { \
  49. struct in6_addr *pin6; \
  50. \
  51. pin6 = (struct in6_addr *)__entry->saddr_v6; \
  52. *pin6 = saddr6; \
  53. pin6 = (struct in6_addr *)__entry->daddr_v6; \
  54. *pin6 = daddr6; \
  55. } else { \
  56. TP_STORE_V4MAPPED(__entry, saddr, daddr); \
  57. } \
  58. } while (0)
  59. #else
  60. #define TP_STORE_ADDRS(__entry, saddr, daddr, saddr6, daddr6) \
  61. TP_STORE_V4MAPPED(__entry, saddr, daddr)
  62. #endif
  63. #define TP_STORE_ADDR_PORTS_SKB_V4(skb, protoh, entry_saddr, entry_daddr) \
  64. do { \
  65. struct sockaddr_in *v4 = (void *)entry_saddr; \
  66. \
  67. v4->sin_family = AF_INET; \
  68. v4->sin_port = protoh->source; \
  69. v4->sin_addr.s_addr = ip_hdr(skb)->saddr; \
  70. v4 = (void *)entry_daddr; \
  71. v4->sin_family = AF_INET; \
  72. v4->sin_port = protoh->dest; \
  73. v4->sin_addr.s_addr = ip_hdr(skb)->daddr; \
  74. } while (0)
  75. #if IS_ENABLED(CONFIG_IPV6)
  76. #define TP_STORE_ADDR_PORTS_SKB(skb, protoh, entry_saddr, entry_daddr) \
  77. do { \
  78. const struct iphdr *iph = ip_hdr(skb); \
  79. \
  80. if (iph->version == 6) { \
  81. struct sockaddr_in6 *v6 = (void *)entry_saddr; \
  82. \
  83. v6->sin6_family = AF_INET6; \
  84. v6->sin6_port = protoh->source; \
  85. v6->sin6_addr = ipv6_hdr(skb)->saddr; \
  86. v6 = (void *)entry_daddr; \
  87. v6->sin6_family = AF_INET6; \
  88. v6->sin6_port = protoh->dest; \
  89. v6->sin6_addr = ipv6_hdr(skb)->daddr; \
  90. } else \
  91. TP_STORE_ADDR_PORTS_SKB_V4(skb, protoh, \
  92. entry_saddr, \
  93. entry_daddr); \
  94. } while (0)
  95. #else
  96. #define TP_STORE_ADDR_PORTS_SKB(skb, protoh, entry_saddr, entry_daddr) \
  97. TP_STORE_ADDR_PORTS_SKB_V4(skb, protoh, entry_saddr, entry_daddr)
  98. #endif
  99. #endif