snmp: add missing counters for RFC 4293
The IP MIB (RFC 4293) defines stats for InOctets, OutOctets, InMcastOctets and OutMcastOctets: http://tools.ietf.org/html/rfc4293 But it seems we don't track those in any way that easy to separate from other protocols. This patch adds those missing counters to the stats file. Tested successfully by me With help from Eric Dumazet. Signed-off-by: Neil Horman <nhorman@tuxdriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
06bd12c3b8
commit
edf391ff17
@ -1449,7 +1449,8 @@ static void mld_sendpack(struct sk_buff *skb)
|
||||
int err;
|
||||
struct flowi fl;
|
||||
|
||||
IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTREQUESTS);
|
||||
IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_OUT, skb->len);
|
||||
|
||||
payload_len = (skb->tail - skb->network_header) - sizeof(*pip6);
|
||||
mldlen = skb->tail - skb->transport_header;
|
||||
pip6->payload_len = htons(payload_len);
|
||||
@ -1473,13 +1474,15 @@ static void mld_sendpack(struct sk_buff *skb)
|
||||
if (err)
|
||||
goto err_out;
|
||||
|
||||
payload_len = skb->len;
|
||||
|
||||
err = NF_HOOK(PF_INET6, NF_INET_LOCAL_OUT, skb, NULL, skb->dev,
|
||||
dst_output);
|
||||
out:
|
||||
if (!err) {
|
||||
ICMP6MSGOUT_INC_STATS_BH(net, idev, ICMPV6_MLD2_REPORT);
|
||||
ICMP6_INC_STATS_BH(net, idev, ICMP6_MIB_OUTMSGS);
|
||||
IP6_INC_STATS_BH(net, idev, IPSTATS_MIB_OUTMCASTPKTS);
|
||||
IP6_UPD_PO_STATS_BH(net, idev, IPSTATS_MIB_OUTMCAST, payload_len);
|
||||
} else
|
||||
IP6_INC_STATS_BH(net, idev, IPSTATS_MIB_OUTDISCARDS);
|
||||
|
||||
@ -1773,10 +1776,6 @@ static void igmp6_send(struct in6_addr *addr, struct net_device *dev, int type)
|
||||
IPV6_TLV_PADN, 0 };
|
||||
struct flowi fl;
|
||||
|
||||
rcu_read_lock();
|
||||
IP6_INC_STATS(net, __in6_dev_get(dev),
|
||||
IPSTATS_MIB_OUTREQUESTS);
|
||||
rcu_read_unlock();
|
||||
if (type == ICMPV6_MGM_REDUCTION)
|
||||
snd_addr = &in6addr_linklocal_allrouters;
|
||||
else
|
||||
@ -1786,6 +1785,11 @@ static void igmp6_send(struct in6_addr *addr, struct net_device *dev, int type)
|
||||
payload_len = len + sizeof(ra);
|
||||
full_len = sizeof(struct ipv6hdr) + payload_len;
|
||||
|
||||
rcu_read_lock();
|
||||
IP6_UPD_PO_STATS(net, __in6_dev_get(dev),
|
||||
IPSTATS_MIB_OUT, full_len);
|
||||
rcu_read_unlock();
|
||||
|
||||
skb = sock_alloc_send_skb(sk, LL_ALLOCATED_SPACE(dev) + full_len, 1, &err);
|
||||
|
||||
if (skb == NULL) {
|
||||
@ -1838,13 +1842,14 @@ static void igmp6_send(struct in6_addr *addr, struct net_device *dev, int type)
|
||||
if (err)
|
||||
goto err_out;
|
||||
|
||||
|
||||
err = NF_HOOK(PF_INET6, NF_INET_LOCAL_OUT, skb, NULL, skb->dev,
|
||||
dst_output);
|
||||
out:
|
||||
if (!err) {
|
||||
ICMP6MSGOUT_INC_STATS(net, idev, type);
|
||||
ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTMSGS);
|
||||
IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTMCASTPKTS);
|
||||
IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_OUTMCAST, full_len);
|
||||
} else
|
||||
IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTDISCARDS);
|
||||
|
||||
|
Reference in New Issue
Block a user