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

Re: "le0: dropping chained buffer", OpenBSD 3.1 on Sparc 5 (sun4m)



On 16 Aug 2003, Rich Kulawiec wrote:
[...]
| Yesterday afternoon around 13:00, both of them simultaneously became
| unresponsive to all network traffic -- TCP, UDP, ARP, ICMP, everything.
[...]
| So I went to the source.  I have traced this to the following bit of
| code in am7990.c (in sys/dev/ic):
| 
| 	   } else if ((rmd.rmd1_bits & (LE_R1_STP | LE_R1_ENP)) !=
|                     (LE_R1_STP | LE_R1_ENP)) {
|                         printf("%s: dropping chained buffer\n",
|                             sc->sc_dev.dv_xname);
|                         ifp->if_ierrors++;
[...]
| Trying to find the cause brings me back to that bit of code above and
| what conditions can trigger it.  In am7990reg.h, we find:
| 
| #define     LE_R1_STP       0x02            /* start of packet */
| #define     LE_R1_ENP       0x01            /* end of packet */
| 
| so I believe the test above is checking to see if the corresponding
| bits (0x03) in rmd.rmd1_bits are both set.
| 
| This seems to match up with 28 of the 7990 ("LANCE") data sheet, which says:
| 
| 	STP	START OF PACKET indicates that this is the first buffer
| 		used by the C-LANCE for this packet.  It is used for
| 		data chaining buffers.
| 
| 	ENP	END OF PACKET indicates that this is the last buffer used
| 		by the C-LANCE for this packet.  It is used for data chaining
| 		buffers.  If both STP and ENP are set, the packet fits in one
| 		buffer and there is no data chaining.
| 
| It's that last sentence that has me confused.  I think the piece of code above
| is testing for exactly that condition, so I would expect that condition to
| be true if data was not being chained (across multiple buffers).
[...]

The code is right: if (bits != (STP | ENP)) then it is a chained
buffer. Anyway, the troubleshooting you have done raises some important
points:

  (1) both of your hosts became unresponsive at the same time
  (2) the am7990 driver does not handle chained buffers

Maybe your 2 hosts are receiving some weird ethernet frames and your le0
NICs store these frames in chained buffers, but unfortunately the am7990
driver does not implement reception of chained buffers and eventually
shut down the interface. These guys have some possible explanations for
the weird network packets:

	http://www.geocrawler.com/archives/3/260/1998/9/0/1390514/

You said your have ran tcpdump, but have you succeeded to capture some
traffic at the same time that the "le0: dropping chained buffer" msg
occured ?

-- 
Marc Bevand                          http://www.epita.fr/~bevand_m
Computer Science School EPITA - System, Network and Security Dept.