Hi Gary and Andew,
I can see what the issue is, but I do not know how to solve. From my dsr I
call:
while ( !(pDevCtrl->rxBds[pDevCtrl->rxHeadIndex].status & DMA_OWN)
(sc->funs->eth_drv->recv)(sc, pDevCtrl .....);
this loops through as long as packets are coming and I checked from
eth_drv.c the function ether_input.c is being called which calls
ether_demux.
ether_demux queue them in ip_input queue and schedule a software interrupt
for ipintr to pick up the packets in the queue. if packets are coming
beyond 100 packets/sec, then software interrupt is NOT generated and after
first 50 packets received, all are dropped. ipintr is called at the end
and at that time only first 50 packets are in the queue.
Need help please. Thanks.
Michael
On Fri, Sep 16, 2005 at 12:35:08PM -0700, mkhoyila@uci.edu wrote:
I know that it is dropping packets because IF_QFULL(inq) is full. This
does not seem correct to me since eCos should handle more traffic than
100
packets/sec.
Is there any issue with the driver or need to turn something on to make
this happen.
Thanks.
michael
---------------------------- Original Message
----------------------------
Subject: ether_demux function
From: mkhoyila@uci.edu
Date: Fri, September 16, 2005 12:10 pm
To: ecos-discuss@ecos.sourceware.org
--------------------------------------------------------------------------
Hi Gary,
Do you have any idea, why ether_demux drops packets when more than 100
packet per second are sent via the driver (with 100 packets/sec with
length of 60bytes each, no issues). Basically it only allows exactly 50
packets thru and drops the rest. Thanks.
You need to find out why the queue is overflowing. What is supposed to
take packets out of the queue? Why is it not? It sounds like a problem
with the transmit functions in your ethernet driver.
Andrew
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss