zoukankan      html  css  js  c++  java
  • 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


  • 相关阅读:
    Failed to load module "canberra-gtk-module"
    [Ubuntu18]桌面美化-仿MAC主题
    [Ubuntu]18自定义切换输入法的快捷键
    2016-2017-1 《信息安全系统设计基础》 学生博客及Git@OSC 链接
    2015-2016-2 《Java程序设计》 游戏化
    2015-2016-2 《Java程序设计》项目小组博客
    博客引用书单
    2015-2016-2 《网络攻防实践》 学生博客
    2015-2016-2 《网络攻击与防范》 学生博客
    《网络攻防技术与实践》学习指导
  • 原文地址:https://www.cnblogs.com/10cm/p/6668335.html
Copyright © 2011-2022 走看看