diff options
-rw-r--r-- | include/uapi/linux/snmp.h | 4 | ||||
-rw-r--r-- | net/ipv4/ip_input.c | 8 | ||||
-rw-r--r-- | net/ipv4/proc.c | 7 | ||||
-rw-r--r-- | net/ipv6/ip6_input.c | 6 | ||||
-rw-r--r-- | net/ipv6/proc.c | 4 |
5 files changed, 27 insertions, 2 deletions
diff --git a/include/uapi/linux/snmp.h b/include/uapi/linux/snmp.h index af0a674cc677..60601d28da75 100644 --- a/include/uapi/linux/snmp.h +++ b/include/uapi/linux/snmp.h | |||
@@ -51,6 +51,10 @@ enum | |||
51 | IPSTATS_MIB_INBCASTOCTETS, /* InBcastOctets */ | 51 | IPSTATS_MIB_INBCASTOCTETS, /* InBcastOctets */ |
52 | IPSTATS_MIB_OUTBCASTOCTETS, /* OutBcastOctets */ | 52 | IPSTATS_MIB_OUTBCASTOCTETS, /* OutBcastOctets */ |
53 | IPSTATS_MIB_CSUMERRORS, /* InCsumErrors */ | 53 | IPSTATS_MIB_CSUMERRORS, /* InCsumErrors */ |
54 | IPSTATS_MIB_NOECTPKTS, /* InNoECTPkts */ | ||
55 | IPSTATS_MIB_ECT1PKTS, /* InECT1Pkts */ | ||
56 | IPSTATS_MIB_ECT0PKTS, /* InECT0Pkts */ | ||
57 | IPSTATS_MIB_CEPKTS, /* InCEPkts */ | ||
54 | __IPSTATS_MIB_MAX | 58 | __IPSTATS_MIB_MAX |
55 | }; | 59 | }; |
56 | 60 | ||
diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c index 15e3e683adec..054a3e97d822 100644 --- a/net/ipv4/ip_input.c +++ b/net/ipv4/ip_input.c | |||
@@ -141,6 +141,7 @@ | |||
141 | #include <net/icmp.h> | 141 | #include <net/icmp.h> |
142 | #include <net/raw.h> | 142 | #include <net/raw.h> |
143 | #include <net/checksum.h> | 143 | #include <net/checksum.h> |
144 | #include <net/inet_ecn.h> | ||
144 | #include <linux/netfilter_ipv4.h> | 145 | #include <linux/netfilter_ipv4.h> |
145 | #include <net/xfrm.h> | 146 | #include <net/xfrm.h> |
146 | #include <linux/mroute.h> | 147 | #include <linux/mroute.h> |
@@ -410,6 +411,13 @@ int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, | |||
410 | if (iph->ihl < 5 || iph->version != 4) | 411 | if (iph->ihl < 5 || iph->version != 4) |
411 | goto inhdr_error; | 412 | goto inhdr_error; |
412 | 413 | ||
414 | BUILD_BUG_ON(IPSTATS_MIB_ECT1PKTS != IPSTATS_MIB_NOECTPKTS + INET_ECN_ECT_1); | ||
415 | BUILD_BUG_ON(IPSTATS_MIB_ECT0PKTS != IPSTATS_MIB_NOECTPKTS + INET_ECN_ECT_0); | ||
416 | BUILD_BUG_ON(IPSTATS_MIB_CEPKTS != IPSTATS_MIB_NOECTPKTS + INET_ECN_CE); | ||
417 | IP_ADD_STATS_BH(dev_net(dev), | ||
418 | IPSTATS_MIB_NOECTPKTS + (iph->tos & INET_ECN_MASK), | ||
419 | max_t(unsigned short, 1, skb_shinfo(skb)->gso_segs)); | ||
420 | |||
413 | if (!pskb_may_pull(skb, iph->ihl*4)) | 421 | if (!pskb_may_pull(skb, iph->ihl*4)) |
414 | goto inhdr_error; | 422 | goto inhdr_error; |
415 | 423 | ||
diff --git a/net/ipv4/proc.c b/net/ipv4/proc.c index 6577a1149a47..5f5fa612647f 100644 --- a/net/ipv4/proc.c +++ b/net/ipv4/proc.c | |||
@@ -111,7 +111,7 @@ static const struct snmp_mib snmp4_ipstats_list[] = { | |||
111 | SNMP_MIB_SENTINEL | 111 | SNMP_MIB_SENTINEL |
112 | }; | 112 | }; |
113 | 113 | ||
114 | /* Following RFC4293 items are displayed in /proc/net/netstat */ | 114 | /* Following items are displayed in /proc/net/netstat */ |
115 | static const struct snmp_mib snmp4_ipextstats_list[] = { | 115 | static const struct snmp_mib snmp4_ipextstats_list[] = { |
116 | SNMP_MIB_ITEM("InNoRoutes", IPSTATS_MIB_INNOROUTES), | 116 | SNMP_MIB_ITEM("InNoRoutes", IPSTATS_MIB_INNOROUTES), |
117 | SNMP_MIB_ITEM("InTruncatedPkts", IPSTATS_MIB_INTRUNCATEDPKTS), | 117 | SNMP_MIB_ITEM("InTruncatedPkts", IPSTATS_MIB_INTRUNCATEDPKTS), |
@@ -125,7 +125,12 @@ static const struct snmp_mib snmp4_ipextstats_list[] = { | |||
125 | SNMP_MIB_ITEM("OutMcastOctets", IPSTATS_MIB_OUTMCASTOCTETS), | 125 | SNMP_MIB_ITEM("OutMcastOctets", IPSTATS_MIB_OUTMCASTOCTETS), |
126 | SNMP_MIB_ITEM("InBcastOctets", IPSTATS_MIB_INBCASTOCTETS), | 126 | SNMP_MIB_ITEM("InBcastOctets", IPSTATS_MIB_INBCASTOCTETS), |
127 | SNMP_MIB_ITEM("OutBcastOctets", IPSTATS_MIB_OUTBCASTOCTETS), | 127 | SNMP_MIB_ITEM("OutBcastOctets", IPSTATS_MIB_OUTBCASTOCTETS), |
128 | /* Non RFC4293 fields */ | ||
128 | SNMP_MIB_ITEM("InCsumErrors", IPSTATS_MIB_CSUMERRORS), | 129 | SNMP_MIB_ITEM("InCsumErrors", IPSTATS_MIB_CSUMERRORS), |
130 | SNMP_MIB_ITEM("InNoECTPkts", IPSTATS_MIB_NOECTPKTS), | ||
131 | SNMP_MIB_ITEM("InECT1Pkts", IPSTATS_MIB_ECT1PKTS), | ||
132 | SNMP_MIB_ITEM("InECT0Pkts", IPSTATS_MIB_ECT0PKTS), | ||
133 | SNMP_MIB_ITEM("InCEPkts", IPSTATS_MIB_CEPKTS), | ||
129 | SNMP_MIB_SENTINEL | 134 | SNMP_MIB_SENTINEL |
130 | }; | 135 | }; |
131 | 136 | ||
diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c index 2bab2aa59745..302d6fb1ff2b 100644 --- a/net/ipv6/ip6_input.c +++ b/net/ipv6/ip6_input.c | |||
@@ -44,7 +44,7 @@ | |||
44 | #include <net/ip6_route.h> | 44 | #include <net/ip6_route.h> |
45 | #include <net/addrconf.h> | 45 | #include <net/addrconf.h> |
46 | #include <net/xfrm.h> | 46 | #include <net/xfrm.h> |
47 | 47 | #include <net/inet_ecn.h> | |
48 | 48 | ||
49 | 49 | ||
50 | int ip6_rcv_finish(struct sk_buff *skb) | 50 | int ip6_rcv_finish(struct sk_buff *skb) |
@@ -109,6 +109,10 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt | |||
109 | if (hdr->version != 6) | 109 | if (hdr->version != 6) |
110 | goto err; | 110 | goto err; |
111 | 111 | ||
112 | IP6_ADD_STATS_BH(dev_net(dev), idev, | ||
113 | IPSTATS_MIB_NOECTPKTS + | ||
114 | (ipv6_get_dsfield(hdr) & INET_ECN_MASK), | ||
115 | max_t(unsigned short, 1, skb_shinfo(skb)->gso_segs)); | ||
112 | /* | 116 | /* |
113 | * RFC4291 2.5.3 | 117 | * RFC4291 2.5.3 |
114 | * A packet received on an interface with a destination address | 118 | * A packet received on an interface with a destination address |
diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c index 51c3285b5d9b..091d066a57b3 100644 --- a/net/ipv6/proc.c +++ b/net/ipv6/proc.c | |||
@@ -91,6 +91,10 @@ static const struct snmp_mib snmp6_ipstats_list[] = { | |||
91 | SNMP_MIB_ITEM("Ip6InBcastOctets", IPSTATS_MIB_INBCASTOCTETS), | 91 | SNMP_MIB_ITEM("Ip6InBcastOctets", IPSTATS_MIB_INBCASTOCTETS), |
92 | SNMP_MIB_ITEM("Ip6OutBcastOctets", IPSTATS_MIB_OUTBCASTOCTETS), | 92 | SNMP_MIB_ITEM("Ip6OutBcastOctets", IPSTATS_MIB_OUTBCASTOCTETS), |
93 | /* IPSTATS_MIB_CSUMERRORS is not relevant in IPv6 (no checksum) */ | 93 | /* IPSTATS_MIB_CSUMERRORS is not relevant in IPv6 (no checksum) */ |
94 | SNMP_MIB_ITEM("Ip6InNoECTPkts", IPSTATS_MIB_NOECTPKTS), | ||
95 | SNMP_MIB_ITEM("Ip6InECT1Pkts", IPSTATS_MIB_ECT1PKTS), | ||
96 | SNMP_MIB_ITEM("Ip6InECT0Pkts", IPSTATS_MIB_ECT0PKTS), | ||
97 | SNMP_MIB_ITEM("Ip6InCEPkts", IPSTATS_MIB_CEPKTS), | ||
94 | SNMP_MIB_SENTINEL | 98 | SNMP_MIB_SENTINEL |
95 | }; | 99 | }; |
96 | 100 | ||