[Avila] fatal ethernet error on gw2348-4
David Acker
dacker at roinet.com
Tue Oct 10 12:22:35 EDT 2006
The port is not part of a bridge. It is in promiscuous mode and is
receiving and sending a relatively large amount of traffic. I have a
userspace program that has a raw socket bound to each port. I don't
have any netfilter rules in place.
I have done some more debugging and found some information. The failure
is due to
ixp400_xscale_sw/src/ethAcc/IxEthAccDataPlane.c::ixEthAccPortRxFreeReplenish(...)
thinking that the length is too small. See the following test:
if (IX_OSAL_MBUF_MLEN(buffer) < IX_ETHNPE_ACC_RXFREE_BUFFER_LENGTH_MIN)
The length reported by IX_OSAL_MBUF_MLEN(buffer) is 0 and
IX_ETHNPE_ACC_RXFREE_BUFFER_LENGTH_MIN = 64.
ixEthRxFrameProcess calls ixEthAccPortRxFreeReplenish and before the
call it tries to reset the length with the following line of code:
IX_OSAL_MBUF_MLEN(mbufPtr) = IX_OSAL_MBUF_PKT_LEN(mbufPtr) =
IX_OSAL_MBUF_ALLOCATED_BUFF_LEN(mbufPtr);
Before this call to adjust the lengths I have seen the lengths reported
by IX_OSAL_MBUF_MLEN(mbufPtr) and IX_OSAL_MBUF_PKT_LEN(mbufPtr) be
various sizes although sometimes they are below 64 (I have seen as low
as 60). IX_OSAL_MBUF_ALLOCATED_BUFF_LEN(mbufPtr) is reporting 0 which
leads to IX_OSAL_MBUF_MLEN(mbufPtr) becoming 0 and the length test failing.
I am still looking into when the allocated buffer length got corrupted.
It could be a locking issue and/or a race condition that only happens
at high speeds. With any luck I will know more by the end of the day.
-Ack
Dave G wrote:
> Ack,
>
>
> Is the affected port part of a bridge group? Do you have any netfilter
> rules in place either using bridge nf or not?
>
>
> -Dave
>
>
>> Hello folks,
>> We are running the .06 development kit on our gw2348-4 board. If we
>> run it long enough with even small amounts of ethernet traffic we
>> eventually get the following error:
>>
>> [fatal] ixEthRxFrameProcess: Failed to replenish with filtered frame
>> on port 0
>>
>> After this error the port usually does not receive at all but can
>> send. For example, when I ping an ethernet client that has ethereal
>> on, I can see the ARP requests, and I can see the client send the ARP
>> response, but the board's arp tables do not show ever getting the
>> response. The port stays in this state through unplug/replug of the
>> cable. Sometimes it stays in this state through a reboot command. It
>> always clears up on a full power cycle. The other ethernet port will
>> work when one port is in this state.
>>
>> Does anyone know what causes this error and how to fix it?
>>
>>
More information about the Avila
mailing list