diff options
| author | Randy Dunlap <rddunlap@osdl.org> | 2003-04-25 07:06:47 -0700 |
|---|---|---|
| committer | Hideaki Yoshifuji <yoshfuji@linux-ipv6.org> | 2003-04-25 07:06:47 -0700 |
| commit | 5e50115de49a67fd8ac6e1220d51e993ef2addb6 (patch) | |
| tree | 974718e0ec2c3908ee4338dffc8a75b7ef972faa /include/net | |
| parent | 4b3c7f8a6b93d57baafdee131ffd5db11832c186 (diff) | |
[IPV6]: Per-interfave icmpv6 statistics support.
Diffstat (limited to 'include/net')
| -rw-r--r-- | include/net/if_inet6.h | 3 | ||||
| -rw-r--r-- | include/net/ipv6.h | 30 |
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) |
