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