1 onps栈使用说明——API接口手册( 二 )


示例
参见上一篇博文《onps栈移植说明(3)——添加网卡》 。
返回目录
ethernet_add功能
增加新的ethernet网卡到协议栈 。
原型
PST_NETIF ethernet_add(const CHAR *pszIfName,
const UCHAR ubaMacAddr[ETH_MAC_ADDR_LEN],
PST_IPV4 pstIPv4,
PFUN_EMAC_SEND pfunEmacSend,
void (*pfunStartTHEmacRecv)(void *pvParam),
PST_NETIF *ppstNetif,
EN_ONPSERR *penErr);
入口参数

  • pszIfName:网卡名称
  • ubaMacAddr:网卡 mac 地址
  • pstIPv4:指向 ST_IPV4 结构体的指针(include/netif/netif.h) , 这个结构体保存用户指定的 ip地址、网关、dns、子网掩码等配置信息
  • pfunEmacSend:函数指针 , 指向发送函数,函数原型为 INT(* PFUN_EMAC_SEND)(SHORT sBufListHead, UCHAR *pubErr),这个指针指向的其实就是网卡发送函数
  • pfunStartTHEmacRecv:指向线程启动函数的指针,协议栈使用该指针指向的函数启动协议栈内部工作线程——ethernet网卡接收线程
  • ppstNetif:二维指针,协议栈成功注册网卡后 ethernet_add()函数会返回一个 PST_NETIF 指针给调用者,这个参数指向这个指针 , 其最终会被协议栈通过 pvParam 参数传递给 pfunStartTHEmacRecv 指向的函数
  • penErr:指向错误编码的指针 , 当函数执行失败,该参数用于接收实际的错误码
返回值
注册成功,返回一个 PST_NETIF 类型的指针,该指针指向新添加的网卡控制块 , 唯一的标识新添加的这块网卡;注册失败则返回 NULL,具体错误信息参见 penErr参数携带的错误码 。
示例
参见上一篇博文《onps栈移植说明(3)——添加网卡》 。
返回目录
ethernet_del功能
删除ethernet网卡 。
原型
void ethernet_del(PST_NETIF *ppstNetif);
入口参数
  • ppstNetif:指向网卡控制块PST_NETIF指针的指针 , 其指向ethernet_add()函数返回的PST_NETIF指针的首地址
返回值

示例

返回目录
ethernet_put_packet功能
将收到的ethernet报文推送给协议栈 。
原型
void ethernet_put_packet(PST_NETIF pstNetif, PST_SLINKEDLIST_NODE pstNode);
入口参数
  • pstNetif:指向网卡控制块ST_NETIF的指针
  • pstNode:指向协议栈ethernet网卡接收链表节点的指针
返回值

示例
参见上一篇博文《onps栈移植说明(3)——添加网卡》 。
返回目录
netif_is_ready功能
检查网卡是否已进入或正处于正常工作状态 。
原型
BOOL netif_is_ready(const CHAR *pszIfName);
入口参数
  • pszIfName:指向网卡名称的指针
返回值
返回TRUE,网卡已就绪;反之则返回FALSE 。
示例

返回目录
netif_get_by_name功能
通过网卡名称查找网卡 。
原型
PST_NETIF netif_get_by_name(const CHAR *pszIfName);
入口参数
  • pszIfName:指向网卡名称的指针
返回值
存在则返回指向网卡控制块ST_NETIF的指针;否则返回NULL 。
示例

返回目录
buddy_alloc功能
向内存管理单元(mmu)申请一块指定大小的内存 。
原型
void *buddy_alloc(UINT unSize, EN_ONPSERR *penErr);
入口参数
  • unSize:申请分配的内存大?。?单位:字节
  • penErr:指向错误编码的指针 , 当函数执行失败,该参数用于接收实际的错误码
返回值
申请成功返回内存首地址;反之则返回NULL,具体错误信息参见 penErr参数携带的错误码 。
示例
参见buf_list_merge_packet函数示例或上一篇博文《onps栈移植说明(3)——添加网卡》 。
返回目录
buddy_free功能
归还(释放)先前通过buddy_alloc()函数申请的内存 。
原型
BOOL buddy_free(void *pvStart);
入口参数
  • pvStart:指向要归还的内存首地址的指针
返回值
成功归还内存返回TRUE;当pvStart指向的并不是buddy_alloc()函数返回的内存首地址时则返回FALSE 。
示例
参见buf_list_merge_packet函数示例 。
返回目录
buf_list_get_next_node功能
按链接顺序从链表首部逐个取出链表节点 。
原型
void *buf_list_get_next_node(SHORT *psNextNode, USHORT *pusDataLen);
入口参数
  • psNextNode:指向链表下一个节点的指针
  • pusDataLen:指向数据长度的指针,出口参数 , 其用于接收节点携带的数据长度
返回值
如果尚未到达链表尾部,则返回当前链表节点携带的数据的首地址;反之则返回NULL 。

推荐阅读