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 权限相关

    # ============================= mysql 权限相关 =====================================================gran ...

  2. Linux下使用ps命令查看某个进程文件的启动位置

    ps -ef|grep shutdown ls -al /proc/4170

  3. 异步、非阻塞和IO多路复用总结

    Nginx是并发处理框架的代表者,很多后台业务都会放在Nginx容器中运行,以实现高吞吐,而Nginx能够支持高并发也是由于使用了异步非阻塞处理模型,本文将用通俗的话讲解异步.同步.阻塞.非阻塞的区别 ...

  4. SQLServer “无法对数据库'XXX' 执行删除,因为它正用于复制”的解决方法

    “无法对数据库'XXX'执行删除,因为它正用于复制” 解决办法: 执行  sp_removedbreplication 'XXX'  这个语句的解释是:从数据库中删除所有复制对象,但不更新分发服务器上 ...

  5. Linux rhcsa认证考试试题模拟

    声明: 此套试题是2017年rhcsa考试题库,本题库需配合相对应的机器操作,实验环境在我的网盘下载 考试环境: server.group8.example.com 172.24.8.254/24 s ...

  6. Vue如何更新子组件

    黑科技: 给子组件绑定一个key值,当key值改变时,子组件就会更新 ~

  7. C#窗体-猜数字

    1.用到的控件:groupbox.label.textbox.button.menustrip等 2.实现的功能,随机产生一个数字,输入自己猜的答案,判断是否猜对. 3.运行结果 4.代码 using ...

  8. HTTP协议转码

    为什么要有转义的功能? 一些特殊字符需要转义,才能被访问,否则变为空格 UrlEnCode与UrlDeCode 有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的 ...

  9. centos7安装zabbix server

    1.参照下列网址方法,打开端口:80,3306,443,22,10050,10051(可能实际不需要打开这么多) https://www.cnblogs.com/lw-2019forlinuxpyth ...

  10. eclipse Filter web.xml 问题解决 异步请求@WebServlet

    <filter> <filter-name>AsynServlete</filter-name> <filter-class>com.kad.app.a ...