• 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


  • 相关阅读:
    2.4 Git 基础
    MySQL的连接命令
    linux中的ls、cd、pwd命令
    Vim 快速入门之基本命令
    linux 中查看进程、杀死进程、进入进程的命令
    linux下文件夹的创建、复制、剪切、重命名、清空和删除的命令
    Linux下tar压缩和解压缩命令详解
    用Windows远程桌面连接树莓派的方法
    MariaDB数据库安装完需要初始化操作
    linux设置服务为自动启动和关闭并禁用的命令
  • 原文地址:https://www.cnblogs.com/10cm/p/6668335.html
Copyright © 2020-2023  润新知