aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-18 17:40:30 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-18 17:40:30 -0400
commita57793651ff1a09ef18bade998632435ca2dc13f (patch)
treefffc839d7b001f196421f09f0a06491588835fe1 /include
parent9cf52b2921fbe62566b6b2ee79f71203749c9e5e (diff)
parent52f095ee88d8851866bc7694ab991ca5abf21d5e (diff)
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: (51 commits) [IPV6]: Fix again the fl6_sock_lookup() fixed locking [NETFILTER]: nf_conntrack_tcp: fix connection reopening fix [IPV6]: Fix race in ipv6_flowlabel_opt() when inserting two labels [IPV6]: Lost locking in fl6_sock_lookup [IPV6]: Lost locking when inserting a flowlabel in ipv6_fl_list [NETFILTER]: xt_sctp: fix mistake to pass a pointer where array is required [NET]: Fix OOPS due to missing check in dev_parse_header(). [TCP]: Remove lost_retrans zero seqno special cases [NET]: fix carrier-on bug? [NET]: Fix uninitialised variable in ip_frag_reasm() [IPSEC]: Rename mode to outer_mode and add inner_mode [IPSEC]: Disallow combinations of RO and AH/ESP/IPCOMP [IPSEC]: Use the top IPv4 route's peer instead of the bottom [IPSEC]: Store afinfo pointer in xfrm_mode [IPSEC]: Add missing BEET checks [IPSEC]: Move type and mode map into xfrm_state.c [IPSEC]: Fix length check in xfrm_parse_spi [IPSEC]: Move ip_summed zapping out of xfrm6_rcv_spi [IPSEC]: Get nexthdr from caller in xfrm6_rcv_spi [IPSEC]: Move tunnel parsing for IPv4 out of xfrm4_input ...
Diffstat (limited to 'include')
-rw-r--r--include/linux/filter.h1
-rw-r--r--include/linux/netdevice.h2
-rw-r--r--include/linux/netfilter/xt_sctp.h13
-rw-r--r--include/net/inet_frag.h7
-rw-r--r--include/net/ipv6.h11
-rw-r--r--include/net/sock.h22
-rw-r--r--include/net/xfrm.h33
7 files changed, 55 insertions, 34 deletions
diff --git a/include/linux/filter.h b/include/linux/filter.h
index 91b2e3b9251e..ddfa0372a3b7 100644
--- a/include/linux/filter.h
+++ b/include/linux/filter.h
@@ -146,6 +146,7 @@ struct sock;
146 146
147extern unsigned int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen); 147extern unsigned int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen);
148extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk); 148extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk);
149extern int sk_detach_filter(struct sock *sk);
149extern int sk_chk_filter(struct sock_filter *filter, int flen); 150extern int sk_chk_filter(struct sock_filter *filter, int flen);
150#endif /* __KERNEL__ */ 151#endif /* __KERNEL__ */
151 152
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 39dd83b183a9..452c88d971ad 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -827,7 +827,7 @@ static inline int dev_parse_header(const struct sk_buff *skb,
827{ 827{
828 const struct net_device *dev = skb->dev; 828 const struct net_device *dev = skb->dev;
829 829
830 if (!dev->header_ops->parse) 830 if (!dev->header_ops || !dev->header_ops->parse)
831 return 0; 831 return 0;
832 return dev->header_ops->parse(skb, haddr); 832 return dev->header_ops->parse(skb, haddr);
833} 833}
diff --git a/include/linux/netfilter/xt_sctp.h b/include/linux/netfilter/xt_sctp.h
index b157897e7792..dd5a4fd4cfd3 100644
--- a/include/linux/netfilter/xt_sctp.h
+++ b/include/linux/netfilter/xt_sctp.h
@@ -7,9 +7,6 @@
7 7
8#define XT_SCTP_VALID_FLAGS 0x07 8#define XT_SCTP_VALID_FLAGS 0x07
9 9
10#define ELEMCOUNT(x) (sizeof(x)/sizeof(x[0]))
11
12
13struct xt_sctp_flag_info { 10struct xt_sctp_flag_info {
14 u_int8_t chunktype; 11 u_int8_t chunktype;
15 u_int8_t flag; 12 u_int8_t flag;
@@ -59,21 +56,21 @@ struct xt_sctp_info {
59#define SCTP_CHUNKMAP_RESET(chunkmap) \ 56#define SCTP_CHUNKMAP_RESET(chunkmap) \
60 do { \ 57 do { \
61 int i; \ 58 int i; \
62 for (i = 0; i < ELEMCOUNT(chunkmap); i++) \ 59 for (i = 0; i < ARRAY_SIZE(chunkmap); i++) \
63 chunkmap[i] = 0; \ 60 chunkmap[i] = 0; \
64 } while (0) 61 } while (0)
65 62
66#define SCTP_CHUNKMAP_SET_ALL(chunkmap) \ 63#define SCTP_CHUNKMAP_SET_ALL(chunkmap) \
67 do { \ 64 do { \
68 int i; \ 65 int i; \
69 for (i = 0; i < ELEMCOUNT(chunkmap); i++) \ 66 for (i = 0; i < ARRAY_SIZE(chunkmap); i++) \
70 chunkmap[i] = ~0; \ 67 chunkmap[i] = ~0; \
71 } while (0) 68 } while (0)
72 69
73#define SCTP_CHUNKMAP_COPY(destmap, srcmap) \ 70#define SCTP_CHUNKMAP_COPY(destmap, srcmap) \
74 do { \ 71 do { \
75 int i; \ 72 int i; \
76 for (i = 0; i < ELEMCOUNT(chunkmap); i++) \ 73 for (i = 0; i < ARRAY_SIZE(srcmap); i++) \
77 destmap[i] = srcmap[i]; \ 74 destmap[i] = srcmap[i]; \
78 } while (0) 75 } while (0)
79 76
@@ -81,7 +78,7 @@ struct xt_sctp_info {
81({ \ 78({ \
82 int i; \ 79 int i; \
83 int flag = 1; \ 80 int flag = 1; \
84 for (i = 0; i < ELEMCOUNT(chunkmap); i++) { \ 81 for (i = 0; i < ARRAY_SIZE(chunkmap); i++) { \
85 if (chunkmap[i]) { \ 82 if (chunkmap[i]) { \
86 flag = 0; \ 83 flag = 0; \
87 break; \ 84 break; \
@@ -94,7 +91,7 @@ struct xt_sctp_info {
94({ \ 91({ \
95 int i; \ 92 int i; \
96 int flag = 1; \ 93 int flag = 1; \
97 for (i = 0; i < ELEMCOUNT(chunkmap); i++) { \ 94 for (i = 0; i < ARRAY_SIZE(chunkmap); i++) { \
98 if (chunkmap[i] != ~0) { \ 95 if (chunkmap[i] != ~0) { \
99 flag = 0; \ 96 flag = 0; \
100 break; \ 97 break; \
diff --git a/include/net/inet_frag.h b/include/net/inet_frag.h
index 911c2cd02941..954def408975 100644
--- a/include/net/inet_frag.h
+++ b/include/net/inet_frag.h
@@ -39,8 +39,13 @@ struct inet_frags {
39 struct inet_frags_ctl *ctl; 39 struct inet_frags_ctl *ctl;
40 40
41 unsigned int (*hashfn)(struct inet_frag_queue *); 41 unsigned int (*hashfn)(struct inet_frag_queue *);
42 void (*constructor)(struct inet_frag_queue *q,
43 void *arg);
42 void (*destructor)(struct inet_frag_queue *); 44 void (*destructor)(struct inet_frag_queue *);
43 void (*skb_free)(struct sk_buff *); 45 void (*skb_free)(struct sk_buff *);
46 int (*match)(struct inet_frag_queue *q,
47 void *arg);
48 void (*frag_expire)(unsigned long data);
44}; 49};
45 50
46void inet_frags_init(struct inet_frags *); 51void inet_frags_init(struct inet_frags *);
@@ -50,6 +55,8 @@ void inet_frag_kill(struct inet_frag_queue *q, struct inet_frags *f);
50void inet_frag_destroy(struct inet_frag_queue *q, 55void inet_frag_destroy(struct inet_frag_queue *q,
51 struct inet_frags *f, int *work); 56 struct inet_frags *f, int *work);
52int inet_frag_evictor(struct inet_frags *f); 57int inet_frag_evictor(struct inet_frags *f);
58struct inet_frag_queue *inet_frag_find(struct inet_frags *f, void *key,
59 unsigned int hash);
53 60
54static inline void inet_frag_put(struct inet_frag_queue *q, struct inet_frags *f) 61static inline void inet_frag_put(struct inet_frag_queue *q, struct inet_frags *f)
55{ 62{
diff --git a/include/net/ipv6.h b/include/net/ipv6.h
index cc796cbc1b26..ae328b680ff2 100644
--- a/include/net/ipv6.h
+++ b/include/net/ipv6.h
@@ -377,6 +377,17 @@ static inline int ipv6_prefix_equal(const struct in6_addr *a1,
377 prefixlen); 377 prefixlen);
378} 378}
379 379
380struct inet_frag_queue;
381
382struct ip6_create_arg {
383 __be32 id;
384 struct in6_addr *src;
385 struct in6_addr *dst;
386};
387
388void ip6_frag_init(struct inet_frag_queue *q, void *a);
389int ip6_frag_match(struct inet_frag_queue *q, void *a);
390
380static inline int ipv6_addr_any(const struct in6_addr *a) 391static inline int ipv6_addr_any(const struct in6_addr *a)
381{ 392{
382 return ((a->s6_addr32[0] | a->s6_addr32[1] | 393 return ((a->s6_addr32[0] | a->s6_addr32[1] |
diff --git a/include/net/sock.h b/include/net/sock.h
index 453c79d0915b..43fc3fa50d62 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -905,16 +905,6 @@ static inline int sk_filter(struct sock *sk, struct sk_buff *skb)
905} 905}
906 906
907/** 907/**
908 * sk_filter_rcu_free: Free a socket filter
909 * @rcu: rcu_head that contains the sk_filter to free
910 */
911static inline void sk_filter_rcu_free(struct rcu_head *rcu)
912{
913 struct sk_filter *fp = container_of(rcu, struct sk_filter, rcu);
914 kfree(fp);
915}
916
917/**
918 * sk_filter_release: Release a socket filter 908 * sk_filter_release: Release a socket filter
919 * @sk: socket 909 * @sk: socket
920 * @fp: filter to remove 910 * @fp: filter to remove
@@ -922,14 +912,18 @@ static inline void sk_filter_rcu_free(struct rcu_head *rcu)
922 * Remove a filter from a socket and release its resources. 912 * Remove a filter from a socket and release its resources.
923 */ 913 */
924 914
925static inline void sk_filter_release(struct sock *sk, struct sk_filter *fp) 915static inline void sk_filter_release(struct sk_filter *fp)
916{
917 if (atomic_dec_and_test(&fp->refcnt))
918 kfree(fp);
919}
920
921static inline void sk_filter_uncharge(struct sock *sk, struct sk_filter *fp)
926{ 922{
927 unsigned int size = sk_filter_len(fp); 923 unsigned int size = sk_filter_len(fp);
928 924
929 atomic_sub(size, &sk->sk_omem_alloc); 925 atomic_sub(size, &sk->sk_omem_alloc);
930 926 sk_filter_release(fp);
931 if (atomic_dec_and_test(&fp->refcnt))
932 call_rcu_bh(&fp->rcu, sk_filter_rcu_free);
933} 927}
934 928
935static inline void sk_filter_charge(struct sock *sk, struct sk_filter *fp) 929static inline void sk_filter_charge(struct sock *sk, struct sk_filter *fp)
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index 0e844845f3f4..688f6f5d3285 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -186,7 +186,8 @@ struct xfrm_state
186 /* Reference to data common to all the instances of this 186 /* Reference to data common to all the instances of this
187 * transformer. */ 187 * transformer. */
188 struct xfrm_type *type; 188 struct xfrm_type *type;
189 struct xfrm_mode *mode; 189 struct xfrm_mode *inner_mode;
190 struct xfrm_mode *outer_mode;
190 191
191 /* Security context */ 192 /* Security context */
192 struct xfrm_sec_ctx *security; 193 struct xfrm_sec_ctx *security;
@@ -228,8 +229,6 @@ struct xfrm_type;
228struct xfrm_dst; 229struct xfrm_dst;
229struct xfrm_policy_afinfo { 230struct xfrm_policy_afinfo {
230 unsigned short family; 231 unsigned short family;
231 struct xfrm_type *type_map[IPPROTO_MAX];
232 struct xfrm_mode *mode_map[XFRM_MODE_MAX];
233 struct dst_ops *dst_ops; 232 struct dst_ops *dst_ops;
234 void (*garbage_collect)(void); 233 void (*garbage_collect)(void);
235 int (*dst_lookup)(struct xfrm_dst **dst, struct flowi *fl); 234 int (*dst_lookup)(struct xfrm_dst **dst, struct flowi *fl);
@@ -255,7 +254,10 @@ extern void km_state_expired(struct xfrm_state *x, int hard, u32 pid);
255extern int __xfrm_state_delete(struct xfrm_state *x); 254extern int __xfrm_state_delete(struct xfrm_state *x);
256 255
257struct xfrm_state_afinfo { 256struct xfrm_state_afinfo {
258 unsigned short family; 257 unsigned int family;
258 struct module *owner;
259 struct xfrm_type *type_map[IPPROTO_MAX];
260 struct xfrm_mode *mode_map[XFRM_MODE_MAX];
259 int (*init_flags)(struct xfrm_state *x); 261 int (*init_flags)(struct xfrm_state *x);
260 void (*init_tempsel)(struct xfrm_state *x, struct flowi *fl, 262 void (*init_tempsel)(struct xfrm_state *x, struct flowi *fl,
261 struct xfrm_tmpl *tmpl, 263 struct xfrm_tmpl *tmpl,
@@ -267,8 +269,6 @@ struct xfrm_state_afinfo {
267 269
268extern int xfrm_state_register_afinfo(struct xfrm_state_afinfo *afinfo); 270extern int xfrm_state_register_afinfo(struct xfrm_state_afinfo *afinfo);
269extern int xfrm_state_unregister_afinfo(struct xfrm_state_afinfo *afinfo); 271extern int xfrm_state_unregister_afinfo(struct xfrm_state_afinfo *afinfo);
270extern struct xfrm_state_afinfo *xfrm_state_get_afinfo(unsigned short family);
271extern void xfrm_state_put_afinfo(struct xfrm_state_afinfo *afinfo);
272 272
273extern void xfrm_state_delete_tunnel(struct xfrm_state *x); 273extern void xfrm_state_delete_tunnel(struct xfrm_state *x);
274 274
@@ -295,8 +295,6 @@ struct xfrm_type
295 295
296extern int xfrm_register_type(struct xfrm_type *type, unsigned short family); 296extern int xfrm_register_type(struct xfrm_type *type, unsigned short family);
297extern int xfrm_unregister_type(struct xfrm_type *type, unsigned short family); 297extern int xfrm_unregister_type(struct xfrm_type *type, unsigned short family);
298extern struct xfrm_type *xfrm_get_type(u8 proto, unsigned short family);
299extern void xfrm_put_type(struct xfrm_type *type);
300 298
301struct xfrm_mode { 299struct xfrm_mode {
302 int (*input)(struct xfrm_state *x, struct sk_buff *skb); 300 int (*input)(struct xfrm_state *x, struct sk_buff *skb);
@@ -314,14 +312,19 @@ struct xfrm_mode {
314 */ 312 */
315 int (*output)(struct xfrm_state *x,struct sk_buff *skb); 313 int (*output)(struct xfrm_state *x,struct sk_buff *skb);
316 314
315 struct xfrm_state_afinfo *afinfo;
317 struct module *owner; 316 struct module *owner;
318 unsigned int encap; 317 unsigned int encap;
318 int flags;
319};
320
321/* Flags for xfrm_mode. */
322enum {
323 XFRM_MODE_FLAG_TUNNEL = 1,
319}; 324};
320 325
321extern int xfrm_register_mode(struct xfrm_mode *mode, int family); 326extern int xfrm_register_mode(struct xfrm_mode *mode, int family);
322extern int xfrm_unregister_mode(struct xfrm_mode *mode, int family); 327extern int xfrm_unregister_mode(struct xfrm_mode *mode, int family);
323extern struct xfrm_mode *xfrm_get_mode(unsigned int encap, int family);
324extern void xfrm_put_mode(struct xfrm_mode *mode);
325 328
326struct xfrm_tmpl 329struct xfrm_tmpl
327{ 330{
@@ -1046,11 +1049,19 @@ extern void xfrm_replay_notify(struct xfrm_state *x, int event);
1046extern int xfrm_state_mtu(struct xfrm_state *x, int mtu); 1049extern int xfrm_state_mtu(struct xfrm_state *x, int mtu);
1047extern int xfrm_init_state(struct xfrm_state *x); 1050extern int xfrm_init_state(struct xfrm_state *x);
1048extern int xfrm_output(struct sk_buff *skb); 1051extern int xfrm_output(struct sk_buff *skb);
1052extern int xfrm4_rcv_encap(struct sk_buff *skb, int nexthdr, __be32 spi,
1053 int encap_type);
1049extern int xfrm4_rcv(struct sk_buff *skb); 1054extern int xfrm4_rcv(struct sk_buff *skb);
1055
1056static inline int xfrm4_rcv_spi(struct sk_buff *skb, int nexthdr, __be32 spi)
1057{
1058 return xfrm4_rcv_encap(skb, nexthdr, spi, 0);
1059}
1060
1050extern int xfrm4_output(struct sk_buff *skb); 1061extern int xfrm4_output(struct sk_buff *skb);
1051extern int xfrm4_tunnel_register(struct xfrm_tunnel *handler, unsigned short family); 1062extern int xfrm4_tunnel_register(struct xfrm_tunnel *handler, unsigned short family);
1052extern int xfrm4_tunnel_deregister(struct xfrm_tunnel *handler, unsigned short family); 1063extern int xfrm4_tunnel_deregister(struct xfrm_tunnel *handler, unsigned short family);
1053extern int xfrm6_rcv_spi(struct sk_buff *skb, __be32 spi); 1064extern int xfrm6_rcv_spi(struct sk_buff *skb, int nexthdr, __be32 spi);
1054extern int xfrm6_rcv(struct sk_buff *skb); 1065extern int xfrm6_rcv(struct sk_buff *skb);
1055extern int xfrm6_input_addr(struct sk_buff *skb, xfrm_address_t *daddr, 1066extern int xfrm6_input_addr(struct sk_buff *skb, xfrm_address_t *daddr,
1056 xfrm_address_t *saddr, u8 proto); 1067 xfrm_address_t *saddr, u8 proto);