LwIP-网络接口管理
netif 各种类型网络接口的抽象------------------netif.c netif.h
————netif.h————————————————
//网络接口最大物理地址长度,这里定义为以太网网卡 MAC 地址的长度 6
#define NETIF_MAX_HWADDR_LEN 6U
//下面几个宏为网络接口属性、状态相关的宏,主要用于描述 netif 中 flags 字段的各位
#define NETIF_FLAG_UP 0x01U //网络接口是否已被上层使能
#define NETIF_FLAG_BROADCAST 0x02U //网络接口是否支持广播
#define NETIF_FLAG_POINTTOPOINT 0x04U //网络接口是否属于点到点连接
#define NETIF_FLAG_DHCP 0x08U //网络接口是否支持 DHCP 功能
#define NETIF_FLAG_LINK_UP 0x10U //网络接口的底层链路是否已经使能
#define NETIF_FLAG_ETHARP 0x20U //网络接口是否支持 ARP 功能
#define NETIF_FLAG_IGMP 0x40U //网络接口是否支持 IGMP 功能
//下面是结构 netif 的定义
struct netif {
struct netif *next; //指向下一个 netif 结构,在构成链表 netif_list 时使用
struct ip_addr ip_addr; //网络接口的 IP 地址
struct ip_addr netmask; //子网掩码
struct ip_addr gw; //网关地址
//下面为三个函数指针,调用它们指向的函数就可以完成数据包的发送或接收
err_t (* input)(struct pbuf *p, struct netif *inp); //该函数向 IP 层输入数据包
err_t (* output)(struct netif *netif, struct pbuf *p,struct ip_addr *ipaddr); //该函数发送 IP 包
err_t (* linkoutput)(struct netif *netif, struct pbuf *p); //该函数实现底层数据包发送
void *state; //该字段用户可以自由设置,例如用于指向一些底层设备相关的信息
u16_t mtu; //该接口允许的最大数据包长度
u8_t hwaddr_len; //该接口物理地址长度
u8_t hwaddr[NETIF_MAX_HWADDR_LEN]; //该接口的物理地址
u8_t flags; //该接口的状态、属性字段
char name[2]; //该接口的名字
u8_t num; //接口的编号
//在接口自输入使能或者有环回接口的情况下,下面的字段
//用于描述接口发送给自己的数据包
struct pbuf *loop_first; //指向发送给自己的数据包的第一个 pbuf
struct pbuf *loop_last; //指向发送给自己的数据包的最后一个 pbuf
};
LwIP-网络接口管理的更多相关文章
- LWIP网络接口管理
LAN8720+RJ45+MAC(STM32F4自带的)构成了网络接口层.
- LWIP内存管理
LWIP是一种TCP/IP协议栈,与嵌入式操作系统一样也提供了内存管理. 内存池里面有多个同样大小的内存,不同类型的内存池其里面的内存大小不一样.
- lwIP内存管理机制
lwip的内存管理机制,我们以enet_lwip这个例程为例. 在使用lwip的时候,我们可以使用两种形式的内存,一种是heap(mem.c文件-mem_malloc()),一种是pool(memp. ...
- LwIP源代码文件目录解析
1 -- LwIP源代码文件目录 root@motadou:/home/motadou/lwip/lwip-1.4.1# tree . ├── CHANGELOG ├── COPYING ├── do ...
- LwIP Application Developers Manual6---Application API layers
1.前言 lwIP提供3种应用编程接口来跟TCP/IP内核通信,如下所示: 低水平的内核/回调或raw API 2个高水平序列API: 1) netconn API 2) socket API(为了兼 ...
- 1、 LwIP协议栈规范翻译——简介
1.简介 在过去几年中,计算机和计算机支持设备接之间的互联到无线网络日趋增加.计算机已经越来越无缝的集成在了日常的设备且价格也在下降.同时,无线网络技术例如蓝牙[HNI+98]和IEEE802.11b ...
- LWIP移植文件介绍
在介绍文件之前首先介绍一下DMA描述符 stm32以太网模块接收/发送FIFO和内存之间的以太网传输是通过以太网DMA使用DMA描述符完成的,一共有两个描述符列表:一个用于接收,一个用于发送, 两个列 ...
- TCP/IP协议学习(二) LWIP用户自定义配置文件解析
LWIP协议支持用户配置,可以通过用户裁剪实现最优化配置,LWIP默认包含opts.h作为系统默认配置,不过通过添加lwipopts.h文件并包含在opts.h头文件之前就可以对lwip进行用户裁剪, ...
- 使用 libvirt创建和管理KVM虚拟机
1. libvirt介绍 Libvirt是一个软件集合,便于使用者管理虚拟机和其他虚拟化功能,比如存储和网络接口管理等等.Libvirt概括起来包括一个API库.一个 daemon(libv ...
- LWIP使用经验---变态级(转)
源:LWIP使用经验---变态级 LWIP使用经验 一 LWIP内存管理 数据包管理 设置内存大小 宏编译开关 二 LWIP启动时序 三 LWIP运行逻辑 接收数据包 SequentialAPI函数调 ...
随机推荐
- Android Studio添加aar依赖的两种方式
1 android{ repositories { flatDir { dirs 'libs' } } } dependencies { implementation fileTree(include ...
- Taro之百度地图显示定位点和信息
由于没有后台数据就随机生成点来模拟了.具体代码如下. componentDidMount = () => { const { BMap, BMAP_STATUS_SUCCESS } = wind ...
- ajax原生实现
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- program_options
[program_options] The program_options library allows program developers to obtain program options, t ...
- Java框架spring Boot学习笔记(五):Spring Boot操作MySQL数据库增、删、改、查
在pom.xml添加一下代码,添加操作MySQL的依赖jar包. <dependency> <groupId>org.springframework.boot</grou ...
- Linux Apache虚拟主机配置方法
apache 虚拟主机配置 注意: 虚拟主机可以开很多个 虚拟主机配置之后,原来的默认/etc/httpd/httpd.conf中的默认网站就不会生效了 练习: 主机server0 ip:172.25 ...
- 20175314 《Java程序设计》第九周学习总结
20175314 <Java程序设计>第九周学习总结 教材学习内容总结 根据课本的介绍下载了MySQL和Navicat for MySQL并成功对后者进行破解 MySQL客户端管理工具(如 ...
- UnitZ Battlegrounds beta5 - Unity吃鸡类型游戏模版 源码 仿绝地求生
Requires Unity 2018.2.6 or higher.The first battle royale game starter kit on Asset Store, all syste ...
- python字符串处理内置方法一览表
python字符串处理内置方法一览表 序号 方法及描述 1 capitalize()将字符串的第一个字符转换为大写 2 center(width, fillchar) 返回一个指定的宽度 widt ...
- python 基础 ----- 变量
------ python注释 注释的作用:代码提示,运行时忽略不必要的代码 注释的三种方式: 1.“#” 单行注释 2.多行注释 三个单引号 和三个双引号都可以 注释的快捷键 Ctrl + ...