*** if_ethersubr.c-old Mon Mar 30 18:20:16 1998 --- if_ethersubr.c Tue Sep 29 09:06:43 1998 *************** *** 73,78 **** --- 73,79 ---- #ifdef IPX #include #include + ushort ipx_nettype = 0; #endif #ifdef NS *************** *** 209,215 **** { struct ifaddr *ia; ! 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) --- 210,232 ---- { struct ifaddr *ia; ! switch(ipx_nettype){ ! default: ! case ETHERTYPE_IPX: /* Novell Ethernet_II Ethernet TYPE II */ ! type = ETHERTYPE_IPX; ! break; ! case 0x0: /* Novell 802.3 */ ! type = htons( m->m_pkthdr.len); ! break; ! case 0xe0e0: /* Novell 802.2 and Token-Ring */ ! M_PREPEND(m, 3, M_WAIT); ! type = htons( m->m_pkthdr.len); ! cp = mtod(m, u_char *); ! *cp++ = 0xE0; ! *cp++ = 0xE0; ! *cp++ = 0x03; ! break; ! } 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) *************** *** 571,576 **** --- 588,608 ---- return; #endif NETATALK default: + #ifdef IPX + checksum = mtod(m, ushort *); + /* Novell 802.3 */ + if ((ether_type <= ETHERMTU) && + ((*checksum == 0xffff) || (*checksum == 0xE0E0))){ + if(*checksum == 0xE0E0) { + m->m_pkthdr.len -= 3; + m->m_len -= 3; + m->m_data += 3; + } + schednetisr(NETISR_IPX); + inq = &ipxintrq; + break; + } + #endif /* IPX */ #ifdef NS checksum = mtod(m, ushort *); /* Novell 802.3 */