diff options
Diffstat (limited to 'include/linux/skbuff.h')
-rw-r--r-- | include/linux/skbuff.h | 47 |
1 files changed, 19 insertions, 28 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index ad7cc22bd424..613b9513f8b9 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -270,7 +270,6 @@ struct sk_buff { | |||
270 | 270 | ||
271 | void (*destructor)(struct sk_buff *skb); | 271 | void (*destructor)(struct sk_buff *skb); |
272 | #ifdef CONFIG_NETFILTER | 272 | #ifdef CONFIG_NETFILTER |
273 | __u32 nfmark; | ||
274 | struct nf_conntrack *nfct; | 273 | struct nf_conntrack *nfct; |
275 | #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) | 274 | #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) |
276 | struct sk_buff *nfct_reasm; | 275 | struct sk_buff *nfct_reasm; |
@@ -278,6 +277,7 @@ struct sk_buff { | |||
278 | #ifdef CONFIG_BRIDGE_NETFILTER | 277 | #ifdef CONFIG_BRIDGE_NETFILTER |
279 | struct nf_bridge_info *nf_bridge; | 278 | struct nf_bridge_info *nf_bridge; |
280 | #endif | 279 | #endif |
280 | __u32 nfmark; | ||
281 | #endif /* CONFIG_NETFILTER */ | 281 | #endif /* CONFIG_NETFILTER */ |
282 | #ifdef CONFIG_NET_SCHED | 282 | #ifdef CONFIG_NET_SCHED |
283 | __u16 tc_index; /* traffic control index */ | 283 | __u16 tc_index; /* traffic control index */ |
@@ -304,6 +304,7 @@ struct sk_buff { | |||
304 | 304 | ||
305 | #include <asm/system.h> | 305 | #include <asm/system.h> |
306 | 306 | ||
307 | extern void kfree_skb(struct sk_buff *skb); | ||
307 | extern void __kfree_skb(struct sk_buff *skb); | 308 | extern void __kfree_skb(struct sk_buff *skb); |
308 | extern struct sk_buff *__alloc_skb(unsigned int size, | 309 | extern struct sk_buff *__alloc_skb(unsigned int size, |
309 | gfp_t priority, int fclone); | 310 | gfp_t priority, int fclone); |
@@ -404,22 +405,6 @@ static inline struct sk_buff *skb_get(struct sk_buff *skb) | |||
404 | */ | 405 | */ |
405 | 406 | ||
406 | /** | 407 | /** |
407 | * kfree_skb - free an sk_buff | ||
408 | * @skb: buffer to free | ||
409 | * | ||
410 | * Drop a reference to the buffer and free it if the usage count has | ||
411 | * hit zero. | ||
412 | */ | ||
413 | static inline void kfree_skb(struct sk_buff *skb) | ||
414 | { | ||
415 | if (likely(atomic_read(&skb->users) == 1)) | ||
416 | smp_rmb(); | ||
417 | else if (likely(!atomic_dec_and_test(&skb->users))) | ||
418 | return; | ||
419 | __kfree_skb(skb); | ||
420 | } | ||
421 | |||
422 | /** | ||
423 | * skb_cloned - is the buffer a clone | 408 | * skb_cloned - is the buffer a clone |
424 | * @skb: buffer to check | 409 | * @skb: buffer to check |
425 | * | 410 | * |
@@ -1174,12 +1159,14 @@ static inline int skb_linearize(struct sk_buff *skb, gfp_t gfp) | |||
1174 | */ | 1159 | */ |
1175 | 1160 | ||
1176 | static inline void skb_postpull_rcsum(struct sk_buff *skb, | 1161 | static inline void skb_postpull_rcsum(struct sk_buff *skb, |
1177 | const void *start, int len) | 1162 | const void *start, unsigned int len) |
1178 | { | 1163 | { |
1179 | if (skb->ip_summed == CHECKSUM_HW) | 1164 | if (skb->ip_summed == CHECKSUM_HW) |
1180 | skb->csum = csum_sub(skb->csum, csum_partial(start, len, 0)); | 1165 | skb->csum = csum_sub(skb->csum, csum_partial(start, len, 0)); |
1181 | } | 1166 | } |
1182 | 1167 | ||
1168 | unsigned char *skb_pull_rcsum(struct sk_buff *skb, unsigned int len); | ||
1169 | |||
1183 | /** | 1170 | /** |
1184 | * pskb_trim_rcsum - trim received skb and update checksum | 1171 | * pskb_trim_rcsum - trim received skb and update checksum |
1185 | * @skb: buffer to trim | 1172 | * @skb: buffer to trim |
@@ -1351,16 +1338,6 @@ static inline void nf_conntrack_put_reasm(struct sk_buff *skb) | |||
1351 | kfree_skb(skb); | 1338 | kfree_skb(skb); |
1352 | } | 1339 | } |
1353 | #endif | 1340 | #endif |
1354 | static inline void nf_reset(struct sk_buff *skb) | ||
1355 | { | ||
1356 | nf_conntrack_put(skb->nfct); | ||
1357 | skb->nfct = NULL; | ||
1358 | #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) | ||
1359 | nf_conntrack_put_reasm(skb->nfct_reasm); | ||
1360 | skb->nfct_reasm = NULL; | ||
1361 | #endif | ||
1362 | } | ||
1363 | |||
1364 | #ifdef CONFIG_BRIDGE_NETFILTER | 1341 | #ifdef CONFIG_BRIDGE_NETFILTER |
1365 | static inline void nf_bridge_put(struct nf_bridge_info *nf_bridge) | 1342 | static inline void nf_bridge_put(struct nf_bridge_info *nf_bridge) |
1366 | { | 1343 | { |
@@ -1373,6 +1350,20 @@ static inline void nf_bridge_get(struct nf_bridge_info *nf_bridge) | |||
1373 | atomic_inc(&nf_bridge->use); | 1350 | atomic_inc(&nf_bridge->use); |
1374 | } | 1351 | } |
1375 | #endif /* CONFIG_BRIDGE_NETFILTER */ | 1352 | #endif /* CONFIG_BRIDGE_NETFILTER */ |
1353 | static inline void nf_reset(struct sk_buff *skb) | ||
1354 | { | ||
1355 | nf_conntrack_put(skb->nfct); | ||
1356 | skb->nfct = NULL; | ||
1357 | #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) | ||
1358 | nf_conntrack_put_reasm(skb->nfct_reasm); | ||
1359 | skb->nfct_reasm = NULL; | ||
1360 | #endif | ||
1361 | #ifdef CONFIG_BRIDGE_NETFILTER | ||
1362 | nf_bridge_put(skb->nf_bridge); | ||
1363 | skb->nf_bridge = NULL; | ||
1364 | #endif | ||
1365 | } | ||
1366 | |||
1376 | #else /* CONFIG_NETFILTER */ | 1367 | #else /* CONFIG_NETFILTER */ |
1377 | static inline void nf_reset(struct sk_buff *skb) {} | 1368 | static inline void nf_reset(struct sk_buff *skb) {} |
1378 | #endif /* CONFIG_NETFILTER */ | 1369 | #endif /* CONFIG_NETFILTER */ |