当网卡设备上有新的数据到达时,硬件会产生一个中断,驱动程序处理这个中断,就可以接收数据。其接收过程大致可以分为以下几步:
1、检查rx_ring[entry].status,大于等于零,表示有数据到达,需要处理。
2、取status的高8位,如果高8位不等于0x03,表示有错误发生。
3、否则从rx_ring[entry].msg_length中可以取到数据包的长度,并判断长度是否在合理的范围内。
4、如果长度值超过一个阀值(可以通过参数设定),则取下rx_ring的接收缓冲区作为传给上层的缓冲区,同时,还给rx_ring一个空的缓冲区,如果没有超过阀值,则把rx_ring的接收缓冲区数据拷贝出来。
5、更新统计信息,把接收缓冲区传给接收层。
阅读(1111) | 评论(0) | 转发(0) |