Loading include/trace/events/udp.h +48 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,54 @@ TRACE_EVENT(udp_fail_queue_rcv_skb, TP_printk("rc=%d port=%hu", __entry->rc, __entry->lport) ); TRACE_EVENT(udpv4_fail_rcv_buf_errors, TP_PROTO(struct sk_buff *skb), TP_ARGS(skb), TP_STRUCT__entry( __field(void *, saddr) __field(void *, daddr) __field(__be16, sport) __field(__be16, dport) ), TP_fast_assign( __entry->saddr = &ip_hdr(skb)->saddr; __entry->daddr = &ip_hdr(skb)->daddr; __entry->sport = ntohs(udp_hdr(skb)->source); __entry->dport = ntohs(udp_hdr(skb)->dest); ), TP_printk("src %pI4:%u dst %pI4:%u", __entry->saddr, __entry->sport, __entry->daddr, __entry->dport) ); TRACE_EVENT(udpv6_fail_rcv_buf_errors, TP_PROTO(struct sk_buff *skb), TP_ARGS(skb), TP_STRUCT__entry( __field(void *, saddr) __field(void *, daddr) __field(__be16, sport) __field(__be16, dport) ), TP_fast_assign( __entry->saddr = &ipv6_hdr(skb)->saddr; __entry->daddr = &ipv6_hdr(skb)->daddr; __entry->sport = ntohs(udp_hdr(skb)->source); __entry->dport = ntohs(udp_hdr(skb)->dest); ), TP_printk("src %pI6:%u dst %pI6:%u", __entry->saddr, __entry->sport, __entry->daddr, __entry->dport) ); #endif /* _TRACE_UDP_H */ /* This part must be outside protection */ Loading net/ipv4/udp.c +3 −1 Original line number Diff line number Diff line Loading @@ -1919,9 +1919,11 @@ static int __udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) int is_udplite = IS_UDPLITE(sk); /* Note that an ENOMEM error is charged twice */ if (rc == -ENOMEM) if (rc == -ENOMEM) { UDP_INC_STATS(sock_net(sk), UDP_MIB_RCVBUFERRORS, is_udplite); trace_udpv4_fail_rcv_buf_errors(skb); } UDP_INC_STATS(sock_net(sk), UDP_MIB_INERRORS, is_udplite); kfree_skb(skb); trace_udp_fail_queue_rcv_skb(rc, sk); Loading net/ipv6/udp.c +4 −1 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ #include <linux/proc_fs.h> #include <linux/seq_file.h> #include <trace/events/skb.h> #include <trace/events/udp.h> #include "udp_impl.h" static bool udp6_lib_exact_dif_match(struct net *net, struct sk_buff *skb) Loading Loading @@ -538,9 +539,11 @@ static int __udpv6_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) int is_udplite = IS_UDPLITE(sk); /* Note that an ENOMEM error is charged twice */ if (rc == -ENOMEM) if (rc == -ENOMEM) { UDP6_INC_STATS(sock_net(sk), UDP_MIB_RCVBUFERRORS, is_udplite); trace_udpv6_fail_rcv_buf_errors(skb); } UDP6_INC_STATS(sock_net(sk), UDP_MIB_INERRORS, is_udplite); kfree_skb(skb); return -1; Loading Loading
include/trace/events/udp.h +48 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,54 @@ TRACE_EVENT(udp_fail_queue_rcv_skb, TP_printk("rc=%d port=%hu", __entry->rc, __entry->lport) ); TRACE_EVENT(udpv4_fail_rcv_buf_errors, TP_PROTO(struct sk_buff *skb), TP_ARGS(skb), TP_STRUCT__entry( __field(void *, saddr) __field(void *, daddr) __field(__be16, sport) __field(__be16, dport) ), TP_fast_assign( __entry->saddr = &ip_hdr(skb)->saddr; __entry->daddr = &ip_hdr(skb)->daddr; __entry->sport = ntohs(udp_hdr(skb)->source); __entry->dport = ntohs(udp_hdr(skb)->dest); ), TP_printk("src %pI4:%u dst %pI4:%u", __entry->saddr, __entry->sport, __entry->daddr, __entry->dport) ); TRACE_EVENT(udpv6_fail_rcv_buf_errors, TP_PROTO(struct sk_buff *skb), TP_ARGS(skb), TP_STRUCT__entry( __field(void *, saddr) __field(void *, daddr) __field(__be16, sport) __field(__be16, dport) ), TP_fast_assign( __entry->saddr = &ipv6_hdr(skb)->saddr; __entry->daddr = &ipv6_hdr(skb)->daddr; __entry->sport = ntohs(udp_hdr(skb)->source); __entry->dport = ntohs(udp_hdr(skb)->dest); ), TP_printk("src %pI6:%u dst %pI6:%u", __entry->saddr, __entry->sport, __entry->daddr, __entry->dport) ); #endif /* _TRACE_UDP_H */ /* This part must be outside protection */ Loading
net/ipv4/udp.c +3 −1 Original line number Diff line number Diff line Loading @@ -1919,9 +1919,11 @@ static int __udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) int is_udplite = IS_UDPLITE(sk); /* Note that an ENOMEM error is charged twice */ if (rc == -ENOMEM) if (rc == -ENOMEM) { UDP_INC_STATS(sock_net(sk), UDP_MIB_RCVBUFERRORS, is_udplite); trace_udpv4_fail_rcv_buf_errors(skb); } UDP_INC_STATS(sock_net(sk), UDP_MIB_INERRORS, is_udplite); kfree_skb(skb); trace_udp_fail_queue_rcv_skb(rc, sk); Loading
net/ipv6/udp.c +4 −1 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ #include <linux/proc_fs.h> #include <linux/seq_file.h> #include <trace/events/skb.h> #include <trace/events/udp.h> #include "udp_impl.h" static bool udp6_lib_exact_dif_match(struct net *net, struct sk_buff *skb) Loading Loading @@ -538,9 +539,11 @@ static int __udpv6_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) int is_udplite = IS_UDPLITE(sk); /* Note that an ENOMEM error is charged twice */ if (rc == -ENOMEM) if (rc == -ENOMEM) { UDP6_INC_STATS(sock_net(sk), UDP_MIB_RCVBUFERRORS, is_udplite); trace_udpv6_fail_rcv_buf_errors(skb); } UDP6_INC_STATS(sock_net(sk), UDP_MIB_INERRORS, is_udplite); kfree_skb(skb); return -1; Loading