mib: add net to IP_INC_STATS_BH
Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5e38e27044
commit
7c73a6faff
@ -158,7 +158,7 @@ struct ipv4_config
|
|||||||
extern struct ipv4_config ipv4_config;
|
extern struct ipv4_config ipv4_config;
|
||||||
DECLARE_SNMP_STAT(struct ipstats_mib, ip_statistics);
|
DECLARE_SNMP_STAT(struct ipstats_mib, ip_statistics);
|
||||||
#define IP_INC_STATS(net, field) do { (void)net; SNMP_INC_STATS(ip_statistics, field); } while (0)
|
#define IP_INC_STATS(net, field) do { (void)net; SNMP_INC_STATS(ip_statistics, field); } while (0)
|
||||||
#define IP_INC_STATS_BH(field) SNMP_INC_STATS_BH(ip_statistics, field)
|
#define IP_INC_STATS_BH(net, field) do { (void)net; SNMP_INC_STATS_BH(ip_statistics, field); } while (0)
|
||||||
#define IP_ADD_STATS_BH(field, val) SNMP_ADD_STATS_BH(ip_statistics, field, val)
|
#define IP_ADD_STATS_BH(field, val) SNMP_ADD_STATS_BH(ip_statistics, field, val)
|
||||||
DECLARE_SNMP_STAT(struct linux_mib, net_statistics);
|
DECLARE_SNMP_STAT(struct linux_mib, net_statistics);
|
||||||
#define NET_INC_STATS(field) SNMP_INC_STATS(net_statistics, field)
|
#define NET_INC_STATS(field) SNMP_INC_STATS(net_statistics, field)
|
||||||
|
@ -465,7 +465,7 @@ static struct dst_entry* dccp_v4_route_skb(struct net *net, struct sock *sk,
|
|||||||
|
|
||||||
security_skb_classify_flow(skb, &fl);
|
security_skb_classify_flow(skb, &fl);
|
||||||
if (ip_route_output_flow(net, &rt, &fl, sk, 0)) {
|
if (ip_route_output_flow(net, &rt, &fl, sk, 0)) {
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
|
IP_INC_STATS_BH(net, IPSTATS_MIB_OUTNOROUTES);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ int ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
|||||||
inet->sport, usin->sin_port, sk, 1);
|
inet->sport, usin->sin_port, sk, 1);
|
||||||
if (err) {
|
if (err) {
|
||||||
if (err == -ENETUNREACH)
|
if (err == -ENETUNREACH)
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
|
IP_INC_STATS_BH(sock_net(sk), IPSTATS_MIB_OUTNOROUTES);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -342,12 +342,12 @@ struct dst_entry* inet_csk_route_req(struct sock *sk,
|
|||||||
|
|
||||||
security_req_classify_flow(req, &fl);
|
security_req_classify_flow(req, &fl);
|
||||||
if (ip_route_output_flow(net, &rt, &fl, sk, 0)) {
|
if (ip_route_output_flow(net, &rt, &fl, sk, 0)) {
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
|
IP_INC_STATS_BH(net, IPSTATS_MIB_OUTNOROUTES);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (opt && opt->is_strictroute && rt->rt_dst != rt->rt_gateway) {
|
if (opt && opt->is_strictroute && rt->rt_dst != rt->rt_gateway) {
|
||||||
ip_rt_put(rt);
|
ip_rt_put(rt);
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
|
IP_INC_STATS_BH(net, IPSTATS_MIB_OUTNOROUTES);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return &rt->u.dst;
|
return &rt->u.dst;
|
||||||
|
@ -42,7 +42,7 @@ static int ip_forward_finish(struct sk_buff *skb)
|
|||||||
{
|
{
|
||||||
struct ip_options * opt = &(IPCB(skb)->opt);
|
struct ip_options * opt = &(IPCB(skb)->opt);
|
||||||
|
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_OUTFORWDATAGRAMS);
|
IP_INC_STATS_BH(dev_net(skb->dst->dev), IPSTATS_MIB_OUTFORWDATAGRAMS);
|
||||||
|
|
||||||
if (unlikely(opt->optlen))
|
if (unlikely(opt->optlen))
|
||||||
ip_forward_options(skb);
|
ip_forward_options(skb);
|
||||||
@ -123,7 +123,7 @@ int ip_forward(struct sk_buff *skb)
|
|||||||
|
|
||||||
too_many_hops:
|
too_many_hops:
|
||||||
/* Tell the sender its packet died... */
|
/* Tell the sender its packet died... */
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS);
|
IP_INC_STATS_BH(dev_net(skb->dst->dev), IPSTATS_MIB_INHDRERRORS);
|
||||||
icmp_send(skb, ICMP_TIME_EXCEEDED, ICMP_EXC_TTL, 0);
|
icmp_send(skb, ICMP_TIME_EXCEEDED, ICMP_EXC_TTL, 0);
|
||||||
drop:
|
drop:
|
||||||
kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
|
@ -199,8 +199,8 @@ static void ip_expire(unsigned long arg)
|
|||||||
|
|
||||||
ipq_kill(qp);
|
ipq_kill(qp);
|
||||||
|
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_REASMTIMEOUT);
|
IP_INC_STATS_BH(net, IPSTATS_MIB_REASMTIMEOUT);
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_REASMFAILS);
|
IP_INC_STATS_BH(net, IPSTATS_MIB_REASMFAILS);
|
||||||
|
|
||||||
if ((qp->q.last_in & INET_FRAG_FIRST_IN) && qp->q.fragments != NULL) {
|
if ((qp->q.last_in & INET_FRAG_FIRST_IN) && qp->q.fragments != NULL) {
|
||||||
struct sk_buff *head = qp->q.fragments;
|
struct sk_buff *head = qp->q.fragments;
|
||||||
@ -261,7 +261,10 @@ static inline int ip_frag_too_far(struct ipq *qp)
|
|||||||
rc = qp->q.fragments && (end - start) > max;
|
rc = qp->q.fragments && (end - start) > max;
|
||||||
|
|
||||||
if (rc) {
|
if (rc) {
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_REASMFAILS);
|
struct net *net;
|
||||||
|
|
||||||
|
net = container_of(qp->q.net, struct net, ipv4.frags);
|
||||||
|
IP_INC_STATS_BH(net, IPSTATS_MIB_REASMFAILS);
|
||||||
}
|
}
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
@ -545,7 +548,7 @@ static int ip_frag_reasm(struct ipq *qp, struct sk_buff *prev,
|
|||||||
iph = ip_hdr(head);
|
iph = ip_hdr(head);
|
||||||
iph->frag_off = 0;
|
iph->frag_off = 0;
|
||||||
iph->tot_len = htons(len);
|
iph->tot_len = htons(len);
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_REASMOKS);
|
IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_REASMOKS);
|
||||||
qp->q.fragments = NULL;
|
qp->q.fragments = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -560,7 +563,7 @@ static int ip_frag_reasm(struct ipq *qp, struct sk_buff *prev,
|
|||||||
"Oversized IP packet from " NIPQUAD_FMT ".\n",
|
"Oversized IP packet from " NIPQUAD_FMT ".\n",
|
||||||
NIPQUAD(qp->saddr));
|
NIPQUAD(qp->saddr));
|
||||||
out_fail:
|
out_fail:
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_REASMFAILS);
|
IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_REASMFAILS);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -571,7 +574,7 @@ int ip_defrag(struct sk_buff *skb, u32 user)
|
|||||||
struct net *net;
|
struct net *net;
|
||||||
|
|
||||||
net = skb->dev ? dev_net(skb->dev) : dev_net(skb->dst->dev);
|
net = skb->dev ? dev_net(skb->dev) : dev_net(skb->dst->dev);
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_REASMREQDS);
|
IP_INC_STATS_BH(net, IPSTATS_MIB_REASMREQDS);
|
||||||
|
|
||||||
/* Start by cleaning up the memory. */
|
/* Start by cleaning up the memory. */
|
||||||
if (atomic_read(&net->ipv4.frags.mem) > net->ipv4.frags.high_thresh)
|
if (atomic_read(&net->ipv4.frags.mem) > net->ipv4.frags.high_thresh)
|
||||||
@ -590,7 +593,7 @@ int ip_defrag(struct sk_buff *skb, u32 user)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_REASMFAILS);
|
IP_INC_STATS_BH(net, IPSTATS_MIB_REASMFAILS);
|
||||||
kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
@ -230,16 +230,16 @@ static int ip_local_deliver_finish(struct sk_buff *skb)
|
|||||||
protocol = -ret;
|
protocol = -ret;
|
||||||
goto resubmit;
|
goto resubmit;
|
||||||
}
|
}
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_INDELIVERS);
|
IP_INC_STATS_BH(net, IPSTATS_MIB_INDELIVERS);
|
||||||
} else {
|
} else {
|
||||||
if (!raw) {
|
if (!raw) {
|
||||||
if (xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) {
|
if (xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) {
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_INUNKNOWNPROTOS);
|
IP_INC_STATS_BH(net, IPSTATS_MIB_INUNKNOWNPROTOS);
|
||||||
icmp_send(skb, ICMP_DEST_UNREACH,
|
icmp_send(skb, ICMP_DEST_UNREACH,
|
||||||
ICMP_PROT_UNREACH, 0);
|
ICMP_PROT_UNREACH, 0);
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_INDELIVERS);
|
IP_INC_STATS_BH(net, IPSTATS_MIB_INDELIVERS);
|
||||||
kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -281,7 +281,7 @@ static inline int ip_rcv_options(struct sk_buff *skb)
|
|||||||
--ANK (980813)
|
--ANK (980813)
|
||||||
*/
|
*/
|
||||||
if (skb_cow(skb, skb_headroom(skb))) {
|
if (skb_cow(skb, skb_headroom(skb))) {
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_INDISCARDS);
|
IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_INDISCARDS);
|
||||||
goto drop;
|
goto drop;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -290,7 +290,7 @@ static inline int ip_rcv_options(struct sk_buff *skb)
|
|||||||
opt->optlen = iph->ihl*4 - sizeof(struct iphdr);
|
opt->optlen = iph->ihl*4 - sizeof(struct iphdr);
|
||||||
|
|
||||||
if (ip_options_compile(dev_net(dev), opt, skb)) {
|
if (ip_options_compile(dev_net(dev), opt, skb)) {
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS);
|
IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_INHDRERRORS);
|
||||||
goto drop;
|
goto drop;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -334,9 +334,11 @@ static int ip_rcv_finish(struct sk_buff *skb)
|
|||||||
skb->dev);
|
skb->dev);
|
||||||
if (unlikely(err)) {
|
if (unlikely(err)) {
|
||||||
if (err == -EHOSTUNREACH)
|
if (err == -EHOSTUNREACH)
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_INADDRERRORS);
|
IP_INC_STATS_BH(dev_net(skb->dev),
|
||||||
|
IPSTATS_MIB_INADDRERRORS);
|
||||||
else if (err == -ENETUNREACH)
|
else if (err == -ENETUNREACH)
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_INNOROUTES);
|
IP_INC_STATS_BH(dev_net(skb->dev),
|
||||||
|
IPSTATS_MIB_INNOROUTES);
|
||||||
goto drop;
|
goto drop;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -357,9 +359,9 @@ static int ip_rcv_finish(struct sk_buff *skb)
|
|||||||
|
|
||||||
rt = skb->rtable;
|
rt = skb->rtable;
|
||||||
if (rt->rt_type == RTN_MULTICAST)
|
if (rt->rt_type == RTN_MULTICAST)
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_INMCASTPKTS);
|
IP_INC_STATS_BH(dev_net(rt->u.dst.dev), IPSTATS_MIB_INMCASTPKTS);
|
||||||
else if (rt->rt_type == RTN_BROADCAST)
|
else if (rt->rt_type == RTN_BROADCAST)
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_INBCASTPKTS);
|
IP_INC_STATS_BH(dev_net(rt->u.dst.dev), IPSTATS_MIB_INBCASTPKTS);
|
||||||
|
|
||||||
return dst_input(skb);
|
return dst_input(skb);
|
||||||
|
|
||||||
@ -382,10 +384,10 @@ int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt,
|
|||||||
if (skb->pkt_type == PACKET_OTHERHOST)
|
if (skb->pkt_type == PACKET_OTHERHOST)
|
||||||
goto drop;
|
goto drop;
|
||||||
|
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_INRECEIVES);
|
IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_INRECEIVES);
|
||||||
|
|
||||||
if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL) {
|
if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL) {
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_INDISCARDS);
|
IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_INDISCARDS);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -418,7 +420,7 @@ int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt,
|
|||||||
|
|
||||||
len = ntohs(iph->tot_len);
|
len = ntohs(iph->tot_len);
|
||||||
if (skb->len < len) {
|
if (skb->len < len) {
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_INTRUNCATEDPKTS);
|
IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_INTRUNCATEDPKTS);
|
||||||
goto drop;
|
goto drop;
|
||||||
} else if (len < (iph->ihl*4))
|
} else if (len < (iph->ihl*4))
|
||||||
goto inhdr_error;
|
goto inhdr_error;
|
||||||
@ -428,7 +430,7 @@ int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt,
|
|||||||
* Note this now means skb->len holds ntohs(iph->tot_len).
|
* Note this now means skb->len holds ntohs(iph->tot_len).
|
||||||
*/
|
*/
|
||||||
if (pskb_trim_rcsum(skb, len)) {
|
if (pskb_trim_rcsum(skb, len)) {
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_INDISCARDS);
|
IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_INDISCARDS);
|
||||||
goto drop;
|
goto drop;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -439,7 +441,7 @@ int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt,
|
|||||||
ip_rcv_finish);
|
ip_rcv_finish);
|
||||||
|
|
||||||
inhdr_error:
|
inhdr_error:
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS);
|
IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_INHDRERRORS);
|
||||||
drop:
|
drop:
|
||||||
kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
out:
|
out:
|
||||||
|
@ -1178,7 +1178,7 @@ static inline int ipmr_forward_finish(struct sk_buff *skb)
|
|||||||
{
|
{
|
||||||
struct ip_options * opt = &(IPCB(skb)->opt);
|
struct ip_options * opt = &(IPCB(skb)->opt);
|
||||||
|
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_OUTFORWDATAGRAMS);
|
IP_INC_STATS_BH(dev_net(skb->dst->dev), IPSTATS_MIB_OUTFORWDATAGRAMS);
|
||||||
|
|
||||||
if (unlikely(opt->optlen))
|
if (unlikely(opt->optlen))
|
||||||
ip_forward_options(skb);
|
ip_forward_options(skb);
|
||||||
@ -1241,7 +1241,7 @@ static void ipmr_queue_xmit(struct sk_buff *skb, struct mfc_cache *c, int vifi)
|
|||||||
to blackhole.
|
to blackhole.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_FRAGFAILS);
|
IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_FRAGFAILS);
|
||||||
ip_rt_put(rt);
|
ip_rt_put(rt);
|
||||||
goto out_free;
|
goto out_free;
|
||||||
}
|
}
|
||||||
|
@ -1429,7 +1429,8 @@ static int ip_error(struct sk_buff *skb)
|
|||||||
break;
|
break;
|
||||||
case ENETUNREACH:
|
case ENETUNREACH:
|
||||||
code = ICMP_NET_UNREACH;
|
code = ICMP_NET_UNREACH;
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_INNOROUTES);
|
IP_INC_STATS_BH(dev_net(rt->u.dst.dev),
|
||||||
|
IPSTATS_MIB_INNOROUTES);
|
||||||
break;
|
break;
|
||||||
case EACCES:
|
case EACCES:
|
||||||
code = ICMP_PKT_FILTERED;
|
code = ICMP_PKT_FILTERED;
|
||||||
|
@ -175,7 +175,7 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
|||||||
inet->sport, usin->sin_port, sk, 1);
|
inet->sport, usin->sin_port, sk, 1);
|
||||||
if (tmp < 0) {
|
if (tmp < 0) {
|
||||||
if (tmp == -ENETUNREACH)
|
if (tmp == -ENETUNREACH)
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
|
IP_INC_STATS_BH(sock_net(sk), IPSTATS_MIB_OUTNOROUTES);
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -662,7 +662,7 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
|||||||
err = ip_route_output_flow(net, &rt, &fl, sk, 1);
|
err = ip_route_output_flow(net, &rt, &fl, sk, 1);
|
||||||
if (err) {
|
if (err) {
|
||||||
if (err == -ENETUNREACH)
|
if (err == -ENETUNREACH)
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
|
IP_INC_STATS_BH(net, IPSTATS_MIB_OUTNOROUTES);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,6 +50,7 @@
|
|||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <net/inet_ecn.h>
|
#include <net/inet_ecn.h>
|
||||||
#include <net/icmp.h>
|
#include <net/icmp.h>
|
||||||
|
#include <net/net_namespace.h>
|
||||||
|
|
||||||
#ifndef TEST_FRAME
|
#ifndef TEST_FRAME
|
||||||
#include <net/tcp.h>
|
#include <net/tcp.h>
|
||||||
@ -595,7 +596,7 @@ int sctp_packet_transmit(struct sctp_packet *packet)
|
|||||||
return err;
|
return err;
|
||||||
no_route:
|
no_route:
|
||||||
kfree_skb(nskb);
|
kfree_skb(nskb);
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
|
IP_INC_STATS_BH(&init_net, IPSTATS_MIB_OUTNOROUTES);
|
||||||
|
|
||||||
/* FIXME: Returning the 'err' will effect all the associations
|
/* FIXME: Returning the 'err' will effect all the associations
|
||||||
* associated with a socket, although only one of the paths of the
|
* associated with a socket, although only one of the paths of the
|
||||||
|
Loading…
Reference in New Issue
Block a user