at v2.6.13 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 __be16 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, 506 unsigned int __nocast pri) 507{ 508 might_sleep_if(pri & __GFP_WAIT); 509 if (skb_cloned(skb)) { 510 struct sk_buff *nskb = skb_copy(skb, pri); 511 kfree_skb(skb); /* Free our shared copy */ 512 skb = nskb; 513 } 514 return skb; 515} 516 517/** 518 * skb_peek 519 * @list_: list to peek at 520 * 521 * Peek an &sk_buff. Unlike most other operations you _MUST_ 522 * be careful with this one. A peek leaves the buffer on the 523 * list and someone else may run off with it. You must hold 524 * the appropriate locks or have a private queue to do this. 525 * 526 * Returns %NULL for an empty list or a pointer to the head element. 527 * The reference count is not incremented and the reference is therefore 528 * volatile. Use with caution. 529 */ 530static inline struct sk_buff *skb_peek(struct sk_buff_head *list_) 531{ 532 struct sk_buff *list = ((struct sk_buff *)list_)->next; 533 if (list == (struct sk_buff *)list_) 534 list = NULL; 535 return list; 536} 537 538/** 539 * skb_peek_tail 540 * @list_: list to peek at 541 * 542 * Peek an &sk_buff. Unlike most other operations you _MUST_ 543 * be careful with this one. A peek leaves the buffer on the 544 * list and someone else may run off with it. You must hold 545 * the appropriate locks or have a private queue to do this. 546 * 547 * Returns %NULL for an empty list or a pointer to the tail element. 548 * The reference count is not incremented and the reference is therefore 549 * volatile. Use with caution. 550 */ 551static inline struct sk_buff *skb_peek_tail(struct sk_buff_head *list_) 552{ 553 struct sk_buff *list = ((struct sk_buff *)list_)->prev; 554 if (list == (struct sk_buff *)list_) 555 list = NULL; 556 return list; 557} 558 559/** 560 * skb_queue_len - get queue length 561 * @list_: list to measure 562 * 563 * Return the length of an &sk_buff queue. 564 */ 565static inline __u32 skb_queue_len(const struct sk_buff_head *list_) 566{ 567 return list_->qlen; 568} 569 570static inline void skb_queue_head_init(struct sk_buff_head *list) 571{ 572 spin_lock_init(&list->lock); 573 list->prev = list->next = (struct sk_buff *)list; 574 list->qlen = 0; 575} 576 577/* 578 * Insert an sk_buff at the start of a list. 579 * 580 * The "__skb_xxxx()" functions are the non-atomic ones that 581 * can only be called with interrupts disabled. 582 */ 583 584/** 585 * __skb_queue_head - queue a buffer at the list head 586 * @list: list to use 587 * @newsk: buffer to queue 588 * 589 * Queue a buffer at the start of a list. This function takes no locks 590 * and you must therefore hold required locks before calling it. 591 * 592 * A buffer cannot be placed on two lists at the same time. 593 */ 594extern void skb_queue_head(struct sk_buff_head *list, struct sk_buff *newsk); 595static inline void __skb_queue_head(struct sk_buff_head *list, 596 struct sk_buff *newsk) 597{ 598 struct sk_buff *prev, *next; 599 600 newsk->list = list; 601 list->qlen++; 602 prev = (struct sk_buff *)list; 603 next = prev->next; 604 newsk->next = next; 605 newsk->prev = prev; 606 next->prev = prev->next = newsk; 607} 608 609/** 610 * __skb_queue_tail - queue a buffer at the list tail 611 * @list: list to use 612 * @newsk: buffer to queue 613 * 614 * Queue a buffer at the end of a list. This function takes no locks 615 * and you must therefore hold required locks before calling it. 616 * 617 * A buffer cannot be placed on two lists at the same time. 618 */ 619extern void skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk); 620static inline void __skb_queue_tail(struct sk_buff_head *list, 621 struct sk_buff *newsk) 622{ 623 struct sk_buff *prev, *next; 624 625 newsk->list = list; 626 list->qlen++; 627 next = (struct sk_buff *)list; 628 prev = next->prev; 629 newsk->next = next; 630 newsk->prev = prev; 631 next->prev = prev->next = newsk; 632} 633 634 635/** 636 * __skb_dequeue - remove from the head of the queue 637 * @list: list to dequeue from 638 * 639 * Remove the head of the list. This function does not take any locks 640 * so must be used with appropriate locks held only. The head item is 641 * returned or %NULL if the list is empty. 642 */ 643extern struct sk_buff *skb_dequeue(struct sk_buff_head *list); 644static inline struct sk_buff *__skb_dequeue(struct sk_buff_head *list) 645{ 646 struct sk_buff *next, *prev, *result; 647 648 prev = (struct sk_buff *) list; 649 next = prev->next; 650 result = NULL; 651 if (next != prev) { 652 result = next; 653 next = next->next; 654 list->qlen--; 655 next->prev = prev; 656 prev->next = next; 657 result->next = result->prev = NULL; 658 result->list = NULL; 659 } 660 return result; 661} 662 663 664/* 665 * Insert a packet on a list. 666 */ 667extern void skb_insert(struct sk_buff *old, struct sk_buff *newsk); 668static inline void __skb_insert(struct sk_buff *newsk, 669 struct sk_buff *prev, struct sk_buff *next, 670 struct sk_buff_head *list) 671{ 672 newsk->next = next; 673 newsk->prev = prev; 674 next->prev = prev->next = newsk; 675 newsk->list = list; 676 list->qlen++; 677} 678 679/* 680 * Place a packet after a given packet in a list. 681 */ 682extern void skb_append(struct sk_buff *old, struct sk_buff *newsk); 683static inline void __skb_append(struct sk_buff *old, struct sk_buff *newsk) 684{ 685 __skb_insert(newsk, old, old->next, old->list); 686} 687 688/* 689 * remove sk_buff from list. _Must_ be called atomically, and with 690 * the list known.. 691 */ 692extern void skb_unlink(struct sk_buff *skb); 693static inline void __skb_unlink(struct sk_buff *skb, struct sk_buff_head *list) 694{ 695 struct sk_buff *next, *prev; 696 697 list->qlen--; 698 next = skb->next; 699 prev = skb->prev; 700 skb->next = skb->prev = NULL; 701 skb->list = NULL; 702 next->prev = prev; 703 prev->next = next; 704} 705 706 707/* XXX: more streamlined implementation */ 708 709/** 710 * __skb_dequeue_tail - remove from the tail of the queue 711 * @list: list to dequeue from 712 * 713 * Remove the tail of the list. This function does not take any locks 714 * so must be used with appropriate locks held only. The tail item is 715 * returned or %NULL if the list is empty. 716 */ 717extern struct sk_buff *skb_dequeue_tail(struct sk_buff_head *list); 718static inline struct sk_buff *__skb_dequeue_tail(struct sk_buff_head *list) 719{ 720 struct sk_buff *skb = skb_peek_tail(list); 721 if (skb) 722 __skb_unlink(skb, list); 723 return skb; 724} 725 726 727static inline int skb_is_nonlinear(const struct sk_buff *skb) 728{ 729 return skb->data_len; 730} 731 732static inline unsigned int skb_headlen(const struct sk_buff *skb) 733{ 734 return skb->len - skb->data_len; 735} 736 737static inline int skb_pagelen(const struct sk_buff *skb) 738{ 739 int i, len = 0; 740 741 for (i = (int)skb_shinfo(skb)->nr_frags - 1; i >= 0; i--) 742 len += skb_shinfo(skb)->frags[i].size; 743 return len + skb_headlen(skb); 744} 745 746static inline void skb_fill_page_desc(struct sk_buff *skb, int i, 747 struct page *page, int off, int size) 748{ 749 skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 750 751 frag->page = page; 752 frag->page_offset = off; 753 frag->size = size; 754 skb_shinfo(skb)->nr_frags = i + 1; 755} 756 757#define SKB_PAGE_ASSERT(skb) BUG_ON(skb_shinfo(skb)->nr_frags) 758#define SKB_FRAG_ASSERT(skb) BUG_ON(skb_shinfo(skb)->frag_list) 759#define SKB_LINEAR_ASSERT(skb) BUG_ON(skb_is_nonlinear(skb)) 760 761/* 762 * Add data to an sk_buff 763 */ 764static inline unsigned char *__skb_put(struct sk_buff *skb, unsigned int len) 765{ 766 unsigned char *tmp = skb->tail; 767 SKB_LINEAR_ASSERT(skb); 768 skb->tail += len; 769 skb->len += len; 770 return tmp; 771} 772 773/** 774 * skb_put - add data to a buffer 775 * @skb: buffer to use 776 * @len: amount of data to add 777 * 778 * This function extends the used data area of the buffer. If this would 779 * exceed the total buffer size the kernel will panic. A pointer to the 780 * first byte of the extra data is returned. 781 */ 782static inline unsigned char *skb_put(struct sk_buff *skb, unsigned int len) 783{ 784 unsigned char *tmp = skb->tail; 785 SKB_LINEAR_ASSERT(skb); 786 skb->tail += len; 787 skb->len += len; 788 if (unlikely(skb->tail>skb->end)) 789 skb_over_panic(skb, len, current_text_addr()); 790 return tmp; 791} 792 793static inline unsigned char *__skb_push(struct sk_buff *skb, unsigned int len) 794{ 795 skb->data -= len; 796 skb->len += len; 797 return skb->data; 798} 799 800/** 801 * skb_push - add data to the start of a buffer 802 * @skb: buffer to use 803 * @len: amount of data to add 804 * 805 * This function extends the used data area of the buffer at the buffer 806 * start. If this would exceed the total buffer headroom the kernel will 807 * panic. A pointer to the first byte of the extra data is returned. 808 */ 809static inline unsigned char *skb_push(struct sk_buff *skb, unsigned int len) 810{ 811 skb->data -= len; 812 skb->len += len; 813 if (unlikely(skb->data<skb->head)) 814 skb_under_panic(skb, len, current_text_addr()); 815 return skb->data; 816} 817 818static inline unsigned char *__skb_pull(struct sk_buff *skb, unsigned int len) 819{ 820 skb->len -= len; 821 BUG_ON(skb->len < skb->data_len); 822 return skb->data += len; 823} 824 825/** 826 * skb_pull - remove data from the start of a buffer 827 * @skb: buffer to use 828 * @len: amount of data to remove 829 * 830 * This function removes data from the start of a buffer, returning 831 * the memory to the headroom. A pointer to the next data in the buffer 832 * is returned. Once the data has been pulled future pushes will overwrite 833 * the old data. 834 */ 835static inline unsigned char *skb_pull(struct sk_buff *skb, unsigned int len) 836{ 837 return unlikely(len > skb->len) ? NULL : __skb_pull(skb, len); 838} 839 840extern unsigned char *__pskb_pull_tail(struct sk_buff *skb, int delta); 841 842static inline unsigned char *__pskb_pull(struct sk_buff *skb, unsigned int len) 843{ 844 if (len > skb_headlen(skb) && 845 !__pskb_pull_tail(skb, len-skb_headlen(skb))) 846 return NULL; 847 skb->len -= len; 848 return skb->data += len; 849} 850 851static inline unsigned char *pskb_pull(struct sk_buff *skb, unsigned int len) 852{ 853 return unlikely(len > skb->len) ? NULL : __pskb_pull(skb, len); 854} 855 856static inline int pskb_may_pull(struct sk_buff *skb, unsigned int len) 857{ 858 if (likely(len <= skb_headlen(skb))) 859 return 1; 860 if (unlikely(len > skb->len)) 861 return 0; 862 return __pskb_pull_tail(skb, len-skb_headlen(skb)) != NULL; 863} 864 865/** 866 * skb_headroom - bytes at buffer head 867 * @skb: buffer to check 868 * 869 * Return the number of bytes of free space at the head of an &sk_buff. 870 */ 871static inline int skb_headroom(const struct sk_buff *skb) 872{ 873 return skb->data - skb->head; 874} 875 876/** 877 * skb_tailroom - bytes at buffer end 878 * @skb: buffer to check 879 * 880 * Return the number of bytes of free space at the tail of an sk_buff 881 */ 882static inline int skb_tailroom(const struct sk_buff *skb) 883{ 884 return skb_is_nonlinear(skb) ? 0 : skb->end - skb->tail; 885} 886 887/** 888 * skb_reserve - adjust headroom 889 * @skb: buffer to alter 890 * @len: bytes to move 891 * 892 * Increase the headroom of an empty &sk_buff by reducing the tail 893 * room. This is only allowed for an empty buffer. 894 */ 895static inline void skb_reserve(struct sk_buff *skb, unsigned int len) 896{ 897 skb->data += len; 898 skb->tail += len; 899} 900 901/* 902 * CPUs often take a performance hit when accessing unaligned memory 903 * locations. The actual performance hit varies, it can be small if the 904 * hardware handles it or large if we have to take an exception and fix it 905 * in software. 906 * 907 * Since an ethernet header is 14 bytes network drivers often end up with 908 * the IP header at an unaligned offset. The IP header can be aligned by 909 * shifting the start of the packet by 2 bytes. Drivers should do this 910 * with: 911 * 912 * skb_reserve(NET_IP_ALIGN); 913 * 914 * The downside to this alignment of the IP header is that the DMA is now 915 * unaligned. On some architectures the cost of an unaligned DMA is high 916 * and this cost outweighs the gains made by aligning the IP header. 917 * 918 * Since this trade off varies between architectures, we allow NET_IP_ALIGN 919 * to be overridden. 920 */ 921#ifndef NET_IP_ALIGN 922#define NET_IP_ALIGN 2 923#endif 924 925extern int ___pskb_trim(struct sk_buff *skb, unsigned int len, int realloc); 926 927static inline void __skb_trim(struct sk_buff *skb, unsigned int len) 928{ 929 if (!skb->data_len) { 930 skb->len = len; 931 skb->tail = skb->data + len; 932 } else 933 ___pskb_trim(skb, len, 0); 934} 935 936/** 937 * skb_trim - remove end from a buffer 938 * @skb: buffer to alter 939 * @len: new length 940 * 941 * Cut the length of a buffer down by removing data from the tail. If 942 * the buffer is already under the length specified it is not modified. 943 */ 944static inline void skb_trim(struct sk_buff *skb, unsigned int len) 945{ 946 if (skb->len > len) 947 __skb_trim(skb, len); 948} 949 950 951static inline int __pskb_trim(struct sk_buff *skb, unsigned int len) 952{ 953 if (!skb->data_len) { 954 skb->len = len; 955 skb->tail = skb->data+len; 956 return 0; 957 } 958 return ___pskb_trim(skb, len, 1); 959} 960 961static inline int pskb_trim(struct sk_buff *skb, unsigned int len) 962{ 963 return (len < skb->len) ? __pskb_trim(skb, len) : 0; 964} 965 966/** 967 * skb_orphan - orphan a buffer 968 * @skb: buffer to orphan 969 * 970 * If a buffer currently has an owner then we call the owner's 971 * destructor function and make the @skb unowned. The buffer continues 972 * to exist but is no longer charged to its former owner. 973 */ 974static inline void skb_orphan(struct sk_buff *skb) 975{ 976 if (skb->destructor) 977 skb->destructor(skb); 978 skb->destructor = NULL; 979 skb->sk = NULL; 980} 981 982/** 983 * __skb_queue_purge - empty a list 984 * @list: list to empty 985 * 986 * Delete all buffers on an &sk_buff list. Each buffer is removed from 987 * the list and one reference dropped. This function does not take the 988 * list lock and the caller must hold the relevant locks to use it. 989 */ 990extern void skb_queue_purge(struct sk_buff_head *list); 991static inline void __skb_queue_purge(struct sk_buff_head *list) 992{ 993 struct sk_buff *skb; 994 while ((skb = __skb_dequeue(list)) != NULL) 995 kfree_skb(skb); 996} 997 998#ifndef CONFIG_HAVE_ARCH_DEV_ALLOC_SKB 999/** 1000 * __dev_alloc_skb - allocate an skbuff for sending 1001 * @length: length to allocate 1002 * @gfp_mask: get_free_pages mask, passed to alloc_skb 1003 * 1004 * Allocate a new &sk_buff and assign it a usage count of one. The 1005 * buffer has unspecified headroom built in. Users should allocate 1006 * the headroom they think they need without accounting for the 1007 * built in space. The built in space is used for optimisations. 1008 * 1009 * %NULL is returned in there is no free memory. 1010 */ 1011static inline struct sk_buff *__dev_alloc_skb(unsigned int length, 1012 unsigned int __nocast gfp_mask) 1013{ 1014 struct sk_buff *skb = alloc_skb(length + 16, gfp_mask); 1015 if (likely(skb)) 1016 skb_reserve(skb, 16); 1017 return skb; 1018} 1019#else 1020extern struct sk_buff *__dev_alloc_skb(unsigned int length, int gfp_mask); 1021#endif 1022 1023/** 1024 * dev_alloc_skb - allocate an skbuff for sending 1025 * @length: length to allocate 1026 * 1027 * Allocate a new &sk_buff and assign it a usage count of one. The 1028 * buffer has unspecified headroom built in. Users should allocate 1029 * the headroom they think they need without accounting for the 1030 * built in space. The built in space is used for optimisations. 1031 * 1032 * %NULL is returned in there is no free memory. Although this function 1033 * allocates memory it can be called from an interrupt. 1034 */ 1035static inline struct sk_buff *dev_alloc_skb(unsigned int length) 1036{ 1037 return __dev_alloc_skb(length, GFP_ATOMIC); 1038} 1039 1040/** 1041 * skb_cow - copy header of skb when it is required 1042 * @skb: buffer to cow 1043 * @headroom: needed headroom 1044 * 1045 * If the skb passed lacks sufficient headroom or its data part 1046 * is shared, data is reallocated. If reallocation fails, an error 1047 * is returned and original skb is not changed. 1048 * 1049 * The result is skb with writable area skb->head...skb->tail 1050 * and at least @headroom of space at head. 1051 */ 1052static inline int skb_cow(struct sk_buff *skb, unsigned int headroom) 1053{ 1054 int delta = (headroom > 16 ? headroom : 16) - skb_headroom(skb); 1055 1056 if (delta < 0) 1057 delta = 0; 1058 1059 if (delta || skb_cloned(skb)) 1060 return pskb_expand_head(skb, (delta + 15) & ~15, 0, GFP_ATOMIC); 1061 return 0; 1062} 1063 1064/** 1065 * skb_padto - pad an skbuff up to a minimal size 1066 * @skb: buffer to pad 1067 * @len: minimal length 1068 * 1069 * Pads up a buffer to ensure the trailing bytes exist and are 1070 * blanked. If the buffer already contains sufficient data it 1071 * is untouched. Returns the buffer, which may be a replacement 1072 * for the original, or NULL for out of memory - in which case 1073 * the original buffer is still freed. 1074 */ 1075 1076static inline struct sk_buff *skb_padto(struct sk_buff *skb, unsigned int len) 1077{ 1078 unsigned int size = skb->len; 1079 if (likely(size >= len)) 1080 return skb; 1081 return skb_pad(skb, len-size); 1082} 1083 1084static inline int skb_add_data(struct sk_buff *skb, 1085 char __user *from, int copy) 1086{ 1087 const int off = skb->len; 1088 1089 if (skb->ip_summed == CHECKSUM_NONE) { 1090 int err = 0; 1091 unsigned int csum = csum_and_copy_from_user(from, 1092 skb_put(skb, copy), 1093 copy, 0, &err); 1094 if (!err) { 1095 skb->csum = csum_block_add(skb->csum, csum, off); 1096 return 0; 1097 } 1098 } else if (!copy_from_user(skb_put(skb, copy), from, copy)) 1099 return 0; 1100 1101 __skb_trim(skb, off); 1102 return -EFAULT; 1103} 1104 1105static inline int skb_can_coalesce(struct sk_buff *skb, int i, 1106 struct page *page, int off) 1107{ 1108 if (i) { 1109 struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i - 1]; 1110 1111 return page == frag->page && 1112 off == frag->page_offset + frag->size; 1113 } 1114 return 0; 1115} 1116 1117/** 1118 * skb_linearize - convert paged skb to linear one 1119 * @skb: buffer to linarize 1120 * @gfp: allocation mode 1121 * 1122 * If there is no free memory -ENOMEM is returned, otherwise zero 1123 * is returned and the old skb data released. 1124 */ 1125extern int __skb_linearize(struct sk_buff *skb, unsigned int __nocast gfp); 1126static inline int skb_linearize(struct sk_buff *skb, unsigned int __nocast gfp) 1127{ 1128 return __skb_linearize(skb, gfp); 1129} 1130 1131/** 1132 * skb_postpull_rcsum - update checksum for received skb after pull 1133 * @skb: buffer to update 1134 * @start: start of data before pull 1135 * @len: length of data pulled 1136 * 1137 * After doing a pull on a received packet, you need to call this to 1138 * update the CHECKSUM_HW checksum, or set ip_summed to CHECKSUM_NONE 1139 * so that it can be recomputed from scratch. 1140 */ 1141 1142static inline void skb_postpull_rcsum(struct sk_buff *skb, 1143 const void *start, int len) 1144{ 1145 if (skb->ip_summed == CHECKSUM_HW) 1146 skb->csum = csum_sub(skb->csum, csum_partial(start, len, 0)); 1147} 1148 1149/** 1150 * pskb_trim_rcsum - trim received skb and update checksum 1151 * @skb: buffer to trim 1152 * @len: new length 1153 * 1154 * This is exactly the same as pskb_trim except that it ensures the 1155 * checksum of received packets are still valid after the operation. 1156 */ 1157 1158static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len) 1159{ 1160 if (len >= skb->len) 1161 return 0; 1162 if (skb->ip_summed == CHECKSUM_HW) 1163 skb->ip_summed = CHECKSUM_NONE; 1164 return __pskb_trim(skb, len); 1165} 1166 1167static inline void *kmap_skb_frag(const skb_frag_t *frag) 1168{ 1169#ifdef CONFIG_HIGHMEM 1170 BUG_ON(in_irq()); 1171 1172 local_bh_disable(); 1173#endif 1174 return kmap_atomic(frag->page, KM_SKB_DATA_SOFTIRQ); 1175} 1176 1177static inline void kunmap_skb_frag(void *vaddr) 1178{ 1179 kunmap_atomic(vaddr, KM_SKB_DATA_SOFTIRQ); 1180#ifdef CONFIG_HIGHMEM 1181 local_bh_enable(); 1182#endif 1183} 1184 1185#define skb_queue_walk(queue, skb) \ 1186 for (skb = (queue)->next; \ 1187 prefetch(skb->next), (skb != (struct sk_buff *)(queue)); \ 1188 skb = skb->next) 1189 1190 1191extern struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, 1192 int noblock, int *err); 1193extern unsigned int datagram_poll(struct file *file, struct socket *sock, 1194 struct poll_table_struct *wait); 1195extern int skb_copy_datagram_iovec(const struct sk_buff *from, 1196 int offset, struct iovec *to, 1197 int size); 1198extern int skb_copy_and_csum_datagram_iovec(const 1199 struct sk_buff *skb, 1200 int hlen, 1201 struct iovec *iov); 1202extern void skb_free_datagram(struct sock *sk, struct sk_buff *skb); 1203extern unsigned int skb_checksum(const struct sk_buff *skb, int offset, 1204 int len, unsigned int csum); 1205extern int skb_copy_bits(const struct sk_buff *skb, int offset, 1206 void *to, int len); 1207extern int skb_store_bits(const struct sk_buff *skb, int offset, 1208 void *from, int len); 1209extern unsigned int skb_copy_and_csum_bits(const struct sk_buff *skb, 1210 int offset, u8 *to, int len, 1211 unsigned int csum); 1212extern void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to); 1213extern void skb_split(struct sk_buff *skb, 1214 struct sk_buff *skb1, const u32 len); 1215 1216static inline void *skb_header_pointer(const struct sk_buff *skb, int offset, 1217 int len, void *buffer) 1218{ 1219 int hlen = skb_headlen(skb); 1220 1221 if (hlen - offset >= len) 1222 return skb->data + offset; 1223 1224 if (skb_copy_bits(skb, offset, buffer, len) < 0) 1225 return NULL; 1226 1227 return buffer; 1228} 1229 1230extern void skb_init(void); 1231extern void skb_add_mtu(int mtu); 1232 1233#ifdef CONFIG_NETFILTER 1234static inline void nf_conntrack_put(struct nf_conntrack *nfct) 1235{ 1236 if (nfct && atomic_dec_and_test(&nfct->use)) 1237 nfct->destroy(nfct); 1238} 1239static inline void nf_conntrack_get(struct nf_conntrack *nfct) 1240{ 1241 if (nfct) 1242 atomic_inc(&nfct->use); 1243} 1244static inline void nf_reset(struct sk_buff *skb) 1245{ 1246 nf_conntrack_put(skb->nfct); 1247 skb->nfct = NULL; 1248} 1249 1250#ifdef CONFIG_BRIDGE_NETFILTER 1251static inline void nf_bridge_put(struct nf_bridge_info *nf_bridge) 1252{ 1253 if (nf_bridge && atomic_dec_and_test(&nf_bridge->use)) 1254 kfree(nf_bridge); 1255} 1256static inline void nf_bridge_get(struct nf_bridge_info *nf_bridge) 1257{ 1258 if (nf_bridge) 1259 atomic_inc(&nf_bridge->use); 1260} 1261#endif /* CONFIG_BRIDGE_NETFILTER */ 1262#else /* CONFIG_NETFILTER */ 1263static inline void nf_reset(struct sk_buff *skb) {} 1264#endif /* CONFIG_NETFILTER */ 1265 1266#endif /* __KERNEL__ */ 1267#endif /* _LINUX_SKBUFF_H */