LWIP -- 网络接口结构

在 LWIP 中,是通过一个叫做 netif 的结构体来描述一个硬件网络接口的。
  1.     struct netif {                                                
  2.         struct netif *next;    // 指向下一个 netif 结构的指针
  3.         struct ip_addr ip_addr;    // IP 地址相关配置
  4.         struct ip_addr netmask;
  5.         struct ip_addr gw;
  6.         err_t (* input)(struct pbuf *p, structnetif *inp);    //调用这个函数可以从网卡上取得一个数据包
  7.         err_t (* output)(struct netif *netif,struct pbuf *p, struct ip_addr *ipaddr);    // IP 层调用这个函数可以向网卡发送一个数据包   
  8.         err_t (* linkoutput)(struct netif *netif,struct pbuf *p);   // ARP 模块调用这个函数向网卡发送一个数据包
  9.         void *state;    // 用户可以独立发挥该指针,用于指向用户关心的网卡信息
  10.         u8_t hwaddr_len;    // 硬件地址长度,对于以太网就是 MAC 地址长度,为 6 各字节
  11.         u8_t hwaddr[NETIF_MAX_HWADDR_LEN];    //MAC 地址
  12.         u16_t mtu;    // 一次可以传送的最大字节数,对于以太网一般设为 1500
  13.         u8_t flags;    // 网卡状态信息标志位
  14.         char name[2];    // 网络接口使用的设备驱动类型的种类
  15.         u8_t num;    // 用来标示使用同种驱动类型的不同网络接口
  16.     };
复制代码
在SylixOS中,通过netdev来描述一个网络接口。(实际像是对netif进行一层封装)
  1.     typedef struct netdev {
  2.         UINT32 magic_no;    /* MUST beNETDEV_MAGIC */
  3.       UINT32 init_flags;
  4.       UINT32 chksum_flags;
  5.        UINT32 net_type;
  6.        UINT64 speed;    /* link layer speed bps */
  7.       UINT32 mtu;    /* link layer maxpacket length */
  8.       UINT8 hwaddr_len;    /* link layer address length MUST 6 or 8 */
  9.        UINT8 hwaddr[NETIF_MAX_HWADDR_LEN];    /* link layer address */
  10.       struct netdev_funcs *drv;    /* netdev driver */
  11.      void*priv;    /* user network device privatedata (私有结构,自定义)
  12.       intif_flags;
  13.       ULONG sys[254];   /* reserve for netif (存放netif结构体)*/
  14.     } netdev_t;
复制代码


Netif结构体中:
ip_addr、 netmask、 gw 三个字段用于发送和处理数据包用,分别表示 IP 地址、子网掩码和网关地址。
input 字段指向一个函数,这个函数将网卡设备接收到的数据包提交给 IP 层。
output 字段指向一个函数,这个函数和具体网络接口设备驱动密切相关,它用于 IP 层将一个数据包发送到网络接口上。用户需要根据实际网卡编写该函数,并将 output 字段指向该函数。
linkoutput 字段和上面的 output 基ᴀ上是起相同的作用,但是这个函数是在 ARP 模块中被调用的。
state 字段可以指向用户关心的关于设备的一些信息。
mtu 字段表示该网络一次可以传送的最大字节数,对于以太网一般设为 1500。
flags 字段是网卡状态信息标志位,是很重要的控制字段,它包括网卡功能使能、广播使能、 ARP 使能等等重要控制位。

你可能感兴趣的:(SylixOS,网络)