Message ID | b9b8f2ee80038707f2f237c4910c46e1cbed82cd.1709191570.git.balazs.scheidler@axoflow.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | Add IP/port information to UDP drop tracepoint | expand |
From: Balazs Scheidler <bazsi77@gmail.com> Date: Thu, 29 Feb 2024 08:37:59 +0100 > This patch moves TP_STORE_ADDR_PORTS_SKB() to a common header and removes > the TCP specific implementation details. > > Previously the macro assumed the skb passed as an argument is a > TCP packet, the implementation now uses an argument to the L3 header and nit: s/L3/L4/ > uses that to extract the source/destination ports, which happen > to be named the same in "struct tcphdr" and "struct udphdr" > > Signed-off-by: Balazs Scheidler <balazs.scheidler@axoflow.com> > --- > include/trace/events/net_probe_common.h | 41 ++++++++++++++++++++++ > include/trace/events/tcp.h | 45 ++----------------------- > 2 files changed, 43 insertions(+), 43 deletions(-) > > diff --git a/include/trace/events/net_probe_common.h b/include/trace/events/net_probe_common.h > index 3930119cab08..50c083b5687d 100644 > --- a/include/trace/events/net_probe_common.h > +++ b/include/trace/events/net_probe_common.h > @@ -41,4 +41,45 @@ > > #endif > > +#define TP_STORE_ADDR_PORTS_SKB_V4(__entry, skb, protoh) \ > + do { \ > + struct sockaddr_in *v4 = (void *)__entry->saddr; \ > + \ > + v4->sin_family = AF_INET; \ > + v4->sin_port = protoh->source; \ > + v4->sin_addr.s_addr = ip_hdr(skb)->saddr; \ > + v4 = (void *)__entry->daddr; \ > + v4->sin_family = AF_INET; \ > + v4->sin_port = protoh->dest; \ > + v4->sin_addr.s_addr = ip_hdr(skb)->daddr; \ > + } while (0) > + > +#if IS_ENABLED(CONFIG_IPV6) > + > +#define TP_STORE_ADDR_PORTS_SKB(__entry, skb, protoh) \ > + do { \ > + const struct iphdr *iph = ip_hdr(skb); \ > + \ > + if (iph->version == 6) { \ > + struct sockaddr_in6 *v6 = (void *)__entry->saddr; \ > + \ > + v6->sin6_family = AF_INET6; \ > + v6->sin6_port = protoh->source; \ > + v6->sin6_addr = ipv6_hdr(skb)->saddr; \ > + v6 = (void *)__entry->daddr; \ > + v6->sin6_family = AF_INET6; \ > + v6->sin6_port = protoh->dest; \ > + v6->sin6_addr = ipv6_hdr(skb)->daddr; \ > + } else \ > + TP_STORE_ADDR_PORTS_SKB_V4(__entry, skb, protoh); \ > + } while (0) > + > +#else > + > +#define TP_STORE_ADDR_PORTS_SKB(__entry, skb, protoh) \ > + TP_STORE_ADDR_PORTS_SKB_V4(__entry, skb, protoh) > + > +#endif > + > + > #endif > diff --git a/include/trace/events/tcp.h b/include/trace/events/tcp.h > index 7b1ddffa3dfc..717f74454c17 100644 > --- a/include/trace/events/tcp.h > +++ b/include/trace/events/tcp.h > @@ -295,48 +295,6 @@ TRACE_EVENT(tcp_probe, > __entry->srtt, __entry->rcv_wnd, __entry->sock_cookie) > ); > > -#define TP_STORE_ADDR_PORTS_SKB_V4(__entry, skb) \ > - do { \ > - const struct tcphdr *th = (const struct tcphdr *)skb->data; \ > - struct sockaddr_in *v4 = (void *)__entry->saddr; \ > - \ > - v4->sin_family = AF_INET; \ > - v4->sin_port = th->source; \ > - v4->sin_addr.s_addr = ip_hdr(skb)->saddr; \ > - v4 = (void *)__entry->daddr; \ > - v4->sin_family = AF_INET; \ > - v4->sin_port = th->dest; \ > - v4->sin_addr.s_addr = ip_hdr(skb)->daddr; \ > - } while (0) > - > -#if IS_ENABLED(CONFIG_IPV6) > - > -#define TP_STORE_ADDR_PORTS_SKB(__entry, skb) \ > - do { \ > - const struct iphdr *iph = ip_hdr(skb); \ > - \ > - if (iph->version == 6) { \ > - const struct tcphdr *th = (const struct tcphdr *)skb->data; \ > - struct sockaddr_in6 *v6 = (void *)__entry->saddr; \ > - \ > - v6->sin6_family = AF_INET6; \ > - v6->sin6_port = th->source; \ > - v6->sin6_addr = ipv6_hdr(skb)->saddr; \ > - v6 = (void *)__entry->daddr; \ > - v6->sin6_family = AF_INET6; \ > - v6->sin6_port = th->dest; \ > - v6->sin6_addr = ipv6_hdr(skb)->daddr; \ > - } else \ > - TP_STORE_ADDR_PORTS_SKB_V4(__entry, skb); \ > - } while (0) > - > -#else > - > -#define TP_STORE_ADDR_PORTS_SKB(__entry, skb) \ > - TP_STORE_ADDR_PORTS_SKB_V4(__entry, skb) > - > -#endif > - > /* > * tcp event with only skb > */ > @@ -353,12 +311,13 @@ DECLARE_EVENT_CLASS(tcp_event_skb, > ), > > TP_fast_assign( > + const struct tcphdr *th = (const struct tcphdr *)skb->data; > __entry->skbaddr = skb; > > memset(__entry->saddr, 0, sizeof(struct sockaddr_in6)); > memset(__entry->daddr, 0, sizeof(struct sockaddr_in6)); > > - TP_STORE_ADDR_PORTS_SKB(__entry, skb); > + TP_STORE_ADDR_PORTS_SKB(__entry, skb, th); > ), > > TP_printk("src=%pISpc dest=%pISpc", __entry->saddr, __entry->daddr) > -- > 2.40.1
diff --git a/include/trace/events/net_probe_common.h b/include/trace/events/net_probe_common.h index 3930119cab08..50c083b5687d 100644 --- a/include/trace/events/net_probe_common.h +++ b/include/trace/events/net_probe_common.h @@ -41,4 +41,45 @@ #endif +#define TP_STORE_ADDR_PORTS_SKB_V4(__entry, skb, protoh) \ + do { \ + struct sockaddr_in *v4 = (void *)__entry->saddr; \ + \ + v4->sin_family = AF_INET; \ + v4->sin_port = protoh->source; \ + v4->sin_addr.s_addr = ip_hdr(skb)->saddr; \ + v4 = (void *)__entry->daddr; \ + v4->sin_family = AF_INET; \ + v4->sin_port = protoh->dest; \ + v4->sin_addr.s_addr = ip_hdr(skb)->daddr; \ + } while (0) + +#if IS_ENABLED(CONFIG_IPV6) + +#define TP_STORE_ADDR_PORTS_SKB(__entry, skb, protoh) \ + do { \ + const struct iphdr *iph = ip_hdr(skb); \ + \ + if (iph->version == 6) { \ + struct sockaddr_in6 *v6 = (void *)__entry->saddr; \ + \ + v6->sin6_family = AF_INET6; \ + v6->sin6_port = protoh->source; \ + v6->sin6_addr = ipv6_hdr(skb)->saddr; \ + v6 = (void *)__entry->daddr; \ + v6->sin6_family = AF_INET6; \ + v6->sin6_port = protoh->dest; \ + v6->sin6_addr = ipv6_hdr(skb)->daddr; \ + } else \ + TP_STORE_ADDR_PORTS_SKB_V4(__entry, skb, protoh); \ + } while (0) + +#else + +#define TP_STORE_ADDR_PORTS_SKB(__entry, skb, protoh) \ + TP_STORE_ADDR_PORTS_SKB_V4(__entry, skb, protoh) + +#endif + + #endif diff --git a/include/trace/events/tcp.h b/include/trace/events/tcp.h index 7b1ddffa3dfc..717f74454c17 100644 --- a/include/trace/events/tcp.h +++ b/include/trace/events/tcp.h @@ -295,48 +295,6 @@ TRACE_EVENT(tcp_probe, __entry->srtt, __entry->rcv_wnd, __entry->sock_cookie) ); -#define TP_STORE_ADDR_PORTS_SKB_V4(__entry, skb) \ - do { \ - const struct tcphdr *th = (const struct tcphdr *)skb->data; \ - struct sockaddr_in *v4 = (void *)__entry->saddr; \ - \ - v4->sin_family = AF_INET; \ - v4->sin_port = th->source; \ - v4->sin_addr.s_addr = ip_hdr(skb)->saddr; \ - v4 = (void *)__entry->daddr; \ - v4->sin_family = AF_INET; \ - v4->sin_port = th->dest; \ - v4->sin_addr.s_addr = ip_hdr(skb)->daddr; \ - } while (0) - -#if IS_ENABLED(CONFIG_IPV6) - -#define TP_STORE_ADDR_PORTS_SKB(__entry, skb) \ - do { \ - const struct iphdr *iph = ip_hdr(skb); \ - \ - if (iph->version == 6) { \ - const struct tcphdr *th = (const struct tcphdr *)skb->data; \ - struct sockaddr_in6 *v6 = (void *)__entry->saddr; \ - \ - v6->sin6_family = AF_INET6; \ - v6->sin6_port = th->source; \ - v6->sin6_addr = ipv6_hdr(skb)->saddr; \ - v6 = (void *)__entry->daddr; \ - v6->sin6_family = AF_INET6; \ - v6->sin6_port = th->dest; \ - v6->sin6_addr = ipv6_hdr(skb)->daddr; \ - } else \ - TP_STORE_ADDR_PORTS_SKB_V4(__entry, skb); \ - } while (0) - -#else - -#define TP_STORE_ADDR_PORTS_SKB(__entry, skb) \ - TP_STORE_ADDR_PORTS_SKB_V4(__entry, skb) - -#endif - /* * tcp event with only skb */ @@ -353,12 +311,13 @@ DECLARE_EVENT_CLASS(tcp_event_skb, ), TP_fast_assign( + const struct tcphdr *th = (const struct tcphdr *)skb->data; __entry->skbaddr = skb; memset(__entry->saddr, 0, sizeof(struct sockaddr_in6)); memset(__entry->daddr, 0, sizeof(struct sockaddr_in6)); - TP_STORE_ADDR_PORTS_SKB(__entry, skb); + TP_STORE_ADDR_PORTS_SKB(__entry, skb, th); ), TP_printk("src=%pISpc dest=%pISpc", __entry->saddr, __entry->daddr)
This patch moves TP_STORE_ADDR_PORTS_SKB() to a common header and removes the TCP specific implementation details. Previously the macro assumed the skb passed as an argument is a TCP packet, the implementation now uses an argument to the L3 header and uses that to extract the source/destination ports, which happen to be named the same in "struct tcphdr" and "struct udphdr" Signed-off-by: Balazs Scheidler <balazs.scheidler@axoflow.com> --- include/trace/events/net_probe_common.h | 41 ++++++++++++++++++++++ include/trace/events/tcp.h | 45 ++----------------------- 2 files changed, 43 insertions(+), 43 deletions(-)