Commit 7c73a6fa authored by Pavel Emelyanov's avatar Pavel Emelyanov Committed by David S. Miller

mib: add net to IP_INC_STATS_BH

Signed-off-by: default avatarPavel Emelyanov <xemul@openvz.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 5e38e270
...@@ -158,7 +158,7 @@ struct ipv4_config ...@@ -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, ...@@ -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) ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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 @@ ...@@ -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) ...@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment