Blame view
include/net/inetpeer.h
3.27 KB
b24413180 License cleanup: ... |
1 |
/* SPDX-License-Identifier: GPL-2.0 */ |
1da177e4c Linux-2.6.12-rc2 |
2 3 4 |
/* * INETPEER - A storage for permanent information about peers * |
1da177e4c Linux-2.6.12-rc2 |
5 6 7 8 9 10 11 12 13 14 |
* Authors: Andrey V. Savochkin <saw@msu.ru> */ #ifndef _NET_INETPEER_H #define _NET_INETPEER_H #include <linux/types.h> #include <linux/init.h> #include <linux/jiffies.h> #include <linux/spinlock.h> |
606598237 inetpeer: Add met... |
15 |
#include <linux/rtnetlink.h> |
672f007d6 inetpeer: Add ine... |
16 |
#include <net/ipv6.h> |
60063497a atomic: use <linu... |
17 |
#include <linux/atomic.h> |
1da177e4c Linux-2.6.12-rc2 |
18 |
|
192132b9a net: Add support ... |
19 20 21 22 23 |
/* IPv4 address key for cache lookups */ struct ipv4_addr_key { __be32 addr; int vif; }; |
5345c2e12 net: Refactor ine... |
24 25 26 |
#define INETPEER_MAXKEYSZ (sizeof(struct in6_addr) / sizeof(u32)) struct inetpeer_addr { |
582a72da9 inetpeer: Introdu... |
27 |
union { |
192132b9a net: Add support ... |
28 |
struct ipv4_addr_key a4; |
5345c2e12 net: Refactor ine... |
29 30 |
struct in6_addr a6; u32 key[INETPEER_MAXKEYSZ]; |
582a72da9 inetpeer: Introdu... |
31 |
}; |
7a71ed899 inetpeer: Abstrac... |
32 |
__u16 family; |
8790ca172 inetpeer: Kill us... |
33 |
}; |
582a72da9 inetpeer: Introdu... |
34 |
|
fd2c3ef76 net: cleanup incl... |
35 |
struct inet_peer { |
b145425f2 inetpeer: remove ... |
36 |
struct rb_node rb_node; |
8790ca172 inetpeer: Kill us... |
37 |
struct inetpeer_addr daddr; |
2b77bdde9 inetpeer: lower f... |
38 39 40 41 |
u32 metrics[RTAX_MAX]; u32 rate_tokens; /* rate limiting for ICMP */ unsigned long rate_last; |
317fe0e6c inetpeer: restore... |
42 |
/* |
1cc9a98b5 net: convert inet... |
43 |
* Once inet_peer is queued for deletion (refcnt == 0), following field |
73f156a6e inetpeer: get rid... |
44 |
* is not available: rid |
606598237 inetpeer: Add met... |
45 |
* We can share memory with rcu_head to help keep inet_peer small. |
317fe0e6c inetpeer: restore... |
46 47 48 |
*/ union { struct { |
ddd4aa424 inetpeer: Add red... |
49 |
atomic_t rid; /* Frag reception counter */ |
317fe0e6c inetpeer: restore... |
50 51 52 |
}; struct rcu_head rcu; }; |
2b77bdde9 inetpeer: lower f... |
53 54 55 |
/* following fields might be frequently dirtied */ __u32 dtime; /* the time of last use of not referenced entries */ |
1cc9a98b5 net: convert inet... |
56 |
refcount_t refcnt; |
1da177e4c Linux-2.6.12-rc2 |
57 |
}; |
c3426b471 inet: Initialize ... |
58 |
struct inet_peer_base { |
b145425f2 inetpeer: remove ... |
59 |
struct rb_root rb_root; |
c3426b471 inet: Initialize ... |
60 61 62 |
seqlock_t lock; int total; }; |
1fd511553 inet*.h: Remove e... |
63 |
void inet_peer_base_init(struct inet_peer_base *); |
c3426b471 inet: Initialize ... |
64 |
|
1fd511553 inet*.h: Remove e... |
65 |
void inet_initpeers(void) __init; |
1da177e4c Linux-2.6.12-rc2 |
66 |
|
144001bdd inetpeer: Mark me... |
67 |
#define INETPEER_METRICS_NEW (~(u32) 0) |
3abef286c net: Add set,get ... |
68 69 |
static inline void inetpeer_set_addr_v4(struct inetpeer_addr *iaddr, __be32 ip) { |
192132b9a net: Add support ... |
70 |
iaddr->a4.addr = ip; |
887dc9f2c inet: tcp: fix in... |
71 |
iaddr->a4.vif = 0; |
3abef286c net: Add set,get ... |
72 73 74 75 76 |
iaddr->family = AF_INET; } static inline __be32 inetpeer_get_addr_v4(struct inetpeer_addr *iaddr) { |
192132b9a net: Add support ... |
77 |
return iaddr->a4.addr; |
3abef286c net: Add set,get ... |
78 79 80 81 82 |
} static inline void inetpeer_set_addr_v6(struct inetpeer_addr *iaddr, struct in6_addr *in6) { |
5345c2e12 net: Refactor ine... |
83 |
iaddr->a6 = *in6; |
3abef286c net: Add set,get ... |
84 85 86 87 88 |
iaddr->family = AF_INET6; } static inline struct in6_addr *inetpeer_get_addr_v6(struct inetpeer_addr *iaddr) { |
5345c2e12 net: Refactor ine... |
89 |
return &iaddr->a6; |
3abef286c net: Add set,get ... |
90 |
} |
1da177e4c Linux-2.6.12-rc2 |
91 |
/* can be called with or without local BH being disabled */ |
c0efc887d inet: Pass inetpe... |
92 |
struct inet_peer *inet_getpeer(struct inet_peer_base *base, |
c8a627ed0 inetpeer: add nam... |
93 94 |
const struct inetpeer_addr *daddr, int create); |
b534ecf1c inetpeer: Make in... |
95 |
|
c0efc887d inet: Pass inetpe... |
96 |
static inline struct inet_peer *inet_getpeer_v4(struct inet_peer_base *base, |
54db0cc2b inetpeer: add par... |
97 |
__be32 v4daddr, |
192132b9a net: Add support ... |
98 |
int vif, int create) |
b534ecf1c inetpeer: Make in... |
99 |
{ |
8790ca172 inetpeer: Kill us... |
100 |
struct inetpeer_addr daddr; |
b534ecf1c inetpeer: Make in... |
101 |
|
192132b9a net: Add support ... |
102 103 |
daddr.a4.addr = v4daddr; daddr.a4.vif = vif; |
b534ecf1c inetpeer: Make in... |
104 |
daddr.family = AF_INET; |
c0efc887d inet: Pass inetpe... |
105 |
return inet_getpeer(base, &daddr, create); |
b534ecf1c inetpeer: Make in... |
106 |
} |
1da177e4c Linux-2.6.12-rc2 |
107 |
|
c0efc887d inet: Pass inetpe... |
108 |
static inline struct inet_peer *inet_getpeer_v6(struct inet_peer_base *base, |
54db0cc2b inetpeer: add par... |
109 110 |
const struct in6_addr *v6daddr, int create) |
672f007d6 inetpeer: Add ine... |
111 |
{ |
8790ca172 inetpeer: Kill us... |
112 |
struct inetpeer_addr daddr; |
672f007d6 inetpeer: Add ine... |
113 |
|
5345c2e12 net: Refactor ine... |
114 |
daddr.a6 = *v6daddr; |
672f007d6 inetpeer: Add ine... |
115 |
daddr.family = AF_INET6; |
c0efc887d inet: Pass inetpe... |
116 |
return inet_getpeer(base, &daddr, create); |
672f007d6 inetpeer: Add ine... |
117 |
} |
d39d14ffa net: Add helper f... |
118 119 120 |
static inline int inetpeer_addr_cmp(const struct inetpeer_addr *a, const struct inetpeer_addr *b) { |
5345c2e12 net: Refactor ine... |
121 122 123 124 125 126 |
int i, n; if (a->family == AF_INET) n = sizeof(a->a4) / sizeof(u32); else n = sizeof(a->a6) / sizeof(u32); |
d39d14ffa net: Add helper f... |
127 128 |
for (i = 0; i < n; i++) { |
5345c2e12 net: Refactor ine... |
129 |
if (a->key[i] == b->key[i]) |
d39d14ffa net: Add helper f... |
130 |
continue; |
5345c2e12 net: Refactor ine... |
131 |
if (a->key[i] < b->key[i]) |
d39d14ffa net: Add helper f... |
132 133 134 135 136 137 |
return -1; return 1; } return 0; } |
1da177e4c Linux-2.6.12-rc2 |
138 |
/* can be called from BH context or outside */ |
1fd511553 inet*.h: Remove e... |
139 140 |
void inet_putpeer(struct inet_peer *p); bool inet_peer_xrlim_allow(struct inet_peer *peer, int timeout); |
1da177e4c Linux-2.6.12-rc2 |
141 |
|
1fd511553 inet*.h: Remove e... |
142 |
void inetpeer_invalidate_tree(struct inet_peer_base *); |
5faa5df1f inetpeer: Invalid... |
143 |
|
1da177e4c Linux-2.6.12-rc2 |
144 |
#endif /* _NET_INETPEER_H */ |