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