【LwIP源码学习1】LwIP网络接口管理

lwIP TCP/IP 协议栈笔记之一:概述和目录结构详解 目录 1. lwIP概述 1.1 TCP/IP 协议简介 1.2 lwIP 简介 1.2.1 目录结构 lwip-2.1.2 1.2.2 lwip-2.1.2/src 2 目录结构详解 2.1 /doc 2.2 /test 2.3 /src 2.3.1 APIs 2.3.2 /src/api 2.3.3 /src/apps 2.3.4 /src/core 2.3.5 /... 阅读详情

netif结构体

netif是Lwip抽象出来的网卡,结构体的声明在Lwip/include/lwip/netif.h文件中。
Lwip将每个用netif描述的网卡连接成一个链表(单向链表)。
以下是在netif.h头文件中定义的一些netif的操作函数

struct netif *netif_add_noaddr(struct netif *netif, void *state, netif_init_fn init, netif_input_fn input);

#if LWIP_IPV4
struct netif *netif_add(struct netif *netif,
                            const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw,
                            void *state, netif_init_fn init, netif_input_fn input);
void netif_set_addr(struct netif *netif, const ip4_addr_t *ipaddr, const ip4_addr_t *netmask,
                    const ip4_addr_t *gw);
#else /* LWIP_IPV4 */
struct netif *netif_add(struct netif *netif, void *state, netif_init_fn init, netif_input_fn input);
#endif /* LWIP_IPV4 */
void netif_remove(struct netif * netif);

操作函数中第一个参数是netif指针,用这种方式达到了C++中类的封装效果,有设计模式中工厂模式的设计思想,也就是该结构体表示对象的数量是不确定的,随时可能变多或者单少,这种情况下可以使用操作函数+首个参数是结构体指针的方式,方便对多个同类对象管理。
如果系统中对象的数量是固定的并且不多,比如系统只有两个串口,或者以后最多再加一个串口,这种情况属于设计模式中的单例模式,把结构体的声明和响应的操作函数分开更好一些,如:

//serial_port_a .h
struct serial_port_a {
	//串口A结构体内容
}; 

unsigned char read_serial_port_a(unsigned char *pbuf, unsigned int size);
//serial_port_b .h
struct serial_port_b {
	//串口B结构体内容
}; 

unsigned char read_serial_port_b(unsigned char *pbuf, unsigned int size);

netif的使用

LwIP是通过链表管理所有网卡的,所以第一步通过netif_add()函数将网卡挂载到netif_list链表中。
netif_add()的实现在LwIP\core\netif.c文件中。

struct netif *
netif_add(struct netif *netif,
#if LWIP_IPV4
          const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw,
#endif /* LWIP_IPV4 */
          void *state, netif_init_fn init, netif_input_fn input)

需要传入的参数:netif结构体指针、IP地址、子网掩码、默认网关、网卡初始化函数、网络数据接收函数。
netif_add()函数在TCPIP_Init()函数中被调用,TCPIP_Init()函数在User\arch\sys_arch.c里。

netif底层相关函数

最底层的有三个函数

static void low_level_init(struct netif *netif)

负责根据netif初始化响应的网卡。

static err_t low_level_output(struct netif *netif, struct pbuf *p)

负责把p指向的pbuf结构体内的数据发送给netif表示的网卡。

static struct pbuf * low_level_input(struct netif *netif)

负责从netif表示的网卡的网卡接收数据,并且将数据封装成pbuf的形式。

函数调用过程

low_level_init被调用过程如下:
在这里插入图片描述
low_level_input被调用过程如下:
在这里插入图片描述
在low_level_init创建一个进行执行ethernetif_init函数,ethernetif_init中循环检测网口中是否接收到新数据。
low_level_output在ethernetif_init中与相应的网卡建立关联:

  netif->linkoutput = low_level_output;
  
  /* initialize the hardware */
  low_level_init(netif);
LwIP 入门(1) 最近正初学LwIP,走了不少弯路,费时费力却不讨好,目前仍在研究中,下面是一点心得,供没接触过网络的人参考,也希望高手指点指点其中的错误或者正在研究的朋友一起交流交流。我觉得首先应找一个实例运行起来,结合网上的资料看源代码,这样效果会好很多,既有一个直观、实在的感性认识,又可以及时验证所学习的理论。这几篇不深入研究代码,只按照实际的收发过程的顺序介绍协议栈的功能结构,而且只介绍TCP/IP/ARP 阅读详情

相关推荐

使用标准库对STM32F407ZGT6移植LWIP(逻机-全网最全)

1、移植准备工作 1.1 基础工程 在移植之前我们需要一个基础工程,因为我们要用到内存管理,因此这里我们使用实验 37内存管理实验作为基础工程,我们在这个工程的基础上完成本章的移植过程。 本章我们要使用到 USMART 组件,因此我们要在内存管理实验的工程上添加 USMART 组件,如果已经添加了的话就不用再添加了,关于 USMART 组件的使用请参考我们的:STM32F4开发指南实验 14 USMART 实验。将试验14USMART 实验下的USMART文件夹复制到当前的工程目录,然后将USMART组件

果果小师弟的博客 1万+

zynq Lwip学习笔记-netif_add函数

最近在学习zynq中的lwip协议族,找不到很好的记笔记的地方,所以就用csdn记录一下自己的学习过程。现在对lwip不熟悉,只是把官方的lwip echo server例程跑了一下,能跑通就一点点的照着学了,笔记都是根据自己的理解写的,而且部分内容可能也只针对lwip echo server例程有效,笔记可以供有缘人参考,但不敢保证全对,有不对的地方也期待有高人指点一二。

weixin_40356705的博客 1380

基于STM32单片机的LwIP协议(二)LwIP 简介

目录2.1 LwIP 的优缺点2.2 LwIP 的文件说明2.2.1 如何获取 LwIP 源码文件2.2.2 LwIP 文件说明2.3 使用 vscode 查看源码2.3.1 查看文件中的符号列表(函数列表)2.4 LwIP 的三种编程接口2.4.1 RAW/Callback API2.4.2 NETCONN API2.4.3 SOCKET API 2.1 LwIP 的优缺点 此文以 LwIP 2. 1.2 为主要对象进行讲解,后续中出现的 LwIP 如果没有特殊声明,均指 2.1.2 版本。此时的 LwI

果果小师弟的博客 1739

LWIP学习笔记——网络接口

LWIP网络接口相关函数

weixin_48269315的博客 2018

深入解析LWIP轻量级协议栈源码

LWIP(Lightweight IP)是一个开源的TCP/IP协议栈实现,专注于为嵌入式系统提供小型化和可配置的网络通信解决方案。该协议栈的目标是在不使用操作系统的情况下,能够为各种小型嵌入式系统提供网络通信功能,例如网络打印机、路由器、家庭自动化设备等。

weixin_42376614的博客 1054

sentaurus学习笔记(VDMOS仿真)(三)

在Sentaurus中,这通常意味着在2D仿真中,x轴指向下,y轴指向右。定义了在2D模拟中,网格尺寸按照一定的增长率进行扩展,这里的增长率为2.0,意味着远离最小尺寸区域的网格单元大小将是最小尺寸的两倍。定义了2D模拟中网格单元的最小尺寸为0.001微米,这有助于控制网格的最小大小,从而影响仿真的精度和计算成本。表示启用中等级别的日志信息输出,这有助于用户了解仿真过程中发生的事件和可能的问题。表示启用保存调试文件,这可以帮助用户在仿真过程中检查和验证模型的状态。这行代码设置了仿真过程中使用的线程数。

qq_52640792的博客 1807

Lwip从入门到放弃之(四)---网络接口管理

对网络接口的有效管理,是协议栈能与外部进行通信的关键。我们把网络接口管理描述成链路层的部分,它旨在对具体网络硬件、软件进行统一的封装,并未IP层提供统一的接口服务。 为了实现对这些接口的管理,LwIP会为每一个接口分配一个netif结构,这个结构用来描述每种接口的特性,例如接口IP地址,接口状态等。内核会将所有的网络接口组织在一个叫做netif_list的链表上,当有IP数据包需要发送时,IP层会根据数据包的IP地址,在netif_list上选择一个最合适的网络接口,并调用其注册的数据包发送函数,将数据包发

rgxiwei的博客 1448

用了7年的 source insight 3.5 背景色及字体配置(提升code效率)

在此记录并share用了7年的 source insight 3.5 背景色及字体配置,提升阅读代码效率

Chasing Freedom 7525

【lwIP(第四章)】网络接口

lwIP协议栈支持多种不同的网络接口(网卡),由于网卡是直接和硬件平台打交道,硬件不同则处理也是不同的,所以由用户提供最底层的接口函数,lwIP提供统一的接口,但是底层的实现需要用户自己去完成。

K3169的博客 3483

华为 MetaERP · 本体论驱动的 PTP 全流程智能建模方案

华为MetaERP通过“本体+事件+图谱+Agent”四位一体架构,将传统ERP从“记录系统”升级为“智能执行系统”。基于OWL本体实现业务语义精准表达,融合LLM与元数据多租能力,构建可推理、可治理的PTP全流程智能模型,解决AI理解业务逻辑难题,实现三单匹配自动化、关账效率提升30%、成本降低50%,推动企业数字化迈向可信智能新范式。

金牌架构师 181

使用字体解密技术爬取懂车帝二手车数据

本文介绍了一种针对懂车帝二手车平台的字体加密数据采集方案。通过抓包分析,识别出关键API接口并解析了字体加密机制,成功实现了价格等敏感数据的解密。方案采用requests库发送POST请求获取JSON数据,利用fontTools解析字体映射关系,建立加密字符到真实数字的转换算法。程序支持多页采集,提取车辆名称、价格、年份等12个维度的信息,并自动保存为Excel格式。技术亮点包括动态字体解析、健壮的数据处理和分页优化,为二手车市场分析提供了可靠的数据支持。文中特别强调数据采集的合法合规性,建议仅用于学术研究

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 1310

lwip网络接口netif

一个系统中可能有多个网络接口,有可能是以太网,有可能是WiFi,也有可能是其他的网络接口。 在lwip中每一个网络接口都由一个netif结构体表示。表示不同网卡的netif结构体链接成一个链表。全局变量struct netif *netif_list指向该链表表头。 全局变量struct netif *netif_default指向的netif结构所表示的网卡为缺省网卡。在发送消息的时候,会首

大树的专栏 7008

YOLOv11涨点改进 | 检测头Head改进篇 | 利用DynamicConv高效动态卷积改进YOLOv11检测头,DyHead通过增强检测头操作,轻量化改进、提高模型目标检测的精度

本文提出了一种基于动态卷积(DynamicConv)的YOLOv11检测头改进方法v11Detect_DyHead。该方法通过引入多专家机制和动态权重调整,在增加参数量的同时保持较低计算复杂度,有效解决了低FLOPs模型难以从大规模预训练中获益的问题。文章详细介绍了DynamicConv模块的原理和实现,包括其参数高效特性、多专家机制和动态权重生成方式。同时提供了完整的代码实现和添加该模块的具体步骤,并给出了相应的YAML配置文件。实验表明,该方法在保持较低计算开销的同时显著提升了模型性能,适用于视觉和语言

Ai缝合怪、助力小伙伴高效发论文 535

lwip可以用于发udp_LwIP协议栈粗解

最近由于有个项目要用到lwIP协议栈,在网上找了一下相关的资料,有些能找到,有些也找不到,于是花了点时间阅读了lwIP协议栈的源码,把主要的框架梳理了一遍,基本算是弄明白了,现在把理解到的内容整理分享一下。在物联网应用方兴未艾之际,lwIP协议栈的应用也算是比较多的,在稳定性和资源占用上都比较优秀,很多SoC厂商也把lwIP移植了到自己芯片的片上系统里。由于是最近阅读的代码,所以下载的是最新的2....

weixin_39900180的博客 402

GB28181 —— 1、Ubuntu20.04下使用ZLMediaKit+WVP搭建GB28181流媒体监控平台(连接带云台摄像机)

GB28181 —— Ubuntu20.04下使用ZLMediaKit+WVP搭建GB28181流媒体监控平台

5461

OpenWRT使用4G/5G无线网卡模块上网

将4G/5G开发板插入设备,终端输入lsusb或lspci,看设备是否识别到4G/5G模块。

1万+

LWIP学习笔记1——基础介绍

1.网络协议的分层模型 物理层(PHY) 规定了传输信号所需要的物理电平、介质特征。 链路层( MAC) 规定了数据帧能被网卡接收的条件,最常见的方式是利用网卡的 MAC 地址,发送方会在欲发送的数据帧的首部加上接收方网卡的 MAC 地址信息,接收方只有监听到属于自己的MAC 地址信息后,才会去接收并处理该数据。 网络层: 每台网络设备都应该有自己的网络地址,网络层规定了主机的网络地址该如何定义...

sinat_31039061的博客 6947

zemax---光学设计基础概念篇(持续更新中)

光学设计相关知识概念

u011699626的博客 1145

深入学习lwip

引入: 物联网时代,我们的终端设备都需要连入互联网中,将终端各个节点的信息进行汇总,上传到云进行大数据分析,最终得到用户想要的信息。作为开发者的角度,设备连网后可以远程升级程序,远程调试等,大大降低了生产调试人的工作量。而我们的设备呢,接入网络比较常见的方式就是连接网线啊,或者内置wifi模块,或者接了GPRS的模块等。 单片机的以太网方案,可参考以前的文章 https://blo...

lzs940320的博客 2326

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LWIP学习笔记

本文介绍了LWIP的源码文件结构。

火山宝 && 王林宝 464

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

LwIP协议栈学习指南

LwIP协议栈学习指南摘要 LwIP是轻量级TCP/IP协议栈,适用于嵌入式系统开发。该指南分为三部分:1)基础认知:讲解TCP/IP四层模型(链路层、网络层、传输层、应用层)和嵌入式网络硬件(以太网控制器、WiFi模块等);2)环境搭建:介绍移植准备工作、关键配置修改、编译设置及ping例程调试;3)API实战:详细说明Socket API实现,提供TCP服务器和UDP客户端的代码示例。通过学习可掌握LwIP协议栈的核心原理、移植方法和实际应用技巧,适用于嵌入式网络开发人员。

淼淼的博客 | Miaomiao_IoT 1905

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

lwip源码分析1------综述及设备驱动层

1.tcpip一般的实现方式有: ●每一层一个进程,网络接口层,ip层,tcp层,应用程序层,这个方法的好处是各层之间结构清晰明了,容易阅读和调试,但是这种分层思想带来的通病就是效率低下,如果按照这种实现方式即上层应用接受一个数据包,要通过网络接口层进程->ip层进程->tcp层进程->应用程序层进程,这种效率是不能接受的。 ●Tcp,ip协议栈处于内核态,属于操作系统内核的一部分,同属于内核

xiyang18的专栏 756

LWIP裸机移植笔记

基于正点原子的教程学习笔记之后会分析源码。

qq_36658033的博客 715

庐山真面目之——LWIP初探

目录LWIP简介网络层协议分层模型介绍 LWIP源代码结构lwip源码文件说明lwip的contrib包文件说明 以太网接入MCU方案LWIP结构框图lwIP 是 Light Weight(轻型)IP 协议,有无操作系统的支持都可以运行。lwIP 实现的重点 是在保持 TCP/IP 协议主要功能的基础上减少对 RAM 的占用,它只需十几 KB 的 RAM 和 40K 左右的 ROM 就可以运行,这使 lwIP 协议栈适合在低端的嵌入式系统中使用。lwIP 的设计理 念下,既可以无操作系统使用,也可以带操作系

qq_43460068的博客 2881

LwIP相关博文

文章目录

山音水月 401
上一篇: 【链接、装载与库】动态链接中的延迟绑定(PLT)
下一篇: 【开源项目赏析】遥控四旋翼直升机项目——MiniQ
inputA
博客等级 码龄7年 297粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值