Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 28 Jul 1997 14:27:08 +0200 (SAT)
From:      John Hay <jhay@mikom.csir.co.za>
To:        dennis@etinc.com (dennis)
Cc:        danny@panda.hilink.com.au, isp@FreeBSD.ORG
Subject:   Re: FreeBSD + IPX
Message-ID:  <199707281227.OAA06782@zibbi.mikom.csir.co.za>
In-Reply-To: <3.0.32.19970724104816.00b5315c@etinc.com> from dennis at "Jul 24, 97 10:48:19 am"

next in thread | previous in thread | raw e-mail | index | archive | help
> 
> Why not just support 802.3. Its not that difficult for pete's sake. If someone
> asked me to change my entire network to suit a product with such a basic
> defect I would be very suspicious of the reliability (and support) of the
> feature.
> if you can't make  something as trivial as 802.3 work then there are lots
> of more 
> complicated things that probably wont work as well.

It isn't difficult to do if you just do either Ethernet_II or 802.3 on
all interfaces. Here is some code for that. Just set sysctl net.link.ether.
ipx.framing8023 to 1 to switch from Ethernet_II framing to 802.3 on ALL
interfaces.

The reason I don't commit this is that I would rather have a way to
support more than one framing per interface or otherwise have it at
least settable per interface. I have code to set it per interface,
but it use the link1 flag, so it only works on cards that don't use
that flag.

O, this patch is against 2.2-STABLE.

John
-- 
John Hay -- John.Hay@mikom.csir.co.za


--- if_ethersubr.c.v2.2.org	Wed Jul  2 07:56:33 1997
+++ if_ethersubr.c	Sun Jul 27 10:18:58 1997
@@ -101,6 +101,11 @@
 extern u_char	aarp_org_code[ 3 ];
 #endif NETATALK
 
+SYSCTL_NODE(_net_link_ether, PF_IPX, ipx, CTLFLAG_RW, 0, "");
+static int ipx8023;	/* Should we do Ethernet_II framing for IPX? */
+SYSCTL_INT(_net_link_ether_ipx, OID_AUTO, framing8023, CTLFLAG_RW,
+	   &ipx8023, 0, "");
+
 u_char	etherbroadcastaddr[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
 #define senderr(e) { error = (e); goto bad;}
 
@@ -177,7 +182,10 @@
 		{
 		struct ifaddr *ia;
 
-		type = htons(ETHERTYPE_IPX);
+		if (ipx8023)
+			type = htons(m->m_pkthdr.len);
+		else
+			type = htons(ETHERTYPE_IPX);
  		bcopy((caddr_t)&(((struct sockaddr_ipx *)dst)->sipx_addr.x_host),
 		    (caddr_t)edst, sizeof (edst));
 		for (ia = ifp->if_addrlist; ia != NULL; ia = ia->ifa_next)
@@ -467,8 +475,13 @@
 #endif
 #ifdef IPX
 	case ETHERTYPE_IPX:
-		schednetisr(NETISR_IPX);
-		inq = &ipxintrq;
+		if (ipx8023 == 0) {
+			schednetisr(NETISR_IPX);
+			inq = &ipxintrq;
+		} else {
+			m_freem(m);
+			return;
+		}
 		break;
 #endif
 #ifdef NS
@@ -489,6 +502,18 @@
                 return;
 #endif NETATALK
 	default:
+#ifdef IPX
+	    {
+		struct ipx *ipxp = mtod(m, struct ipx *);
+
+		if (ipx8023 && (ipxp->ipx_sum == 0xffff) &&
+		    (ntohs(ipxp->ipx_len) <= m->m_pkthdr.len)) {
+			schednetisr(NETISR_IPX);
+			inq = &ipxintrq;
+			break;  
+		}
+	    }
+#endif
 #ifdef NS
 		checksum = mtod(m, ushort *);
 		/* Novell 802.3 */




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199707281227.OAA06782>