Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 81aa646c authored by Martin Bligh's avatar Martin Bligh Committed by David S. Miller
Browse files

[IPV4]: add the UdpSndbufErrors and UdpRcvbufErrors MIBs



Signed-off-by: default avatarMartin Bligh <mbligh@google.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
parent 2aa7f36c
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -155,6 +155,8 @@ enum
	UDP_MIB_NOPORTS,			/* NoPorts */
	UDP_MIB_NOPORTS,			/* NoPorts */
	UDP_MIB_INERRORS,			/* InErrors */
	UDP_MIB_INERRORS,			/* InErrors */
	UDP_MIB_OUTDATAGRAMS,			/* OutDatagrams */
	UDP_MIB_OUTDATAGRAMS,			/* OutDatagrams */
	UDP_MIB_RCVBUFERRORS,			/* RcvbufErrors */
	UDP_MIB_SNDBUFERRORS,			/* SndbufErrors */
	__UDP_MIB_MAX
	__UDP_MIB_MAX
};
};


+2 −0
Original line number Original line Diff line number Diff line
@@ -173,6 +173,8 @@ static const struct snmp_mib snmp4_udp_list[] = {
	SNMP_MIB_ITEM("NoPorts", UDP_MIB_NOPORTS),
	SNMP_MIB_ITEM("NoPorts", UDP_MIB_NOPORTS),
	SNMP_MIB_ITEM("InErrors", UDP_MIB_INERRORS),
	SNMP_MIB_ITEM("InErrors", UDP_MIB_INERRORS),
	SNMP_MIB_ITEM("OutDatagrams", UDP_MIB_OUTDATAGRAMS),
	SNMP_MIB_ITEM("OutDatagrams", UDP_MIB_OUTDATAGRAMS),
	SNMP_MIB_ITEM("RcvbufErrors", UDP_MIB_RCVBUFERRORS),
	SNMP_MIB_ITEM("SndbufErrors", UDP_MIB_SNDBUFERRORS),
	SNMP_MIB_SENTINEL
	SNMP_MIB_SENTINEL
};
};


+15 −1
Original line number Original line Diff line number Diff line
@@ -662,6 +662,16 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
		UDP_INC_STATS_USER(UDP_MIB_OUTDATAGRAMS);
		UDP_INC_STATS_USER(UDP_MIB_OUTDATAGRAMS);
		return len;
		return len;
	}
	}
	/*
	 * ENOBUFS = no kernel mem, SOCK_NOSPACE = no sndbuf space.  Reporting
	 * ENOBUFS might not be good (it's not tunable per se), but otherwise
	 * we don't have a good statistic (IpOutDiscards but it can be too many
	 * things).  We could add another new stat but at least for now that
	 * seems like overkill.
	 */
	if (err == -ENOBUFS || test_bit(SOCK_NOSPACE, &sk->sk_socket->flags)) {
		UDP_INC_STATS_USER(UDP_MIB_SNDBUFERRORS);
	}
	return err;
	return err;


do_confirm:
do_confirm:
@@ -981,6 +991,7 @@ static int udp_encap_rcv(struct sock * sk, struct sk_buff *skb)
static int udp_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
static int udp_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
{
{
	struct udp_sock *up = udp_sk(sk);
	struct udp_sock *up = udp_sk(sk);
	int rc;


	/*
	/*
	 *	Charge it to the socket, dropping if the queue is full.
	 *	Charge it to the socket, dropping if the queue is full.
@@ -1027,7 +1038,10 @@ static int udp_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
		skb->ip_summed = CHECKSUM_UNNECESSARY;
		skb->ip_summed = CHECKSUM_UNNECESSARY;
	}
	}


	if (sock_queue_rcv_skb(sk,skb)<0) {
	if ((rc = sock_queue_rcv_skb(sk,skb)) < 0) {
		/* Note that an ENOMEM error is charged twice */
		if (rc == -ENOMEM)
			UDP_INC_STATS_BH(UDP_MIB_RCVBUFERRORS);
		UDP_INC_STATS_BH(UDP_MIB_INERRORS);
		UDP_INC_STATS_BH(UDP_MIB_INERRORS);
		kfree_skb(skb);
		kfree_skb(skb);
		return -1;
		return -1;