pbuf.h
上传用户:yyhongfa
上传日期:2013-01-18
资源大小:267k
文件大小:4k
开发平台:

C/C++

  1. /*
  2.  * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
  3.  * All rights reserved. 
  4.  * 
  5.  * Redistribution and use in source and binary forms, with or without modification, 
  6.  * are permitted provided that the following conditions are met:
  7.  *
  8.  * 1. Redistributions of source code must retain the above copyright notice,
  9.  *    this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright notice,
  11.  *    this list of conditions and the following disclaimer in the documentation
  12.  *    and/or other materials provided with the distribution.
  13.  * 3. The name of the author may not be used to endorse or promote products
  14.  *    derived from this software without specific prior written permission. 
  15.  *
  16.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 
  17.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
  18.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
  19.  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
  20.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
  21.  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
  22.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
  23.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 
  24.  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
  25.  * OF SUCH DAMAGE.
  26.  *
  27.  * This file is part of the lwIP TCP/IP stack.
  28.  * 
  29.  * Author: Adam Dunkels <adam@sics.se>
  30.  *
  31.  */
  32. #ifndef __LWIP_PBUF_H__
  33. #define __LWIP_PBUF_H__
  34. //#include "arch/cc.h"
  35. #define PBUF_TRANSPORT_HLEN 20
  36. #define PBUF_IP_HLEN        20
  37. typedef enum {
  38.   PBUF_TRANSPORT,
  39.   PBUF_IP,
  40.   PBUF_LINK,
  41.   PBUF_RAW
  42. } pbuf_layer;
  43. typedef enum {
  44.   PBUF_RAM,
  45.   PBUF_ROM,
  46.   PBUF_REF,
  47.   PBUF_POOL
  48. } pbuf_flag;
  49. /* Definitions for the pbuf flag field. These are NOT the flags that
  50.  * are passed to pbuf_alloc(). */
  51. #define PBUF_FLAG_RAM   0x00U    /* Flags that pbuf data is stored in RAM */
  52. #define PBUF_FLAG_ROM   0x01U    /* Flags that pbuf data is stored in ROM */
  53. #define PBUF_FLAG_POOL  0x02U    /* Flags that the pbuf comes from the pbuf pool */
  54. #define PBUF_FLAG_REF   0x04U    /* Flags thet the pbuf payload refers to RAM */
  55. /** indicates this packet was broadcast on the link */
  56. #define PBUF_FLAG_LINK_BROADCAST 0x80U
  57. struct pbuf {
  58.   /** next pbuf in singly linked pbuf chain */
  59.   struct pbuf *next;
  60.   /** pointer to the actual data in the buffer */
  61.   void *payload;
  62.   
  63.   /**
  64.    * total length of this buffer and all next buffers in chain
  65.    * belonging to the same packet.
  66.    *
  67.    * For non-queue packet chains this is the invariant:
  68.    * p->tot_len == p->len + (p->next? p->next->tot_len: 0)
  69.    */
  70.   u16_t tot_len;
  71.   
  72.   /** length of this buffer */
  73.   u16_t len;  
  74.   /** flags telling the type of pbuf, see PBUF_FLAG_ */
  75.   u16_t flags;
  76.   
  77.   /**
  78.    * the reference count always equals the number of pointers
  79.    * that refer to this pbuf. This can be pointers from an application,
  80.    * the stack itself, or pbuf->next pointers from a chain.
  81.    */
  82.   u16_t ref;
  83.   
  84. };
  85. void pbuf_init(void);
  86. struct pbuf *pbuf_alloc(pbuf_layer l, u16_t size, pbuf_flag flag);
  87. void pbuf_realloc(struct pbuf *p, u16_t size); 
  88. u8_t pbuf_header(struct pbuf *p, s16_t header_size);
  89. void pbuf_ref(struct pbuf *p);
  90. void pbuf_ref_chain(struct pbuf *p);
  91. u8_t pbuf_free(struct pbuf *p);
  92. u8_t pbuf_clen(struct pbuf *p);  
  93. void pbuf_cat(struct pbuf *h, struct pbuf *t);
  94. void pbuf_chain(struct pbuf *h, struct pbuf *t);
  95. struct pbuf *pbuf_take(struct pbuf *f);
  96. struct pbuf *pbuf_dechain(struct pbuf *p);
  97. void pbuf_queue(struct pbuf *p, struct pbuf *n);
  98. struct pbuf * pbuf_dequeue(struct pbuf *p);
  99. #endif /* __LWIP_PBUF_H__ */