免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1947 | 回复: 4
打印 上一主题 下一主题

请教网卡接收报文的小细节 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-24 16:15 |只看该作者 |倒序浏览
看了好多书, 考虑到自己很白, 见识短, 特请教几个问题:

网卡收到报文后 产生一个中断并调用接收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呢?

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
2 [报告]
发表于 2009-08-24 16:46 |只看该作者

回复 #1 Arthur_ 的帖子

中断处理程序,将接收到的包存入DMA中,后面的便交给软中断来处理了。
DMA中,每个报文的存储,是占用一定的格式和空间的,上层怎么区分这个包,那是应用层的问题了。
应用层根据这个包的IP和端口来区分这个包到底属于哪个应用。

论坛徽章:
0
3 [报告]
发表于 2009-08-24 16:59 |只看该作者
一个中断可以就可以把两个报文同时收到吗?

论坛徽章:
0
4 [报告]
发表于 2009-08-24 17:38 |只看该作者
啃了下 E100驱动

我看它open时候会申请一个固定长度的dma block, 这个dma block头是rfd头。

可以申请多次 于是组成一个dma block list,

在poll中以blcok为单位读取数据 然后交给上层。所以:

硬件收到数据后也会按照block为单位(不管是小包还是大包)对齐到dma中, 然后发中断请求, 然后驱动处理这个请求。 如果接收包太快了, 导致dma所有block满了 就出现了丢包。 好像使这个意思吧。

论坛徽章:
0
5 [报告]
发表于 2009-08-25 00:01 |只看该作者
对,不管大包还是小包都是一个skb。
速度快了就丢包了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP