mbufLib.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:5k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* mbufLib.h - mbuf interface library header */
  2. /* Copyright 1984-1995 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01b,13mar95,dzb  added MBUF_VALID, and changed macros to use (SPR #4066).
  7. 01a,08nov94,dzb  written.
  8. */
  9. #ifndef __INCmbufLibh
  10. #define __INCmbufLibh
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14. /* includes */
  15. #include "vwModNum.h"
  16. #include "intLib.h"
  17. #include "limits.h"
  18. #include "net/mbuf.h"
  19. /* typedefs */
  20. #if ((CPU_FAMILY==I960) && (defined __GNUC__))
  21. #pragma align 1                 /* tell gcc960 not to optimize alignments */
  22. #endif  /* CPU_FAMILY==I960 */
  23. /* definition of mbuf ID */
  24. typedef struct mbufId /* MBUF_ID */
  25.     {
  26.     union
  27. {
  28.         struct mbuf * head; /* head of mbuf chain */
  29.         struct mbufId * idNext; /* next ID in free chain */
  30. } uId;
  31.     u_char type; /* mbuf ID type */
  32.     } *MBUF_ID;
  33. /* definition of mbuf desc */
  34. typedef struct mbufDesc /* MBUF_DESC */
  35.     {
  36.     caddr_t buf; /* user buffer address */
  37.     union
  38. {
  39.         u_char refCnt; /* share counter */
  40.         struct mbufDesc * descNext; /* next desc in free chain */
  41. } uDesc;
  42.     } *MBUF_DESC;
  43. typedef struct mbuf * MBUF_SEG;
  44. extern struct mbufId * _mbufIdHead;
  45. #if ((CPU_FAMILY==I960) && (defined __GNUC__))
  46. #pragma align 0                 /* turn off alignment requirement */
  47. #endif  /* CPU_FAMILY==I960 */
  48. /* defines */
  49. #define mbufHead uId.head
  50. #define mbufIdNext uId.idNext
  51. #define mbufRefCnt uDesc.refCnt
  52. #define mbufDescNext uDesc.descNext
  53. /* status codes */
  54. #define S_mbufLib_ID_INVALID (M_mbufLib | 1)
  55. #define S_mbufLib_ID_EMPTY (M_mbufLib | 2)
  56. #define S_mbufLib_SEGMENT_NOT_FOUND (M_mbufLib | 3)
  57. #define S_mbufLib_LENGTH_INVALID (M_mbufLib | 4)
  58. #define S_mbufLib_OFFSET_INVALID (M_mbufLib | 5)
  59. #define MBUF_ID_INC 50 /* increment for ID alloc */
  60. #define MBUF_DESC_INC 50 /* increment for desc alloc */
  61. #define MBUF_BEGIN ZBUF_BEGIN /* start of chain */
  62. #define MBUF_END ZBUF_END /* end of chain */
  63. #define MBUF_NONE ((MBUF_SEG) NONE) /* cut past chain */
  64. #define MBUF_VALID 0x5e /* validate off magic number */
  65. #define MBUF_ID_CREATE(mbufId)
  66.     {
  67.     int lockKey = intLock ();
  68.     if ((mbufId = _mbufIdHead) != NULL)
  69.         {
  70.         _mbufIdHead = mbufId->mbufIdNext;
  71.         intUnlock (lockKey);
  72.         mbufId->type = MBUF_VALID;
  73.         mbufId->mbufHead = NULL;
  74.         }
  75.     else 
  76.         {
  77.         intUnlock (lockKey);
  78. mbufId = _mbufCreate ();
  79.         }
  80.     }
  81. #define MBUF_ID_DELETE_EMPTY(mbufId)
  82.     {
  83.     int lockKey;
  84.     mbufId->type = MT_FREE;
  85.     lockKey = intLock ();
  86.     mbufId->mbufIdNext = _mbufIdHead;
  87.     _mbufIdHead = mbufId;
  88.     intUnlock (lockKey);
  89.     }
  90. #define MBUF_ID_DELETE(mbufId)
  91.     {
  92.     if (mbufId->mbufHead != NULL)
  93.         m_freem (mbufId->mbufHead);
  94.     MBUF_ID_DELETE_EMPTY(mbufId);
  95.     }
  96. /* function declarations */
  97. #if defined(__STDC__) || defined(__cplusplus)
  98. extern void * _mbufLibInit (void);
  99. extern MBUF_ID _mbufCreate (void);
  100. extern STATUS _mbufDelete (MBUF_ID mbufId);
  101. extern MBUF_SEG _mbufInsert (MBUF_ID mbufId1, MBUF_SEG mbufSeg, int offset,
  102.                     MBUF_ID mbufId2);
  103. extern MBUF_SEG _mbufInsertBuf (MBUF_ID mbufId, MBUF_SEG mbufSeg, int offset,
  104.                     caddr_t buf, int len, VOIDFUNCPTR freeRtn, int freeArg);
  105. extern MBUF_SEG _mbufInsertCopy (MBUF_ID mbufId, MBUF_SEG mbufSeg,
  106.                     int offset, caddr_t buf, int len);
  107. extern int _mbufExtractCopy (MBUF_ID mbufId, MBUF_SEG mbufSeg,
  108.                     int offset, caddr_t buf, int len);
  109. extern MBUF_SEG _mbufCut (MBUF_ID mbufId, MBUF_SEG mbufSeg, int offset,
  110.     int len);
  111. extern MBUF_ID _mbufSplit (MBUF_ID mbufId, MBUF_SEG mbufSeg, int offset);
  112. extern MBUF_ID _mbufDup (MBUF_ID mbufId, MBUF_SEG mbufSeg, int offset,
  113.     int len);
  114. extern int _mbufLength (MBUF_ID mbufId);
  115. extern MBUF_SEG _mbufSegFind (MBUF_ID mbufId, MBUF_SEG mbufSeg, int *pOffset);
  116. extern MBUF_SEG _mbufSegNext (MBUF_ID mbufId, MBUF_SEG mbufSeg);
  117. extern MBUF_SEG _mbufSegPrev (MBUF_ID mbufId, MBUF_SEG mbufSeg);
  118. extern caddr_t _mbufSegData (MBUF_ID mbufId, MBUF_SEG mbufSeg);
  119. extern int _mbufSegLength (MBUF_ID mbufId, MBUF_SEG mbufSeg);
  120. #else /* __STDC__ */
  121. extern void * _mbufLibInit ();
  122. extern MBUF_ID _mbufCreate ();
  123. extern STATUS _mbufDelete ();
  124. extern MBUF_SEG _mbufInsert ();
  125. extern MBUF_SEG _mbufInsertBuf ();
  126. extern MBUF_SEG _mbufInsertCopy ();
  127. extern int _mbufExtractCopy ();
  128. extern MBUF_SEG _mbufCut ();
  129. extern MBUF_ID _mbufSplit ();
  130. extern MBUF_ID _mbufDup ();
  131. extern int _mbufLength ();
  132. extern MBUF_SEG _mbufSegFind ();
  133. extern MBUF_SEG _mbufSegNext ();
  134. extern MBUF_SEG _mbufSegPrev ();
  135. extern caddr_t _mbufSegData ();
  136. extern int _mbufSegLength ();
  137. #endif /* __STDC__ */
  138. #ifdef __cplusplus
  139. }
  140. #endif
  141. #endif /* __INCmbufLibh */