• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/include/net/
1/*
2 *		INETPEER - A storage for permanent information about peers
3 *
4 *  Authors:	Andrey V. Savochkin <saw@msu.ru>
5 */
6
7#ifndef _NET_INETPEER_H
8#define _NET_INETPEER_H
9
10#include <linux/types.h>
11#include <linux/init.h>
12#include <linux/jiffies.h>
13#include <linux/spinlock.h>
14#include <asm/atomic.h>
15
16struct inet_peer {
17	/* group together avl_left,avl_right,v4daddr to speedup lookups */
18	struct inet_peer	*avl_left, *avl_right;
19	__be32			v4daddr;	/* peer's address */
20	__u32			avl_height;
21	struct list_head	unused;
22	__u32			dtime;		/* the time of last use of not
23						 * referenced entries */
24	atomic_t		refcnt;
25	/*
26	 * Once inet_peer is queued for deletion (refcnt == -1), following fields
27	 * are not available: rid, ip_id_count, tcp_ts, tcp_ts_stamp
28	 * We can share memory with rcu_head to keep inet_peer small
29	 * (less then 64 bytes)
30	 */
31	union {
32		struct {
33			atomic_t	rid;		/* Frag reception counter */
34			atomic_t	ip_id_count;	/* IP ID for the next packet */
35			__u32		tcp_ts;
36			__u32		tcp_ts_stamp;
37		};
38		struct rcu_head         rcu;
39	};
40};
41
42void			inet_initpeers(void) __init;
43
44/* can be called with or without local BH being disabled */
45struct inet_peer	*inet_getpeer(__be32 daddr, int create);
46
47/* can be called from BH context or outside */
48extern void inet_putpeer(struct inet_peer *p);
49
50/*
51 * temporary check to make sure we dont access rid, ip_id_count, tcp_ts,
52 * tcp_ts_stamp if no refcount is taken on inet_peer
53 */
54static inline void inet_peer_refcheck(const struct inet_peer *p)
55{
56	WARN_ON_ONCE(atomic_read(&p->refcnt) <= 0);
57}
58
59
60/* can be called with or without local BH being disabled */
61static inline __u16	inet_getid(struct inet_peer *p, int more)
62{
63	more++;
64	inet_peer_refcheck(p);
65	return atomic_add_return(more, &p->ip_id_count) - more;
66}
67
68#endif /* _NET_INETPEER_H */
69