skbuff.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:30k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  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. #include <linux/config.h>
  17. #include <linux/kernel.h>
  18. #include <linux/sched.h>
  19. #include <linux/time.h>
  20. #include <linux/cache.h>
  21. #include <asm/atomic.h>
  22. #include <asm/types.h>
  23. #include <linux/spinlock.h>
  24. #include <linux/mm.h>
  25. #include <linux/highmem.h>
  26. #define HAVE_ALLOC_SKB /* For the drivers to know */
  27. #define HAVE_ALIGNABLE_SKB /* Ditto 8)    */
  28. #define SLAB_SKB  /* Slabified skbuffs     */
  29. #define CHECKSUM_NONE 0
  30. #define CHECKSUM_HW 1
  31. #define CHECKSUM_UNNECESSARY 2
  32. #define SKB_DATA_ALIGN(X) (((X) + (SMP_CACHE_BYTES-1)) & ~(SMP_CACHE_BYTES-1))
  33. #define SKB_MAX_ORDER(X,ORDER) (((PAGE_SIZE<<(ORDER)) - (X) - sizeof(struct skb_shared_info))&~(SMP_CACHE_BYTES-1))
  34. #define SKB_MAX_HEAD(X) (SKB_MAX_ORDER((X),0))
  35. #define SKB_MAX_ALLOC (SKB_MAX_ORDER(0,2))
  36. /* A. Checksumming of received packets by device.
  37.  *
  38.  * NONE: device failed to checksum this packet.
  39.  * skb->csum is undefined.
  40.  *
  41.  * UNNECESSARY: device parsed packet and wouldbe verified checksum.
  42.  * skb->csum is undefined.
  43.  *       It is bad option, but, unfortunately, many of vendors do this.
  44.  *       Apparently with secret goal to sell you new device, when you
  45.  *       will add new protocol to your host. F.e. IPv6. 8)
  46.  *
  47.  * HW: the most generic way. Device supplied checksum of _all_
  48.  *     the packet as seen by netif_rx in skb->csum.
  49.  *     NOTE: Even if device supports only some protocols, but
  50.  *     is able to produce some skb->csum, it MUST use HW,
  51.  *     not UNNECESSARY.
  52.  *
  53.  * B. Checksumming on output.
  54.  *
  55.  * NONE: skb is checksummed by protocol or csum is not required.
  56.  *
  57.  * HW: device is required to csum packet as seen by hard_start_xmit
  58.  * from skb->h.raw to the end and to record the checksum
  59.  * at skb->h.raw+skb->csum.
  60.  *
  61.  * Device must show its capabilities in dev->features, set
  62.  * at device setup time.
  63.  * NETIF_F_HW_CSUM - it is clever device, it is able to checksum
  64.  *   everything.
  65.  * NETIF_F_NO_CSUM - loopback or reliable single hop media.
  66.  * NETIF_F_IP_CSUM - device is dumb. It is able to csum only
  67.  *   TCP/UDP over IPv4. Sigh. Vendors like this
  68.  *   way by an unknown reason. Though, see comment above
  69.  *   about CHECKSUM_UNNECESSARY. 8)
  70.  *
  71.  * Any questions? No questions, good.  --ANK
  72.  */
  73. #ifdef __i386__
  74. #define NET_CALLER(arg) (*(((void**)&arg)-1))
  75. #else
  76. #define NET_CALLER(arg) __builtin_return_address(0)
  77. #endif
  78. #ifdef CONFIG_NETFILTER
  79. struct nf_conntrack {
  80. atomic_t use;
  81. void (*destroy)(struct nf_conntrack *);
  82. };
  83. struct nf_ct_info {
  84. struct nf_conntrack *master;
  85. };
  86. #endif
  87. struct sk_buff_head {
  88. /* These two members must be first. */
  89. struct sk_buff * next;
  90. struct sk_buff * prev;
  91. __u32 qlen;
  92. spinlock_t lock;
  93. };
  94. struct sk_buff;
  95. #define MAX_SKB_FRAGS 6
  96. typedef struct skb_frag_struct skb_frag_t;
  97. struct skb_frag_struct
  98. {
  99. struct page *page;
  100. __u16 page_offset;
  101. __u16 size;
  102. };
  103. /* This data is invariant across clones and lives at
  104.  * the end of the header data, ie. at skb->end.
  105.  */
  106. struct skb_shared_info {
  107. atomic_t dataref;
  108. unsigned int nr_frags;
  109. struct sk_buff *frag_list;
  110. skb_frag_t frags[MAX_SKB_FRAGS];
  111. };
  112. struct sk_buff {
  113. /* These two members must be first. */
  114. struct sk_buff * next; /* Next buffer in list  */
  115. struct sk_buff * prev; /* Previous buffer in list  */
  116. struct sk_buff_head * list; /* List we are on */
  117. struct sock *sk; /* Socket we are owned by  */
  118. struct timeval stamp; /* Time we arrived */
  119. struct net_device *dev; /* Device we arrived on/are leaving by */
  120. /* Transport layer header */
  121. union
  122. {
  123. struct tcphdr *th;
  124. struct udphdr *uh;
  125. struct icmphdr *icmph;
  126. struct igmphdr *igmph;
  127. struct iphdr *ipiph;
  128. struct spxhdr *spxh;
  129. unsigned char *raw;
  130. } h;
  131. /* Network layer header */
  132. union
  133. {
  134. struct iphdr *iph;
  135. struct ipv6hdr *ipv6h;
  136. struct arphdr *arph;
  137. struct ipxhdr *ipxh;
  138. unsigned char *raw;
  139. } nh;
  140.   
  141. /* Link layer header */
  142. union 
  143. {
  144.    struct ethhdr *ethernet;
  145.    unsigned char  *raw;
  146. } mac;
  147. struct  dst_entry *dst;
  148. /* 
  149.  * This is the control buffer. It is free to use for every
  150.  * layer. Please put your private variables there. If you
  151.  * want to keep them across layers you have to do a skb_clone()
  152.  * first. This is owned by whoever has the skb queued ATM.
  153.  */ 
  154. char cb[48];  
  155. unsigned int  len; /* Length of actual data */
  156.   unsigned int  data_len;
  157. unsigned int csum; /* Checksum  */
  158. unsigned char  __unused, /* Dead field, may be reused */
  159. cloned,  /* head may be cloned (check refcnt to be sure). */
  160.    pkt_type, /* Packet class */
  161.    ip_summed; /* Driver fed us an IP checksum */
  162. __u32 priority; /* Packet queueing priority */
  163. atomic_t users; /* User count - see datagram.c,tcp.c  */
  164. unsigned short protocol; /* Packet protocol from driver.  */
  165. unsigned short security; /* Security level of packet */
  166. unsigned int truesize; /* Buffer size  */
  167. unsigned char *head; /* Head of buffer  */
  168. unsigned char *data; /* Data head pointer */
  169. unsigned char *tail; /* Tail pointer */
  170. unsigned char  *end; /* End pointer */
  171. void  (*destructor)(struct sk_buff *); /* Destruct function */
  172. #ifdef CONFIG_NETFILTER
  173. /* Can be used for communication between hooks. */
  174.         unsigned long nfmark;
  175. /* Cache info */
  176. __u32 nfcache;
  177. /* Associated connection, if any */
  178. struct nf_ct_info *nfct;
  179. #ifdef CONFIG_NETFILTER_DEBUG
  180.         unsigned int nf_debug;
  181. #endif
  182. #endif /*CONFIG_NETFILTER*/
  183. #if defined(CONFIG_HIPPI)
  184. union{
  185. __u32 ifield;
  186. } private;
  187. #endif
  188. #ifdef CONFIG_NET_SCHED
  189.        __u32           tc_index;               /* traffic control index */
  190. #endif
  191. };
  192. #define SK_WMEM_MAX 65535
  193. #define SK_RMEM_MAX 65535
  194. #ifdef __KERNEL__
  195. /*
  196.  * Handling routines are only of interest to the kernel
  197.  */
  198. #include <linux/slab.h>
  199. #include <asm/system.h>
  200. extern void __kfree_skb(struct sk_buff *skb);
  201. extern struct sk_buff * alloc_skb(unsigned int size, int priority);
  202. extern void kfree_skbmem(struct sk_buff *skb);
  203. extern struct sk_buff * skb_clone(struct sk_buff *skb, int priority);
  204. extern struct sk_buff * skb_copy(const struct sk_buff *skb, int priority);
  205. extern struct sk_buff * pskb_copy(struct sk_buff *skb, int gfp_mask);
  206. extern int pskb_expand_head(struct sk_buff *skb, int nhead, int ntail, int gfp_mask);
  207. extern struct sk_buff * skb_realloc_headroom(struct sk_buff *skb, unsigned int headroom);
  208. extern struct sk_buff * skb_copy_expand(const struct sk_buff *skb, 
  209. int newheadroom,
  210. int newtailroom,
  211. int priority);
  212. #define dev_kfree_skb(a) kfree_skb(a)
  213. extern void skb_over_panic(struct sk_buff *skb, int len, void *here);
  214. extern void skb_under_panic(struct sk_buff *skb, int len, void *here);
  215. /* Internal */
  216. #define skb_shinfo(SKB) ((struct skb_shared_info *)((SKB)->end))
  217. /**
  218.  * skb_queue_empty - check if a queue is empty
  219.  * @list: queue head
  220.  *
  221.  * Returns true if the queue is empty, false otherwise.
  222.  */
  223.  
  224. static inline int skb_queue_empty(struct sk_buff_head *list)
  225. {
  226. return (list->next == (struct sk_buff *) list);
  227. }
  228. /**
  229.  * skb_get - reference buffer
  230.  * @skb: buffer to reference
  231.  *
  232.  * Makes another reference to a socket buffer and returns a pointer
  233.  * to the buffer.
  234.  */
  235.  
  236. static inline struct sk_buff *skb_get(struct sk_buff *skb)
  237. {
  238. atomic_inc(&skb->users);
  239. return skb;
  240. }
  241. /*
  242.  * If users==1, we are the only owner and are can avoid redundant
  243.  * atomic change.
  244.  */
  245.  
  246. /**
  247.  * kfree_skb - free an sk_buff
  248.  * @skb: buffer to free
  249.  *
  250.  * Drop a reference to the buffer and free it if the usage count has
  251.  * hit zero.
  252.  */
  253.  
  254. static inline void kfree_skb(struct sk_buff *skb)
  255. {
  256. if (atomic_read(&skb->users) == 1 || atomic_dec_and_test(&skb->users))
  257. __kfree_skb(skb);
  258. }
  259. /* Use this if you didn't touch the skb state [for fast switching] */
  260. static inline void kfree_skb_fast(struct sk_buff *skb)
  261. {
  262. if (atomic_read(&skb->users) == 1 || atomic_dec_and_test(&skb->users))
  263. kfree_skbmem(skb);
  264. }
  265. /**
  266.  * skb_cloned - is the buffer a clone
  267.  * @skb: buffer to check
  268.  *
  269.  * Returns true if the buffer was generated with skb_clone() and is
  270.  * one of multiple shared copies of the buffer. Cloned buffers are
  271.  * shared data so must not be written to under normal circumstances.
  272.  */
  273. static inline int skb_cloned(struct sk_buff *skb)
  274. {
  275. return skb->cloned && atomic_read(&skb_shinfo(skb)->dataref) != 1;
  276. }
  277. /**
  278.  * skb_shared - is the buffer shared
  279.  * @skb: buffer to check
  280.  *
  281.  * Returns true if more than one person has a reference to this
  282.  * buffer.
  283.  */
  284.  
  285. static inline int skb_shared(struct sk_buff *skb)
  286. {
  287. return (atomic_read(&skb->users) != 1);
  288. }
  289. /** 
  290.  * skb_share_check - check if buffer is shared and if so clone it
  291.  * @skb: buffer to check
  292.  * @pri: priority for memory allocation
  293.  *
  294.  * If the buffer is shared the buffer is cloned and the old copy
  295.  * drops a reference. A new clone with a single reference is returned.
  296.  * If the buffer is not shared the original buffer is returned. When
  297.  * being called from interrupt status or with spinlocks held pri must
  298.  * be GFP_ATOMIC.
  299.  *
  300.  * NULL is returned on a memory allocation failure.
  301.  */
  302.  
  303. static inline struct sk_buff *skb_share_check(struct sk_buff *skb, int pri)
  304. {
  305. if (skb_shared(skb)) {
  306. struct sk_buff *nskb;
  307. nskb = skb_clone(skb, pri);
  308. kfree_skb(skb);
  309. return nskb;
  310. }
  311. return skb;
  312. }
  313. /*
  314.  * Copy shared buffers into a new sk_buff. We effectively do COW on
  315.  * packets to handle cases where we have a local reader and forward
  316.  * and a couple of other messy ones. The normal one is tcpdumping
  317.  * a packet thats being forwarded.
  318.  */
  319.  
  320. /**
  321.  * skb_unshare - make a copy of a shared buffer
  322.  * @skb: buffer to check
  323.  * @pri: priority for memory allocation
  324.  *
  325.  * If the socket buffer is a clone then this function creates a new
  326.  * copy of the data, drops a reference count on the old copy and returns
  327.  * the new copy with the reference count at 1. If the buffer is not a clone
  328.  * the original buffer is returned. When called with a spinlock held or
  329.  * from interrupt state @pri must be %GFP_ATOMIC
  330.  *
  331.  * %NULL is returned on a memory allocation failure.
  332.  */
  333.  
  334. static inline struct sk_buff *skb_unshare(struct sk_buff *skb, int pri)
  335. {
  336. struct sk_buff *nskb;
  337. if(!skb_cloned(skb))
  338. return skb;
  339. nskb=skb_copy(skb, pri);
  340. kfree_skb(skb); /* Free our shared copy */
  341. return nskb;
  342. }
  343. /**
  344.  * skb_peek
  345.  * @list_: list to peek at
  346.  *
  347.  * Peek an &sk_buff. Unlike most other operations you _MUST_
  348.  * be careful with this one. A peek leaves the buffer on the
  349.  * list and someone else may run off with it. You must hold
  350.  * the appropriate locks or have a private queue to do this.
  351.  *
  352.  * Returns %NULL for an empty list or a pointer to the head element.
  353.  * The reference count is not incremented and the reference is therefore
  354.  * volatile. Use with caution.
  355.  */
  356.  
  357. static inline struct sk_buff *skb_peek(struct sk_buff_head *list_)
  358. {
  359. struct sk_buff *list = ((struct sk_buff *)list_)->next;
  360. if (list == (struct sk_buff *)list_)
  361. list = NULL;
  362. return list;
  363. }
  364. /**
  365.  * skb_peek_tail
  366.  * @list_: list to peek at
  367.  *
  368.  * Peek an &sk_buff. Unlike most other operations you _MUST_
  369.  * be careful with this one. A peek leaves the buffer on the
  370.  * list and someone else may run off with it. You must hold
  371.  * the appropriate locks or have a private queue to do this.
  372.  *
  373.  * Returns %NULL for an empty list or a pointer to the tail element.
  374.  * The reference count is not incremented and the reference is therefore
  375.  * volatile. Use with caution.
  376.  */
  377. static inline struct sk_buff *skb_peek_tail(struct sk_buff_head *list_)
  378. {
  379. struct sk_buff *list = ((struct sk_buff *)list_)->prev;
  380. if (list == (struct sk_buff *)list_)
  381. list = NULL;
  382. return list;
  383. }
  384. /**
  385.  * skb_queue_len - get queue length
  386.  * @list_: list to measure
  387.  *
  388.  * Return the length of an &sk_buff queue. 
  389.  */
  390.  
  391. static inline __u32 skb_queue_len(struct sk_buff_head *list_)
  392. {
  393. return(list_->qlen);
  394. }
  395. static inline void skb_queue_head_init(struct sk_buff_head *list)
  396. {
  397. spin_lock_init(&list->lock);
  398. list->prev = (struct sk_buff *)list;
  399. list->next = (struct sk_buff *)list;
  400. list->qlen = 0;
  401. }
  402. /*
  403.  * Insert an sk_buff at the start of a list.
  404.  *
  405.  * The "__skb_xxxx()" functions are the non-atomic ones that
  406.  * can only be called with interrupts disabled.
  407.  */
  408. /**
  409.  * __skb_queue_head - queue a buffer at the list head
  410.  * @list: list to use
  411.  * @newsk: buffer to queue
  412.  *
  413.  * Queue a buffer at the start of a list. This function takes no locks
  414.  * and you must therefore hold required locks before calling it.
  415.  *
  416.  * A buffer cannot be placed on two lists at the same time.
  417.  */
  418.  
  419. static inline void __skb_queue_head(struct sk_buff_head *list, struct sk_buff *newsk)
  420. {
  421. struct sk_buff *prev, *next;
  422. newsk->list = list;
  423. list->qlen++;
  424. prev = (struct sk_buff *)list;
  425. next = prev->next;
  426. newsk->next = next;
  427. newsk->prev = prev;
  428. next->prev = newsk;
  429. prev->next = newsk;
  430. }
  431. /**
  432.  * skb_queue_head - queue a buffer at the list head
  433.  * @list: list to use
  434.  * @newsk: buffer to queue
  435.  *
  436.  * Queue a buffer at the start of the list. This function takes the
  437.  * list lock and can be used safely with other locking &sk_buff functions
  438.  * safely.
  439.  *
  440.  * A buffer cannot be placed on two lists at the same time.
  441.  */
  442. static inline void skb_queue_head(struct sk_buff_head *list, struct sk_buff *newsk)
  443. {
  444. unsigned long flags;
  445. spin_lock_irqsave(&list->lock, flags);
  446. __skb_queue_head(list, newsk);
  447. spin_unlock_irqrestore(&list->lock, flags);
  448. }
  449. /**
  450.  * __skb_queue_tail - queue a buffer at the list tail
  451.  * @list: list to use
  452.  * @newsk: buffer to queue
  453.  *
  454.  * Queue a buffer at the end of a list. This function takes no locks
  455.  * and you must therefore hold required locks before calling it.
  456.  *
  457.  * A buffer cannot be placed on two lists at the same time.
  458.  */
  459.  
  460. static inline void __skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk)
  461. {
  462. struct sk_buff *prev, *next;
  463. newsk->list = list;
  464. list->qlen++;
  465. next = (struct sk_buff *)list;
  466. prev = next->prev;
  467. newsk->next = next;
  468. newsk->prev = prev;
  469. next->prev = newsk;
  470. prev->next = newsk;
  471. }
  472. /**
  473.  * skb_queue_tail - queue a buffer at the list tail
  474.  * @list: list to use
  475.  * @newsk: buffer to queue
  476.  *
  477.  * Queue a buffer at the tail of the list. This function takes the
  478.  * list lock and can be used safely with other locking &sk_buff functions
  479.  * safely.
  480.  *
  481.  * A buffer cannot be placed on two lists at the same time.
  482.  */
  483. static inline void skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk)
  484. {
  485. unsigned long flags;
  486. spin_lock_irqsave(&list->lock, flags);
  487. __skb_queue_tail(list, newsk);
  488. spin_unlock_irqrestore(&list->lock, flags);
  489. }
  490. /**
  491.  * __skb_dequeue - remove from the head of the queue
  492.  * @list: list to dequeue from
  493.  *
  494.  * Remove the head of the list. This function does not take any locks
  495.  * so must be used with appropriate locks held only. The head item is
  496.  * returned or %NULL if the list is empty.
  497.  */
  498. static inline struct sk_buff *__skb_dequeue(struct sk_buff_head *list)
  499. {
  500. struct sk_buff *next, *prev, *result;
  501. prev = (struct sk_buff *) list;
  502. next = prev->next;
  503. result = NULL;
  504. if (next != prev) {
  505. result = next;
  506. next = next->next;
  507. list->qlen--;
  508. next->prev = prev;
  509. prev->next = next;
  510. result->next = NULL;
  511. result->prev = NULL;
  512. result->list = NULL;
  513. }
  514. return result;
  515. }
  516. /**
  517.  * skb_dequeue - remove from the head of the queue
  518.  * @list: list to dequeue from
  519.  *
  520.  * Remove the head of the list. The list lock is taken so the function
  521.  * may be used safely with other locking list functions. The head item is
  522.  * returned or %NULL if the list is empty.
  523.  */
  524. static inline struct sk_buff *skb_dequeue(struct sk_buff_head *list)
  525. {
  526. long flags;
  527. struct sk_buff *result;
  528. spin_lock_irqsave(&list->lock, flags);
  529. result = __skb_dequeue(list);
  530. spin_unlock_irqrestore(&list->lock, flags);
  531. return result;
  532. }
  533. /*
  534.  * Insert a packet on a list.
  535.  */
  536. static inline void __skb_insert(struct sk_buff *newsk,
  537. struct sk_buff * prev, struct sk_buff *next,
  538. struct sk_buff_head * list)
  539. {
  540. newsk->next = next;
  541. newsk->prev = prev;
  542. next->prev = newsk;
  543. prev->next = newsk;
  544. newsk->list = list;
  545. list->qlen++;
  546. }
  547. /**
  548.  * skb_insert - insert a buffer
  549.  * @old: buffer to insert before
  550.  * @newsk: buffer to insert
  551.  *
  552.  * Place a packet before a given packet in a list. The list locks are taken
  553.  * and this function is atomic with respect to other list locked calls
  554.  * A buffer cannot be placed on two lists at the same time.
  555.  */
  556. static inline void skb_insert(struct sk_buff *old, struct sk_buff *newsk)
  557. {
  558. unsigned long flags;
  559. spin_lock_irqsave(&old->list->lock, flags);
  560. __skb_insert(newsk, old->prev, old, old->list);
  561. spin_unlock_irqrestore(&old->list->lock, flags);
  562. }
  563. /*
  564.  * Place a packet after a given packet in a list.
  565.  */
  566. static inline void __skb_append(struct sk_buff *old, struct sk_buff *newsk)
  567. {
  568. __skb_insert(newsk, old, old->next, old->list);
  569. }
  570. /**
  571.  * skb_append - append a buffer
  572.  * @old: buffer to insert after
  573.  * @newsk: buffer to insert
  574.  *
  575.  * Place a packet after a given packet in a list. The list locks are taken
  576.  * and this function is atomic with respect to other list locked calls.
  577.  * A buffer cannot be placed on two lists at the same time.
  578.  */
  579. static inline void skb_append(struct sk_buff *old, struct sk_buff *newsk)
  580. {
  581. unsigned long flags;
  582. spin_lock_irqsave(&old->list->lock, flags);
  583. __skb_append(old, newsk);
  584. spin_unlock_irqrestore(&old->list->lock, flags);
  585. }
  586. /*
  587.  * remove sk_buff from list. _Must_ be called atomically, and with
  588.  * the list known..
  589.  */
  590.  
  591. static inline void __skb_unlink(struct sk_buff *skb, struct sk_buff_head *list)
  592. {
  593. struct sk_buff * next, * prev;
  594. list->qlen--;
  595. next = skb->next;
  596. prev = skb->prev;
  597. skb->next = NULL;
  598. skb->prev = NULL;
  599. skb->list = NULL;
  600. next->prev = prev;
  601. prev->next = next;
  602. }
  603. /**
  604.  * skb_unlink - remove a buffer from a list
  605.  * @skb: buffer to remove
  606.  *
  607.  * Place a packet after a given packet in a list. The list locks are taken
  608.  * and this function is atomic with respect to other list locked calls
  609.  *
  610.  * Works even without knowing the list it is sitting on, which can be 
  611.  * handy at times. It also means that THE LIST MUST EXIST when you 
  612.  * unlink. Thus a list must have its contents unlinked before it is
  613.  * destroyed.
  614.  */
  615. static inline void skb_unlink(struct sk_buff *skb)
  616. {
  617. struct sk_buff_head *list = skb->list;
  618. if(list) {
  619. unsigned long flags;
  620. spin_lock_irqsave(&list->lock, flags);
  621. if(skb->list == list)
  622. __skb_unlink(skb, skb->list);
  623. spin_unlock_irqrestore(&list->lock, flags);
  624. }
  625. }
  626. /* XXX: more streamlined implementation */
  627. /**
  628.  * __skb_dequeue_tail - remove from the tail of the queue
  629.  * @list: list to dequeue from
  630.  *
  631.  * Remove the tail of the list. This function does not take any locks
  632.  * so must be used with appropriate locks held only. The tail item is
  633.  * returned or %NULL if the list is empty.
  634.  */
  635. static inline struct sk_buff *__skb_dequeue_tail(struct sk_buff_head *list)
  636. {
  637. struct sk_buff *skb = skb_peek_tail(list); 
  638. if (skb)
  639. __skb_unlink(skb, list);
  640. return skb;
  641. }
  642. /**
  643.  * skb_dequeue - remove from the head of the queue
  644.  * @list: list to dequeue from
  645.  *
  646.  * Remove the head of the list. The list lock is taken so the function
  647.  * may be used safely with other locking list functions. The tail item is
  648.  * returned or %NULL if the list is empty.
  649.  */
  650. static inline struct sk_buff *skb_dequeue_tail(struct sk_buff_head *list)
  651. {
  652. long flags;
  653. struct sk_buff *result;
  654. spin_lock_irqsave(&list->lock, flags);
  655. result = __skb_dequeue_tail(list);
  656. spin_unlock_irqrestore(&list->lock, flags);
  657. return result;
  658. }
  659. static inline int skb_is_nonlinear(const struct sk_buff *skb)
  660. {
  661. return skb->data_len;
  662. }
  663. static inline int skb_headlen(const struct sk_buff *skb)
  664. {
  665. return skb->len - skb->data_len;
  666. }
  667. #define SKB_PAGE_ASSERT(skb) do { if (skb_shinfo(skb)->nr_frags) BUG(); } while (0)
  668. #define SKB_FRAG_ASSERT(skb) do { if (skb_shinfo(skb)->frag_list) BUG(); } while (0)
  669. #define SKB_LINEAR_ASSERT(skb) do { if (skb_is_nonlinear(skb)) BUG(); } while (0)
  670. /*
  671.  * Add data to an sk_buff
  672.  */
  673.  
  674. static inline unsigned char *__skb_put(struct sk_buff *skb, unsigned int len)
  675. {
  676. unsigned char *tmp=skb->tail;
  677. SKB_LINEAR_ASSERT(skb);
  678. skb->tail+=len;
  679. skb->len+=len;
  680. return tmp;
  681. }
  682. /**
  683.  * skb_put - add data to a buffer
  684.  * @skb: buffer to use 
  685.  * @len: amount of data to add
  686.  *
  687.  * This function extends the used data area of the buffer. If this would
  688.  * exceed the total buffer size the kernel will panic. A pointer to the
  689.  * first byte of the extra data is returned.
  690.  */
  691.  
  692. static inline unsigned char *skb_put(struct sk_buff *skb, unsigned int len)
  693. {
  694. unsigned char *tmp=skb->tail;
  695. SKB_LINEAR_ASSERT(skb);
  696. skb->tail+=len;
  697. skb->len+=len;
  698. if(skb->tail>skb->end) {
  699. skb_over_panic(skb, len, current_text_addr());
  700. }
  701. return tmp;
  702. }
  703. static inline unsigned char *__skb_push(struct sk_buff *skb, unsigned int len)
  704. {
  705. skb->data-=len;
  706. skb->len+=len;
  707. return skb->data;
  708. }
  709. /**
  710.  * skb_push - add data to the start of a buffer
  711.  * @skb: buffer to use 
  712.  * @len: amount of data to add
  713.  *
  714.  * This function extends the used data area of the buffer at the buffer
  715.  * start. If this would exceed the total buffer headroom the kernel will
  716.  * panic. A pointer to the first byte of the extra data is returned.
  717.  */
  718. static inline unsigned char *skb_push(struct sk_buff *skb, unsigned int len)
  719. {
  720. skb->data-=len;
  721. skb->len+=len;
  722. if(skb->data<skb->head) {
  723. skb_under_panic(skb, len, current_text_addr());
  724. }
  725. return skb->data;
  726. }
  727. static inline char *__skb_pull(struct sk_buff *skb, unsigned int len)
  728. {
  729. skb->len-=len;
  730. if (skb->len < skb->data_len)
  731. BUG();
  732. return  skb->data+=len;
  733. }
  734. /**
  735.  * skb_pull - remove data from the start of a buffer
  736.  * @skb: buffer to use 
  737.  * @len: amount of data to remove
  738.  *
  739.  * This function removes data from the start of a buffer, returning
  740.  * the memory to the headroom. A pointer to the next data in the buffer
  741.  * is returned. Once the data has been pulled future pushes will overwrite
  742.  * the old data.
  743.  */
  744. static inline unsigned char * skb_pull(struct sk_buff *skb, unsigned int len)
  745. {
  746. if (len > skb->len)
  747. return NULL;
  748. return __skb_pull(skb,len);
  749. }
  750. extern unsigned char * __pskb_pull_tail(struct sk_buff *skb, int delta);
  751. static inline char *__pskb_pull(struct sk_buff *skb, unsigned int len)
  752. {
  753. if (len > skb_headlen(skb) &&
  754.     __pskb_pull_tail(skb, len-skb_headlen(skb)) == NULL)
  755. return NULL;
  756. skb->len -= len;
  757. return  skb->data += len;
  758. }
  759. static inline unsigned char * pskb_pull(struct sk_buff *skb, unsigned int len)
  760. {
  761. if (len > skb->len)
  762. return NULL;
  763. return __pskb_pull(skb,len);
  764. }
  765. static inline int pskb_may_pull(struct sk_buff *skb, unsigned int len)
  766. {
  767. if (len <= skb_headlen(skb))
  768. return 1;
  769. if (len > skb->len)
  770. return 0;
  771. return (__pskb_pull_tail(skb, len-skb_headlen(skb)) != NULL);
  772. }
  773. /**
  774.  * skb_headroom - bytes at buffer head
  775.  * @skb: buffer to check
  776.  *
  777.  * Return the number of bytes of free space at the head of an &sk_buff.
  778.  */
  779.  
  780. static inline int skb_headroom(const struct sk_buff *skb)
  781. {
  782. return skb->data-skb->head;
  783. }
  784. /**
  785.  * skb_tailroom - bytes at buffer end
  786.  * @skb: buffer to check
  787.  *
  788.  * Return the number of bytes of free space at the tail of an sk_buff
  789.  */
  790. static inline int skb_tailroom(const struct sk_buff *skb)
  791. {
  792. return skb_is_nonlinear(skb) ? 0 : skb->end-skb->tail;
  793. }
  794. /**
  795.  * skb_reserve - adjust headroom
  796.  * @skb: buffer to alter
  797.  * @len: bytes to move
  798.  *
  799.  * Increase the headroom of an empty &sk_buff by reducing the tail
  800.  * room. This is only allowed for an empty buffer.
  801.  */
  802. static inline void skb_reserve(struct sk_buff *skb, unsigned int len)
  803. {
  804. skb->data+=len;
  805. skb->tail+=len;
  806. }
  807. extern int ___pskb_trim(struct sk_buff *skb, unsigned int len, int realloc);
  808. static inline void __skb_trim(struct sk_buff *skb, unsigned int len)
  809. {
  810. if (!skb->data_len) {
  811. skb->len = len;
  812. skb->tail = skb->data+len;
  813. } else {
  814. ___pskb_trim(skb, len, 0);
  815. }
  816. }
  817. /**
  818.  * skb_trim - remove end from a buffer
  819.  * @skb: buffer to alter
  820.  * @len: new length
  821.  *
  822.  * Cut the length of a buffer down by removing data from the tail. If
  823.  * the buffer is already under the length specified it is not modified.
  824.  */
  825. static inline void skb_trim(struct sk_buff *skb, unsigned int len)
  826. {
  827. if (skb->len > len) {
  828. __skb_trim(skb, len);
  829. }
  830. }
  831. static inline int __pskb_trim(struct sk_buff *skb, unsigned int len)
  832. {
  833. if (!skb->data_len) {
  834. skb->len = len;
  835. skb->tail = skb->data+len;
  836. return 0;
  837. } else {
  838. return ___pskb_trim(skb, len, 1);
  839. }
  840. }
  841. static inline int pskb_trim(struct sk_buff *skb, unsigned int len)
  842. {
  843. if (len < skb->len)
  844. return __pskb_trim(skb, len);
  845. return 0;
  846. }
  847. /**
  848.  * skb_orphan - orphan a buffer
  849.  * @skb: buffer to orphan
  850.  *
  851.  * If a buffer currently has an owner then we call the owner's
  852.  * destructor function and make the @skb unowned. The buffer continues
  853.  * to exist but is no longer charged to its former owner.
  854.  */
  855. static inline void skb_orphan(struct sk_buff *skb)
  856. {
  857. if (skb->destructor)
  858. skb->destructor(skb);
  859. skb->destructor = NULL;
  860. skb->sk = NULL;
  861. }
  862. /**
  863.  * skb_purge - empty a list
  864.  * @list: list to empty
  865.  *
  866.  * Delete all buffers on an &sk_buff list. Each buffer is removed from
  867.  * the list and one reference dropped. This function takes the list
  868.  * lock and is atomic with respect to other list locking functions.
  869.  */
  870. static inline void skb_queue_purge(struct sk_buff_head *list)
  871. {
  872. struct sk_buff *skb;
  873. while ((skb=skb_dequeue(list))!=NULL)
  874. kfree_skb(skb);
  875. }
  876. /**
  877.  * __skb_purge - empty a list
  878.  * @list: list to empty
  879.  *
  880.  * Delete all buffers on an &sk_buff list. Each buffer is removed from
  881.  * the list and one reference dropped. This function does not take the
  882.  * list lock and the caller must hold the relevant locks to use it.
  883.  */
  884. static inline void __skb_queue_purge(struct sk_buff_head *list)
  885. {
  886. struct sk_buff *skb;
  887. while ((skb=__skb_dequeue(list))!=NULL)
  888. kfree_skb(skb);
  889. }
  890. /**
  891.  * __dev_alloc_skb - allocate an skbuff for sending
  892.  * @length: length to allocate
  893.  * @gfp_mask: get_free_pages mask, passed to alloc_skb
  894.  *
  895.  * Allocate a new &sk_buff and assign it a usage count of one. The
  896.  * buffer has unspecified headroom built in. Users should allocate
  897.  * the headroom they think they need without accounting for the
  898.  * built in space. The built in space is used for optimisations.
  899.  *
  900.  * %NULL is returned in there is no free memory.
  901.  */
  902.  
  903. static inline struct sk_buff *__dev_alloc_skb(unsigned int length,
  904.       int gfp_mask)
  905. {
  906. struct sk_buff *skb;
  907. skb = alloc_skb(length+16, gfp_mask);
  908. if (skb)
  909. skb_reserve(skb,16);
  910. return skb;
  911. }
  912. /**
  913.  * dev_alloc_skb - allocate an skbuff for sending
  914.  * @length: length to allocate
  915.  *
  916.  * Allocate a new &sk_buff and assign it a usage count of one. The
  917.  * buffer has unspecified headroom built in. Users should allocate
  918.  * the headroom they think they need without accounting for the
  919.  * built in space. The built in space is used for optimisations.
  920.  *
  921.  * %NULL is returned in there is no free memory. Although this function
  922.  * allocates memory it can be called from an interrupt.
  923.  */
  924.  
  925. static inline struct sk_buff *dev_alloc_skb(unsigned int length)
  926. {
  927. return __dev_alloc_skb(length, GFP_ATOMIC);
  928. }
  929. /**
  930.  * skb_cow - copy header of skb when it is required
  931.  * @skb: buffer to cow
  932.  * @headroom: needed headroom
  933.  *
  934.  * If the skb passed lacks sufficient headroom or its data part
  935.  * is shared, data is reallocated. If reallocation fails, an error
  936.  * is returned and original skb is not changed.
  937.  *
  938.  * The result is skb with writable area skb->head...skb->tail
  939.  * and at least @headroom of space at head.
  940.  */
  941. static inline int
  942. skb_cow(struct sk_buff *skb, unsigned int headroom)
  943. {
  944. int delta = (headroom > 16 ? headroom : 16) - skb_headroom(skb);
  945. if (delta < 0)
  946. delta = 0;
  947. if (delta || skb_cloned(skb))
  948. return pskb_expand_head(skb, (delta+15)&~15, 0, GFP_ATOMIC);
  949. return 0;
  950. }
  951. /**
  952.  * skb_linearize - convert paged skb to linear one
  953.  * @skb: buffer to linarize
  954.  * @gfp: allocation mode
  955.  *
  956.  * If there is no free memory -ENOMEM is returned, otherwise zero
  957.  * is returned and the old skb data released.  */
  958. int skb_linearize(struct sk_buff *skb, int gfp);
  959. static inline void *kmap_skb_frag(const skb_frag_t *frag)
  960. {
  961. #ifdef CONFIG_HIGHMEM
  962. if (in_irq())
  963. BUG();
  964. local_bh_disable();
  965. #endif
  966. return kmap_atomic(frag->page, KM_SKB_DATA_SOFTIRQ);
  967. }
  968. static inline void kunmap_skb_frag(void *vaddr)
  969. {
  970. kunmap_atomic(vaddr, KM_SKB_DATA_SOFTIRQ);
  971. #ifdef CONFIG_HIGHMEM
  972. local_bh_enable();
  973. #endif
  974. }
  975. #define skb_queue_walk(queue, skb) 
  976. for (skb = (queue)->next;
  977.      (skb != (struct sk_buff *)(queue));
  978.      skb=skb->next)
  979. extern struct sk_buff * skb_recv_datagram(struct sock *sk,unsigned flags,int noblock, int *err);
  980. extern unsigned int datagram_poll(struct file *file, struct socket *sock, struct poll_table_struct *wait);
  981. extern int skb_copy_datagram(const struct sk_buff *from, int offset, char *to,int size);
  982. extern int skb_copy_datagram_iovec(const struct sk_buff *from, int offset, struct iovec *to,int size);
  983. extern int skb_copy_and_csum_datagram(const struct sk_buff *skb, int offset, u8 *to, int len, unsigned int *csump);
  984. extern int skb_copy_and_csum_datagram_iovec(const struct sk_buff *skb, int hlen, struct iovec *iov);
  985. extern void skb_free_datagram(struct sock * sk, struct sk_buff *skb);
  986. extern unsigned int skb_checksum(const struct sk_buff *skb, int offset, int len, unsigned int csum);
  987. extern int skb_copy_bits(const struct sk_buff *skb, int offset, void *to, int len);
  988. extern unsigned int skb_copy_and_csum_bits(const struct sk_buff *skb, int offset, u8 *to, int len, unsigned int csum);
  989. extern void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to);
  990. extern void skb_init(void);
  991. extern void skb_add_mtu(int mtu);
  992. #ifdef CONFIG_NETFILTER
  993. static inline void
  994. nf_conntrack_put(struct nf_ct_info *nfct)
  995. {
  996. if (nfct && atomic_dec_and_test(&nfct->master->use))
  997. nfct->master->destroy(nfct->master);
  998. }
  999. static inline void
  1000. nf_conntrack_get(struct nf_ct_info *nfct)
  1001. {
  1002. if (nfct)
  1003. atomic_inc(&nfct->master->use);
  1004. }
  1005. #endif
  1006. #endif /* __KERNEL__ */
  1007. #endif /* _LINUX_SKBUFF_H */