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