diff options
Diffstat (limited to 'include/linux/skbuff.h')
-rw-r--r-- | include/linux/skbuff.h | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index fdfb8fe8c38c..0a8ea8b35816 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -274,6 +274,9 @@ struct sk_buff { | |||
274 | #if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE) | 274 | #if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE) |
275 | __u8 ipvs_property:1; | 275 | __u8 ipvs_property:1; |
276 | #endif | 276 | #endif |
277 | #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) | ||
278 | struct sk_buff *nfct_reasm; | ||
279 | #endif | ||
277 | #ifdef CONFIG_BRIDGE_NETFILTER | 280 | #ifdef CONFIG_BRIDGE_NETFILTER |
278 | struct nf_bridge_info *nf_bridge; | 281 | struct nf_bridge_info *nf_bridge; |
279 | #endif | 282 | #endif |
@@ -1233,8 +1236,7 @@ extern unsigned int datagram_poll(struct file *file, struct socket *sock, | |||
1233 | extern int skb_copy_datagram_iovec(const struct sk_buff *from, | 1236 | extern int skb_copy_datagram_iovec(const struct sk_buff *from, |
1234 | int offset, struct iovec *to, | 1237 | int offset, struct iovec *to, |
1235 | int size); | 1238 | int size); |
1236 | extern int skb_copy_and_csum_datagram_iovec(const | 1239 | extern int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb, |
1237 | struct sk_buff *skb, | ||
1238 | int hlen, | 1240 | int hlen, |
1239 | struct iovec *iov); | 1241 | struct iovec *iov); |
1240 | extern void skb_free_datagram(struct sock *sk, struct sk_buff *skb); | 1242 | extern void skb_free_datagram(struct sock *sk, struct sk_buff *skb); |
@@ -1302,6 +1304,30 @@ static inline void skb_set_timestamp(struct sk_buff *skb, const struct timeval * | |||
1302 | 1304 | ||
1303 | extern void __net_timestamp(struct sk_buff *skb); | 1305 | extern void __net_timestamp(struct sk_buff *skb); |
1304 | 1306 | ||
1307 | extern unsigned int __skb_checksum_complete(struct sk_buff *skb); | ||
1308 | |||
1309 | /** | ||
1310 | * skb_checksum_complete - Calculate checksum of an entire packet | ||
1311 | * @skb: packet to process | ||
1312 | * | ||
1313 | * This function calculates the checksum over the entire packet plus | ||
1314 | * the value of skb->csum. The latter can be used to supply the | ||
1315 | * checksum of a pseudo header as used by TCP/UDP. It returns the | ||
1316 | * checksum. | ||
1317 | * | ||
1318 | * For protocols that contain complete checksums such as ICMP/TCP/UDP, | ||
1319 | * this function can be used to verify that checksum on received | ||
1320 | * packets. In that case the function should return zero if the | ||
1321 | * checksum is correct. In particular, this function will return zero | ||
1322 | * if skb->ip_summed is CHECKSUM_UNNECESSARY which indicates that the | ||
1323 | * hardware has already verified the correctness of the checksum. | ||
1324 | */ | ||
1325 | static inline unsigned int skb_checksum_complete(struct sk_buff *skb) | ||
1326 | { | ||
1327 | return skb->ip_summed != CHECKSUM_UNNECESSARY && | ||
1328 | __skb_checksum_complete(skb); | ||
1329 | } | ||
1330 | |||
1305 | #ifdef CONFIG_NETFILTER | 1331 | #ifdef CONFIG_NETFILTER |
1306 | static inline void nf_conntrack_put(struct nf_conntrack *nfct) | 1332 | static inline void nf_conntrack_put(struct nf_conntrack *nfct) |
1307 | { | 1333 | { |
@@ -1313,10 +1339,26 @@ static inline void nf_conntrack_get(struct nf_conntrack *nfct) | |||
1313 | if (nfct) | 1339 | if (nfct) |
1314 | atomic_inc(&nfct->use); | 1340 | atomic_inc(&nfct->use); |
1315 | } | 1341 | } |
1342 | #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) | ||
1343 | static inline void nf_conntrack_get_reasm(struct sk_buff *skb) | ||
1344 | { | ||
1345 | if (skb) | ||
1346 | atomic_inc(&skb->users); | ||
1347 | } | ||
1348 | static inline void nf_conntrack_put_reasm(struct sk_buff *skb) | ||
1349 | { | ||
1350 | if (skb) | ||
1351 | kfree_skb(skb); | ||
1352 | } | ||
1353 | #endif | ||
1316 | static inline void nf_reset(struct sk_buff *skb) | 1354 | static inline void nf_reset(struct sk_buff *skb) |
1317 | { | 1355 | { |
1318 | nf_conntrack_put(skb->nfct); | 1356 | nf_conntrack_put(skb->nfct); |
1319 | skb->nfct = NULL; | 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 | ||
1320 | } | 1362 | } |
1321 | 1363 | ||
1322 | #ifdef CONFIG_BRIDGE_NETFILTER | 1364 | #ifdef CONFIG_BRIDGE_NETFILTER |