您的位置:首页 > 理论基础 > 计算机网络

SylixOS_LWIP协议栈学习:网络接口结构

2017-04-11 15:53 399 查看
在 LWIP 中,是通过一个叫做 netif 的结构体来描述一个硬件网络接口的。

    struct netif {                                                

        struct netif *next;    // 指向下一个 netif 结构的指针

        struct ip_addr ip_addr;    // IP 地址相关配置

        struct ip_addr netmask;

        struct ip_addr gw;

        err_t (* input)(struct pbuf *p, structnetif *inp);    //调用这个函数可以从网卡上取得一个数据包

        err_t (* output)(struct netif *netif,struct pbuf *p, struct ip_addr *ipaddr);    // IP 层调用这个函数可以向网卡发送一个数据包   

        err_t (* linkoutput)(struct netif *netif,struct pbuf *p);   // ARP 模块调用这个函数向网卡发送一个数据包

        void *state;    // 用户可以独立发挥该指针,用于指向用户关心的网卡信息

        u8_t hwaddr_len;    // 硬件地址长度,对于以太网就是 MAC 地址长度,为 6 各字节

        u8_t hwaddr[NETIF_MAX_HWADDR_LEN];    //MAC 地址

        u16_t mtu;    // 一次可以传送的最大字节数,对于以太网一般设为 1500

        u8_t flags;    // 网卡状态信息标志位

        char name[2];    // 网络接口使用的设备驱动类型的种类

        u8_t num;    // 用来标示使用同种驱动类型的不同网络接口

    };

复制代码

在SylixOS中,通过netdev来描述一个网络接口。(实际像是对netif进行一层封装)

    typedef struct netdev {

        UINT32 magic_no;    /* MUST beNETDEV_MAGIC */

      UINT32 init_flags;

      UINT32 chksum_flags;

       UINT32 net_type;

       UINT64 speed;    /* link layer speed bps */

      UINT32 mtu;    /* link layer maxpacket length */

      UINT8 hwaddr_len;    /* link layer address length MUST 6 or 8 */

       UINT8 hwaddr[NETIF_MAX_HWADDR_LEN];    /* link layer address */

      struct netdev_funcs *drv;    /* netdev driver */

     void*priv;    /* user network device privatedata (私有结构,自定义)

      intif_flags;

      ULONG sys[254];   /* reserve for netif (存放netif结构体)*/

    } netdev_t;

复制代码

[align=left]Netif结构体中:[/align]
[align=left]ip_addr、 netmask、 gw 三个字段用于发送和处理数据包用,分别表示 IP 地址、子网掩码和网关地址。[/align]
[align=left]input 字段指向一个函数,这个函数将网卡设备接收到的数据包提交给 IP 层。[/align]
[align=left]output 字段指向一个函数,这个函数和具体网络接口设备驱动密切相关,它用于 IP 层将一个数据包发送到网络接口上。用户需要根据实际网卡编写该函数,并将 output 字段指向该函数。[/align]
[align=left]linkoutput 字段和上面的 output 基ᴀ上是起相同的作用,但是这个函数是在 ARP 模块中被调用的。[/align]
[align=left]state 字段可以指向用户关心的关于设备的一些信息。[/align]
[align=left]mtu 字段表示该网络一次可以传送的最大字节数,对于以太网一般设为 1500。[/align]
[align=left]flags 字段是网卡状态信息标志位,是很重要的控制字段,它包括网卡功能使能、广播使能、 ARP 使能等等重要控制位。[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: