summaryrefslogtreecommitdiff
path: root/include/net
diff options
context:
space:
mode:
authorRandy Dunlap <rddunlap@osdl.org>2003-04-25 07:06:47 -0700
committerHideaki Yoshifuji <yoshfuji@linux-ipv6.org>2003-04-25 07:06:47 -0700
commit5e50115de49a67fd8ac6e1220d51e993ef2addb6 (patch)
tree974718e0ec2c3908ee4338dffc8a75b7ef972faa /include/net
parent4b3c7f8a6b93d57baafdee131ffd5db11832c186 (diff)
[IPV6]: Per-interfave icmpv6 statistics support.
Diffstat (limited to 'include/net')
-rw-r--r--include/net/if_inet6.h3
-rw-r--r--include/net/ipv6.h30
2 files changed, 28 insertions, 5 deletions
diff --git a/include/net/if_inet6.h b/include/net/if_inet6.h
index ad5416f1c224..a4663289385b 100644
--- a/include/net/if_inet6.h
+++ b/include/net/if_inet6.h
@@ -15,6 +15,8 @@
#ifndef _NET_IF_INET6_H
#define _NET_IF_INET6_H
+#include <net/snmp.h>
+
#define IF_RA_RCVD 0x20
#define IF_RS_SENT 0x10
@@ -154,6 +156,7 @@ struct ipv6_devconf
struct ipv6_devstat {
struct proc_dir_entry *proc_dir_entry;
+ DEFINE_SNMP_STAT(struct icmpv6_mib, icmpv6);
};
struct inet6_dev
diff --git a/include/net/ipv6.h b/include/net/ipv6.h
index 5be656b3616b..b6760b3b9f56 100644
--- a/include/net/ipv6.h
+++ b/include/net/ipv6.h
@@ -112,11 +112,31 @@ DECLARE_SNMP_STAT(struct ipv6_mib, ipv6_statistics);
#define IP6_INC_STATS_BH(field) SNMP_INC_STATS_BH(ipv6_statistics, field)
#define IP6_INC_STATS_USER(field) SNMP_INC_STATS_USER(ipv6_statistics, field)
DECLARE_SNMP_STAT(struct icmpv6_mib, icmpv6_statistics);
-#define ICMP6_INC_STATS(field) SNMP_INC_STATS(icmpv6_statistics, field)
-#define ICMP6_INC_STATS_BH(field) SNMP_INC_STATS_BH(icmpv6_statistics, field)
-#define ICMP6_INC_STATS_USER(field) SNMP_INC_STATS_USER(icmpv6_statistics, field)
-#define ICMP6_INC_STATS_OFFSET_BH(field, offset) \
- SNMP_INC_STATS_OFFSET_BH(icmpv6_statistics, field, offset)
+#define ICMP6_INC_STATS(idev, field) ({ \
+ struct inet6_dev *_idev = (idev); \
+ if (likely(_idev != NULL)) \
+ SNMP_INC_STATS(idev->stats.icmpv6, field); \
+ SNMP_INC_STATS(icmpv6_statistics, field); \
+})
+#define ICMP6_INC_STATS_BH(idev, field) ({ \
+ struct inet6_dev *_idev = (idev); \
+ if (likely(_idev != NULL)) \
+ SNMP_INC_STATS_BH((_idev)->stats.icmpv6, field); \
+ SNMP_INC_STATS_BH(icmpv6_statistics, field); \
+})
+#define ICMP6_INC_STATS_USER(idev, field) ({ \
+ struct inet6_dev *_idev = (idev); \
+ if (likely(_idev != NULL)) \
+ SNMP_INC_STATS_USER(_idev->stats.icmpv6, field); \
+ SNMP_INC_STATS_USER(icmpv6_statistics, field); \
+})
+#define ICMP6_INC_STATS_OFFSET_BH(idev, field, offset) ({ \
+ struct inet6_dev *_idev = idev; \
+ __typeof__(offset) _offset = (offset); \
+ if (likely(_idev != NULL)) \
+ SNMP_INC_STATS_OFFSET_BH(_idev->stats.icmpv6, field, _offset); \
+ SNMP_INC_STATS_OFFSET_BH(icmpv6_statistics, field, _offset); \
+})
DECLARE_SNMP_STAT(struct udp_mib, udp_stats_in6);
#define UDP6_INC_STATS(field) SNMP_INC_STATS(udp_stats_in6, field)
#define UDP6_INC_STATS_BH(field) SNMP_INC_STATS_BH(udp_stats_in6, field)