Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 27 Aug 1999 15:18:22 -0400 (EDT)
From:      Larry Lile <lile@stdio.com>
To:        Phil Regnauld <regnauld@ftf.net>
Cc:        tokenring@freebsd.org
Subject:   Serious token-ring arp bug...
Message-ID:  <Pine.BSF.4.05.9908271500060.12944-100000@heathers.stdio.com>
In-Reply-To: <19990824123247.11319@ns.int.ftf.net>

next in thread | previous in thread | raw e-mail | index | archive | help

Here is a patch for the token-ring arp problem that some people 
have been seeing.  I suggest that anyone trying to do token-ring
apply it, it will be committed to current sometime soon.  Please 
send feedback to me, or the list,  about your results.

During my new-bus rewrite of the Olicom driver I was able to track
this down and get it fixed.  I am hoping that it will help fix some
of the other problems that people are having.

Thanks to Phil and others, I can't recall names just now, for the debug
info on this problem.

Also to pre-answer the next question: Yes, I do have a newbus driver 
for Olicom - PCI Only and it is very slow (200K/s).  I do think I have
resolved the transmitter hang.  I am working on pushing up the throughput
to see if that causes transmitter hang to come back.

Sorry this is all taking so long but be patient...

Larry Lile
lile@stdio.com



*** if_ether.c.orig	Thu Aug 26 20:48:21 1999
--- if_ether.c	Fri Aug 27 14:05:17 1999
***************
*** 566,588 ****
  		 * a token-ring nic then try to save the source
  		 * routing info.
  		 */
  		if (ac->ac_if.if_type == IFT_ISO88025) {
  			th = (struct iso88025_header *)m->m_pkthdr.header;
                  	if ((th->iso88025_shost[0] & 0x80) &&
! 			    (((ntohs(th->rcf) & 0x1f00) >> 8) > 2)) {
! 				sdl->sdl_rcf = ntohs(th->rcf) & 0x0080 ? 
! 				    htons(ntohs(th->rcf) & 0xff7f) :
! 				    htons(ntohs(th->rcf) | 0x0080);
! 				memcpy(sdl->sdl_route, th->rseg, ((ntohs(th->rcf) & 0x1f00) >> 8)  - 2);
! 				sdl->sdl_rcf = htons(ntohs(sdl->sdl_rcf) & 0x1fff);
  				/* Set up source routing information for reply packet (XXX)*/
! 				m->m_data -= (((ntohs(th->rcf) & 0x1f00) >> 8) + 8); 
! 				m->m_len  += (((ntohs(th->rcf) & 0x1f00) >> 8) + 8); 
  			} else {
  				th->iso88025_shost[0] &= 0x7f;
- 				m->m_data -= 8;
- 				m->m_len  += 8;
  			}
  			th->rcf = sdl->sdl_rcf;
  			
  		} else {
--- 566,593 ----
  		 * a token-ring nic then try to save the source
  		 * routing info.
  		 */
+ 		printf("arp: m_len %d\n", m->m_len);
  		if (ac->ac_if.if_type == IFT_ISO88025) {
  			th = (struct iso88025_header *)m->m_pkthdr.header;
                  	if ((th->iso88025_shost[0] & 0x80) &&
! 			    ((th->rcf & 0x001f) > 2)) {
! 				sdl->sdl_rcf = (th->rcf & 0x8000) ? (th->rcf & 0x7fff) :
! 				    (th->rcf | 0x8000);
! 				memcpy(sdl->sdl_route, th->rseg, (th->rcf & 0x001f)  - 2);
! 				sdl->sdl_rcf = sdl->sdl_rcf & 0xff1f;
  				/* Set up source routing information for reply packet (XXX)*/
! 				m->m_data -= (th->rcf & 0x001f); 
! 				m->m_len  += (th->rcf & 0x001f); 
! 				m->m_pkthdr.len += (th->rcf & 0x001f);
! 				printf("arp: m_len %d\n", m->m_len);
! 				printf("arp: sr len %d\n", th->rcf & 0x001f);
  			} else {
  				th->iso88025_shost[0] &= 0x7f;
  			}
+ 			m->m_data -= 8;
+ 			m->m_len  += 8;
+ 			m->m_pkthdr.len += 8;
+ 			printf("arp: m_len %d\n", m->m_len);
  			th->rcf = sdl->sdl_rcf;
  			
  		} else {
***************
*** 664,670 ****
  		/* Set the source routing bit if neccesary */
  		if (th->iso88025_dhost[0] & 0x80) {
  			th->iso88025_dhost[0] &= 0x7f;
! 			if (((ntohs(th->rcf) & 0x1f00) >> 8) - 2)
  				th->iso88025_shost[0] |= 0x80;
  		}
  		/* Copy the addresses, ac and fc into sa_data */
--- 669,675 ----
  		/* Set the source routing bit if neccesary */
  		if (th->iso88025_dhost[0] & 0x80) {
  			th->iso88025_dhost[0] &= 0x7f;
! 			if ((th->rcf & 0x001f) - 2)
  				th->iso88025_shost[0] |= 0x80;
  		}
  		/* Copy the addresses, ac and fc into sa_data */



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-tokenring" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.05.9908271500060.12944-100000>