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-网络接口管理的更多相关文章

  1. LWIP网络接口管理

    LAN8720+RJ45+MAC(STM32F4自带的)构成了网络接口层.

  2. LWIP内存管理

    LWIP是一种TCP/IP协议栈,与嵌入式操作系统一样也提供了内存管理. 内存池里面有多个同样大小的内存,不同类型的内存池其里面的内存大小不一样.

  3. lwIP内存管理机制

    lwip的内存管理机制,我们以enet_lwip这个例程为例. 在使用lwip的时候,我们可以使用两种形式的内存,一种是heap(mem.c文件-mem_malloc()),一种是pool(memp. ...

  4. LwIP源代码文件目录解析

    1 -- LwIP源代码文件目录 root@motadou:/home/motadou/lwip/lwip-1.4.1# tree . ├── CHANGELOG ├── COPYING ├── do ...

  5. LwIP Application Developers Manual6---Application API layers

    1.前言 lwIP提供3种应用编程接口来跟TCP/IP内核通信,如下所示: 低水平的内核/回调或raw API 2个高水平序列API: 1) netconn API 2) socket API(为了兼 ...

  6. 1、 LwIP协议栈规范翻译——简介

    1.简介 在过去几年中,计算机和计算机支持设备接之间的互联到无线网络日趋增加.计算机已经越来越无缝的集成在了日常的设备且价格也在下降.同时,无线网络技术例如蓝牙[HNI+98]和IEEE802.11b ...

  7. LWIP移植文件介绍

    在介绍文件之前首先介绍一下DMA描述符 stm32以太网模块接收/发送FIFO和内存之间的以太网传输是通过以太网DMA使用DMA描述符完成的,一共有两个描述符列表:一个用于接收,一个用于发送, 两个列 ...

  8. TCP/IP协议学习(二) LWIP用户自定义配置文件解析

    LWIP协议支持用户配置,可以通过用户裁剪实现最优化配置,LWIP默认包含opts.h作为系统默认配置,不过通过添加lwipopts.h文件并包含在opts.h头文件之前就可以对lwip进行用户裁剪, ...

  9. 使用 libvirt创建和管理KVM虚拟机

      1. libvirt介绍    Libvirt是一个软件集合,便于使用者管理虚拟机和其他虚拟化功能,比如存储和网络接口管理等等.Libvirt概括起来包括一个API库.一个 daemon(libv ...

  10. LWIP使用经验---变态级(转)

    源:LWIP使用经验---变态级 LWIP使用经验 一 LWIP内存管理 数据包管理 设置内存大小 宏编译开关 二 LWIP启动时序 三 LWIP运行逻辑 接收数据包 SequentialAPI函数调 ...

随机推荐

  1. mysql null 相关bug

    select 1 = null 并不是预期的 False 而是 Null select 1 is null; 这样才会产生预期的 False select 1 not is null 这样写是 错误 ...

  2. .NET大批量插入数据到Oracle

    跟一个第三方系统做接口,需要插入几百万条数据到Oracle数据库. 下载Oracle的Managed版本的ODP.NET组件,只需要一个Oracle.ManagedDataAccess.dll这个DL ...

  3. ArcGIS 图层旋转工具-arcgis案例实习教程

    ArcGIS 图层旋转工具-arcgis案例实习教程 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:对输入图层执行坐标旋转 使用方法:输入图层,旋转中心,旋转 ...

  4. JS中this的四种用法

    1.在一般函数方法中使用 this 指代全局对象 2.作为对象方法调用,this 指代上级对象 3.作为构造函数调用,this 指代new 出的对象 4.apply 调用 ,apply方法作用是改变函 ...

  5. conda 常用命令

    conda search --full --name python conda update -n base conda //update最新版本的conda conda create -n xxxx ...

  6. saver.restore()遇到的错误

    运行python程序执行  saver.restore(sess,"E:/pythonFile/untitled/deepLearning/model/model.ckpt")   ...

  7. 导出文件的时候 加大php内存

    ini_set('max_execution_time', 3600); ini_set('memory_limit', '2048M');

  8. Systemd 教程

    目录 Systemd 教程 sshd.service配置模板 开机启动 启动服务 停止服务 配置文件 [Unit] 区块:启动顺序与依赖关系 [Service] 区块:启动行为 1.启动命令 2.启动 ...

  9. Python基础-python流程控制之循环结构(五)

    循环结构 循环结构可以减少源程序重复书写的代码量,用来描述重复执行某段算法的问题. Python中循环结构分为两类,分别是 while 和 for .. in. 一.while循环 格式1: whil ...

  10. tp3.2 上传文件及下载文件

    公共方法 UploadFile.class.php() // 开始 , , , ,];];,; ;; ::::::;,) {//文件上传失败 //捕获错误代码$this->error($file ...