534 lines
18 KiB
C
534 lines
18 KiB
C
/* netBufLib.h - network buffers header header file */
|
|
|
|
/* Copyright 1984 - 2002 Wind River Systems, Inc. */
|
|
|
|
/*
|
|
modification history
|
|
--------------------
|
|
01o,05jun02,vvv added M_EOB flag (SPR #72213)
|
|
01n,26mar02,vvv added M_PROXY flag (SPR #74518)
|
|
01m,10oct01,rae merge from truestack ver 01q base 01l
|
|
01l,24mar99,ann protected some #defines by #ifndefs due to conflicts
|
|
in project facility (all the ones defined in 00network.cdf)
|
|
01k,16mar99,spm recovered orphaned code from tor1_0_1.sens1_1 (SPR #25770)
|
|
01j,08oct98,gnn updated system network buffer allocations
|
|
01i,11dec97,vin added prototype for netMblkOffsetToBufCopy part of SPR 9563.
|
|
01h,08dec97,vin added prototype for netMblkChainDup SPR 9966.
|
|
01g,03dec97,vin added prototype for netTupleGet(), added NUM_SYS_xxx defines
|
|
01f,13nov97,vin added error codes and cleanup.
|
|
01e,08oct97,vin corrected clBlkFree()
|
|
01d,30sep96,vin added M_BLK_SZ.
|
|
01c,26sep97,vin added NUM_XXX_MIN macros for bootroms.
|
|
01b,19sep97,vin added cluster Blk typedef, optimized mBlk structure.
|
|
moved mExt structure out of the mBlk structure.
|
|
01a,08aug97,vin written.
|
|
*/
|
|
|
|
#ifndef __INCnetBufLibh
|
|
#define __INCnetBufLibh
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#if CPU_FAMILY==I960
|
|
#pragma align 1 /* tell gcc960 not to optimize alignments */
|
|
#endif /* CPU_FAMILY==I960 */
|
|
|
|
/* status codes */
|
|
|
|
#define S_netBufLib_MEMSIZE_INVALID (M_netBufLib | 1)
|
|
#define S_netBufLib_CLSIZE_INVALID (M_netBufLib | 2)
|
|
#define S_netBufLib_NO_SYSTEM_MEMORY (M_netBufLib | 3)
|
|
#define S_netBufLib_MEM_UNALIGNED (M_netBufLib | 4)
|
|
#define S_netBufLib_MEMSIZE_UNALIGNED (M_netBufLib | 5)
|
|
#define S_netBufLib_MEMAREA_INVALID (M_netBufLib | 6)
|
|
#define S_netBufLib_MBLK_INVALID (M_netBufLib | 7)
|
|
#define S_netBufLib_NETPOOL_INVALID (M_netBufLib | 8)
|
|
#define S_netBufLib_INVALID_ARGUMENT (M_netBufLib | 9)
|
|
#define S_netBufLib_NO_POOL_MEMORY (M_netBufLib | 10)
|
|
|
|
#ifndef NUM_NET_MBLKS
|
|
#define NUM_NET_MBLKS 400 /* no. mBlks to initialize */
|
|
#endif /* NUM_NET_MBLKS */
|
|
|
|
#define MAX_MBLK_TYPES 256 /* max number of mBlk types */
|
|
|
|
/* data clusters used by the network stack */
|
|
|
|
#ifndef NUM_64
|
|
#define NUM_64 100 /* no. 64 byte clusters */
|
|
#endif /* NUM_64 */
|
|
|
|
#ifndef NUM_128
|
|
#define NUM_128 100 /* no. 128 byte clusters */
|
|
#endif /* NUM_128 */
|
|
|
|
#ifndef NUM_256
|
|
#define NUM_256 40 /* no. 256 byte clusters */
|
|
#endif /* NUM_256 */
|
|
|
|
#ifndef NUM_512
|
|
#define NUM_512 40 /* no. 512 byte clusters */
|
|
#endif /* NUM_512 */
|
|
|
|
#ifndef NUM_1024
|
|
#define NUM_1024 25 /* no. 1024 byte clusters */
|
|
#endif /* NUM_1024 */
|
|
|
|
#ifndef NUM_2048
|
|
#define NUM_2048 25 /* no. 2048 byte clusters */
|
|
#endif /* NUM_2048 */
|
|
|
|
#ifndef NUM_CL_BLKS
|
|
#define NUM_CL_BLKS (NUM_64 + NUM_128 + NUM_256 + \
|
|
NUM_512 + NUM_1024 + NUM_2048)
|
|
#endif /* NUM_CL_BLKS */
|
|
|
|
/* data clusters for a minimal configuration */
|
|
|
|
#define NUM_NET_MBLKS_MIN 200 /* no. mBlks to initialize */
|
|
|
|
#define NUM_64_MIN 50 /* no. 64 byte clusters */
|
|
#define NUM_128_MIN 50 /* no. 128 byte clusters */
|
|
#define NUM_256_MIN 10 /* no. 256 byte clusters */
|
|
#define NUM_512_MIN 10 /* no. 512 byte clusters */
|
|
#define NUM_1024_MIN 20 /* no. 1024 byte clusters */
|
|
|
|
#define NUM_CL_BLKS_MIN (NUM_64_MIN + NUM_128_MIN + \
|
|
NUM_256_MIN + NUM_512_MIN + \
|
|
NUM_1024_MIN)
|
|
|
|
/* system clusters for routes, interface addresses, pcbs, sockets, etc. */
|
|
/* This is 61440 bytes and should allow us to open the default number */
|
|
/* of sockets which is 50 (NUM_FILES) */
|
|
|
|
#ifndef NUM_SYS_64
|
|
#define NUM_SYS_64 64 /* 64 byte system clusters */
|
|
#endif /* NUM_SYS_64 */
|
|
|
|
#ifndef NUM_SYS_128
|
|
#define NUM_SYS_128 64 /* 128 byte system clusters */
|
|
#endif /* NUM_SYS_128 */
|
|
|
|
#ifndef NUM_SYS_256
|
|
#define NUM_SYS_256 64 /* 256 byte system clusters */
|
|
#endif /* NUM_SYS_256 */
|
|
|
|
#ifndef NUM_SYS_512
|
|
#define NUM_SYS_512 64 /* 512 byte system clusters */
|
|
#endif /* NUM_SYS_512 */
|
|
|
|
#ifndef NUM_SYS_CL_BLKS
|
|
#define NUM_SYS_CL_BLKS (NUM_SYS_64 + NUM_SYS_128 + \
|
|
NUM_SYS_256 + NUM_SYS_512)
|
|
#endif /* NUM_SYS_CL_BLKS */
|
|
|
|
#ifndef NUM_SYS_MBLKS
|
|
#define NUM_SYS_MBLKS (2 * NUM_SYS_CL_BLKS)
|
|
#endif /* NUM_SYS_MBLKS */
|
|
|
|
/* system clusters for a minimal configuration */
|
|
|
|
#define NUM_SYS_64_MIN 20 /* 64 byte system clusters */
|
|
#define NUM_SYS_128_MIN 15 /* 128 byte system clusters */
|
|
#define NUM_SYS_256_MIN 15 /* 256 byte system clusters */
|
|
#define NUM_SYS_512_MIN 10 /* 512 byte system clusters */
|
|
|
|
#define NUM_SYS_CL_BLKS_MIN (NUM_SYS_64_MIN + NUM_SYS_128_MIN + \
|
|
NUM_SYS_256_MIN + NUM_SYS_512_MIN)
|
|
|
|
#define NUM_SYS_MBLKS_MIN NUM_SYS_CL_BLKS_MIN
|
|
|
|
/* cluster defines */
|
|
|
|
#define CL_LOG2_64 6
|
|
#define CL_LOG2_128 7
|
|
#define CL_LOG2_256 8
|
|
#define CL_LOG2_512 9
|
|
#define CL_LOG2_1024 10
|
|
#define CL_LOG2_2048 11
|
|
#define CL_LOG2_4096 12
|
|
#define CL_LOG2_8192 13
|
|
#define CL_LOG2_16384 14
|
|
#define CL_LOG2_32768 15
|
|
#define CL_LOG2_65536 16
|
|
|
|
#define CL_SIZE_64 64
|
|
#define CL_SIZE_128 128
|
|
#define CL_SIZE_256 256
|
|
#define CL_SIZE_512 512
|
|
#define CL_SIZE_1024 1024
|
|
#define CL_SIZE_2048 2048
|
|
#define CL_SIZE_4096 4096
|
|
#define CL_SIZE_8192 8192
|
|
#define CL_SIZE_16384 16384
|
|
#define CL_SIZE_32768 32768
|
|
#define CL_SIZE_65536 65536
|
|
|
|
#define CL_LOG2_MIN CL_LOG2_64
|
|
#define CL_LOG2_MAX CL_LOG2_65536
|
|
#define CL_SIZE_MAX (1 << CL_LOG2_MAX)
|
|
#define CL_SIZE_MIN (1 << CL_LOG2_MIN)
|
|
#define CL_INDX_MIN 0
|
|
#define CL_INDX_MAX (CL_LOG2_MAX - CL_LOG2_MIN)
|
|
#define CL_TBL_SIZE (CL_INDX_MAX + 1)
|
|
|
|
|
|
#define CL_LOG2_TO_CL_INDEX(x) ((x) - CL_LOG2_MIN)
|
|
#define CL_LOG2_TO_CL_SIZE(x) (1 << (x))
|
|
#define SIZE_TO_LOG2(size) (ffsMsb((size)) - 1)
|
|
#define CL_SIZE_TO_CL_INDEX(clSize) (ffsMsb((clSize)) - (1 + CL_LOG2_MIN))
|
|
|
|
/* mBlk types */
|
|
#define MT_FREE 0 /* should be on free list */
|
|
#define MT_DATA 1 /* dynamic (data) allocation */
|
|
#define MT_HEADER 2 /* packet header */
|
|
#define MT_SOCKET 3 /* socket structure */
|
|
#define MT_PCB 4 /* protocol control block */
|
|
#define MT_RTABLE 5 /* routing tables */
|
|
#define MT_HTABLE 6 /* IMP host tables */
|
|
#define MT_ATABLE 7 /* address resolution tables */
|
|
#define MT_SONAME 8 /* socket name */
|
|
#define MT_ZOMBIE 9 /* zombie proc status */
|
|
#define MT_SOOPTS 10 /* socket options */
|
|
#define MT_FTABLE 11 /* fragment reassembly header */
|
|
#define MT_RIGHTS 12 /* access rights */
|
|
#define MT_IFADDR 13 /* interface address */
|
|
#define MT_CONTROL 14 /* extra-data protocol message */
|
|
#define MT_OOBDATA 15 /* expedited data */
|
|
#define MT_IPMOPTS 16 /* internet multicast options */
|
|
#define MT_IPMADDR 17 /* internet multicast address */
|
|
#define MT_IFMADDR 18 /* link-level multicast address */
|
|
#define MT_MRTABLE 19 /* multicast routing tables */
|
|
|
|
#define NUM_MBLK_TYPES 20 /* number of mBlk types defined */
|
|
|
|
/* mBlk flags */
|
|
|
|
#define M_EXT 0x01 /* has an associated cluster */
|
|
#define M_PKTHDR 0x02 /* start of record */
|
|
#define M_EOR 0x04 /* end of record */
|
|
#define M_FORWARD 0x08 /* packet to be forwarded */
|
|
|
|
/* mBlk pkthdr flags, also in mFlags */
|
|
|
|
#define M_BCAST 0x10 /* send/received as link-level broadcast */
|
|
#define M_MCAST 0x20 /* send/received as link-level multicast */
|
|
#define M_PROXY 0x40 /* broadcast forwarded through proxy */
|
|
#define M_SECURE_PKT 0x80 /* already gone through security check */
|
|
|
|
/*
|
|
* M_EOB is set when the mblk contains the last part of a large block of
|
|
* data sent by an application using TCP (a large block of data is one
|
|
* which causes sosend to issue multiple protocol send requests).
|
|
* M_EOB and M_PROXY can be used together since M_EOB is only used above
|
|
* IP and M_PROXY is only used at IP level. It is important to clear the
|
|
* M_EOB flag before the packet is sent to IP for transmission.
|
|
*/
|
|
|
|
#define M_EOB M_PROXY
|
|
|
|
/* flags to mClGet/mBlkGet */
|
|
|
|
#define M_DONTWAIT 1 /* dont wait if buffers not available */
|
|
#define M_WAIT 0 /* wait if buffers not available */
|
|
|
|
/* length to copy to copy all data from the mBlk chain*/
|
|
|
|
#define M_COPYALL 1000000000
|
|
|
|
/* check to see if an mBlk is associated with a cluster */
|
|
|
|
#define M_HASCL(pMblk) ((pMblk)->mBlkHdr.mFlags & M_EXT)
|
|
|
|
#define M_BLK_SZ sizeof(struct mBlk) /* size of an mBlk */
|
|
#define MSIZE M_BLK_SZ /* size of an mBlk */
|
|
|
|
#define CL_BLK_SZ sizeof(struct clBlk) /* size of cluster block */
|
|
|
|
/* macro to get to the net pool ptr from the mBlk */
|
|
|
|
#define MBLK_TO_NET_POOL(pMblk) (*(NET_POOL_ID *)((int)pMblk - sizeof(int)))
|
|
|
|
/* macro to get to the cluster pool ptr from the cluster buffer */
|
|
|
|
#define CL_BUF_TO_CL_POOL(pClBuf) (*(CL_POOL_ID *)((int)pClBuf - sizeof(int)))
|
|
|
|
/* macro to get to the cluster reference count from the cluster buffer */
|
|
|
|
#define CL_BUF_TO_REFCNT(pClBuf) (UCHAR *)((int)pClBuf - (2 * sizeof(int)))
|
|
|
|
/* macros for accessing the functions of net pool directly */
|
|
|
|
#define poolInit(poolId,pMclBlkConfig,pClDescTbl,tblNumEnt,fromKheap) \
|
|
(*(((NET_POOL_ID)(poolId))->pFuncTbl->pInitRtn)) \
|
|
((poolId), (pMclBlkConfig), (pClDescTbl), (tblNumEnt), \
|
|
(fromKheap))
|
|
|
|
#define mBlkFree(poolId,pMblk) \
|
|
(*(((NET_POOL_ID)(poolId))->pFuncTbl->pMblkFreeRtn)) \
|
|
((poolId), (pMblk))
|
|
|
|
#define clFree(poolId,pClBuf) \
|
|
(*(((NET_POOL_ID)(poolId))->pFuncTbl->pClFreeRtn)) \
|
|
((poolId), (pClBuf))
|
|
|
|
#define clBlkFree(poolId,pClBlk) \
|
|
(*(((NET_POOL_ID)(poolId))->pFuncTbl->pClBlkFreeRtn)) \
|
|
((pClBlk))
|
|
|
|
#define mBlkClFree(poolId,pMblk) \
|
|
(*(((NET_POOL_ID)(poolId))->pFuncTbl->pMblkClFreeRtn)) \
|
|
((poolId), (pMblk))
|
|
|
|
#define mBlkGet(poolId,canWait,type) \
|
|
(*(((NET_POOL_ID)(poolId))->pFuncTbl->pMblkGetRtn)) \
|
|
((poolId), (canWait), (type))
|
|
|
|
#define clBlkGet(poolId,canWait) \
|
|
(*(((NET_POOL_ID)(poolId))->pFuncTbl->pClBlkGetRtn)) \
|
|
((poolId), (canWait))
|
|
|
|
#define clusterGet(poolId,pClPool) \
|
|
(*(((NET_POOL_ID)(poolId))->pFuncTbl->pClGetRtn)) \
|
|
((poolId), (pClPool))
|
|
|
|
#define mClGet(poolId,pMblk,bufSize,canWait,bestFit) \
|
|
(*(((NET_POOL_ID)(poolId))->pFuncTbl->pMblkClGetRtn)) \
|
|
((poolId), (pMblk), (bufSize), (canWait), (bestFit))
|
|
|
|
#define clPoolIdGet(poolId,bufSize,bestFit) \
|
|
(*(((NET_POOL_ID)(poolId))->pFuncTbl->pClPoolIdGetRtn)) \
|
|
((poolId), (bufSize), (bestFit))
|
|
|
|
/*
|
|
* This structure is used to configure the number of mBlks and cluster blocks
|
|
* that are allocated in a netpool. Each cluster has a corresponding cluster
|
|
* block which manages it. An mBlk manages a cluster block and the cluster.
|
|
* When a netpool is configured there should as many cluster blocks as the
|
|
* cumulative number of clusters. The defaults are defined above, but the
|
|
* structure is defined and fileed in usrConfig.c. For TCP applications it is
|
|
* good to have two mBlks for every cluster block.
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
int mBlkNum; /* number of mBlks */
|
|
int clBlkNum; /* number of cluster Blocks */
|
|
char * memArea; /* pre allocated memory area */
|
|
int memSize; /* pre allocated memory size */
|
|
} M_CL_CONFIG;
|
|
|
|
/*
|
|
* This structure defines the way the networking code utilizes clusters.
|
|
* A table of type CL_DESC is filled in usrNetwork.c.
|
|
* Clusters are also used to hold network data structures other than the
|
|
* regular data. The network data structures are routing table entries,
|
|
* interface address structures, multicast address structures etc.
|
|
*/
|
|
|
|
typedef struct clDesc
|
|
{
|
|
int clSize; /* cluster type */
|
|
int clNum; /* number of clusters */
|
|
char * memArea; /* pre allocated memory area */
|
|
int memSize; /* pre allocated memory size */
|
|
} CL_DESC;
|
|
|
|
/* this structure defines the cluster */
|
|
|
|
typedef struct clBuff
|
|
{
|
|
struct clBuff * pClNext; /* pointer to the next clBuff */
|
|
} CL_BUF;
|
|
|
|
typedef CL_BUF * CL_BUF_ID;
|
|
|
|
/* this structure defines the each cluster pool */
|
|
|
|
typedef struct clPool
|
|
{
|
|
int clSize; /* cluster size */
|
|
int clLg2; /* cluster log 2 size */
|
|
int clNum; /* number of clusters */
|
|
int clNumFree; /* number of clusters free */
|
|
int clUsage; /* number of times used */
|
|
CL_BUF_ID pClHead; /* pointer to the cluster head */
|
|
struct netPool * pNetPool; /* pointer to the netPool */
|
|
} CL_POOL;
|
|
|
|
typedef CL_POOL * CL_POOL_ID;
|
|
|
|
/* header at beginning of each mBlk */
|
|
|
|
typedef struct mHdr
|
|
{
|
|
struct mBlk * mNext; /* next buffer in chain */
|
|
struct mBlk * mNextPkt; /* next chain in queue/record */
|
|
char * mData; /* location of data */
|
|
int mLen; /* amount of data in this mBlk */
|
|
UCHAR mType; /* type of data in this mBlk */
|
|
UCHAR mFlags; /* flags; see below */
|
|
USHORT reserved;
|
|
} M_BLK_HDR;
|
|
|
|
/* record/packet header in first mBlk of chain; valid if M_PKTHDR set */
|
|
|
|
typedef struct pktHdr
|
|
{
|
|
struct ifnet * rcvif; /* rcv interface */
|
|
int len; /* total packet length */
|
|
} M_PKT_HDR;
|
|
|
|
typedef union clBlkList
|
|
{
|
|
struct clBlk * pClBlkNext; /* pointer to the next clBlk */
|
|
char * pClBuf; /* pointer to the buffer */
|
|
} CL_BLK_LIST;
|
|
|
|
/* description of external storage mapped into mBlk, valid if M_EXT set */
|
|
|
|
typedef struct clBlk
|
|
{
|
|
CL_BLK_LIST clNode; /* union of next clBlk, buffer ptr */
|
|
UINT clSize; /* cluster size */
|
|
int clRefCnt; /* reference count of the cluster */
|
|
FUNCPTR pClFreeRtn; /* pointer to cluster free routine */
|
|
int clFreeArg1; /* free routine arg 1 */
|
|
int clFreeArg2; /* free routine arg 2 */
|
|
int clFreeArg3; /* free routine arg 3 */
|
|
struct netPool * pNetPool; /* pointer to the netPool */
|
|
} CL_BLK;
|
|
|
|
/* mBlk structure */
|
|
|
|
typedef struct mBlk
|
|
{
|
|
M_BLK_HDR mBlkHdr; /* header */
|
|
M_PKT_HDR mBlkPktHdr; /* pkthdr */
|
|
CL_BLK * pClBlk; /* pointer to cluster blk */
|
|
} M_BLK;
|
|
|
|
/* mBlk statistics used to show data pool by show routines */
|
|
|
|
typedef struct mbstat
|
|
{
|
|
ULONG mNum; /* mBlks obtained from page pool */
|
|
ULONG mDrops; /* times failed to find space */
|
|
ULONG mWait; /* times waited for space */
|
|
ULONG mDrain; /* times drained protocols for space */
|
|
ULONG mTypes[256]; /* type specific mBlk allocations */
|
|
} M_STAT;
|
|
|
|
typedef M_BLK * M_BLK_ID;
|
|
typedef CL_BLK * CL_BLK_ID;
|
|
typedef struct netPool NET_POOL;
|
|
typedef struct poolFunc POOL_FUNC;
|
|
typedef NET_POOL * NET_POOL_ID;
|
|
|
|
struct poolFunc /* POOL_FUNC */
|
|
{
|
|
/* pointer to the pool initialization routine */
|
|
STATUS (*pInitRtn) (NET_POOL_ID pNetPool, M_CL_CONFIG * pMclBlkConfig,
|
|
CL_DESC * pClDescTbl, int clDescTblNumEnt,
|
|
BOOL fromKheap);
|
|
|
|
/* pointer to mBlk free routine */
|
|
void (*pMblkFreeRtn) (NET_POOL_ID pNetPool, M_BLK_ID pMblk);
|
|
|
|
/* pointer to cluster Blk free routine */
|
|
void (*pClBlkFreeRtn) (CL_BLK_ID pClBlk);
|
|
|
|
/* pointer to cluster free routine */
|
|
void (*pClFreeRtn) (NET_POOL_ID pNetPool, char * pClBuf);
|
|
|
|
/* pointer to mBlk/cluster pair free routine */
|
|
M_BLK_ID (*pMblkClFreeRtn) (NET_POOL_ID pNetPool, M_BLK_ID pMblk);
|
|
|
|
/* pointer to mBlk get routine */
|
|
M_BLK_ID (*pMblkGetRtn) (NET_POOL_ID pNetPool, int canWait, UCHAR type);
|
|
|
|
/* pointer to cluster Blk get routine */
|
|
CL_BLK_ID (*pClBlkGetRtn) (NET_POOL_ID pNetPool, int canWait);
|
|
|
|
/* pointer to a cluster buffer get routine */
|
|
char * (*pClGetRtn) (NET_POOL_ID pNetPool, CL_POOL_ID pClPool);
|
|
|
|
/* pointer to mBlk/cluster pair get routine */
|
|
STATUS (*pMblkClGetRtn) (NET_POOL_ID pNetPool, M_BLK_ID pMblk,
|
|
int bufSize, int canWait, BOOL bestFit);
|
|
|
|
/* pointer to cluster pool Id get routine */
|
|
CL_POOL_ID (*pClPoolIdGetRtn) (NET_POOL_ID pNetPool, int bufSize,
|
|
BOOL bestFit);
|
|
};
|
|
|
|
struct netPool /* NET_POOL */
|
|
{
|
|
M_BLK_ID pmBlkHead; /* head of mBlks */
|
|
CL_BLK_ID pClBlkHead; /* head of cluster Blocks */
|
|
int mBlkCnt; /* number of mblks */
|
|
int mBlkFree; /* number of free mblks */
|
|
int clMask; /* cluster availability mask */
|
|
int clLg2Max; /* cluster log2 maximum size */
|
|
int clSizeMax; /* maximum cluster size */
|
|
int clLg2Min; /* cluster log2 minimum size */
|
|
int clSizeMin; /* minimum cluster size */
|
|
CL_POOL * clTbl [CL_TBL_SIZE]; /* pool table */
|
|
M_STAT * pPoolStat; /* pool statistics */
|
|
POOL_FUNC * pFuncTbl; /* ptr to function ptr table */
|
|
};
|
|
|
|
/* external declarations */
|
|
|
|
IMPORT STATUS netBufLibInit (void);
|
|
IMPORT STATUS netPoolInit (NET_POOL_ID pNetPool,
|
|
M_CL_CONFIG * pMclBlkConfig,
|
|
CL_DESC * pClDescTbl, int clDescTblNumEnt,
|
|
POOL_FUNC * pFuncTbl);
|
|
IMPORT STATUS netPoolDelete (NET_POOL_ID);
|
|
IMPORT void netMblkFree (NET_POOL_ID pNetPool, M_BLK_ID pMblk);
|
|
IMPORT void netClBlkFree (NET_POOL_ID pNetPool, CL_BLK_ID pClBlk);
|
|
IMPORT void netClFree (NET_POOL_ID pNetPool, UCHAR * pClBuf);
|
|
IMPORT M_BLK_ID netMblkClFree (M_BLK_ID pMblk);
|
|
IMPORT void netMblkClChainFree (M_BLK_ID pMblk);
|
|
IMPORT M_BLK_ID netMblkGet (NET_POOL_ID pNetPool, int canWait,
|
|
UCHAR type);
|
|
IMPORT CL_BLK_ID netClBlkGet (NET_POOL_ID pNetPool, int canWait);
|
|
IMPORT char * netClusterGet (NET_POOL_ID pNetPool,
|
|
CL_POOL_ID pClPool);
|
|
IMPORT STATUS netMblkClGet (NET_POOL_ID pNetPool, M_BLK_ID pMblk,
|
|
int bufSize, int canWait, BOOL bestFit);
|
|
IMPORT M_BLK_ID netTupleGet (NET_POOL_ID pNetPool, int bufSize,
|
|
int canWait, UCHAR type, BOOL bestFit);
|
|
|
|
IMPORT M_BLK_ID netTupleGet2 (NET_POOL_ID, int, int);
|
|
|
|
IMPORT CL_BLK_ID netClBlkJoin (CL_BLK_ID pClBlk, char * pClBuf,
|
|
int size, FUNCPTR pFreeRtn, int arg1,
|
|
int arg2, int arg3);
|
|
IMPORT M_BLK_ID netMblkClJoin (M_BLK_ID pMblk, CL_BLK_ID pClBlk);
|
|
IMPORT CL_POOL_ID netClPoolIdGet (NET_POOL_ID pNetPool, int bufSize,
|
|
BOOL bestFit);
|
|
|
|
IMPORT int netMblkToBufCopy (M_BLK_ID pMblk, char * pBuf,
|
|
FUNCPTR pCopyRtn);
|
|
IMPORT int netMblkOffsetToBufCopy (M_BLK_ID pMblk, int offset,
|
|
char * pBuf, int len,
|
|
FUNCPTR pCopyRtn);
|
|
IMPORT M_BLK_ID netMblkDup (M_BLK_ID pSrcMblk, M_BLK_ID pDestMblk);
|
|
IMPORT M_BLK_ID netMblkChainDup (NET_POOL_ID pNetPool, M_BLK_ID pMblk,
|
|
int offset, int len, int canWait);
|
|
|
|
#if CPU_FAMILY==I960
|
|
#pragma align 0 /* turn off alignment requirement */
|
|
#endif /* CPU_FAMILY==I960 */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __INCnetBufLibh */
|
|
|