1 /* 2 * Definitions for the 'struct sk_buff' memory handlers. 3 * 4 * Authors: 5 * Alan Cox, <[email protected]> 6 * Florian La Roche, <[email protected]> 7 * 8 * This program is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU General Public License 10 * as published by the Free Software Foundation; either version 11 * 2 of the License, or (at your option) any later version. 12 */ 13 14 #ifndef _LINUX_SKBUFF_H 15 #define _LINUX_SKBUFF_H 16 17 #include <linux/kernel.h> 18 #include <linux/compiler.h> 19 #include <linux/time.h> 20 #include <linux/cache.h> 21 22 #include <asm/atomic.h> 23 #include <asm/types.h> 24 #include <linux/spinlock.h> 25 #include <linux/mm.h> 26 #include <linux/highmem.h> 27 #include <linux/poll.h> 28 #include <linux/net.h> 29 #include <linux/textsearch.h> 30 #include <net/checksum.h> 31 #include <linux/dmaengine.h> 32 33 #define HAVE_ALLOC_SKB /* For the drivers to know */ 34 #define HAVE_ALIGNABLE_SKB /* Ditto 8) */ 35 36 #define CHECKSUM_NONE 0 37 #define CHECKSUM_HW 1 38 #define CHECKSUM_UNNECESSARY 2 39 40 #define SKB_DATA_ALIGN(X) (((X) + (SMP_CACHE_BYTES - 1)) & \ 41 ~(SMP_CACHE_BYTES - 1)) 42 #define SKB_MAX_ORDER(X, ORDER) (((PAGE_SIZE << (ORDER)) - (X) - \ 43 sizeof(struct skb_shared_info)) & \ 44 ~(SMP_CACHE_BYTES - 1)) 45 #define SKB_MAX_HEAD(X) (SKB_MAX_ORDER((X), 0)) 46 #define SKB_MAX_ALLOC (SKB_MAX_ORDER(0, 2)) 47 48 /* A. Checksumming of received packets by device. 49 * 50 * NONE: device failed to checksum this packet. 51 * skb->csum is undefined. 52 * 53 * UNNECESSARY: device parsed packet and wouldbe verified checksum. 54 * skb->csum is undefined. 55 * It is bad option, but, unfortunately, many of vendors do this. 56 * Apparently with secret goal to sell you new device, when you 57 * will add new protocol to your host. F.e. IPv6. 8) 58 * 59 * HW: the most generic way. Device supplied checksum of _all_ 60 * the packet as seen by netif_rx in skb->csum. 61 * NOTE: Even if device supports only some protocols, but 62 * is able to produce some skb->csum, it MUST use HW, 63 * not UNNECESSARY. 64 * 65 * B. Checksumming on output. 66 * 67 * NONE: skb is checksummed by protocol or csum is not required. 68 * 69 * HW: device is required to csum packet as seen by hard_start_xmit 70 * from skb->h.raw to the end and to record the checksum 71 * at skb->h.raw+skb->csum. 72 * 73 * Device must show its capabilities in dev->features, set 74 * at device setup time. 75 * NETIF_F_HW_CSUM - it is clever device, it is able to checksum 76 * everything. 77 * NETIF_F_NO_CSUM - loopback or reliable single hop media. 78 * NETIF_F_IP_CSUM - device is dumb. It is able to csum only 79 * TCP/UDP over IPv4. Sigh. Vendors like this 80 * way by an unknown reason. Though, see comment above 81 * about CHECKSUM_UNNECESSARY. 8) 82 * 83 * Any questions? No questions, good. --ANK 84 */ 85 86 struct net_device; 87 88 #ifdef CONFIG_NETFILTER 89 struct nf_conntrack { 90 atomic_t use; 91 void (*destroy)(struct nf_conntrack *); 92 }; 93 94 #ifdef CONFIG_BRIDGE_NETFILTER 95 struct nf_bridge_info { 96 atomic_t use; 97 struct net_device *physindev; 98 struct net_device *physoutdev; 99 #if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) 100 struct net_device *netoutdev; 101 #endif 102 unsigned int mask; 103 unsigned long data[32 / sizeof(unsigned long)]; 104 }; 105 #endif 106 107 #endif 108 109 struct sk_buff_head { 110 /* These two members must be first. */ 111 struct sk_buff *next; 112 struct sk_buff *prev; 113 114 __u32 qlen; 115 spinlock_t lock; 116 }; 117 118 struct sk_buff; 119 120 /* To allow 64K frame to be packed as single skb without frag_list */ 121 #define MAX_SKB_FRAGS (65536/PAGE_SIZE + 2) 122 123 typedef struct skb_frag_struct skb_frag_t; 124 125 struct skb_frag_struct { 126 struct page *page; 127 __u16 page_offset; 128 __u16 size; 129 }; 130 131 /* This data is invariant across clones and lives at 132 * the end of the header data, ie. at skb->end. 133 */ 134 struct skb_shared_info { 135 atomic_t dataref; 136 unsigned short nr_frags; 137 unsigned short tso_size; 138 unsigned short tso_segs; 139 unsigned short ufo_size; 140 unsigned int ip6_frag_id; 141 struct sk_buff *frag_list; 142 skb_frag_t frags[MAX_SKB_FRAGS]; 143 }; 144 145 /* We divide dataref into two halves. The higher 16 bits hold references 146 * to the payload part of skb->data. The lower 16 bits hold references to 147 * the entire skb->data. It is up to the users of the skb to agree on 148 * where the payload starts. 149 * 150 * All users must obey the rule that the skb->data reference count must be 151 * greater than or equal to the payload reference count. 152 * 153 * Holding a reference to the payload part means that the user does not 154 * care about modifications to the header part of skb->data. 155 */ 156 #define SKB_DATAREF_SHIFT 16 157 #define SKB_DATAREF_MASK ((1 << SKB_DATAREF_SHIFT) - 1) 158 159 struct skb_timeval { 160 u32 off_sec; 161 u32 off_usec; 162 }; 163 164 165 enum { 166 SKB_FCLONE_UNAVAILABLE, 167 SKB_FCLONE_ORIG, 168 SKB_FCLONE_CLONE, 169 }; 170 171 /** 172 * struct sk_buff - socket buffer 173 * @next: Next buffer in list 174 * @prev: Previous buffer in list 175 * @sk: Socket we are owned by 176 * @tstamp: Time we arrived 177 * @dev: Device we arrived on/are leaving by 178 * @input_dev: Device we arrived on 179 * @h: Transport layer header 180 * @nh: Network layer header 181 * @mac: Link layer header 182 * @dst: destination entry 183 * @sp: the security path, used for xfrm 184 * @cb: Control buffer. Free for use by every layer. Put private vars here 185 * @len: Length of actual data 186 * @data_len: Data length 187 * @mac_len: Length of link layer header 188 * @csum: Checksum 189 * @local_df: allow local fragmentation 190 * @cloned: Head may be cloned (check refcnt to be sure) 191 * @nohdr: Payload reference only, must not modify header 192 * @pkt_type: Packet class 193 * @fclone: skbuff clone status 194 * @ip_summed: Driver fed us an IP checksum 195 * @priority: Packet queueing priority 196 * @users: User count - see {datagram,tcp}.c 197 * @protocol: Packet protocol from driver 198 * @truesize: Buffer size 199 * @head: Head of buffer 200 * @data: Data head pointer 201 * @tail: Tail pointer 202 * @end: End pointer 203 * @destructor: Destruct function 204 * @nfmark: Can be used for communication between hooks 205 * @nfct: Associated connection, if any 206 * @ipvs_property: skbuff is owned by ipvs 207 * @nfctinfo: Relationship of this skb to the connection 208 * @nfct_reasm: netfilter conntrack re-assembly pointer 209 * @nf_bridge: Saved data about a bridged frame - see br_netfilter.c 210 * @tc_index: Traffic control index 211 * @tc_verd: traffic control verdict 212 * @secmark: security marking 213 */ 214 215 struct sk_buff { 216 /* These two members must be first. */ 217 struct sk_buff *next; 218 struct sk_buff *prev; 219 220 struct sock *sk; 221 struct skb_timeval tstamp; 222 struct net_device *dev; 223 struct net_device *input_dev; 224 225 union { 226 struct tcphdr *th; 227 struct udphdr *uh; 228 struct icmphdr *icmph; 229 struct igmphdr *igmph; 230 struct iphdr *ipiph; 231 struct ipv6hdr *ipv6h; 232 unsigned char *raw; 233 } h; 234 235 union { 236 struct iphdr *iph; 237 struct ipv6hdr *ipv6h; 238 struct arphdr *arph; 239 unsigned char *raw; 240 } nh; 241 242 union { 243 unsigned char *raw; 244 } mac; 245 246 struct dst_entry *dst; 247 struct sec_path *sp; 248 249 /* 250 * This is the control buffer. It is free to use for every 251 * layer. Please put your private variables there. If you 252 * want to keep them across layers you have to do a skb_clone() 253 * first. This is owned by whoever has the skb queued ATM. 254 */ 255 char cb[48]; 256 257 unsigned int len, 258 data_len, 259 mac_len, 260 csum; 261 __u32 priority; 262 __u8 local_df:1, 263 cloned:1, 264 ip_summed:2, 265 nohdr:1, 266 nfctinfo:3; 267 __u8 pkt_type:3, 268 fclone:2, 269 ipvs_property:1; 270 __be16 protocol; 271 272 void (*destructor)(struct sk_buff *skb); 273 #ifdef CONFIG_NETFILTER 274 struct nf_conntrack *nfct; 275 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) 276 struct sk_buff *nfct_reasm; 277 #endif 278 #ifdef CONFIG_BRIDGE_NETFILTER 279 struct nf_bridge_info *nf_bridge; 280 #endif 281 __u32 nfmark; 282 #endif /* CONFIG_NETFILTER */ 283 #ifdef CONFIG_NET_SCHED 284 __u16 tc_index; /* traffic control index */ 285 #ifdef CONFIG_NET_CLS_ACT 286 __u16 tc_verd; /* traffic control verdict */ 287 #endif 288 #endif 289 #ifdef CONFIG_NET_DMA 290 dma_cookie_t dma_cookie; 291 #endif 292 #ifdef CONFIG_NETWORK_SECMARK 293 __u32 secmark; 294 #endif 295 296 297 /* These elements must be at the end, see alloc_skb() for details. */ 298 unsigned int truesize; 299 atomic_t users; 300 unsigned char *head, 301 *data, 302 *tail, 303 *end; 304 }; 305 306 #ifdef __KERNEL__ 307 /* 308 * Handling routines are only of interest to the kernel 309 */ 310 #include <linux/slab.h> 311 312 #include <asm/system.h> 313 314 extern void kfree_skb(struct sk_buff *skb); 315 extern void __kfree_skb(struct sk_buff *skb); 316 extern struct sk_buff *__alloc_skb(unsigned int size, 317 gfp_t priority, int fclone); 318 static inline struct sk_buff *alloc_skb(unsigned int size, 319 gfp_t priority) 320 { 321 return __alloc_skb(size, priority, 0); 322 } 323 324 static inline struct sk_buff *alloc_skb_fclone(unsigned int size, 325 gfp_t priority) 326 { 327 return __alloc_skb(size, priority, 1); 328 } 329 330 extern struct sk_buff *alloc_skb_from_cache(kmem_cache_t *cp, 331 unsigned int size, 332 gfp_t priority); 333 extern void kfree_skbmem(struct sk_buff *skb); 334 extern struct sk_buff *skb_clone(struct sk_buff *skb, 335 gfp_t priority); 336 extern struct sk_buff *skb_copy(const struct sk_buff *skb, 337 gfp_t priority); 338 extern struct sk_buff *pskb_copy(struct sk_buff *skb, 339 gfp_t gfp_mask); 340 extern int pskb_expand_head(struct sk_buff *skb, 341 int nhead, int ntail, 342 gfp_t gfp_mask); 343 extern struct sk_buff *skb_realloc_headroom(struct sk_buff *skb, 344 unsigned int headroom); 345 extern struct sk_buff *skb_copy_expand(const struct sk_buff *skb, 346 int newheadroom, int newtailroom, 347 gfp_t priority); 348 extern struct sk_buff * skb_pad(struct sk_buff *skb, int pad); 349 #define dev_kfree_skb(a) kfree_skb(a) 350 extern void skb_over_panic(struct sk_buff *skb, int len, 351 void *here); 352 extern void skb_under_panic(struct sk_buff *skb, int len, 353 void *here); 354 extern void skb_truesize_bug(struct sk_buff *skb); 355 356 static inline void skb_truesize_check(struct sk_buff *skb) 357 { 358 if (unlikely((int)skb->truesize < sizeof(struct sk_buff) + skb->len)) 359 skb_truesize_bug(skb); 360 } 361 362 extern int skb_append_datato_frags(struct sock *sk, struct sk_buff *skb, 363 int getfrag(void *from, char *to, int offset, 364 int len,int odd, struct sk_buff *skb), 365 void *from, int length); 366 367 struct skb_seq_state 368 { 369 __u32 lower_offset; 370 __u32 upper_offset; 371 __u32 frag_idx; 372 __u32 stepped_offset; 373 struct sk_buff *root_skb; 374 struct sk_buff *cur_skb; 375 __u8 *frag_data; 376 }; 377 378 extern void skb_prepare_seq_read(struct sk_buff *skb, 379 unsigned int from, unsigned int to, 380 struct skb_seq_state *st); 381 extern unsigned int skb_seq_read(unsigned int consumed, const u8 **data, 382 struct skb_seq_state *st); 383 extern void skb_abort_seq_read(struct skb_seq_state *st); 384 385 extern unsigned int skb_find_text(struct sk_buff *skb, unsigned int from, 386 unsigned int to, struct ts_config *config, 387 struct ts_state *state); 388 389 /* Internal */ 390 #define skb_shinfo(SKB) ((struct skb_shared_info *)((SKB)->end)) 391 392 /** 393 * skb_queue_empty - check if a queue is empty 394 * @list: queue head 395 * 396 * Returns true if the queue is empty, false otherwise. 397 */ 398 static inline int skb_queue_empty(const struct sk_buff_head *list) 399 { 400 return list->next == (struct sk_buff *)list; 401 } 402 403 /** 404 * skb_get - reference buffer 405 * @skb: buffer to reference 406 * 407 * Makes another reference to a socket buffer and returns a pointer 408 * to the buffer. 409 */ 410 static inline struct sk_buff *skb_get(struct sk_buff *skb) 411 { 412 atomic_inc(&skb->users); 413 return skb; 414 } 415 416 /* 417 * If users == 1, we are the only owner and are can avoid redundant 418 * atomic change. 419 */ 420 421 /** 422 * skb_cloned - is the buffer a clone 423 * @skb: buffer to check 424 * 425 * Returns true if the buffer was generated with skb_clone() and is 426 * one of multiple shared copies of the buffer. Cloned buffers are 427 * shared data so must not be written to under normal circumstances. 428 */ 429 static inline int skb_cloned(const struct sk_buff *skb) 430 { 431 return skb->cloned && 432 (atomic_read(&skb_shinfo(skb)->dataref) & SKB_DATAREF_MASK) != 1; 433 } 434 435 /** 436 * skb_header_cloned - is the header a clone 437 * @skb: buffer to check 438 * 439 * Returns true if modifying the header part of the buffer requires 440 * the data to be copied. 441 */ 442 static inline int skb_header_cloned(const struct sk_buff *skb) 443 { 444 int dataref; 445 446 if (!skb->cloned) 447 return 0; 448 449 dataref = atomic_read(&skb_shinfo(skb)->dataref); 450 dataref = (dataref & SKB_DATAREF_MASK) - (dataref >> SKB_DATAREF_SHIFT); 451 return dataref != 1; 452 } 453 454 /** 455 * skb_header_release - release reference to header 456 * @skb: buffer to operate on 457 * 458 * Drop a reference to the header part of the buffer. This is done 459 * by acquiring a payload reference. You must not read from the header 460 * part of skb->data after this. 461 */ 462 static inline void skb_header_release(struct sk_buff *skb) 463 { 464 BUG_ON(skb->nohdr); 465 skb->nohdr = 1; 466 atomic_add(1 << SKB_DATAREF_SHIFT, &skb_shinfo(skb)->dataref); 467 } 468 469 /** 470 * skb_shared - is the buffer shared 471 * @skb: buffer to check 472 * 473 * Returns true if more than one person has a reference to this 474 * buffer. 475 */ 476 static inline int skb_shared(const struct sk_buff *skb) 477 { 478 return atomic_read(&skb->users) != 1; 479 } 480 481 /** 482 * skb_share_check - check if buffer is shared and if so clone it 483 * @skb: buffer to check 484 * @pri: priority for memory allocation 485 * 486 * If the buffer is shared the buffer is cloned and the old copy 487 * drops a reference. A new clone with a single reference is returned. 488 * If the buffer is not shared the original buffer is returned. When 489 * being called from interrupt status or with spinlocks held pri must 490 * be GFP_ATOMIC. 491 * 492 * NULL is returned on a memory allocation failure. 493 */ 494 static inline struct sk_buff *skb_share_check(struct sk_buff *skb, 495 gfp_t pri) 496 { 497 might_sleep_if(pri & __GFP_WAIT); 498 if (skb_shared(skb)) { 499 struct sk_buff *nskb = skb_clone(skb, pri); 500 kfree_skb(skb); 501 skb = nskb; 502 } 503 return skb; 504 } 505 506 /* 507 * Copy shared buffers into a new sk_buff. We effectively do COW on 508 * packets to handle cases where we have a local reader and forward 509 * and a couple of other messy ones. The normal one is tcpdumping 510 * a packet thats being forwarded. 511 */ 512 513 /** 514 * skb_unshare - make a copy of a shared buffer 515 * @skb: buffer to check 516 * @pri: priority for memory allocation 517 * 518 * If the socket buffer is a clone then this function creates a new 519 * copy of the data, drops a reference count on the old copy and returns 520 * the new copy with the reference count at 1. If the buffer is not a clone 521 * the original buffer is returned. When called with a spinlock held or 522 * from interrupt state @pri must be %GFP_ATOMIC 523 * 524 * %NULL is returned on a memory allocation failure. 525 */ 526 static inline struct sk_buff *skb_unshare(struct sk_buff *skb, 527 gfp_t pri) 528 { 529 might_sleep_if(pri & __GFP_WAIT); 530 if (skb_cloned(skb)) { 531 struct sk_buff *nskb = skb_copy(skb, pri); 532 kfree_skb(skb); /* Free our shared copy */ 533 skb = nskb; 534 } 535 return skb; 536 } 537 538 /** 539 * skb_peek 540 * @list_: list to peek at 541 * 542 * Peek an &sk_buff. Unlike most other operations you _MUST_ 543 * be careful with this one. A peek leaves the buffer on the 544 * list and someone else may run off with it. You must hold 545 * the appropriate locks or have a private queue to do this. 546 * 547 * Returns %NULL for an empty list or a pointer to the head element. 548 * The reference count is not incremented and the reference is therefore 549 * volatile. Use with caution. 550 */ 551 static inline struct sk_buff *skb_peek(struct sk_buff_head *list_) 552 { 553 struct sk_buff *list = ((struct sk_buff *)list_)->next; 554 if (list == (struct sk_buff *)list_) 555 list = NULL; 556 return list; 557 } 558 559 /** 560 * skb_peek_tail 561 * @list_: list to peek at 562 * 563 * Peek an &sk_buff. Unlike most other operations you _MUST_ 564 * be careful with this one. A peek leaves the buffer on the 565 * list and someone else may run off with it. You must hold 566 * the appropriate locks or have a private queue to do this. 567 * 568 * Returns %NULL for an empty list or a pointer to the tail element. 569 * The reference count is not incremented and the reference is therefore 570 * volatile. Use with caution. 571 */ 572 static inline struct sk_buff *skb_peek_tail(struct sk_buff_head *list_) 573 { 574 struct sk_buff *list = ((struct sk_buff *)list_)->prev; 575 if (list == (struct sk_buff *)list_) 576 list = NULL; 577 return list; 578 } 579 580 /** 581 * skb_queue_len - get queue length 582 * @list_: list to measure 583 * 584 * Return the length of an &sk_buff queue. 585 */ 586 static inline __u32 skb_queue_len(const struct sk_buff_head *list_) 587 { 588 return list_->qlen; 589 } 590 591 static inline void skb_queue_head_init(struct sk_buff_head *list) 592 { 593 spin_lock_init(&list->lock); 594 list->prev = list->next = (struct sk_buff *)list; 595 list->qlen = 0; 596 } 597 598 /* 599 * Insert an sk_buff at the start of a list. 600 * 601 * The "__skb_xxxx()" functions are the non-atomic ones that 602 * can only be called with interrupts disabled. 603 */ 604 605 /** 606 * __skb_queue_after - queue a buffer at the list head 607 * @list: list to use 608 * @prev: place after this buffer 609 * @newsk: buffer to queue 610 * 611 * Queue a buffer int the middle of a list. This function takes no locks 612 * and you must therefore hold required locks before calling it. 613 * 614 * A buffer cannot be placed on two lists at the same time. 615 */ 616 static inline void __skb_queue_after(struct sk_buff_head *list, 617 struct sk_buff *prev, 618 struct sk_buff *newsk) 619 { 620 struct sk_buff *next; 621 list->qlen++; 622 623 next = prev->next; 624 newsk->next = next; 625 newsk->prev = prev; 626 next->prev = prev->next = newsk; 627 } 628 629 /** 630 * __skb_queue_head - queue a buffer at the list head 631 * @list: list to use 632 * @newsk: buffer to queue 633 * 634 * Queue a buffer at the start of a list. This function takes no locks 635 * and you must therefore hold required locks before calling it. 636 * 637 * A buffer cannot be placed on two lists at the same time. 638 */ 639 extern void skb_queue_head(struct sk_buff_head *list, struct sk_buff *newsk); 640 static inline void __skb_queue_head(struct sk_buff_head *list, 641 struct sk_buff *newsk) 642 { 643 __skb_queue_after(list, (struct sk_buff *)list, newsk); 644 } 645 646 /** 647 * __skb_queue_tail - queue a buffer at the list tail 648 * @list: list to use 649 * @newsk: buffer to queue 650 * 651 * Queue a buffer at the end of a list. This function takes no locks 652 * and you must therefore hold required locks before calling it. 653 * 654 * A buffer cannot be placed on two lists at the same time. 655 */ 656 extern void skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk); 657 static inline void __skb_queue_tail(struct sk_buff_head *list, 658 struct sk_buff *newsk) 659 { 660 struct sk_buff *prev, *next; 661 662 list->qlen++; 663 next = (struct sk_buff *)list; 664 prev = next->prev; 665 newsk->next = next; 666 newsk->prev = prev; 667 next->prev = prev->next = newsk; 668 } 669 670 671 /** 672 * __skb_dequeue - remove from the head of the queue 673 * @list: list to dequeue from 674 * 675 * Remove the head of the list. This function does not take any locks 676 * so must be used with appropriate locks held only. The head item is 677 * returned or %NULL if the list is empty. 678 */ 679 extern struct sk_buff *skb_dequeue(struct sk_buff_head *list); 680 static inline struct sk_buff *__skb_dequeue(struct sk_buff_head *list) 681 { 682 struct sk_buff *next, *prev, *result; 683 684 prev = (struct sk_buff *) list; 685 next = prev->next; 686 result = NULL; 687 if (next != prev) { 688 result = next; 689 next = next->next; 690 list->qlen--; 691 next->prev = prev; 692 prev->next = next; 693 result->next = result->prev = NULL; 694 } 695 return result; 696 } 697 698 699 /* 700 * Insert a packet on a list. 701 */ 702 extern void skb_insert(struct sk_buff *old, struct sk_buff *newsk, struct sk_buff_head *list); 703 static inline void __skb_insert(struct sk_buff *newsk, 704 struct sk_buff *prev, struct sk_buff *next, 705 struct sk_buff_head *list) 706 { 707 newsk->next = next; 708 newsk->prev = prev; 709 next->prev = prev->next = newsk; 710 list->qlen++; 711 } 712 713 /* 714 * Place a packet after a given packet in a list. 715 */ 716 extern void skb_append(struct sk_buff *old, struct sk_buff *newsk, struct sk_buff_head *list); 717 static inline void __skb_append(struct sk_buff *old, struct sk_buff *newsk, struct sk_buff_head *list) 718 { 719 __skb_insert(newsk, old, old->next, list); 720 } 721 722 /* 723 * remove sk_buff from list. _Must_ be called atomically, and with 724 * the list known.. 725 */ 726 extern void skb_unlink(struct sk_buff *skb, struct sk_buff_head *list); 727 static inline void __skb_unlink(struct sk_buff *skb, struct sk_buff_head *list) 728 { 729 struct sk_buff *next, *prev; 730 731 list->qlen--; 732 next = skb->next; 733 prev = skb->prev; 734 skb->next = skb->prev = NULL; 735 next->prev = prev; 736 prev->next = next; 737 } 738 739 740 /* XXX: more streamlined implementation */ 741 742 /** 743 * __skb_dequeue_tail - remove from the tail of the queue 744 * @list: list to dequeue from 745 * 746 * Remove the tail of the list. This function does not take any locks 747 * so must be used with appropriate locks held only. The tail item is 748 * returned or %NULL if the list is empty. 749 */ 750 extern struct sk_buff *skb_dequeue_tail(struct sk_buff_head *list); 751 static inline struct sk_buff *__skb_dequeue_tail(struct sk_buff_head *list) 752 { 753 struct sk_buff *skb = skb_peek_tail(list); 754 if (skb) 755 __skb_unlink(skb, list); 756 return skb; 757 } 758 759 760 static inline int skb_is_nonlinear(const struct sk_buff *skb) 761 { 762 return skb->data_len; 763 } 764 765 static inline unsigned int skb_headlen(const struct sk_buff *skb) 766 { 767 return skb->len - skb->data_len; 768 } 769 770 static inline int skb_pagelen(const struct sk_buff *skb) 771 { 772 int i, len = 0; 773 774 for (i = (int)skb_shinfo(skb)->nr_frags - 1; i >= 0; i--) 775 len += skb_shinfo(skb)->frags[i].size; 776 return len + skb_headlen(skb); 777 } 778 779 static inline void skb_fill_page_desc(struct sk_buff *skb, int i, 780 struct page *page, int off, int size) 781 { 782 skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 783 784 frag->page = page; 785 frag->page_offset = off; 786 frag->size = size; 787 skb_shinfo(skb)->nr_frags = i + 1; 788 } 789 790 #define SKB_PAGE_ASSERT(skb) BUG_ON(skb_shinfo(skb)->nr_frags) 791 #define SKB_FRAG_ASSERT(skb) BUG_ON(skb_shinfo(skb)->frag_list) 792 #define SKB_LINEAR_ASSERT(skb) BUG_ON(skb_is_nonlinear(skb)) 793 794 /* 795 * Add data to an sk_buff 796 */ 797 static inline unsigned char *__skb_put(struct sk_buff *skb, unsigned int len) 798 { 799 unsigned char *tmp = skb->tail; 800 SKB_LINEAR_ASSERT(skb); 801 skb->tail += len; 802 skb->len += len; 803 return tmp; 804 } 805 806 /** 807 * skb_put - add data to a buffer 808 * @skb: buffer to use 809 * @len: amount of data to add 810 * 811 * This function extends the used data area of the buffer. If this would 812 * exceed the total buffer size the kernel will panic. A pointer to the 813 * first byte of the extra data is returned. 814 */ 815 static inline unsigned char *skb_put(struct sk_buff *skb, unsigned int len) 816 { 817 unsigned char *tmp = skb->tail; 818 SKB_LINEAR_ASSERT(skb); 819 skb->tail += len; 820 skb->len += len; 821 if (unlikely(skb->tail>skb->end)) 822 skb_over_panic(skb, len, current_text_addr()); 823 return tmp; 824 } 825 826 static inline unsigned char *__skb_push(struct sk_buff *skb, unsigned int len) 827 { 828 skb->data -= len; 829 skb->len += len; 830 return skb->data; 831 } 832 833 /** 834 * skb_push - add data to the start of a buffer 835 * @skb: buffer to use 836 * @len: amount of data to add 837 * 838 * This function extends the used data area of the buffer at the buffer 839 * start. If this would exceed the total buffer headroom the kernel will 840 * panic. A pointer to the first byte of the extra data is returned. 841 */ 842 static inline unsigned char *skb_push(struct sk_buff *skb, unsigned int len) 843 { 844 skb->data -= len; 845 skb->len += len; 846 if (unlikely(skb->data<skb->head)) 847 skb_under_panic(skb, len, current_text_addr()); 848 return skb->data; 849 } 850 851 static inline unsigned char *__skb_pull(struct sk_buff *skb, unsigned int len) 852 { 853 skb->len -= len; 854 BUG_ON(skb->len < skb->data_len); 855 return skb->data += len; 856 } 857 858 /** 859 * skb_pull - remove data from the start of a buffer 860 * @skb: buffer to use 861 * @len: amount of data to remove 862 * 863 * This function removes data from the start of a buffer, returning 864 * the memory to the headroom. A pointer to the next data in the buffer 865 * is returned. Once the data has been pulled future pushes will overwrite 866 * the old data. 867 */ 868 static inline unsigned char *skb_pull(struct sk_buff *skb, unsigned int len) 869 { 870 return unlikely(len > skb->len) ? NULL : __skb_pull(skb, len); 871 } 872 873 extern unsigned char *__pskb_pull_tail(struct sk_buff *skb, int delta); 874 875 static inline unsigned char *__pskb_pull(struct sk_buff *skb, unsigned int len) 876 { 877 if (len > skb_headlen(skb) && 878 !__pskb_pull_tail(skb, len-skb_headlen(skb))) 879 return NULL; 880 skb->len -= len; 881 return skb->data += len; 882 } 883 884 static inline unsigned char *pskb_pull(struct sk_buff *skb, unsigned int len) 885 { 886 return unlikely(len > skb->len) ? NULL : __pskb_pull(skb, len); 887 } 888 889 static inline int pskb_may_pull(struct sk_buff *skb, unsigned int len) 890 { 891 if (likely(len <= skb_headlen(skb))) 892 return 1; 893 if (unlikely(len > skb->len)) 894 return 0; 895 return __pskb_pull_tail(skb, len-skb_headlen(skb)) != NULL; 896 } 897 898 /** 899 * skb_headroom - bytes at buffer head 900 * @skb: buffer to check 901 * 902 * Return the number of bytes of free space at the head of an &sk_buff. 903 */ 904 static inline int skb_headroom(const struct sk_buff *skb) 905 { 906 return skb->data - skb->head; 907 } 908 909 /** 910 * skb_tailroom - bytes at buffer end 911 * @skb: buffer to check 912 * 913 * Return the number of bytes of free space at the tail of an sk_buff 914 */ 915 static inline int skb_tailroom(const struct sk_buff *skb) 916 { 917 return skb_is_nonlinear(skb) ? 0 : skb->end - skb->tail; 918 } 919 920 /** 921 * skb_reserve - adjust headroom 922 * @skb: buffer to alter 923 * @len: bytes to move 924 * 925 * Increase the headroom of an empty &sk_buff by reducing the tail 926 * room. This is only allowed for an empty buffer. 927 */ 928 static inline void skb_reserve(struct sk_buff *skb, int len) 929 { 930 skb->data += len; 931 skb->tail += len; 932 } 933 934 /* 935 * CPUs often take a performance hit when accessing unaligned memory 936 * locations. The actual performance hit varies, it can be small if the 937 * hardware handles it or large if we have to take an exception and fix it 938 * in software. 939 * 940 * Since an ethernet header is 14 bytes network drivers often end up with 941 * the IP header at an unaligned offset. The IP header can be aligned by 942 * shifting the start of the packet by 2 bytes. Drivers should do this 943 * with: 944 * 945 * skb_reserve(NET_IP_ALIGN); 946 * 947 * The downside to this alignment of the IP header is that the DMA is now 948 * unaligned. On some architectures the cost of an unaligned DMA is high 949 * and this cost outweighs the gains made by aligning the IP header. 950 * 951 * Since this trade off varies between architectures, we allow NET_IP_ALIGN 952 * to be overridden. 953 */ 954 #ifndef NET_IP_ALIGN 955 #define NET_IP_ALIGN 2 956 #endif 957 958 /* 959 * The networking layer reserves some headroom in skb data (via 960 * dev_alloc_skb). This is used to avoid having to reallocate skb data when 961 * the header has to grow. In the default case, if the header has to grow 962 * 16 bytes or less we avoid the reallocation. 963 * 964 * Unfortunately this headroom changes the DMA alignment of the resulting 965 * network packet. As for NET_IP_ALIGN, this unaligned DMA is expensive 966 * on some architectures. An architecture can override this value, 967 * perhaps setting it to a cacheline in size (since that will maintain 968 * cacheline alignment of the DMA). It must be a power of 2. 969 * 970 * Various parts of the networking layer expect at least 16 bytes of 971 * headroom, you should not reduce this. 972 */ 973 #ifndef NET_SKB_PAD 974 #define NET_SKB_PAD 16 975 #endif 976 977 extern int ___pskb_trim(struct sk_buff *skb, unsigned int len); 978 979 static inline void __skb_trim(struct sk_buff *skb, unsigned int len) 980 { 981 if (unlikely(skb->data_len)) { 982 WARN_ON(1); 983 return; 984 } 985 skb->len = len; 986 skb->tail = skb->data + len; 987 } 988 989 /** 990 * skb_trim - remove end from a buffer 991 * @skb: buffer to alter 992 * @len: new length 993 * 994 * Cut the length of a buffer down by removing data from the tail. If 995 * the buffer is already under the length specified it is not modified. 996 * The skb must be linear. 997 */ 998 static inline void skb_trim(struct sk_buff *skb, unsigned int len) 999 { 1000 if (skb->len > len) 1001 __skb_trim(skb, len); 1002 } 1003 1004 1005 static inline int __pskb_trim(struct sk_buff *skb, unsigned int len) 1006 { 1007 if (skb->data_len) 1008 return ___pskb_trim(skb, len); 1009 __skb_trim(skb, len); 1010 return 0; 1011 } 1012 1013 static inline int pskb_trim(struct sk_buff *skb, unsigned int len) 1014 { 1015 return (len < skb->len) ? __pskb_trim(skb, len) : 0; 1016 } 1017 1018 /** 1019 * skb_orphan - orphan a buffer 1020 * @skb: buffer to orphan 1021 * 1022 * If a buffer currently has an owner then we call the owner's 1023 * destructor function and make the @skb unowned. The buffer continues 1024 * to exist but is no longer charged to its former owner. 1025 */ 1026 static inline void skb_orphan(struct sk_buff *skb) 1027 { 1028 if (skb->destructor) 1029 skb->destructor(skb); 1030 skb->destructor = NULL; 1031 skb->sk = NULL; 1032 } 1033 1034 /** 1035 * __skb_queue_purge - empty a list 1036 * @list: list to empty 1037 * 1038 * Delete all buffers on an &sk_buff list. Each buffer is removed from 1039 * the list and one reference dropped. This function does not take the 1040 * list lock and the caller must hold the relevant locks to use it. 1041 */ 1042 extern void skb_queue_purge(struct sk_buff_head *list); 1043 static inline void __skb_queue_purge(struct sk_buff_head *list) 1044 { 1045 struct sk_buff *skb; 1046 while ((skb = __skb_dequeue(list)) != NULL) 1047 kfree_skb(skb); 1048 } 1049 1050 #ifndef CONFIG_HAVE_ARCH_DEV_ALLOC_SKB 1051 /** 1052 * __dev_alloc_skb - allocate an skbuff for sending 1053 * @length: length to allocate 1054 * @gfp_mask: get_free_pages mask, passed to alloc_skb 1055 * 1056 * Allocate a new &sk_buff and assign it a usage count of one. The 1057 * buffer has unspecified headroom built in. Users should allocate 1058 * the headroom they think they need without accounting for the 1059 * built in space. The built in space is used for optimisations. 1060 * 1061 * %NULL is returned in there is no free memory. 1062 */ 1063 static inline struct sk_buff *__dev_alloc_skb(unsigned int length, 1064 gfp_t gfp_mask) 1065 { 1066 struct sk_buff *skb = alloc_skb(length + NET_SKB_PAD, gfp_mask); 1067 if (likely(skb)) 1068 skb_reserve(skb, NET_SKB_PAD); 1069 return skb; 1070 } 1071 #else 1072 extern struct sk_buff *__dev_alloc_skb(unsigned int length, int gfp_mask); 1073 #endif 1074 1075 /** 1076 * dev_alloc_skb - allocate an skbuff for sending 1077 * @length: length to allocate 1078 * 1079 * Allocate a new &sk_buff and assign it a usage count of one. The 1080 * buffer has unspecified headroom built in. Users should allocate 1081 * the headroom they think they need without accounting for the 1082 * built in space. The built in space is used for optimisations. 1083 * 1084 * %NULL is returned in there is no free memory. Although this function 1085 * allocates memory it can be called from an interrupt. 1086 */ 1087 static inline struct sk_buff *dev_alloc_skb(unsigned int length) 1088 { 1089 return __dev_alloc_skb(length, GFP_ATOMIC); 1090 } 1091 1092 /** 1093 * skb_cow - copy header of skb when it is required 1094 * @skb: buffer to cow 1095 * @headroom: needed headroom 1096 * 1097 * If the skb passed lacks sufficient headroom or its data part 1098 * is shared, data is reallocated. If reallocation fails, an error 1099 * is returned and original skb is not changed. 1100 * 1101 * The result is skb with writable area skb->head...skb->tail 1102 * and at least @headroom of space at head. 1103 */ 1104 static inline int skb_cow(struct sk_buff *skb, unsigned int headroom) 1105 { 1106 int delta = (headroom > NET_SKB_PAD ? headroom : NET_SKB_PAD) - 1107 skb_headroom(skb); 1108 1109 if (delta < 0) 1110 delta = 0; 1111 1112 if (delta || skb_cloned(skb)) 1113 return pskb_expand_head(skb, (delta + (NET_SKB_PAD-1)) & 1114 ~(NET_SKB_PAD-1), 0, GFP_ATOMIC); 1115 return 0; 1116 } 1117 1118 /** 1119 * skb_padto - pad an skbuff up to a minimal size 1120 * @skb: buffer to pad 1121 * @len: minimal length 1122 * 1123 * Pads up a buffer to ensure the trailing bytes exist and are 1124 * blanked. If the buffer already contains sufficient data it 1125 * is untouched. Returns the buffer, which may be a replacement 1126 * for the original, or NULL for out of memory - in which case 1127 * the original buffer is still freed. 1128 */ 1129 1130 static inline struct sk_buff *skb_padto(struct sk_buff *skb, unsigned int len) 1131 { 1132 unsigned int size = skb->len; 1133 if (likely(size >= len)) 1134 return skb; 1135 return skb_pad(skb, len-size); 1136 } 1137 1138 static inline int skb_add_data(struct sk_buff *skb, 1139 char __user *from, int copy) 1140 { 1141 const int off = skb->len; 1142 1143 if (skb->ip_summed == CHECKSUM_NONE) { 1144 int err = 0; 1145 unsigned int csum = csum_and_copy_from_user(from, 1146 skb_put(skb, copy), 1147 copy, 0, &err); 1148 if (!err) { 1149 skb->csum = csum_block_add(skb->csum, csum, off); 1150 return 0; 1151 } 1152 } else if (!copy_from_user(skb_put(skb, copy), from, copy)) 1153 return 0; 1154 1155 __skb_trim(skb, off); 1156 return -EFAULT; 1157 } 1158 1159 static inline int skb_can_coalesce(struct sk_buff *skb, int i, 1160 struct page *page, int off) 1161 { 1162 if (i) { 1163 struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i - 1]; 1164 1165 return page == frag->page && 1166 off == frag->page_offset + frag->size; 1167 } 1168 return 0; 1169 } 1170 1171 static inline int __skb_linearize(struct sk_buff *skb) 1172 { 1173 return __pskb_pull_tail(skb, skb->data_len) ? 0 : -ENOMEM; 1174 } 1175 1176 /** 1177 * skb_linearize - convert paged skb to linear one 1178 * @skb: buffer to linarize 1179 * 1180 * If there is no free memory -ENOMEM is returned, otherwise zero 1181 * is returned and the old skb data released. 1182 */ 1183 static inline int skb_linearize(struct sk_buff *skb) 1184 { 1185 return skb_is_nonlinear(skb) ? __skb_linearize(skb) : 0; 1186 } 1187 1188 /** 1189 * skb_linearize_cow - make sure skb is linear and writable 1190 * @skb: buffer to process 1191 * 1192 * If there is no free memory -ENOMEM is returned, otherwise zero 1193 * is returned and the old skb data released. 1194 */ 1195 static inline int skb_linearize_cow(struct sk_buff *skb) 1196 { 1197 return skb_is_nonlinear(skb) || skb_cloned(skb) ? 1198 __skb_linearize(skb) : 0; 1199 } 1200 1201 /** 1202 * skb_postpull_rcsum - update checksum for received skb after pull 1203 * @skb: buffer to update 1204 * @start: start of data before pull 1205 * @len: length of data pulled 1206 * 1207 * After doing a pull on a received packet, you need to call this to 1208 * update the CHECKSUM_HW checksum, or set ip_summed to CHECKSUM_NONE 1209 * so that it can be recomputed from scratch. 1210 */ 1211 1212 static inline void skb_postpull_rcsum(struct sk_buff *skb, 1213 const void *start, unsigned int len) 1214 { 1215 if (skb->ip_summed == CHECKSUM_HW) 1216 skb->csum = csum_sub(skb->csum, csum_partial(start, len, 0)); 1217 } 1218 1219 unsigned char *skb_pull_rcsum(struct sk_buff *skb, unsigned int len); 1220 1221 /** 1222 * pskb_trim_rcsum - trim received skb and update checksum 1223 * @skb: buffer to trim 1224 * @len: new length 1225 * 1226 * This is exactly the same as pskb_trim except that it ensures the 1227 * checksum of received packets are still valid after the operation. 1228 */ 1229 1230 static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len) 1231 { 1232 if (likely(len >= skb->len)) 1233 return 0; 1234 if (skb->ip_summed == CHECKSUM_HW) 1235 skb->ip_summed = CHECKSUM_NONE; 1236 return __pskb_trim(skb, len); 1237 } 1238 1239 static inline void *kmap_skb_frag(const skb_frag_t *frag) 1240 { 1241 #ifdef CONFIG_HIGHMEM 1242 BUG_ON(in_irq()); 1243 1244 local_bh_disable(); 1245 #endif 1246 return kmap_atomic(frag->page, KM_SKB_DATA_SOFTIRQ); 1247 } 1248 1249 static inline void kunmap_skb_frag(void *vaddr) 1250 { 1251 kunmap_atomic(vaddr, KM_SKB_DATA_SOFTIRQ); 1252 #ifdef CONFIG_HIGHMEM 1253 local_bh_enable(); 1254 #endif 1255 } 1256 1257 #define skb_queue_walk(queue, skb) \ 1258 for (skb = (queue)->next; \ 1259 prefetch(skb->next), (skb != (struct sk_buff *)(queue)); \ 1260 skb = skb->next) 1261 1262 #define skb_queue_reverse_walk(queue, skb) \ 1263 for (skb = (queue)->prev; \ 1264 prefetch(skb->prev), (skb != (struct sk_buff *)(queue)); \ 1265 skb = skb->prev) 1266 1267 1268 extern struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, 1269 int noblock, int *err); 1270 extern unsigned int datagram_poll(struct file *file, struct socket *sock, 1271 struct poll_table_struct *wait); 1272 extern int skb_copy_datagram_iovec(const struct sk_buff *from, 1273 int offset, struct iovec *to, 1274 int size); 1275 extern int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb, 1276 int hlen, 1277 struct iovec *iov); 1278 extern void skb_free_datagram(struct sock *sk, struct sk_buff *skb); 1279 extern void skb_kill_datagram(struct sock *sk, struct sk_buff *skb, 1280 unsigned int flags); 1281 extern unsigned int skb_checksum(const struct sk_buff *skb, int offset, 1282 int len, unsigned int csum); 1283 extern int skb_copy_bits(const struct sk_buff *skb, int offset, 1284 void *to, int len); 1285 extern int skb_store_bits(const struct sk_buff *skb, int offset, 1286 void *from, int len); 1287 extern unsigned int skb_copy_and_csum_bits(const struct sk_buff *skb, 1288 int offset, u8 *to, int len, 1289 unsigned int csum); 1290 extern void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to); 1291 extern void skb_split(struct sk_buff *skb, 1292 struct sk_buff *skb1, const u32 len); 1293 1294 extern void skb_release_data(struct sk_buff *skb); 1295 1296 static inline void *skb_header_pointer(const struct sk_buff *skb, int offset, 1297 int len, void *buffer) 1298 { 1299 int hlen = skb_headlen(skb); 1300 1301 if (hlen - offset >= len) 1302 return skb->data + offset; 1303 1304 if (skb_copy_bits(skb, offset, buffer, len) < 0) 1305 return NULL; 1306 1307 return buffer; 1308 } 1309 1310 extern void skb_init(void); 1311 extern void skb_add_mtu(int mtu); 1312 1313 /** 1314 * skb_get_timestamp - get timestamp from a skb 1315 * @skb: skb to get stamp from 1316 * @stamp: pointer to struct timeval to store stamp in 1317 * 1318 * Timestamps are stored in the skb as offsets to a base timestamp. 1319 * This function converts the offset back to a struct timeval and stores 1320 * it in stamp. 1321 */ 1322 static inline void skb_get_timestamp(const struct sk_buff *skb, struct timeval *stamp) 1323 { 1324 stamp->tv_sec = skb->tstamp.off_sec; 1325 stamp->tv_usec = skb->tstamp.off_usec; 1326 } 1327 1328 /** 1329 * skb_set_timestamp - set timestamp of a skb 1330 * @skb: skb to set stamp of 1331 * @stamp: pointer to struct timeval to get stamp from 1332 * 1333 * Timestamps are stored in the skb as offsets to a base timestamp. 1334 * This function converts a struct timeval to an offset and stores 1335 * it in the skb. 1336 */ 1337 static inline void skb_set_timestamp(struct sk_buff *skb, const struct timeval *stamp) 1338 { 1339 skb->tstamp.off_sec = stamp->tv_sec; 1340 skb->tstamp.off_usec = stamp->tv_usec; 1341 } 1342 1343 extern void __net_timestamp(struct sk_buff *skb); 1344 1345 extern unsigned int __skb_checksum_complete(struct sk_buff *skb); 1346 1347 /** 1348 * skb_checksum_complete - Calculate checksum of an entire packet 1349 * @skb: packet to process 1350 * 1351 * This function calculates the checksum over the entire packet plus 1352 * the value of skb->csum. The latter can be used to supply the 1353 * checksum of a pseudo header as used by TCP/UDP. It returns the 1354 * checksum. 1355 * 1356 * For protocols that contain complete checksums such as ICMP/TCP/UDP, 1357 * this function can be used to verify that checksum on received 1358 * packets. In that case the function should return zero if the 1359 * checksum is correct. In particular, this function will return zero 1360 * if skb->ip_summed is CHECKSUM_UNNECESSARY which indicates that the 1361 * hardware has already verified the correctness of the checksum. 1362 */ 1363 static inline unsigned int skb_checksum_complete(struct sk_buff *skb) 1364 { 1365 return skb->ip_summed != CHECKSUM_UNNECESSARY && 1366 __skb_checksum_complete(skb); 1367 } 1368 1369 #ifdef CONFIG_NETFILTER 1370 static inline void nf_conntrack_put(struct nf_conntrack *nfct) 1371 { 1372 if (nfct && atomic_dec_and_test(&nfct->use)) 1373 nfct->destroy(nfct); 1374 } 1375 static inline void nf_conntrack_get(struct nf_conntrack *nfct) 1376 { 1377 if (nfct) 1378 atomic_inc(&nfct->use); 1379 } 1380 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) 1381 static inline void nf_conntrack_get_reasm(struct sk_buff *skb) 1382 { 1383 if (skb) 1384 atomic_inc(&skb->users); 1385 } 1386 static inline void nf_conntrack_put_reasm(struct sk_buff *skb) 1387 { 1388 if (skb) 1389 kfree_skb(skb); 1390 } 1391 #endif 1392 #ifdef CONFIG_BRIDGE_NETFILTER 1393 static inline void nf_bridge_put(struct nf_bridge_info *nf_bridge) 1394 { 1395 if (nf_bridge && atomic_dec_and_test(&nf_bridge->use)) 1396 kfree(nf_bridge); 1397 } 1398 static inline void nf_bridge_get(struct nf_bridge_info *nf_bridge) 1399 { 1400 if (nf_bridge) 1401 atomic_inc(&nf_bridge->use); 1402 } 1403 #endif /* CONFIG_BRIDGE_NETFILTER */ 1404 static inline void nf_reset(struct sk_buff *skb) 1405 { 1406 nf_conntrack_put(skb->nfct); 1407 skb->nfct = NULL; 1408 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) 1409 nf_conntrack_put_reasm(skb->nfct_reasm); 1410 skb->nfct_reasm = NULL; 1411 #endif 1412 #ifdef CONFIG_BRIDGE_NETFILTER 1413 nf_bridge_put(skb->nf_bridge); 1414 skb->nf_bridge = NULL; 1415 #endif 1416 } 1417 1418 #else /* CONFIG_NETFILTER */ 1419 static inline void nf_reset(struct sk_buff *skb) {} 1420 #endif /* CONFIG_NETFILTER */ 1421 1422 #ifdef CONFIG_NETWORK_SECMARK 1423 static inline void skb_copy_secmark(struct sk_buff *to, const struct sk_buff *from) 1424 { 1425 to->secmark = from->secmark; 1426 } 1427 1428 static inline void skb_init_secmark(struct sk_buff *skb) 1429 { 1430 skb->secmark = 0; 1431 } 1432 #else 1433 static inline void skb_copy_secmark(struct sk_buff *to, const struct sk_buff *from) 1434 { } 1435 1436 static inline void skb_init_secmark(struct sk_buff *skb) 1437 { } 1438 #endif 1439 1440 #endif /* __KERNEL__ */ 1441 #endif /* _LINUX_SKBUFF_H */ 1442