Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 16 Nov 1998 20:47:27 +0200 (SAT)
From:      John Hay <jhay@mikom.csir.co.za>
To:        asmodai@wxs.nl (Jeroen Ruigrok/Asmodai)
Cc:        jhay@mikom.csir.co.za, freebsd-net@FreeBSD.ORG
Subject:   Re: Frametypes (was: Re: Netware client for FreeBSD)
Message-ID:  <199811161847.UAA21802@zibbi.mikom.csir.co.za>
In-Reply-To: <XFMail.981116120032.asmodai@wxs.nl> from Jeroen Ruigrok/Asmodai at "Nov 16, 98 12:00:32 pm"

next in thread | previous in thread | raw e-mail | index | archive | help
> >> 
> >> which fraemetypes do we support for IPX traffic? If we only support Eth_II
> >> at
> >> this point then we need to integrate 802.2/3 too.
> >> 
> >> But I can remember a previous post about these frametypes. Anyone care to
> >> refresh my mind?
> > 
> > Well at the moment FreeBSD only supports Ethernet_II. I do have patches
> > for 802.3 support, but that is using a single sysctl to switch between
> > E_II and 802.3 for the whole machine (all its interfaces). Support for
> > the different frames isn't too difficult. It is the mechanism to make
> > different interfaces use different frames in a nice way that I'm stuck
> > with. Ie. have ed0 use 802.3 and ed1 use E_II and ed3 use 802.2 or
> > even run two or more frames on the same interface.
> 
> Care to provide me with the patches? =)

Ok, I add it at the end.

> Well there has to be a nice idea how to solve it. Most likely as an extension
> to rc.conf to the interfaces.

Patches welcome. :-) It's not just rc.conf, but also how to send it down
into the kernel and where to store it in there because preferably you
should be able to configure more than one frame per interface so that you
can use a FreeBSD machine to do frame translation.

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 */

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



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