LWIP学习笔记——网络接口

1、网络接口简介

  • 概念:LwIP支持多种不同的网络接口(网卡),由于网卡是直接与硬件平台联系,硬件不同,处理方式也不相同,所以由用户提供最底层的接口函数LwIP提供统一的接口,但是底层的实现需要用户自己去完成(ethernetif.c)

一个系统中可能有多个网络接口,有时候是以太网,有时候是WIFI,也有可能是其他网络接口,在LwIP中每个网卡都由一个netif结构体表示,这些结构体描述了网卡的底层实现函数及状态。有多少个网卡,就有多少个netif结构体,这些结构体以链表的形式进行链接。

  • netif结构体功能:用于抽象每个网卡(WIFI/y以太网/…),在结构体中,声明了发送函数、接收函数等等。

  • 网络结构的使用过程:当上层需要发送数据,首先需要选择使用哪个网络接口进行转发,如以太网接口,则需要调用以太网netif结构体成员变量所指向的函数进行发送

LwIP网络接口示意图:
1

  • netif屏蔽了硬件接口的差异,完成了对不同网络接口的抽象

2、netif结构体

netif是一个单向的链表

  • input:指向数据包输入函数,一般指向ethernet_input函数,也可以是ip4_input函数
  • output:检测目标IP是否存在对应的MAC地址,如果没有,先把数据暂存起来,并发送一个ARP请求包,对方主机相应的发送一个ARP应答包
  • linkoutput:以太网输出函数是指向low_level_output函数
  • link_callback:检测是否存在网线连接
  • state:描述网卡状态
  • mtu:以太网最大传输单元1500字节

以上成员变量根据相关网卡的特性,针对性填写
2

3、LWIP的netif相关函数

  • netif_init()函数,一般是在lwip_init()函数(内核的初始化)调用

3

3.1 LwIP网络接口的全局变量

  • struct netif *netif_list:指向该链表的表头

4

  • struct netif *netif_default:指向的netif结构所表示的网卡为缺省网卡,在发送消息的时候,会首先通过这个网卡,如果没有回应,再使用其他网卡

3.2 netif_add()函数

函数在netif.c文件中实现
如果需要添加网卡接口,则会定义一个netif:struct netif *netif2;
根据代码,我们最多添加255个网卡

/* add this netif to the list */
  netif->next = netif_list;
  netif_list = netif;

5

3.3 netif_remove()

以下是一些主要的步骤,中间可能省略了一些其他步骤
第一步:判断我们要移除的网卡是否为空,不为空跳出相应的if语句,继续执行
第二步:判断要移除的网卡是否处于开启状态,如果是,则将该网卡进行关闭

if (netif_is_up(netif)) {
    /* set netif down before removing (call callback function) */
    netif_set_down(netif);
  }

第三步:判断是否是默认的网卡

/* this netif is default? */
  if (netif_default == netif) {
    /* reset default netif */
    netif_set_default(NULL);
  }

第四步,经过上述几个判断之后,开始正式移除网卡

/*  is it the first netif? */
  if (netif_list == netif) {
    netif_list = netif->next;
  } else {
    /*  look for netif further down the list */
    struct netif *tmp_netif;
    NETIF_FOREACH(tmp_netif) { //for语句
    // #define NETIF_FOREACH(netif) for ((netif) = netif_list; (netif) != NULL; (netif) = (netif)->next)
      if (tmp_netif->next == netif) {
        tmp_netif->next = netif->next;
        break;
      }
    }
    if (tmp_netif == NULL) {
      return; /* netif is not on the list */
    }
  }

3.4 netif_set_default()

设置默认网卡
首先,判断网卡是否为空
6

void
netif_set_default(struct netif *netif)
{
  LWIP_ASSERT_CORE_LOCKED();

  if (netif == NULL) {
    /* remove default route */
    mib2_remove_route_ip4(1, netif);
  } else {
    /* install default route */
    mib2_add_route_ip4(1, netif);
  }
  netif_default = netif;
  LWIP_DEBUGF(NETIF_DEBUG, ("netif: setting default interface %c%c\n",
                            netif ? netif->name[0] : '\'', netif ? netif->name[1] : '\''));
}

4、总结

  • 搞清楚硬件对应的IP地址、子网掩码、网关;
  • netif()有关的函数
  • 设置网卡相应的状态
  • 17
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: "lwip编程指南PDF" 是一份关于lwIP(轻量级IP协议栈)编程指南的电子文档。lwIP是一个用于嵌入式系统的轻量级、高性能的TCP/IP开源协议栈。 这本编程指南提供了关于lwIP的详细说明和使用方法。它涵盖了lwIP的基本概念、架构、组成部分以及API文档。通过阅读这本指南,开发者可以了解如何在自己的应用程序中使用lwIP来实现TCP/IP网络通信。 编程指南首先介绍了lwIP的基本概念和工作原理。它解释了lwIP的结构和模块,并且提供了一个整体的架构图。接下来,该指南详细介绍了各个模块的功能和API使用方法,包括网络接口、IP层、ARP、ICMP、TCP和UDP等。 通过阅读这本指南,开发者可以学习如何使用lwIP API来创建和管理套接字、发送和接收数据包、实现服务器和客户端等功能。此外,指南还提供了一些常见问题的解答和调试技巧,以帮助开发者解决遇到的问题。 总而言之,"lwip编程指南PDF" 是一份对lwIP协议栈进行全面介绍的电子文档。它提供了开发者所需的基本知识和实践指导,帮助他们在嵌入式系统中进行TCP/IP网络编程。 ### 回答2: lwip编程指南是一本关于lwip网络协议栈编程的指南。lwip(轻量级IP协议栈)是一个开源的、轻量级的TCP/IP协议栈,适用于嵌入式系统。这本指南提供了关于如何使用lwip进行网络编程的详细说明和指导。 首先,该指南介绍了lwip的基本概念和原理,包括lwip的体系结构、网络协议栈的组成部分、协议层的功能等。读者可以了解lwip的工作原理,为后续的编程工作打下基础。 接着,该指南深入讲解了lwip的编程接口和常用功能。其中包括socket API的使用方法,如创建socket、发送和接收数据等。此外,还介绍了lwip提供的其他功能,如TCP和UDP传输控制、IP地址转换、网络接口管理等。通过学习这些内容,读者可以掌握lwip的编程接口和功能,能够实现基于lwip网络通信。 此外,该指南还提供了一些示例代码和实践案例,用于帮助读者理解和应用lwip编程。这些示例代码涵盖了常见的网络应用场景,如HTTP服务器、SNMP代理等。读者可以通过实际操作这些示例代码,加深对lwip编程的理解和掌握。 综上所述,lwip编程指南是一本对lwip网络协议栈进行详细讲解和指导的书籍。通过学习该指南,读者可以了解lwip的概念和原理,掌握lwip的编程接口和功能,进而能够进行基于lwip网络编程。这对于嵌入式系统开发人员和网络编程爱好者来说,是一本很有价值的参考书。 ### 回答3: lwIP编程指南(pdf)是一本关于lwIP网络协议栈的编程指南的电子书。lwIP(lightweight IP)是一个用于嵌入式系统的开源 TCP/IP 协议栈。 这本编程指南提供了lwIP协议栈的详细介绍和使用指南。它介绍了lwIP的基本架构、功能特性以及如何在嵌入式系统中使用lwIP来实现网络通信。 该指南从实际的编程角度出发,提供了丰富的代码示例和详细的解释。读者可以通过这些示例来了解lwIP的各个功能模块的使用方法,例如网络接口、IP协议、TCP和UDP协议等。 此外,该指南还介绍了lwIP的配置和优化方法,帮助读者根据实际需求进行定制化设置和性能优化。 通过阅读lwIP编程指南,读者可以全面了解lwIP协议栈的工作原理和使用方法,掌握lwIP的应用开发技巧。无论是初学者还是有一定经验的开发人员,都可以从中获得实用的知识和经验。 总之,lwIP编程指南(pdf)是一本对于嵌入式系统中使用lwIP进行网络编程的详尽指南,对于想要学习lwIP的人来说是一本非常有价值的参考书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zianMrY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值