一篇带给你Lwip网口接口netif

网络 通信技术
如果有多个网卡的话LWIP是如何来组织这些网卡呢?在LWIP中用链表netif_list来管理众多的网卡,当上层有数据要发送的时候LWIP会从netif_list链表中选择一个合适的网卡来将数据发送出去。

[[395199]]

01网络接口简介

TCP/IP参考模型中网络分为4层:应用层、传输层、网络层和网络接口层。网络接口层就对应着我们实际的网卡,LWIP支持多网口设计,LWIP中使用netif来描述每种网络接口的特性,如接口的IP地址、接口状态等等。那么如果有多个网卡的话LWIP是如何来组织这些网卡呢?在LWIP中用链表netif_list来管理众多的网卡,当上层有数据要发送的时候LWIP会从netif_list链表中选择一个合适的网卡来将数据发送出去。

02netif结构

netif结构体在文件netif.h中有定义,netif结构体中每个成员变量的含义如下:

next:该字段指向下一个neitif类型的结构体,因为LWIP可以支持多个网络接口,当设备有多个网络接口的话LWIP就会把所有的netif结构体组成链表来管理这些网络接口。

ipaddr,netmask和gw:分别为网络接口的IP地址、子网掩码和默认网关。

input:此字段为一个函数,这个函数将网卡接收到的数据交给IP层。

output:此字段为一个函数,当IP层向接口发送一个数据包时调用此函数。这个函数通常首先解析硬件地址,然后发送数据包。此字段我们一般使用etharp.c中的etharp_output()函数。

linkoutput:此字段为一个函数,该函数被ARP模块调用,完成网络数据的发送。上面说的etharp_output函数将IP数据包封装成以太网数据帧以后就会调用linkoutput函数将数据发送出去。

state:用来定义一些关于接口的信息,用户可以自行设置。

mtu:网络接口所能传输的最大数据长度,一般设置为1500。

hwaddr_len:网卡MAC地址长度,6个字节。

hwaddr:MAC地址。

flags:网络的接口状态,属性信息字段。

name:网卡的名字。

num:此字段为协议栈为每个网络接口设置的一个编号,编号从0开始。

flags的取值:

其中

在网络初始化中,在ethernetif.c中

他们对应的都是一个函数

etharp_output:ip层发送数据包函数

low_level_output :ARP模块发送函数,更底层的函数,其实etharp_output还是调用此函数

03相关函数

3.1、netif_add

  1. netif_add(struct netif *netif, ip_addr_t *ipaddr, ip_addr_t *netmask,  ip_addr_t 
  2.                 *gw, void *state, netif_init_fn init, netif_input_fn input) 

就是把netif网络接口添加到网络list队列中,向网卡列表中添加一个网卡

3.2、netif_set_default

  1. netif_set_default(struct netif *netif) 

将这个网卡设置为默认网卡

3.3、netif_set_up

  1. netif_set_up(struct netif *netif) 

 打开网卡

 

责任编辑:姜华 来源: 知晓编程
相关推荐

2021-04-12 08:40:27

Lwip数据包pbuf

2021-07-12 06:11:14

SkyWalking 仪表板UI篇

2021-06-21 14:36:46

Vite 前端工程化工具

2022-04-29 14:38:49

class文件结构分析

2021-04-08 11:00:56

CountDownLaJava进阶开发

2021-04-01 10:51:55

MySQL锁机制数据库

2021-04-14 14:16:58

HttpHttp协议网络协议

2021-01-28 08:55:48

Elasticsear数据库数据存储

2023-03-29 07:45:58

VS编辑区编程工具

2021-07-21 09:48:20

etcd-wal模块解析数据库

2021-03-12 09:21:31

MySQL数据库逻辑架构

2022-03-22 09:09:17

HookReact前端

2022-02-17 08:53:38

ElasticSea集群部署

2021-07-08 07:30:13

Webpack 前端Tree shakin

2022-02-25 15:50:05

OpenHarmonToggle组件鸿蒙

2021-10-28 08:51:53

GPIO软件框架 Linux

2023-03-13 09:31:04

2021-04-14 07:55:45

Swift 协议Protocol

2021-05-08 08:36:40

ObjectString前端

2021-04-23 08:59:35

ClickHouse集群搭建数据库
点赞
收藏

51CTO技术栈公众号