pDrvCtrl->pNetBufCfg->pClDescTbl->clSize = CLUSTER_SIZE; pDrvCtrl->pNetBufCfg->pClDescTbl->clNum = pDrvCtrl->nClusters * 10;
pDrvCtrl->pNetBufCfg->clDescTblNumEnt = 1;
11. Call netPoolCreate( ) with the link pool function table. if ((pDrvCtrl->endObj.pNetPool =
netPoolCreate ((NETBUF_CFG *)pDrvCtrl->pNetBufCfg, _pLinkPoolFuncTbl)) == NULL) return (ERROR);
12. Free the pDrvCtrl->pNetBufCfg and pDrvCtrl->pNetBufCfg->pCIDescTbl. free (pDrvCtrl->pNetBufCfg->pClDescTbl); free (pDrvCtrl->pNetBufCfg);
网络驱动中一种很重要的数据结构
END_OBJ
typedef struct end_object {
NODE node; /* root of the device hierarchy */ DEV_OBJ devObject; /* accesses your device’s ctrl struct */ FUNCPTR receiveRtn; /* routine to call on reception */ BOOL attached; /* indicates unit is attached */ SEM_ID txSem; /* transmitter semaphore */ long flags; /* various flags */ struct net_funcs *pFuncTable; /* function table */ M2_INTERFACETBL mib2Tbl; /* MIBII counters */
struct ETHER_MULTI *pAddrList; /* head of the multicast address
list */
49 / 71
int nMulti; /* number of elements in the list */ LIST protocols; /* protocol node list */ BOOL snarfProto; /* is someone snarfing us? */
void* pMemPool; /* memory cookie used by MUX bufr mgr. */
M2_ID* pMib2Tbl; /* RFC 2233 MIB objects */ } END_OBJ;
这里这里的flag 很有含义,说明网络的各种参数 IFF_UP 接口是开启 的 IFF_BROADCAST 广播地址有效 IFF_DEBUG 正在调试
IFF_LOOPBACK loopback 网络(什么是loopback网络) IFF_POINTOPOINT 接口是点对点网络 IFF_NOTRAILERS 该设备避免使用trailers IFF_RUNNING 该设备成功被分配资源 IFF_NOARP 没有地址处理协议 IFF_PROMISC 接收所有的数据包 IFF_ALLMULTI 接收所有的广播包 IFF_OACTIVE 发送过程
IFF_SIMPLEX 该设备不能听到自己的发送 IFF_LINK0, IFF_LINK1, IFF_LINK2 每一层自定义bit IFF_MULTICAST 支持多播 IFF_LOAN 支持缓存loaning IFF_SCAT 支持scatter-gather
设备结构体
typedef struct dev_obj
50 / 71
相关推荐: