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

VxWorks

开发平台:

C/C++

  1. /* wdbMbufLib.h - header file for WDB I/O buffer handling */
  2. /* Copyright 1984-2002 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01d,25apr02,jhw  Added C++ support (SPR 76304).
  7. 01c,19sep97,vin modified for cluster Blk logic, removed hardcoded assumption
  8. of the location of the refcnt.
  9. 01b,24jul96,vin upgraded to BSD4.4 mbufs
  10. 01a,04may95,ms  written.
  11. */
  12. #ifndef __INCwdbMbufLibh
  13. #define __INCwdbMbufLibh
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. /* includes */
  18. #include "net/mbuf.h"
  19. /* macros */
  20. #define wdbMbufClusterInit(pMbuf, addr, nBytes, callBackRtn, callBackArg) 
  21.     {
  22.     (pMbuf)->m_next       = NULL;
  23.     (pMbuf)->m_nextpkt    = NULL;
  24.     (pMbuf)->m_data       = (caddr_t)(addr);
  25.     (pMbuf)->m_len        = nBytes;
  26.     (pMbuf)->m_type       = MT_DATA;
  27.     (pMbuf)->m_flags      |= M_EXT;
  28.     (pMbuf)->m_extBuf     = (caddr_t)(addr);
  29.     (pMbuf)->m_extSize    = nBytes;
  30.     (pMbuf)->m_extFreeRtn = callBackRtn;
  31.     (pMbuf)->m_extRefCnt = 1;
  32.     (pMbuf)->m_extArg1    = callBackArg;
  33.     (pMbuf)->m_extArg2    = 0;
  34.     (pMbuf)->m_extArg3    = 0;
  35.     }
  36. #define wdbMbufChainFree(pMbuf)
  37.     {
  38.     struct mbuf *__pNextMbuf;
  39.     struct mbuf *__pThisMbuf;
  40.     __pThisMbuf = pMbuf;
  41.     while (__pThisMbuf != NULL)
  42. {
  43. __pNextMbuf = __pThisMbuf->m_next;
  44. wdbMbufFree (__pThisMbuf);
  45. __pThisMbuf = __pNextMbuf;
  46. }
  47.     }
  48. #define wdbMbufDataGet(__pMbuf, __pDest, __len, __pLen)
  49.     {
  50.     int __nBytes;
  51.     struct mbuf * __pThisMbuf;
  52.     __nBytes = 0;
  53.     for (__pThisMbuf = __pMbuf;
  54.          __pThisMbuf != NULL;
  55.          __pThisMbuf = __pThisMbuf->m_next)
  56.         {
  57.         int __moreBytes = MIN (__pThisMbuf->m_len, __len - __nBytes);
  58.         bcopy (mtod (__pThisMbuf, char *), __pDest + __nBytes, __moreBytes); 
  59.         __nBytes += __moreBytes;
  60.         if (__nBytes >= __len)
  61.             break;
  62.         }
  63.     *(__pLen) = __nBytes;
  64.     }
  65. /* function prototypes */
  66. #ifdef  __STDC__
  67. extern struct mbuf * wdbMbufAlloc     (void);
  68. extern void             wdbMbufFree      (struct mbuf * segId);
  69. #else   /* __STDC__ */
  70. extern struct mbuf * wdbMbufAlloc     ();
  71. extern void             wdbMbufFree      ();
  72. #endif  /* __STDC__ */
  73. #ifdef __cplusplus
  74. }
  75. #endif
  76. #endif /* __INCwdbMbufLibh */