lwip netbuf
lwip2.0.2
netbuf_new——分配netbuf结构体的内存。
netbuf_alloc,分配netbuf中pbuf内存(pbuf_alloc中PBUF_RAM类型,包括pbuf结构体和payload区),如果使用nefbuf_ref的话,则不需要此步
netbuf_ref,分配netbuf中pbuf内存(pbuf_alloc中PBUF_REF类型,包括pbuf结构体,无payload区)
netbuf_free,调用的是pbuf_free
netbuf_delete,删除nef_buf结构体
使用方法:
接收过程————
定义netbuf指针,netbuf结构体协议栈会分配(没找到在哪儿分配的?见后面分析),包括pbuf和netbuf结构体
接收函数会获取协议栈分配的netbuf指针——netconn_recv(conn, &buf);
获取数据和长度——netbuf_data(bufrx, (void *)&drcv, &dlen); !!!netbuf有可能有好几个,可能需要遍历。
释放netbuf结构体(同时释放netbuf结构体和pbuf内存)——netbuf_delete(bufrx);
发送过程————
——已有数据,datasend[100]
定义netbuf指针(能否直接定义netbuf变量?)——struct netbuf *buf;
申请netbuf结构体——buf = netbuf_new();
引用待发送的数据——netbuf_ref(buf, datasend, 20);
发送数据——netconn_sendto(conn, buf, &addrto, 2020);
接收过程的netbuf在哪儿分配的:
udp.c中的udp_input中最后会调用
pcb->recv(pcb->recv_arg, pcb, p, ip_current_src_addr(), src);
pcb的recv的是新建netconn时,pcb_new时挂接的,
挂接的是api_msg.c中的recv_udp函数,在这里完成mbox post
在该函数里分配netbuf,
会往netconn的接收邮箱中发送消息(对于netconn而言,只有接收邮箱,没有发送邮箱,发送是不需要邮箱的)
sys_mbox_trypost(&conn->recvmbox, buf)
在以下函数中完成
api_lib.c中的netconn_recv,对于udp最后会调用netconn_recv_data
最后会调用sys_arch_mbox_fetch(&conn->recvmbox, &buf, conn->recv_timeout),接收邮箱
lwip netbuf的更多相关文章
- 由lwip的mbox中netbuf传递看指针的指针
如果使用netconn API的话,udp接收过程需要用到mbox传递接收的包(传递的是指针) mbox发送过程: api_msg.c中recv_udp中会将接收的包发送给udp的接收mbox sys ...
- LwIP源代码文件目录解析
1 -- LwIP源代码文件目录 root@motadou:/home/motadou/lwip/lwip-1.4.1# tree . ├── CHANGELOG ├── COPYING ├── do ...
- 基于 LWIP 建立 TCP Server 与主机通信实验
LWIP 版本:2.0.3 上一篇文章是写如何将 LWIP 移植到板子上,今天晚上记录基于 LWIP 实现与主机的网络通信. 先是打开了原子的实验例程,大概浏览了一遍,觉得 TCP 网络网络通信也就是 ...
- LwIP Application Developers Manual12---Configuring lwIP
1.前言 2.LwIP makefiles With minimal features C_SOURCES = \ src/api/err.c \ src/core/init.c \ src/core ...
- LwIP Application Developers Manual6---Application API layers
1.前言 lwIP提供3种应用编程接口来跟TCP/IP内核通信,如下所示: 低水平的内核/回调或raw API 2个高水平序列API: 1) netconn API 2) socket API(为了兼 ...
- LwIP buffer management, memory configuration options
http://www.st.com/st-web-ui/static/active/cn/resource/technical/document/application_note/DM00036052 ...
- lwip 使用记录(1)
原子F429的lwip实验:网络实验8 NETCONN_TCP客户端实验 代码 //tcp客户端任务函数 static void tcp_client_thread(void *arg) { OS_C ...
- lwip的内存管理
lwip可以不用malloc,而完全用pool,全用全局变量,没看明白怎么实现的. #if LWIP_NETCONN || LWIP_SOCKET LWIP_MEMPOOL(NETBUF, MEMP_ ...
- 【lwip】005-lwip内核框架剖析
目录 前言 5.1 lwip初始化 5.2 内核超时 5.2.1 内核超时机制 5.2.2 周期定时机制 5.2.3 内核超时链表数据结构 5.2.4 内核超时初始化 5.2.6 超时的溢出处理 5. ...
随机推荐
- 关于java php go 中AES加解密秘钥长度问题
今天心血来朝,想用go把php中的一个小功能重写一下,但在解密aes加密的数据时碰到了个坑! php的mcrypt拓展(貌似php7.1版本以上不支持了)提供了aes的加解密: 而且php aes 的 ...
- 理解 SQL 开窗函数
一次面试被问到开窗函数,懵逼了,赶紧补补总结一下.... 开窗函数也是函数,所以 比如在原来的查询上添加一个总数列 create table ztest( id int identity, c1 in ...
- Apache Hudi使用问题汇总(一)
1.如何写入Hudi数据集 通常,你会从源获取部分更新/插入,然后对Hudi数据集执行写入操作.如果从其他标准来源(如Kafka或tailf DFS)中提取数据,那么DeltaStreamer将会非常 ...
- 用Django自动生成表遇到问题
因为以前在数据库中已经生成过Django 叫App01下的表,所以无法生成,在数据库中执行这个命令 DELETE FROM django_migrations WHERE app='App01';然后 ...
- window10配置python虚拟环境的路径
当我们搭建python+django项目的时候,需要配置虚拟环境,从而使项目与项目之间的包相互隔离,互不影响. 1.配置虚拟环境前,首先需要安装两个包 pip install virtualenvwr ...
- 系列免费课程汇总(Java、单体应用、微服务、物联网、SaaS)
概述 2020年春节尽在眼前,又忙碌了一年的你一定有很多收获:是升职加薪,还是收获爱情?是买房置业,还是新添人口? 我在2019年的最大收获是:我的第二枚千金诞生,使我顺利加入富豪行列! 新年伊始我们 ...
- Markdown 标记 粘贴到 小书 匠 才知道 哦
# 一级标题## 这是二级标题### 三级标题##### 五级 高阶== 低阶-- [TOC] > 这是一级引用>>这是二级引用>>> 这是三级引用 ```java ...
- 生成链接中的全限定URL(Generating Fully Qualified URLs in Links) | 在视图中生成输出URL | 高级路由特性
结果:<a class="myCSSClass"href="https://myserver.mydomain.com/Home/Index/MyId#myFrag ...
- 基于bootstrap和knockoutjs使用 mvc 查询
这是我摘抄的码 http://pan.baidu.com/s/1nvKWdsd
- NOI2.2 8758:2的幂次方表示
描述任何一个正整数都可以用2的幂次方表示.例如: 137=27+23+20 同时约定方次用括号来表示,即ab可表示为a(b).由此可知,137可表示为: 2(7)+2(3)+2(0) 进一步:7=22 ...