当前位置: 首页 > news >正文

LWIP网络接口管理

       主要内容参照4. LwIP的网络接口管理 — [野火]LwIP应用开发实战指南—基于野火STM32 文档,整理出来自用。

1、netif概念(应用层虚拟的网卡实例对象

        理解网络接口重点理解netif,netif是LwIP抽象出来的网卡,LwIP协议栈可以使用多个不同的接口,而ethernetif.c文件则提供了netif访问各种不同的网卡,每个网卡有不同的实现方式,用户只需要修改ethernetif.c文件即可。当一个设备中有多个网卡,LwIP会将每个用netif描述的网卡连接成一个链表(单向链表),该链表就记录每个网卡的netif。

2、 netif的应用流程

        注册初始化接口(netif_add())——>配置接口属性(地址网关等)——>启用接口(netif_set_up(netif))

3、挂载网卡

        如果一个设备当前是还没有网卡的,当调用netif_add()函数挂载网卡后,其过程如图1所示,当设备需要挂载多个网卡的时候, 就多次调用netif_add()函数即可,新挂载的网卡会在链表的最前面,具体见图2。

4、low_level_init/inoutput(硬件实际交互的对象)

  low_level_init 通常是在网络接口初始化函数(如 ethernetif_init)中被调用,是硬件相关初始化的具体实现。它的核心职责是:

  • 初始化网络硬件寄存器(如 MAC 控制器、PHY 芯片等)
  • 配置硬件工作模式(如速率、双工模式)
  • 初始化发送 / 接收缓冲区
  • 使能硬件中断(用于数据接收和发送完成通知)

        low_level_init()为网卡初始化函数,它主要完成网卡的复位及参数初始化,根据实际的网卡属性进行配置netif中与网卡相关的字段,例如网卡的MAC地址、长度,最大发送单元等。

        low_level_output()函数为网卡的发送函数,它主要将内核的数据包发送出去,数据包采用pbuf数据结构进行描述,该数据结构是一个比较复杂的数据结构,后续我们会详细讲解。

        low_level_input()函数为网卡的数据接收函数,该函数会接收一个数据包,为了内核易于对数据包的管理,该函数必须将接收的数据封装成pbuf的形式。

http://www.lryc.cn/news/613488.html

相关文章:

  • [airplay2] airplay2简略介绍
  • 二分查找算法,并分析其时间、空间复杂度
  • IIS7.5下的https无法绑定主机头,显示灰色如何处理?
  • 前后端加密传数据实现方案
  • [ java SE ] 多人聊天窗口1.0
  • 强光干扰下裂缝漏检率↓82%!陌讯轻量化模型在道路巡检的落地实践
  • redis--黑马点评--用户签到模块详解
  • JAVA,Maven继承
  • 力扣经典算法篇-46-阶乘后的零(正向步长遍历,逆向步长遍历)
  • Linux Shell为文件添加BOM并自动转换为unix格式
  • 数据分析——Pandas库
  • 什么是 TDengine IDMP?
  • 机试备考笔记 7/31
  • 学习设计模式《二十一》——装饰模式
  • 人生后半场:从广度到深度的精进之路
  • 设计模式中的行为模式
  • 多线程 future.get()的线程阻塞是什么意思?
  • tcpdump问题记录
  • 【多重BFS】Monsters
  • 【实时Linux实战系列】基于实时Linux的高频交易系统构建
  • 【C语言】深入理解编译与链接过程
  • 数据标注之数据集的类型与如何标注
  • 时间并非维度:论其作为空间变化的转换系数
  • 大模型LL04 微调prompt-Tuning方法入门(背景与发展)
  • 深度学习的视觉惯性里程计(VIO)算法优化实践
  • 数据结构学习之二叉树
  • 深度学习(2):自动微分
  • LSTM 单变量时序预测—pytorch
  • JAVA第六学:数组的使用
  • 【数据结构】二叉树练习