diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv4/udp.c | 6 | ||||
-rw-r--r-- | net/ipv6/proc.c | 1 | ||||
-rw-r--r-- | net/ipv6/udp.c | 2 | ||||
-rw-r--r-- | net/rxrpc/ar-input.c | 4 | ||||
-rw-r--r-- | net/sunrpc/xprtsock.c | 6 |
5 files changed, 17 insertions, 2 deletions
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index f50de5d5218..78cfcb4a1b3 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -110,6 +110,7 @@ */ DEFINE_SNMP_STAT(struct udp_mib, udp_statistics) __read_mostly; +EXPORT_SYMBOL(udp_statistics); struct hlist_head udp_hash[UDP_HTABLE_SIZE]; DEFINE_RWLOCK(udp_hash_lock); @@ -969,8 +970,11 @@ int udp_queue_rcv_skb(struct sock * sk, struct sk_buff *skb) int ret; ret = (*up->encap_rcv)(sk, skb); - if (ret <= 0) + if (ret <= 0) { + UDP_INC_STATS_BH(UDP_MIB_INDATAGRAMS, + is_udplite); return -ret; + } } /* FALLTHROUGH -- it's a UDP Packet */ diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c index 44937616057..41e9980b3e0 100644 --- a/net/ipv6/proc.c +++ b/net/ipv6/proc.c @@ -27,6 +27,7 @@ #include <net/ip.h> #include <net/sock.h> #include <net/tcp.h> +#include <net/udp.h> #include <net/transp_v6.h> #include <net/ipv6.h> diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index 87bccec9882..36bdcd2e1b5 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c @@ -34,6 +34,7 @@ #include <linux/ipv6.h> #include <linux/icmpv6.h> #include <linux/init.h> +#include <linux/module.h> #include <linux/skbuff.h> #include <asm/uaccess.h> @@ -51,6 +52,7 @@ #include "udp_impl.h" DEFINE_SNMP_STAT(struct udp_mib, udp_stats_in6) __read_mostly; +EXPORT_SYMBOL(udp_stats_in6); static inline int udp_v6_get_port(struct sock *sk, unsigned short snum) { diff --git a/net/rxrpc/ar-input.c b/net/rxrpc/ar-input.c index 91b5bbb003e..f446d9b9925 100644 --- a/net/rxrpc/ar-input.c +++ b/net/rxrpc/ar-input.c @@ -20,6 +20,7 @@ #include <net/sock.h> #include <net/af_rxrpc.h> #include <net/ip.h> +#include <net/udp.h> #include "ar-internal.h" unsigned long rxrpc_ack_timeout = 1; @@ -707,10 +708,13 @@ void rxrpc_data_ready(struct sock *sk, int count) if (skb_checksum_complete(skb)) { rxrpc_free_skb(skb); rxrpc_put_local(local); + UDP_INC_STATS_BH(UDP_MIB_INERRORS, 0); _leave(" [CSUM failed]"); return; } + UDP_INC_STATS_BH(UDP_MIB_INDATAGRAMS, 0); + /* the socket buffer we have is owned by UDP, with UDP's data all over * it, but we really want our own */ skb_orphan(skb); diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index 2f630a512ab..6fa52f44de0 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c @@ -838,8 +838,12 @@ static void xs_udp_data_ready(struct sock *sk, int len) copied = repsize; /* Suck it into the iovec, verify checksum if not done by hw. */ - if (csum_partial_copy_to_xdr(&rovr->rq_private_buf, skb)) + if (csum_partial_copy_to_xdr(&rovr->rq_private_buf, skb)) { + UDPX_INC_STATS_BH(sk, UDP_MIB_INERRORS); goto out_unlock; + } + + UDPX_INC_STATS_BH(sk, UDP_MIB_INDATAGRAMS); /* Something worked... */ dst_confirm(skb->dst); |