请教xtang及各位朋友 关于Net.ether82557

唐兄:QNX4.24 OS 82557/82559 NIC,我怎样能读得该网卡的寄存器,你有否其寄存器的分析说明,请告知我。还有就是能否告知我,82557/9的保护策略是怎样的,比如某段时间数据量超过负荷,一般是怎么进行工作的,有无保护措施。还有就是远端的什么样的NACK会导致该网卡的挂起?请教 :sunglasses:

我没有网卡的寄存器说明,不过82557/9比较普通,找一个Linux/*BSD的驱动看一下,应该就可以。
进网卡的数据太多,接收Ring里没有缓冲了的话,数据包就会被丢弃。
理论上讲,不论什么样的NACK都不应瘵网卡挂起。

谢谢唐兄,我们继续好么?

以下是Net.ether82557 f参数的解释:
-f tx_forget_time
After a driver-level NACK is received from a remote node, Net.ether82557 will assume that because packets were dropped, throttling the transmit output on that connection would be a good idea. So, the output will be reduced to approximately 400K/sec for 2 seconds, after which the eternally optimistic Net.ether82557 stops throttling its output. The -f option allows you to change the default 2 seconds above.

我的理解就是当网卡收到一个来自远端网卡的驱动级的NACK信号时,82557会将包转发速率降至400K/S,维持该速率2秒(默认可设)。那么当output转发量很大时,该速率肯定不够,82557会采用什么样的保护措施?巨大的包流量和低转发速率是否会导致82557的瘫痪,从而彻底无法工作?如果不会,那么82557是怎么保护的?

还有一个新的问题请教:
在我们进行2次开发的程序里,程序向Net进行RAW协议注册,然后收到Net返回的一个代理id(netproxy);每当程序收到需要output的packet时,就Trigger(netproxy),然后由Net到队列中去取包转发,那么该packet是由Net回收的么?Net具体的工作机制是怎么样的,还有就是可有这方面比较详细的资料么,那里能够获得Net的源代码或者其他系统NetProc的源代码呢?(因为以上关于Net的很多看法都是我的猜测,我想证实一下)

谢谢不吝赐教!
Maa 2004-04-22

你说的是这个。这个是FLEET protocol的功能。那个NACK是FLEET的包。这个参数用来控制FLEET减缓发包速度,以让另一方有机会NACK.

对于一个Driver来讲的话,如果要发的包太多,新的发包要求会被拒绝。

Proc/Net的源代码恐怕无法入手。NET相当于一个超级用户,在驱动和protocol之间互相传递通知和数据包。大致好象是这样一个过程吧(没有碰Net已经很久了)。当protocol需要传一个包时,它会通知NET,NET转而通知驱动。驱动准备了以后,再问Net要数据包,Net从protocol那里提来交给驱动。最后,驱动还要通知Net特定的包已经处理好了。