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 */ |
