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的更多相关文章

  1. 由lwip的mbox中netbuf传递看指针的指针

    如果使用netconn API的话,udp接收过程需要用到mbox传递接收的包(传递的是指针) mbox发送过程: api_msg.c中recv_udp中会将接收的包发送给udp的接收mbox sys ...

  2. LwIP源代码文件目录解析

    1 -- LwIP源代码文件目录 root@motadou:/home/motadou/lwip/lwip-1.4.1# tree . ├── CHANGELOG ├── COPYING ├── do ...

  3. 基于 LWIP 建立 TCP Server 与主机通信实验

    LWIP 版本:2.0.3 上一篇文章是写如何将 LWIP 移植到板子上,今天晚上记录基于 LWIP 实现与主机的网络通信. 先是打开了原子的实验例程,大概浏览了一遍,觉得 TCP 网络网络通信也就是 ...

  4. 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 ...

  5. LwIP Application Developers Manual6---Application API layers

    1.前言 lwIP提供3种应用编程接口来跟TCP/IP内核通信,如下所示: 低水平的内核/回调或raw API 2个高水平序列API: 1) netconn API 2) socket API(为了兼 ...

  6. LwIP buffer management, memory configuration options

    http://www.st.com/st-web-ui/static/active/cn/resource/technical/document/application_note/DM00036052 ...

  7. lwip 使用记录(1)

    原子F429的lwip实验:网络实验8 NETCONN_TCP客户端实验 代码 //tcp客户端任务函数 static void tcp_client_thread(void *arg) { OS_C ...

  8. lwip的内存管理

    lwip可以不用malloc,而完全用pool,全用全局变量,没看明白怎么实现的. #if LWIP_NETCONN || LWIP_SOCKET LWIP_MEMPOOL(NETBUF, MEMP_ ...

  9. 【lwip】005-lwip内核框架剖析

    目录 前言 5.1 lwip初始化 5.2 内核超时 5.2.1 内核超时机制 5.2.2 周期定时机制 5.2.3 内核超时链表数据结构 5.2.4 内核超时初始化 5.2.6 超时的溢出处理 5. ...

随机推荐

  1. Spring Boot2 系列教程 (二) | 第一个 SpringBoot 工程详解

    微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 哎呦喂,按照以往的惯例今天周六我的安排应该是待在家学学猫叫啥的.但是今年这种日子就可能一去不复返了,没法办法啊.前 ...

  2. 数字金字塔 动态规划(优化版) USACO 一维dp压缩版

    1016: 1.5.1 Number Triangles 数字金字塔 时间限制: 1 Sec  内存限制: 128 MB提交: 9  解决: 8[提交] [状态] [讨论版] [命题人:外部导入] 题 ...

  3. 解决el-tree lazy懒加载时,连续勾选前两个子节点后第二次进入默认选中时,将父节点也勾选的问题

    在用到el-tree的懒加载和默认勾选功能时,若第一次勾选前几个连续节点,第二次进入默认勾选时,由于el-tree子节点尚未完全加载(只加载出来前几个),默认勾选已经开始(已加载出来的子节点被默认勾选 ...

  4. STL 结构体内重载 一个比较运算符

    struct node { ll a, b; bool operator< (const node &c)const{ return a < c.a; } }pre[eps];

  5. Gitlab应用——系统管理

    ​ 查看linux系统信息 ​ 查看日志 ​ ​ 创建账号 ​ 选择regular,这是一个普通账号,点击“create user”账号创建完成 ​ 点击“User”,然后点击“New user”.使 ...

  6. java面试题-spring篇

    这次是关于spring的面试题,和上次一样依旧挑了几个具有代表性的. 一.  谈谈你对 Spring 的理解 Spring 是一个开源框架,为简化企业级应用开发而生.Spring 可以是使简单的 Ja ...

  7. 第二阶段冲刺个人任务——two

    今日任务: 优化作业查询结果,按学号排列. 昨日成果: 修改注册界面.

  8. 如何使用Serilog.AspNetCore记录ASP.NET Core3.0的MVC属性

    这是Serilog系列的第三篇文章. 第1部分-使用Serilog RequestLogging减少日志详细程度 第2部分-使用Serilog记录所选的终结点属性 第3部分-使用Serilog.Asp ...

  9. copy and swap技巧与移动赋值操作符

    最近在实现一个Delegate类的时候碰到了一个问题,就是copy and swap技巧和移动赋值操作符有冲突. 比如有以下一个类: class Fun { public: Fun(const Fun ...

  10. BOZJ-2590 优惠券

    BOZJ-2590 优惠券 题目: 约翰需要买更多的奶牛!交易市场上有n头奶牛等待出售,第ii头奶牛的原价是\(p_i\)元,使用优惠券之后,折扣价为\(c_i\)元.约翰有m元钱和k张优惠券.请问约 ...