eth_recv out of MBUFs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


I am quite reproducibly able to produce

  eth_recv out of MBUFs

in the FreeBSD stack. The setup is two incoming TCP connections
sending data, a UDP socket sending data, pinging the device,
closing and reopening the TCP connections a few times and
to pull and put back the ethernet cable.

The device then never recovers. The partner sends ARP requests
with no response from eCos, as there is no mbuf to accept them.
The eCos never send anything. eth_drv_tickle_devices runs, but
finds IF_IS_EMPTY(&ifp->if_snd) true and never touches
the interface. Maybe it wants to ARP first, but was unable
to send the request - I don't know. Unless I am blind
I am caling tx_done for every packet I got into send
(but I am going to double-check this).

The mbufs as shown by cyg_net_show_mbufs are full of DATA
with short size (60 or 64) and flags 2 (M_PKTHDR).

Anyone has seen something like that? I am not very familiar
with the TCP/IP stacks in general - so it is quite problematic
for me to debug something there. Are there some constraints
of the "mbuf space has to be larger than tcp window of active
connections" type or something like that?

I am reluctant to try to "fix" it enlarging the space for mbufs,
as I think this should never happen regardless of mbufs and I am
also on a quite memory-constrained device where every 100 kB

Thanks for any hints

Before posting, please read the FAQ:
and search the list archive:

[Linux Embedded]     [U-Boot V2]     [Linux Kernel]     [Linux MIPS]     [Linux ARM]     [Linux for the Blind]     [Linux Resources]     [Photo]     [Yosemite]     [ISDN Cause Codes]     [ECOS Home]

Add to Google Powered by Linux