最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

网络设备驱动程序结构分析数据发送流程

来源:动视网 责编:小OO 时间:2024-07-26 18:32:55
文档

网络设备驱动程序结构分析数据发送流程

从网络设备驱动的结构分析可知,Linux 网络子系统在发送数据包时,会调用驱动程序提供的 hard_start_transmit( ) 函数,该函数用于启动数据包的发送。在设备初始化的时候,这个函数指针需被初始化以指向设备的 xxx_tx( )函数。网络设备驱动完成数据包发送的流程如下:网络设备驱动程序从上层协议传递过来的 sk_buff 参数获得数据包的有效数据和长度,将有效数据放入临时缓冲区。对于以太网,如果有效数据的长度小于以太网冲突检测所要求数据帧的最小长度ETH_ZLEN,则给临时缓冲区的末尾填充 0。设置硬件的寄存器,驱使网络设备进行数据发送操作。完成上述3个步骤的网络设备驱动程序的数据包发送函数模板如下所示。
推荐度:
导读从网络设备驱动的结构分析可知,Linux 网络子系统在发送数据包时,会调用驱动程序提供的 hard_start_transmit( ) 函数,该函数用于启动数据包的发送。在设备初始化的时候,这个函数指针需被初始化以指向设备的 xxx_tx( )函数。网络设备驱动完成数据包发送的流程如下:网络设备驱动程序从上层协议传递过来的 sk_buff 参数获得数据包的有效数据和长度,将有效数据放入临时缓冲区。对于以太网,如果有效数据的长度小于以太网冲突检测所要求数据帧的最小长度ETH_ZLEN,则给临时缓冲区的末尾填充 0。设置硬件的寄存器,驱使网络设备进行数据发送操作。完成上述3个步骤的网络设备驱动程序的数据包发送函数模板如下所示。


从网络设备驱动的结构分析可知,Linux 网络子系统在发送数据包时,会调用驱动程序提供的 hard_start_transmit( ) 函数,该函数用于启动数据包的发送。在设备初始化的时候,这个函数指针需被初始化以指向设备的 xxx_tx( )函数。

  网络设备驱动完成数据包发送的流程如下。

网络设备驱动程序从上层协议传递过来的 sk_buff 参数获得数据包的有效数据和长度,将有效数据放入临时缓冲区。

对于以太网,如果有效数据的长度小于以太网冲突检测所要求数据帧的最小长度ETH_ZLEN,则给临时缓冲区的末尾填充 0。

设置硬件的寄存器,驱使网络设备进行数据发送操作。

完成上述3个步骤的网络设备驱动程序的数据包发送函数模板如下所示:

int xxx_tx(struct sk_buff *skb, struct net_device *dev)

{

    int len;

    char *data, shortpkt[ETH_ZLEN];

    if (xxx_send_available(···)) {     /* 发送队列未满,可以发送 */

        /* 获得有效数据指针和长度*/

        data = skb->data;

        len = skb->len;

        if (len < ETH_ZLEN) {

            /* 如果帧长小于以太网帧最小长度, 补0 */

            memset(shortpkt, 0, ETH_ZELN);

            memcpy(shortpkt, skb->data, skb->len);

            len = ETH_ZLEN;

            data = shortpkt;

        } 


        dev->trans_start = jiffies;  /* 记录发送时间戳 */

        

        if (avail) {   /* 设置硬件寄存器,让硬件把数据包发送出去 */

            xxx_hw_tx(data, len, dev);

        } else {

            netif_stop_queue(dev);

            ···   

        }

    }

}

文档

网络设备驱动程序结构分析数据发送流程

从网络设备驱动的结构分析可知,Linux 网络子系统在发送数据包时,会调用驱动程序提供的 hard_start_transmit( ) 函数,该函数用于启动数据包的发送。在设备初始化的时候,这个函数指针需被初始化以指向设备的 xxx_tx( )函数。网络设备驱动完成数据包发送的流程如下:网络设备驱动程序从上层协议传递过来的 sk_buff 参数获得数据包的有效数据和长度,将有效数据放入临时缓冲区。对于以太网,如果有效数据的长度小于以太网冲突检测所要求数据帧的最小长度ETH_ZLEN,则给临时缓冲区的末尾填充 0。设置硬件的寄存器,驱使网络设备进行数据发送操作。完成上述3个步骤的网络设备驱动程序的数据包发送函数模板如下所示。
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top