mbuf.h
上传用户:hepax88
上传日期:2007-01-03
资源大小:1101k
文件大小:2k
源码类别:

TCP/IP协议栈

开发平台:

Visual C++

  1. #ifndef _MBUF_H
  2. #define _MBUF_H
  3. #include <stdio.h>
  4. #ifndef _GLOBAL_H
  5. #include "global.h"
  6. #endif
  7. extern unsigned Ibufsize; /* Size of interrupt buffers to allocate */
  8. extern int Nibufs; /* Number of interrupt buffers to allocate */
  9. extern long Pushdowns; /* Total calls to pushdown() */
  10. extern long Pushalloc; /* Calls to pushdown that call malloc() */
  11. /* Basic message buffer structure */
  12. struct mbuf {
  13. struct mbuf *next; /* Links mbufs belonging to single packets */
  14. struct mbuf *anext; /* Links packets on queues */
  15. uint16 size; /* Size of associated data buffer */
  16. int refcnt; /* Reference count */
  17. struct mbuf *dup; /* Pointer to duplicated mbuf */
  18. uint8 *data; /* Active working pointers */
  19. uint16 cnt;
  20. };
  21. #define PULLCHAR(bpp)
  22.  ((bpp) != NULL && (*bpp) != NULL && (*bpp)->cnt > 1 ? 
  23.  ((*bpp)->cnt--,*(*bpp)->data++) : pullchar(bpp))
  24. /* In mbuf.c: */
  25. struct mbuf *alloc_mbuf(uint16 size);
  26. struct mbuf *free_mbuf(struct mbuf **bpp);
  27. struct mbuf *ambufw(uint16 size);
  28. struct mbuf *copy_p(struct mbuf *bp,uint16 cnt);
  29. uint16 dup_p(struct mbuf **hp,struct mbuf *bp,uint16 offset,uint16 cnt);
  30. uint16 extract(struct mbuf *bp,uint16 offset,void *buf,uint16 len);
  31. struct mbuf *free_p(struct mbuf **bpp);
  32. uint16 len_p(struct mbuf *bp);
  33. void trim_mbuf(struct mbuf **bpp,uint16 length);
  34. int write_p(FILE *fp,struct mbuf *bp);
  35. struct mbuf *dequeue(struct mbuf **q);
  36. void enqueue(struct mbuf **q,struct mbuf **bpp);
  37. void free_q(struct mbuf **q);
  38. uint16 len_q(struct mbuf *bp);
  39. struct mbuf *qdata(void *data,uint16 cnt);
  40. uint16 dqdata(struct mbuf *bp,void *buf,unsigned cnt);
  41. void append(struct mbuf **bph,struct mbuf **bpp);
  42. void pushdown(struct mbuf **bpp,void *buf,uint16 size);
  43. uint16 pullup(struct mbuf **bph,void *buf,uint16 cnt);
  44. #define pullchar(x) pull8(x)
  45. int pull8(struct mbuf **bpp);       /* returns -1 if nothing */
  46. long pull16(struct mbuf **bpp); /* returns -1 if nothing */
  47. int32 pull32(struct mbuf **bpp); /* returns  0 if nothing */
  48. uint16 get16(uint8 *cp);
  49. int32 get32(uint8 *cp);
  50. uint8 *put16(uint8 *cp,uint16 x);
  51. uint8 *put32(uint8 *cp,int32 x);
  52. void iqstat(void);
  53. void refiq(void);
  54. void mbuf_crunch(struct mbuf **bpp);
  55. void mbufsizes(void);
  56. void mbufstat(void);
  57. void mbuf_garbage(int red);
  58. #define AUDIT(bp)       audit(bp,__FILE__,__LINE__)
  59. #endif /* _MBUF_H */