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]
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]
相关文章推荐
- LwIP 协议栈源码详解 ——TCP/IP 协议的实现(六:网络接口结构)
- SylixOS_LWIP协议栈学习:以太网网卡接口部分初始化
- 【caffe学习笔记之5】Win10系统下Caffe的Python接口设置方法并绘制网络结构图
- LwIP协议栈(2):网络接口
- caffe学习笔记7-python接口绘制网络结构图
- ARM硬件平台上基于UCOS移植Lwip网络协议栈 分类: 嵌入式开发学习 2015-06-14 10:33 55人阅读 评论(1) 收藏
- SylixOS_LWIP协议栈学习:数据包管理
- SylixOS_LWIP协议栈学习:动态内存管理
- 【神经网络与深度学习】【python开发】caffe-windows使能python接口使用draw_net.py绘制网络结构图过程
- 中国移动通信互联网短信网关接口协议网络结构和功能概述
- LwIP协议栈学习--内存管理
- tcp/ip学习第一步:网络中两台主机进行通讯,协议栈是如何处理数据报的.
- Linux内核2.4.x的网络接口源码的结构
- lwip---创建一个网络接口
- LwIP协议栈学习--内存管理
- Linux内核2.4.x的网络接口源码的结构[转]
- Linux内核2.4.x的网络接口结构(转)
- 电信增值业务学习笔记2--移动网络基本概念和组网结构
- 2.4.16下网络结构全景图(包含模块接口变量名称)