Large IP packets over ArcNet (netif_wake_queue propagation)
Synopsis:
I am writing test-software for our ArcNet-driver for vxWorks. I use a
Linux machine running 2.4.18 as test-bench. I am trying to test our rfc1201 (IP over ArcNet) implementation by ping'ing with large packets. This fails:
Linux simply doesn't send all the IP-fragments.
I then went into the driver and increased the queue-length from
dev->tx_queue_len = 40;
to
dev->tx_queue_len = 60;
and then it worked.
It seems to me the IP-layer is not notified when the device queue is emptied by the device and thus doesn't send out the missing fragments. I tried to look into the net core code to find out: Indeed I could not find any notification to the higher level protocols.
In vxWorks I am used to waking the higher-level protocols directly (there is no generic device-specific queue). Thus IP stack can continue with the next IP-fragment right away. Apparently the Linux IP-stack can't as it is not notified that the device is ready to send again.
I am really understanding this correctly???
Also, I want to run a raw packet protocol along with IP. That protocol works best with a small queue - maximum 10 packets!
Esben Nielsen
Vestas Wind Systems