Index: head/UPDATING =================================================================== --- head/UPDATING +++ head/UPDATING @@ -51,6 +51,11 @@ ****************************** SPECIAL WARNING: ****************************** +20180528: + Support for token ring networks has been removed. If you + have "device token" in your kernel config you should remove + it. No device drivers supported token ring. + 20180323: makefs was modified to be able to tag ISO9660 El Torito boot catalog entries as EFI instead of overloading the i386 tag as done previously. Index: head/sys/conf/NOTES =================================================================== --- head/sys/conf/NOTES +++ head/sys/conf/NOTES @@ -807,7 +807,7 @@ # The `ether' device provides generic code to handle # Ethernets; it is MANDATORY when an Ethernet device driver is -# configured or token-ring is enabled. +# configured. device ether # The `vlan' device implements the VLAN tagging of Ethernet frames @@ -845,9 +845,6 @@ # The 'wlan_amrr' device provides AMRR transmit rate control algorithm device wlan_acl device wlan_amrr - -# Generic TokenRing -device token # The `fddi' device provides generic code to support FDDI. device fddi Index: head/sys/conf/files =================================================================== --- head/sys/conf/files +++ head/sys/conf/files @@ -4114,7 +4114,6 @@ netgraph_gif inet | netgraph_gif inet6 net/if_gre.c optional gre inet | gre inet6 net/if_ipsec.c optional inet ipsec | inet6 ipsec -net/if_iso88025subr.c optional token net/if_lagg.c optional lagg net/if_loop.c optional loop net/if_llatbl.c standard Index: head/sys/net/if.c =================================================================== --- head/sys/net/if.c +++ head/sys/net/if.c @@ -3626,7 +3626,6 @@ case IFT_ETHER: case IFT_FDDI: case IFT_XETHER: - case IFT_ISO88025: case IFT_L2VLAN: case IFT_BRIDGE: case IFT_ARCNET: Index: head/sys/net/if_iso88025subr.c =================================================================== --- head/sys/net/if_iso88025subr.c +++ head/sys/net/if_iso88025subr.c @@ -1,695 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 1998, Larry Lile - * All rights reserved. - * - * For latest sources and information on this driver, please - * go to http://anarchy.stdio.com. - * - * Questions, comments or suggestions should be directed to - * Larry Lile . - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice unmodified, this list of conditions, and the following - * disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - * - */ - -/* - * - * General ISO 802.5 (Token Ring) support routines - * - */ - -#include "opt_inet.h" -#include "opt_inet6.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#if defined(INET) || defined(INET6) -#include -#include -#include -#endif -#ifdef INET6 -#include -#endif - -#include - -static const u_char iso88025_broadcastaddr[ISO88025_ADDR_LEN] = - { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; - -static int iso88025_resolvemulti (struct ifnet *, struct sockaddr **, - struct sockaddr *); - -#define senderr(e) do { error = (e); goto bad; } while (0) - -/* - * Perform common duties while attaching to interface list - */ -void -iso88025_ifattach(struct ifnet *ifp, const u_int8_t *lla, int bpf) -{ - struct ifaddr *ifa; - struct sockaddr_dl *sdl; - - ifa = NULL; - - ifp->if_type = IFT_ISO88025; - ifp->if_addrlen = ISO88025_ADDR_LEN; - ifp->if_hdrlen = ISO88025_HDR_LEN; - - if_attach(ifp); /* Must be called before additional assignments */ - - ifp->if_output = iso88025_output; - ifp->if_input = iso88025_input; - ifp->if_resolvemulti = iso88025_resolvemulti; - ifp->if_broadcastaddr = iso88025_broadcastaddr; - - if (ifp->if_baudrate == 0) - ifp->if_baudrate = TR_16MBPS; /* 16Mbit should be a safe default */ - if (ifp->if_mtu == 0) - ifp->if_mtu = ISO88025_DEFAULT_MTU; - - ifa = ifp->if_addr; - KASSERT(ifa != NULL, ("%s: no lladdr!\n", __func__)); - - sdl = (struct sockaddr_dl *)ifa->ifa_addr; - sdl->sdl_type = IFT_ISO88025; - sdl->sdl_alen = ifp->if_addrlen; - bcopy(lla, LLADDR(sdl), ifp->if_addrlen); - - if (bpf) - bpfattach(ifp, DLT_IEEE802, ISO88025_HDR_LEN); - - return; -} - -/* - * Perform common duties while detaching a Token Ring interface - */ -void -iso88025_ifdetach(ifp, bpf) - struct ifnet *ifp; - int bpf; -{ - - if (bpf) - bpfdetach(ifp); - - if_detach(ifp); - - return; -} - -int -iso88025_ioctl(struct ifnet *ifp, u_long command, caddr_t data) -{ - struct ifaddr *ifa; - struct ifreq *ifr; - int error; - - ifa = (struct ifaddr *) data; - ifr = (struct ifreq *) data; - error = 0; - - switch (command) { - case SIOCSIFADDR: - ifp->if_flags |= IFF_UP; - - switch (ifa->ifa_addr->sa_family) { -#ifdef INET - case AF_INET: - ifp->if_init(ifp->if_softc); /* before arpwhohas */ - arp_ifinit(ifp, ifa); - break; -#endif /* INET */ - default: - ifp->if_init(ifp->if_softc); - break; - } - break; - - case SIOCGIFADDR: - bcopy(IF_LLADDR(ifp), &ifr->ifr_addr.sa_data[0], - ISO88025_ADDR_LEN); - break; - - case SIOCSIFMTU: - /* - * Set the interface MTU. - */ - if (ifr->ifr_mtu > ISO88025_MAX_MTU) { - error = EINVAL; - } else { - ifp->if_mtu = ifr->ifr_mtu; - } - break; - default: - error = EINVAL; /* XXX netbsd has ENOTTY??? */ - break; - } - - return (error); -} - -/* - * ISO88025 encapsulation - */ -int -iso88025_output(struct ifnet *ifp, struct mbuf *m, const struct sockaddr *dst, - struct route *ro) -{ - u_int16_t snap_type = 0; - int loop_copy = 0, error = 0, rif_len = 0; - u_char edst[ISO88025_ADDR_LEN]; - struct iso88025_header *th; - struct iso88025_header gen_th; - struct sockaddr_dl *sdl = NULL; - struct rtentry *rt0 = NULL; - int is_gw = 0; - - if (ro != NULL) - is_gw = (ro->ro_flags & RT_HAS_GW) != 0; -#ifdef MAC - error = mac_ifnet_check_transmit(ifp, m); - if (error) - senderr(error); -#endif - - if (ifp->if_flags & IFF_MONITOR) - senderr(ENETDOWN); - if (!((ifp->if_flags & IFF_UP) && - (ifp->if_drv_flags & IFF_DRV_RUNNING))) - senderr(ENETDOWN); - getmicrotime(&ifp->if_lastchange); - - /* Calculate routing info length based on arp table entry */ - /* XXX any better way to do this ? */ - - if (rt0 && (sdl = (struct sockaddr_dl *)rt0->rt_gateway)) - if (SDL_ISO88025(sdl)->trld_rcf != 0) - rif_len = TR_RCF_RIFLEN(SDL_ISO88025(sdl)->trld_rcf); - - /* Generate a generic 802.5 header for the packet */ - gen_th.ac = TR_AC; - gen_th.fc = TR_LLC_FRAME; - (void)memcpy((caddr_t)gen_th.iso88025_shost, IF_LLADDR(ifp), - ISO88025_ADDR_LEN); - if (rif_len) { - gen_th.iso88025_shost[0] |= TR_RII; - if (rif_len > 2) { - gen_th.rcf = SDL_ISO88025(sdl)->trld_rcf; - (void)memcpy((caddr_t)gen_th.rd, - (caddr_t)SDL_ISO88025(sdl)->trld_route, - rif_len - 2); - } - } - - switch (dst->sa_family) { -#ifdef INET - case AF_INET: - error = arpresolve(ifp, is_gw, m, dst, edst, NULL, NULL); - if (error) - return (error == EWOULDBLOCK ? 0 : error); - snap_type = ETHERTYPE_IP; - break; - case AF_ARP: - { - struct arphdr *ah; - ah = mtod(m, struct arphdr *); - ah->ar_hrd = htons(ARPHRD_IEEE802); - - loop_copy = -1; /* if this is for us, don't do it */ - - switch(ntohs(ah->ar_op)) { - case ARPOP_REVREQUEST: - case ARPOP_REVREPLY: - snap_type = ETHERTYPE_REVARP; - break; - case ARPOP_REQUEST: - case ARPOP_REPLY: - default: - snap_type = ETHERTYPE_ARP; - break; - } - - if (m->m_flags & M_BCAST) - bcopy(ifp->if_broadcastaddr, edst, ISO88025_ADDR_LEN); - else - bcopy(ar_tha(ah), edst, ISO88025_ADDR_LEN); - - } - break; -#endif /* INET */ -#ifdef INET6 - case AF_INET6: - error = nd6_resolve(ifp, is_gw, m, dst, edst, NULL, NULL); - if (error) - return (error == EWOULDBLOCK ? 0 : error); - snap_type = ETHERTYPE_IPV6; - break; -#endif /* INET6 */ - case AF_UNSPEC: - { - const struct iso88025_sockaddr_data *sd; - /* - * For AF_UNSPEC sockaddr.sa_data must contain all of the - * mac information needed to send the packet. This allows - * full mac, llc, and source routing function to be controlled. - * llc and source routing information must already be in the - * mbuf provided, ac/fc are set in sa_data. sockaddr.sa_data - * should be an iso88025_sockaddr_data structure see iso88025.h - */ - loop_copy = -1; - sd = (const struct iso88025_sockaddr_data *)dst->sa_data; - gen_th.ac = sd->ac; - gen_th.fc = sd->fc; - (void)memcpy(edst, sd->ether_dhost, ISO88025_ADDR_LEN); - (void)memcpy(gen_th.iso88025_shost, sd->ether_shost, - ISO88025_ADDR_LEN); - rif_len = 0; - break; - } - default: - if_printf(ifp, "can't handle af%d\n", dst->sa_family); - senderr(EAFNOSUPPORT); - break; - } - - /* - * Add LLC header. - */ - if (snap_type != 0) { - struct llc *l; - M_PREPEND(m, LLC_SNAPFRAMELEN, M_NOWAIT); - if (m == NULL) - senderr(ENOBUFS); - l = mtod(m, struct llc *); - l->llc_control = LLC_UI; - l->llc_dsap = l->llc_ssap = LLC_SNAP_LSAP; - l->llc_snap.org_code[0] = - l->llc_snap.org_code[1] = - l->llc_snap.org_code[2] = 0; - l->llc_snap.ether_type = htons(snap_type); - } - - /* - * Add local net header. If no space in first mbuf, - * allocate another. - */ - M_PREPEND(m, ISO88025_HDR_LEN + rif_len, M_NOWAIT); - if (m == NULL) - senderr(ENOBUFS); - th = mtod(m, struct iso88025_header *); - bcopy((caddr_t)edst, (caddr_t)&gen_th.iso88025_dhost, ISO88025_ADDR_LEN); - - /* Copy as much of the generic header as is needed into the mbuf */ - memcpy(th, &gen_th, ISO88025_HDR_LEN + rif_len); - - /* - * If a simplex interface, and the packet is being sent to our - * Ethernet address or a broadcast address, loopback a copy. - * XXX To make a simplex device behave exactly like a duplex - * device, we should copy in the case of sending to our own - * ethernet address (thus letting the original actually appear - * on the wire). However, we don't do that here for security - * reasons and compatibility with the original behavior. - */ - if ((ifp->if_flags & IFF_SIMPLEX) && (loop_copy != -1)) { - if ((m->m_flags & M_BCAST) || (loop_copy > 0)) { - struct mbuf *n; - n = m_copym(m, 0, M_COPYALL, M_NOWAIT); - (void) if_simloop(ifp, n, dst->sa_family, - ISO88025_HDR_LEN); - } else if (bcmp(th->iso88025_dhost, th->iso88025_shost, - ETHER_ADDR_LEN) == 0) { - (void) if_simloop(ifp, m, dst->sa_family, - ISO88025_HDR_LEN); - return(0); /* XXX */ - } - } - - IFQ_HANDOFF_ADJ(ifp, m, ISO88025_HDR_LEN + LLC_SNAPFRAMELEN, error); - if (error) { - printf("iso88025_output: packet dropped QFULL.\n"); - if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); - } - return (error); - -bad: - if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); - if (m) - m_freem(m); - return (error); -} - -/* - * ISO 88025 de-encapsulation - */ -void -iso88025_input(ifp, m) - struct ifnet *ifp; - struct mbuf *m; -{ - struct iso88025_header *th; - struct llc *l; - int isr; - int mac_hdr_len; - - /* - * Do consistency checks to verify assumptions - * made by code past this point. - */ - if ((m->m_flags & M_PKTHDR) == 0) { - if_printf(ifp, "discard frame w/o packet header\n"); - if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); - m_freem(m); - return; - } - if (m->m_pkthdr.rcvif == NULL) { - if_printf(ifp, "discard frame w/o interface pointer\n"); - if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); - m_freem(m); - return; - } - - m = m_pullup(m, ISO88025_HDR_LEN); - if (m == NULL) { - if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); - goto dropanyway; - } - th = mtod(m, struct iso88025_header *); - - /* - * Discard packet if interface is not up. - */ - if (!((ifp->if_flags & IFF_UP) && - (ifp->if_drv_flags & IFF_DRV_RUNNING))) - goto dropanyway; - - /* - * Give bpf a chance at the packet. - */ - BPF_MTAP(ifp, m); - - /* - * Interface marked for monitoring; discard packet. - */ - if (ifp->if_flags & IFF_MONITOR) { - m_freem(m); - return; - } - -#ifdef MAC - mac_ifnet_create_mbuf(ifp, m); -#endif - - /* - * Update interface statistics. - */ - if_inc_counter(ifp, IFCOUNTER_IBYTES, m->m_pkthdr.len); - getmicrotime(&ifp->if_lastchange); - - /* - * Discard non local unicast packets when interface - * is in promiscuous mode. - */ - if ((ifp->if_flags & IFF_PROMISC) && - ((th->iso88025_dhost[0] & 1) == 0) && - (bcmp(IF_LLADDR(ifp), (caddr_t) th->iso88025_dhost, - ISO88025_ADDR_LEN) != 0)) - goto dropanyway; - - /* - * Set mbuf flags for bcast/mcast. - */ - if (th->iso88025_dhost[0] & 1) { - if (bcmp(iso88025_broadcastaddr, th->iso88025_dhost, - ISO88025_ADDR_LEN) == 0) - m->m_flags |= M_BCAST; - else - m->m_flags |= M_MCAST; - if_inc_counter(ifp, IFCOUNTER_IMCASTS, 1); - } - - mac_hdr_len = ISO88025_HDR_LEN; - /* Check for source routing info */ - if (th->iso88025_shost[0] & TR_RII) - mac_hdr_len += TR_RCF_RIFLEN(th->rcf); - - /* Strip off ISO88025 header. */ - m_adj(m, mac_hdr_len); - - m = m_pullup(m, LLC_SNAPFRAMELEN); - if (m == NULL) { - if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); - goto dropanyway; - } - l = mtod(m, struct llc *); - - switch (l->llc_dsap) { - case LLC_SNAP_LSAP: { - u_int16_t type; - if ((l->llc_control != LLC_UI) || - (l->llc_ssap != LLC_SNAP_LSAP)) { - if_inc_counter(ifp, IFCOUNTER_NOPROTO, 1); - goto dropanyway; - } - - if (l->llc_snap.org_code[0] != 0 || - l->llc_snap.org_code[1] != 0 || - l->llc_snap.org_code[2] != 0) { - if_inc_counter(ifp, IFCOUNTER_NOPROTO, 1); - goto dropanyway; - } - - type = ntohs(l->llc_snap.ether_type); - m_adj(m, LLC_SNAPFRAMELEN); - switch (type) { -#ifdef INET - case ETHERTYPE_IP: - th->iso88025_shost[0] &= ~(TR_RII); - isr = NETISR_IP; - break; - - case ETHERTYPE_ARP: - if (ifp->if_flags & IFF_NOARP) - goto dropanyway; - isr = NETISR_ARP; - break; -#endif /* INET */ -#ifdef INET6 - case ETHERTYPE_IPV6: - th->iso88025_shost[0] &= ~(TR_RII); - isr = NETISR_IPV6; - break; -#endif /* INET6 */ - default: - printf("iso88025_input: unexpected llc_snap ether_type 0x%02x\n", type); - if_inc_counter(ifp, IFCOUNTER_NOPROTO, 1); - goto dropanyway; - } - break; - } -#ifdef ISO - case LLC_ISO_LSAP: - switch (l->llc_control) { - case LLC_UI: - if_inc_counter(ifp, IFCOUNTER_NOPROTO, 1); - goto dropanyway; - break; - case LLC_XID: - case LLC_XID_P: - if(m->m_len < ISO88025_ADDR_LEN) - goto dropanyway; - l->llc_window = 0; - l->llc_fid = 9; - l->llc_class = 1; - l->llc_dsap = l->llc_ssap = 0; - /* Fall through to */ - case LLC_TEST: - case LLC_TEST_P: - { - struct sockaddr sa; - struct iso88025_sockaddr_data *th2; - int i; - u_char c; - - c = l->llc_dsap; - - if (th->iso88025_shost[0] & TR_RII) { /* XXX */ - printf("iso88025_input: dropping source routed LLC_TEST\n"); - goto dropanyway; - } - l->llc_dsap = l->llc_ssap; - l->llc_ssap = c; - if (m->m_flags & (M_BCAST | M_MCAST)) - bcopy((caddr_t)IF_LLADDR(ifp), - (caddr_t)th->iso88025_dhost, - ISO88025_ADDR_LEN); - sa.sa_family = AF_UNSPEC; - sa.sa_len = sizeof(sa); - th2 = (struct iso88025_sockaddr_data *)sa.sa_data; - for (i = 0; i < ISO88025_ADDR_LEN; i++) { - th2->ether_shost[i] = c = th->iso88025_dhost[i]; - th2->ether_dhost[i] = th->iso88025_dhost[i] = - th->iso88025_shost[i]; - th->iso88025_shost[i] = c; - } - th2->ac = TR_AC; - th2->fc = TR_LLC_FRAME; - ifp->if_output(ifp, m, &sa, NULL); - return; - } - default: - printf("iso88025_input: unexpected llc control 0x%02x\n", l->llc_control); - if_inc_counter(ifp, IFCOUNTER_NOPROTO, 1); - goto dropanyway; - break; - } - break; -#endif /* ISO */ - default: - printf("iso88025_input: unknown dsap 0x%x\n", l->llc_dsap); - if_inc_counter(ifp, IFCOUNTER_NOPROTO, 1); - goto dropanyway; - break; - } - - M_SETFIB(m, ifp->if_fib); - netisr_dispatch(isr, m); - return; - -dropanyway: - if_inc_counter(ifp, IFCOUNTER_IQDROPS, 1); - if (m) - m_freem(m); - return; -} - -static int -iso88025_resolvemulti (ifp, llsa, sa) - struct ifnet *ifp; - struct sockaddr **llsa; - struct sockaddr *sa; -{ - struct sockaddr_dl *sdl; -#ifdef INET - struct sockaddr_in *sin; -#endif -#ifdef INET6 - struct sockaddr_in6 *sin6; -#endif - u_char *e_addr; - - switch(sa->sa_family) { - case AF_LINK: - /* - * No mapping needed. Just check that it's a valid MC address. - */ - sdl = (struct sockaddr_dl *)sa; - e_addr = LLADDR(sdl); - if ((e_addr[0] & 1) != 1) { - return (EADDRNOTAVAIL); - } - *llsa = NULL; - return (0); - -#ifdef INET - case AF_INET: - sin = (struct sockaddr_in *)sa; - if (!IN_MULTICAST(ntohl(sin->sin_addr.s_addr))) { - return (EADDRNOTAVAIL); - } - sdl = link_init_sdl(ifp, *llsa, IFT_ISO88025); - sdl->sdl_alen = ISO88025_ADDR_LEN; - e_addr = LLADDR(sdl); - ETHER_MAP_IP_MULTICAST(&sin->sin_addr, e_addr); - *llsa = (struct sockaddr *)sdl; - return (0); -#endif -#ifdef INET6 - case AF_INET6: - sin6 = (struct sockaddr_in6 *)sa; - if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) { - /* - * An IP6 address of 0 means listen to all - * of the Ethernet multicast address used for IP6. - * (This is used for multicast routers.) - */ - ifp->if_flags |= IFF_ALLMULTI; - *llsa = NULL; - return (0); - } - if (!IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr)) { - return (EADDRNOTAVAIL); - } - sdl = link_init_sdl(ifp, *llsa, IFT_ISO88025); - sdl->sdl_alen = ISO88025_ADDR_LEN; - e_addr = LLADDR(sdl); - ETHER_MAP_IPV6_MULTICAST(&sin6->sin6_addr, e_addr); - *llsa = (struct sockaddr *)sdl; - return (0); -#endif - - default: - /* - * Well, the text isn't quite right, but it's the name - * that counts... - */ - return (EAFNOSUPPORT); - } - - return (0); -} - -static moduledata_t iso88025_mod = { - .name = "iso88025", -}; - -DECLARE_MODULE(iso88025, iso88025_mod, SI_SUB_PSEUDO, SI_ORDER_ANY); -MODULE_VERSION(iso88025, 1); Index: head/sys/net/iso88025.h =================================================================== --- head/sys/net/iso88025.h +++ head/sys/net/iso88025.h @@ -1,176 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 1998, Larry Lile - * All rights reserved. - * - * For latest sources and information on this driver, please - * go to http://anarchy.stdio.com. - * - * Questions, comments or suggestions should be directed to - * Larry Lile . - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice unmodified, this list of conditions, and the following - * disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - * - * Information gathered from tokenring@freebsd, /sys/net/ethernet.h and - * the Mach token ring driver. - */ - -/* - * Fundamental constants relating to iso 802.5 - */ - -#ifndef _NET_ISO88025_H_ -#define _NET_ISO88025_H_ - -/* - * General ISO 802.5 definitions - */ -#define ISO88025_ADDR_LEN 6 -#define ISO88025_CF_LEN 2 -#define ISO88025_HDR_LEN (ISO88025_CF_LEN + (ISO88025_ADDR_LEN * 2)) -#define RCF_LEN 2 -#define RIF_MAX_RD 14 -#define RIF_MAX_LEN 16 - -#define TR_AC 0x10 -#define TR_LLC_FRAME 0x40 - -#define TR_4MBPS 4000000 -#define TR_16MBPS 16000000 -#define TR_100MBPS 100000000 - -/* - * Source routing - */ -#define TR_RII 0x80 -#define TR_RCF_BCST_MASK 0xe000 -#define TR_RCF_LEN_MASK 0x1f00 -#define TR_RCF_DIR 0x0080 -#define TR_RCF_LF_MASK 0x0070 - -#define TR_RCF_RIFLEN(x) ((ntohs(x) & TR_RCF_LEN_MASK) >> 8) - -/* - * Minimum and maximum packet payload lengths. - */ -#define ISO88025_MIN_LEN 0 -#define ISO88025_MAX_LEN_4 4464 -#define ISO88025_MAX_LEN_16 17960 -#define ISO88025_MAX_LEN ISO88025_MAX_LEN_16 - -/* - * A macro to validate a length with - */ -#define ISO88025_IS_VALID_LEN(foo) \ - ((foo) >= ISO88025_MIN_LEN && (foo) <= ISO88025_MAX_LEN) - -/* Access Control field */ -#define AC_PRI_MASK 0xe0 /* Priority bits */ -#define AC_TOKEN 0x10 /* Token bit: 0=Token, 1=Frame */ -#define AC_MONITOR 0x08 /* Monitor */ -#define AC_RESV_MASK 0x07 /* Reservation bits */ - -/* Frame Control field */ -#define FC_FT_MASK 0xc0 /* Frame Type */ -#define FC_FT_MAC 0x00 /* MAC frame */ -#define FC_FT_LLC 0x40 /* LLC frame */ -#define FC_ATTN_MASK 0x0f /* Attention bits */ -#define FC_ATTN_EB 0x01 /* Express buffer */ -#define FC_ATTN_BE 0x02 /* Beacon */ -#define FC_ATTN_CT 0x03 /* Claim token */ -#define FC_ATTN_RP 0x04 /* Ring purge */ -#define FC_ATTN_AMP 0x05 /* Active monitor present */ -#define FC_ATTN_SMP 0x06 /* Standby monitor present */ - -/* Token Ring destination address */ -#define DA_IG 0x80 /* Individual/group address. */ - /* 0=Individual, 1=Group */ -#define DA_UL 0x40 /* Universal/local address. */ - /* 0=Universal, 1=Local */ -/* Token Ring source address */ -#define SA_RII 0x80 /* Routing information indicator */ -#define SA_IG 0x40 /* Individual/group address */ - /* 0=Group, 1=Individual */ - -/* - * ISO 802.5 physical header - */ -struct iso88025_header { - u_int8_t ac; /* access control field */ - u_int8_t fc; /* frame control field */ - u_int8_t iso88025_dhost[ISO88025_ADDR_LEN]; /* destination address */ - u_int8_t iso88025_shost[ISO88025_ADDR_LEN]; /* source address */ - u_int16_t rcf; /* route control field */ - u_int16_t rd[RIF_MAX_RD]; /* routing designators */ -} __packed; - -struct iso88025_rif { - u_int16_t rcf; /* route control field */ - u_int16_t rd[RIF_MAX_RD]; /* routing designators */ -} __packed; - -struct iso88025_sockaddr_data { - u_char ether_dhost[ISO88025_ADDR_LEN]; - u_char ether_shost[ISO88025_ADDR_LEN]; - u_char ac; - u_char fc; -}; - -struct iso88025_sockaddr_dl_data { - u_short trld_rcf; - u_short *trld_route[RIF_MAX_LEN]; -}; - -#define ISO88025_MAX(a, b) (((a)>(b))?(a):(b)) -#define SDL_ISO88025(s) ((struct iso88025_sockaddr_dl_data *) \ - ((s)->sdl_data + \ - ISO88025_MAX((s)->sdl_nlen + (s)->sdl_alen + \ - (s)->sdl_slen, 12))) - -/* - * Structure of a 48-bit iso 802.5 address. - * ( We could also add the 16 bit addresses as a union) - */ -struct iso88025_addr { - u_char octet[ISO88025_ADDR_LEN]; -}; - -#define ISO88025_MAX_MTU 18000 -#define ISO88025_DEFAULT_MTU 1500 - -#define ISO88025_BPF_UNSUPPORTED 0 -#define ISO88025_BPF_SUPPORTED 1 - -#ifdef _KERNEL -void iso88025_ifattach (struct ifnet *, const u_int8_t *, int); -void iso88025_ifdetach (struct ifnet *, int); -int iso88025_ioctl (struct ifnet *, u_long, caddr_t ); -int iso88025_output (struct ifnet *, struct mbuf *, - const struct sockaddr *, struct route *); -void iso88025_input (struct ifnet *, struct mbuf *); -#endif /* _KERNEL */ - -#endif /* !_NET_ISO88025_H_ */ Index: head/sys/netinet/ip_carp.c =================================================================== --- head/sys/netinet/ip_carp.c +++ head/sys/netinet/ip_carp.c @@ -61,7 +61,6 @@ #include #include #include -#include #include #include @@ -1539,17 +1538,6 @@ fh->fddi_shost[5] = sc->sc_vhid; } break; - case IFT_ISO88025: { - struct iso88025_header *th; - th = mtod(m, struct iso88025_header *); - th->iso88025_shost[0] = 3; - th->iso88025_shost[1] = 0; - th->iso88025_shost[2] = 0x40 >> (sc->sc_vhid - 1); - th->iso88025_shost[3] = 0x40000 >> (sc->sc_vhid - 1); - th->iso88025_shost[4] = 0; - th->iso88025_shost[5] = 0; - } - break; default: printf("%s: carp is not supported for the %d interface type\n", ifp->if_xname, ifp->if_type); @@ -1732,7 +1720,6 @@ case IFT_L2VLAN: case IFT_BRIDGE: case IFT_FDDI: - case IFT_ISO88025: break; default: error = EOPNOTSUPP; Index: head/sys/netinet6/in6.c =================================================================== --- head/sys/netinet6/in6.c +++ head/sys/netinet6/in6.c @@ -1971,8 +1971,6 @@ return (64); case IFT_FDDI: /* RFC2467 */ return (64); - case IFT_ISO88025: /* RFC2470 (IPv6 over Token Ring) */ - return (64); case IFT_PPP: /* RFC2472 */ return (64); case IFT_ARCNET: /* RFC2497 */ Index: head/sys/netinet6/in6_ifattach.c =================================================================== --- head/sys/netinet6/in6_ifattach.c +++ head/sys/netinet6/in6_ifattach.c @@ -275,7 +275,6 @@ case IFT_ETHER: case IFT_L2VLAN: case IFT_FDDI: - case IFT_ISO88025: case IFT_ATM: case IFT_IEEE1394: /* IEEE802/EUI64 cases - what others? */ Index: head/sys/netinet6/nd6.c =================================================================== --- head/sys/netinet6/nd6.c +++ head/sys/netinet6/nd6.c @@ -61,7 +61,6 @@ #include #include #include -#include #include #include #include @@ -344,9 +343,6 @@ case IFT_FDDI: ndi->maxmtu = MIN(FDDIIPMTU, ifp->if_mtu); /* RFC2467 */ break; - case IFT_ISO88025: - ndi->maxmtu = MIN(ISO88025_MAX_MTU, ifp->if_mtu); - break; default: ndi->maxmtu = ifp->if_mtu; break; @@ -2279,7 +2275,6 @@ case IFT_FDDI: case IFT_L2VLAN: case IFT_BRIDGE: - case IFT_ISO88025: ETHER_MAP_IPV6_MULTICAST(&dst6->sin6_addr, desten); return (0); Index: head/sys/netinet6/nd6_nbr.c =================================================================== --- head/sys/netinet6/nd6_nbr.c +++ head/sys/netinet6/nd6_nbr.c @@ -1097,7 +1097,6 @@ case IFT_L2VLAN: case IFT_INFINIBAND: case IFT_BRIDGE: - case IFT_ISO88025: return IF_LLADDR(ifp); default: return NULL; Index: head/sys/nfs/bootp_subr.c =================================================================== --- head/sys/nfs/bootp_subr.c +++ head/sys/nfs/bootp_subr.c @@ -1646,7 +1646,6 @@ switch (ifp->if_alloctype) { case IFT_ETHER: case IFT_FDDI: - case IFT_ISO88025: break; default: continue; @@ -1677,7 +1676,6 @@ switch (ifp->if_alloctype) { case IFT_ETHER: case IFT_FDDI: - case IFT_ISO88025: break; default: continue; Index: head/usr.sbin/arp/arp.c =================================================================== --- head/usr.sbin/arp/arp.c +++ head/usr.sbin/arp/arp.c @@ -62,7 +62,6 @@ #include #include #include -#include #include #include @@ -303,7 +302,6 @@ case IFT_INFINIBAND: case IFT_ISO88023: case IFT_ISO88024: - case IFT_ISO88025: case IFT_L2VLAN: case IFT_BRIDGE: return (1); @@ -592,9 +590,7 @@ { const char *host; struct hostent *hp; - struct iso88025_sockaddr_dl_data *trld; struct if_nameindex *p; - int seg; if (ifnameindex == NULL) if ((ifnameindex = if_nameindex()) == NULL) @@ -659,17 +655,6 @@ case IFT_ETHER: xo_emit(" [{:type/ethernet}]"); break; - case IFT_ISO88025: - xo_emit(" [{:type/token-ring}]"); - trld = SDL_ISO88025(sdl); - if (trld->trld_rcf != 0) { - xo_emit(" rt=%x", ntohs(trld->trld_rcf)); - for (seg = 0; - seg < ((TR_RCF_RIFLEN(trld->trld_rcf) - 2 ) / 2); - seg++) - xo_emit(":%x", ntohs(*(trld->trld_route[seg]))); - } - break; case IFT_FDDI: xo_emit(" [{:type/fddi}]"); break;