请教网卡接收报文的小细节
看了好多书, 考虑到自己很白, 见识短, 特请教几个问题:网卡收到报文后 产生一个中断并调用接收handler来接收这个报文
对于这个报文我有点疑问, 假设A, B, A向B同时发送一个小包p,一个大包P, 那么B收到中断后读数据是把
还是 :
0.p和P同时读进一个缓冲(skb)
a. 只能读到小包p, P只能在下次中断中接收
b. 可以读P, 但会另外开一个缓冲(2个skb)
------
c. 假设 0成立, 那么上层怎么区分这两个报文(个人感觉不可能)
d.假设a成立, 那么哪些措施保证P不被丢失(主要硬件有什么措施?)
e. 假设b成立, 驱动咋区分那个是P那个是p呢?
回复 #1 Arthur_ 的帖子
中断处理程序,将接收到的包存入DMA中,后面的便交给软中断来处理了。DMA中,每个报文的存储,是占用一定的格式和空间的,上层怎么区分这个包,那是应用层的问题了。
应用层根据这个包的IP和端口来区分这个包到底属于哪个应用。 一个中断可以就可以把两个报文同时收到吗? 啃了下 E100驱动
我看它open时候会申请一个固定长度的dma block, 这个dma block头是rfd头。
可以申请多次 于是组成一个dma block list,
在poll中以blcok为单位读取数据 然后交给上层。所以:
硬件收到数据后也会按照block为单位(不管是小包还是大包)对齐到dma中, 然后发中断请求, 然后驱动处理这个请求。 如果接收包太快了, 导致dma所有block满了 就出现了丢包。 好像使这个意思吧。 对,不管大包还是小包都是一个skb。
速度快了就丢包了。
页:
[1]