原型
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 。
示例
参见上一篇博文《onps栈移植说明(3)——添加网卡》 。
返回目录
buf_list_get_len功能
统计链表所有节点携带的数据长度之和 。
原型
UINT buf_list_get_len(SHORT sBufListHead);
入口参数
- sBufListHead:链表首地址
返回链表所有节点携带的数据长度之和 。
示例
参见buf_list_merge_packet函数示例或上一篇博文《onps栈移植说明(3)——添加网卡》 。
返回目录
buf_list_merge_packet功能
从链表首节点开始顺序取出数据将其放入用户指定的缓冲区,把零散的链表数据合并成一块连续数据 。
原型
void buf_list_merge_packet(SHORT sBufListHead, UCHAR *pubPacket);
入口参数
- sBufListHead:链表首地址
- pubPacket:指向用户缓冲区的指针,其用于接收合并后的数据以返回给用户使用
无
示例
EN_ONPSERR enErr;UINT unDataLen = buf_list_get_len(sBufListHead /* 链表首地址 */);UCHAR *pubBuf = (UCHAR *)buddy_alloc(unDataLen, &enErr); //* 申请一块缓冲区用于保存合并后的数据if(pubBuf){//* 合并,合并后的数据保存在了pubBuf中,数据长度为unDataLenbuf_list_merge_packet(sBufListHead, pubBuf);//* 在这里增加你自己的代码处理合并合并后的数据……//* 处理完毕,释放刚才申请的内存buddy_free(pubBuf);}
返回目录2. Berkeley sockets协议栈提供的伯克利套接字(Berkeley sockets)并不是严格按照传统socket标准设计实现的,而是我根据以往socket编程经验,以方便用户使用、简化用户编码为设计目标,重新声明并定义的一组常见socket接口函数 。协议栈简化了传统BSD socket编程需要的一些繁琐操作,将一些不必要的操作细节改为底层实现,比如select/poll模型、阻塞及非阻塞读写操作等 。简化并不意味着推翻,socket接口函数的基本定义、主要参数、使用方法并没有改变,你完全可以根据以往经验快速上手并熟练使用onps栈sockets 。这一点相信你已经从前面的测试代码中得到了佐证 。 socket层所有接口函数的实现源码被封装在了单独的一个文件中,参见bsd/socket.c 。其对应的头文件socket.h有这些接口函数的定义和说明 。目前协议栈提供的socket接口函数有十几个,能够满足绝大部分应用场景的需求 。这些接口函数如下:
经验总结扩展阅读
- 索尼wf1000xm4怎么连接_索尼wf1000xm4使用说明
- 3 onps栈移植说明——添加网卡
- 2 onps栈移植说明——编译器及os适配层移植
- 1 onps栈移植说明——onps栈的配置及裁剪
- 亲爱的客栈杨紫乔欣是哪期?
- <一>从指令角度了解函数堆栈调用过程
- 漫步者funbuds怎么配对_漫步者funbuds使用说明
- 3 Python全栈工程师之从网页搭建入门到Flask全栈项目实战 - 入门Flask微框架
- 全自动洗衣机怎么用 全自动洗衣机使用说明
- 都卷Java,你看看你得学多少技术栈才能工作!