diff options
Diffstat (limited to 'include/net/ipv6.h')
| -rw-r--r-- | include/net/ipv6.h | 22 | 
1 files changed, 13 insertions, 9 deletions
diff --git a/include/net/ipv6.h b/include/net/ipv6.h index a366a8a1fe2..e4170a22fc6 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h @@ -132,6 +132,15 @@ extern struct ctl_path net_ipv6_ctl_path[];  	SNMP_INC_STATS##modifier((net)->mib.statname##_statistics, (field));\  }) +/* per device and per net counters are atomic_long_t */ +#define _DEVINC_ATOMIC_ATOMIC(net, statname, idev, field)		\ +({									\ +	struct inet6_dev *_idev = (idev);				\ +	if (likely(_idev != NULL))					\ +		SNMP_INC_STATS_ATOMIC_LONG((_idev)->stats.statname##dev, (field)); \ +	SNMP_INC_STATS_ATOMIC_LONG((net)->mib.statname##_statistics, (field));\ +}) +  #define _DEVADD(net, statname, modifier, idev, field, val)		\  ({									\  	struct inet6_dev *_idev = (idev);				\ @@ -168,11 +177,11 @@ extern struct ctl_path net_ipv6_ctl_path[];  		_DEVINCATOMIC(net, icmpv6, _BH, idev, field)  #define ICMP6MSGOUT_INC_STATS(net, idev, field)		\ -	_DEVINCATOMIC(net, icmpv6msg, , idev, field +256) +	_DEVINC_ATOMIC_ATOMIC(net, icmpv6msg, idev, field +256)  #define ICMP6MSGOUT_INC_STATS_BH(net, idev, field)	\ -	_DEVINCATOMIC(net, icmpv6msg, _BH, idev, field +256) +	_DEVINC_ATOMIC_ATOMIC(net, icmpv6msg, idev, field +256)  #define ICMP6MSGIN_INC_STATS_BH(net, idev, field)	\ -	_DEVINCATOMIC(net, icmpv6msg, _BH, idev, field) +	_DEVINC_ATOMIC_ATOMIC(net, icmpv6msg, idev, field)  struct ip6_ra_chain {  	struct ip6_ra_chain	*next; @@ -300,11 +309,6 @@ ipv6_masked_addr_cmp(const struct in6_addr *a1, const struct in6_addr *m,  		  ((a1->s6_addr32[3] ^ a2->s6_addr32[3]) & m->s6_addr32[3]));  } -static inline void ipv6_addr_copy(struct in6_addr *a1, const struct in6_addr *a2) -{ -	memcpy(a1, a2, sizeof(struct in6_addr)); -} -  static inline void ipv6_addr_prefix(struct in6_addr *pfx,   				    const struct in6_addr *addr,  				    int plen) @@ -554,7 +558,7 @@ extern void			ipv6_push_frag_opts(struct sk_buff *skb,  						    u8 *proto);  extern int			ipv6_skip_exthdr(const struct sk_buff *, int start, -					         u8 *nexthdrp); +					         u8 *nexthdrp, __be16 *frag_offp);  extern int 			ipv6_ext_hdr(u8 nexthdr);  |