diff options
author | dg <dg@FreeBSD.org> | 1994-11-24 14:29:38 +0000 |
---|---|---|
committer | dg <dg@FreeBSD.org> | 1994-11-24 14:29:38 +0000 |
commit | 68acac5e7669e7382032efb3be686d7d31127ff7 (patch) | |
tree | f24c94cbed7412ca371d1f76bc07b9dfdcdbc432 /sys | |
parent | 72223a20dbcc102ebb53c5b477fb878dadf67674 (diff) | |
download | FreeBSD-src-68acac5e7669e7382032efb3be686d7d31127ff7.zip FreeBSD-src-68acac5e7669e7382032efb3be686d7d31127ff7.tar.gz |
Moved conversion of ether_type to host byte order out of ethernet drivers
and into ether_input(). It was silly to have bpf want this one way and
ether_input want it another way. Ripped out trailer support from the few
remaining drivers that still had it.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/de/if_de.c | 3 | ||||
-rw-r--r-- | sys/dev/ed/if_ed.c | 10 | ||||
-rw-r--r-- | sys/dev/ep/if_ep.c | 94 | ||||
-rw-r--r-- | sys/dev/ie/if_ie.c | 4 | ||||
-rw-r--r-- | sys/dev/lnc/if_lnc.c | 1 | ||||
-rw-r--r-- | sys/i386/isa/if_ed.c | 10 | ||||
-rw-r--r-- | sys/i386/isa/if_el.c | 44 | ||||
-rw-r--r-- | sys/i386/isa/if_ep.c | 94 | ||||
-rw-r--r-- | sys/i386/isa/if_ie.c | 4 | ||||
-rw-r--r-- | sys/i386/isa/if_is.c | 87 | ||||
-rw-r--r-- | sys/i386/isa/if_le.c | 16 | ||||
-rw-r--r-- | sys/i386/isa/if_lnc.c | 1 | ||||
-rw-r--r-- | sys/i386/isa/if_ze.c | 101 | ||||
-rw-r--r-- | sys/i386/pci/if_de.c | 3 | ||||
-rw-r--r-- | sys/net/if_ethersubr.c | 19 | ||||
-rw-r--r-- | sys/pci/if_de.c | 3 |
16 files changed, 48 insertions, 446 deletions
diff --git a/sys/dev/de/if_de.c b/sys/dev/de/if_de.c index 9e6a26b..c2be075 100644 --- a/sys/dev/de/if_de.c +++ b/sys/dev/de/if_de.c @@ -21,7 +21,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: if_de.c,v 1.6 1994/11/13 12:39:38 davidg Exp $ + * $Id: if_de.c,v 1.7 1994/11/22 09:47:31 davidg Exp $ * */ @@ -394,7 +394,6 @@ tulip_rx_intr( } #endif eh = *(struct ether_header *) bufaddr; - eh.ether_type = ntohs(eh.ether_type); #if NBPFILTER > 0 if (sc->tulip_bpf != NULL) { bpf_tap(sc->tulip_bpf, bufaddr, total_len); diff --git a/sys/dev/ed/if_ed.c b/sys/dev/ed/if_ed.c index f67d134..b9b8503 100644 --- a/sys/dev/ed/if_ed.c +++ b/sys/dev/ed/if_ed.c @@ -13,7 +13,7 @@ * the SMC Elite Ultra (8216), the 3Com 3c503, the NE1000 and NE2000, * and a variety of similar clones. * - * $Id: if_ed.c,v 1.55 1994/11/13 07:17:46 davidg Exp $ + * $Id: if_ed.c,v 1.56 1994/11/17 14:42:27 davidg Exp $ */ #include "ed.h" @@ -2110,8 +2110,7 @@ ed_get_packet(sc, buf, len, multicast) len -= sizeof(struct ether_header); /* - * Pull packet off interface. Or if this was a trailer packet, the - * data portion is appended. + * Pull packet off interface. */ if (ed_ring_to_mbuf(sc, buf, m, len) == NULL) { m_freem(m); @@ -2146,11 +2145,6 @@ ed_get_packet(sc, buf, len, multicast) */ m_adj(m, sizeof(struct ether_header)); - /* - * silly ether_input routine needs 'type' in host byte order - */ - eh->ether_type = ntohs(eh->ether_type); - ether_input(&sc->arpcom.ac_if, eh, m); return; } diff --git a/sys/dev/ep/if_ep.c b/sys/dev/ep/if_ep.c index 9534182..f73c9a6 100644 --- a/sys/dev/ep/if_ep.c +++ b/sys/dev/ep/if_ep.c @@ -52,10 +52,6 @@ * used while working on this driver and the program that displays this * information (epstat). * - * NB 2: About trailers, I didn't care if this implementation was OK, I just - * adapted it to have the same behaviour as in the original driver (donne - * just for epread()). - * * * Some driver statistics can be viewed with the epstat utility. In order to * use this, you have to compile if_ep.c with @@ -812,62 +808,7 @@ startagain: #if NBPFILTER > 0 if (sc->bpf) { - u_short etype; - int off, datasize, resid; - struct ether_header *eh; - struct trailer_header { - u_short ether_type; - u_short ether_residual; - } trailer_header; - char ether_packet[ETHER_MAX_LEN]; - char *ep; - - ep = ether_packet; - - /* - * We handle trailers below: Copy ether header first, then residual - * data, then data. Put all this in a temporary buffer 'ether_packet' - * and send off to bpf. Since the system has generated this packet, - * we assume that all of the offsets in the packet are correct; if - * they're not, the system will almost certainly crash in m_copydata. - * We make no assumptions about how the data is arranged in the mbuf - * chain (i.e. how much data is in each mbuf, if mbuf clusters are - * used, etc.), which is why we use m_copydata to get the ether - * header rather than assume that this is located in the first mbuf. - */ - /* copy ether header */ - m_copydata(top, 0, sizeof(struct ether_header), ep); - eh = (struct ether_header *) ep; - ep += sizeof(struct ether_header); - eh->ether_type = etype = ntohs(eh->ether_type); - if (etype >= ETHERTYPE_TRAIL && - etype < ETHERTYPE_TRAIL + ETHERTYPE_NTRAILER) { - datasize = ((etype - ETHERTYPE_TRAIL) << 9); - off = datasize + sizeof(struct ether_header); - - /* copy trailer_header into a data structure */ - m_copydata(top, off, sizeof(struct trailer_header), - (caddr_t) & trailer_header.ether_type); - - /* copy residual data */ - resid = trailer_header.ether_residual - - sizeof(struct trailer_header); - resid = ntohs(resid); - m_copydata(top, off + sizeof(struct trailer_header), - resid, ep); - ep += resid; - - /* copy data */ - m_copydata(top, sizeof(struct ether_header), - datasize, ep); - ep += datasize; - - /* restore original ether packet type */ - eh->ether_type = trailer_header.ether_type; - - bpf_tap(sc->bpf, ether_packet, ep - ether_packet); - } else - bpf_mtap(sc->bpf, top); + bpf_mtap(sc->bpf, top); } #endif @@ -998,12 +939,7 @@ epread(sc) short rx_fifo2, status; register short delta; register short rx_fifo; - u_short etype; - /* - * XXX I have just adapted the code for the protocol trailing processing - * as programed in the original driver. FreeBSD 1.1.5.1 release - */ status = inw(BASE + EP_W1_RX_STATUS); read_again: @@ -1050,34 +986,6 @@ read_again: top->m_len = sizeof(struct ether_header); rx_fifo -= sizeof(struct ether_header); sc->cur_len = rx_fifo2; - - /* - * Test for trailers. - * I didn't care if this implementation was OK, I just adapted it to - * have the same behaviour as in the original driver - */ - eh = mtod(top, struct ether_header *); - etype = eh->ether_type = ntohs((u_short) eh->ether_type); - if (etype >= ETHERTYPE_TRAIL && - etype < ETHERTYPE_TRAIL + ETHERTYPE_NTRAILER) { - if ((etype - ETHERTYPE_TRAIL) * 512 >= ETHERMTU) - goto out; - m->m_data = m->m_dat; /* Convert back to regular mbuf. */ - m->m_flags = 0; /* This sucks but non-trailers are the norm */ - m->m_data += 2 * sizeof(u_short); /* Get rid of type & len */ - - sc->cur_len = sizeof(struct ether_header); - ep_fset(F_RX_TRAILER); - - /* in the case of trailers, we prefer to have the packet complete */ - if (status & ERR_RX_INCOMPLETE) { - ep_frst(F_RX_FIRST); - outw(BASE + EP_COMMAND, SET_RX_EARLY_THRESH | 2032); /* disable */ - return; - } else - /* We don't read the trailer, next we are reading the data */ - rx_fifo -= sizeof(struct ether_header); - } } else { /* come here if we didn't have a complete packet last time */ top = sc->top; diff --git a/sys/dev/ie/if_ie.c b/sys/dev/ie/if_ie.c index 6e3fded..ae49984 100644 --- a/sys/dev/ie/if_ie.c +++ b/sys/dev/ie/if_ie.c @@ -43,7 +43,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: if_ie.c,v 1.17 1994/10/23 21:27:20 wollman Exp $ + * $Id: if_ie.c,v 1.18 1994/10/26 00:16:17 phk Exp $ */ /* @@ -1231,8 +1231,6 @@ static void ie_readframe(unit, ie, num) * as a multicast router or when using BPF. */ - eh.ether_type = ntohs(eh.ether_type); - /* * Finally pass this packet up to higher layers. */ diff --git a/sys/dev/lnc/if_lnc.c b/sys/dev/lnc/if_lnc.c index ae3dd1c..311f3bd 100644 --- a/sys/dev/lnc/if_lnc.c +++ b/sys/dev/lnc/if_lnc.c @@ -454,7 +454,6 @@ lnc_rint(int unit) head->m_pkthdr.rcvif = &sc->arpcom.ac_if; head->m_pkthdr.len = pkt_len - sizeof(*eh); eh = (struct ether_header *) head->m_data; - eh->ether_type = ntohs(eh->ether_type); head->m_data += sizeof *eh; head->m_len -= sizeof *eh; diff --git a/sys/i386/isa/if_ed.c b/sys/i386/isa/if_ed.c index f67d134..b9b8503 100644 --- a/sys/i386/isa/if_ed.c +++ b/sys/i386/isa/if_ed.c @@ -13,7 +13,7 @@ * the SMC Elite Ultra (8216), the 3Com 3c503, the NE1000 and NE2000, * and a variety of similar clones. * - * $Id: if_ed.c,v 1.55 1994/11/13 07:17:46 davidg Exp $ + * $Id: if_ed.c,v 1.56 1994/11/17 14:42:27 davidg Exp $ */ #include "ed.h" @@ -2110,8 +2110,7 @@ ed_get_packet(sc, buf, len, multicast) len -= sizeof(struct ether_header); /* - * Pull packet off interface. Or if this was a trailer packet, the - * data portion is appended. + * Pull packet off interface. */ if (ed_ring_to_mbuf(sc, buf, m, len) == NULL) { m_freem(m); @@ -2146,11 +2145,6 @@ ed_get_packet(sc, buf, len, multicast) */ m_adj(m, sizeof(struct ether_header)); - /* - * silly ether_input routine needs 'type' in host byte order - */ - eh->ether_type = ntohs(eh->ether_type); - ether_input(&sc->arpcom.ac_if, eh, m); return; } diff --git a/sys/i386/isa/if_el.c b/sys/i386/isa/if_el.c index afc51d7..1835480 100644 --- a/sys/i386/isa/if_el.c +++ b/sys/i386/isa/if_el.c @@ -6,7 +6,7 @@ * * Questions, comments, bug reports and fixes to kimmel@cs.umass.edu. * - * $Id: if_el.c,v 1.7 1994/10/21 01:19:06 wollman Exp $ + * $Id: if_el.c,v 1.8 1994/10/23 21:27:17 wollman Exp $ */ /* Except of course for the portions of code lifted from other FreeBSD * drivers (mainly elread, elget and el_ioctl) @@ -562,47 +562,21 @@ void elintr(int unit) return; } -/* Pass a packet up to the higher levels. Deal with trailer protocol. */ +/* Pass a packet up to the higher levels. */ static inline void elread(struct el_softc *sc,caddr_t buf,int len) { register struct ether_header *eh; struct mbuf *m; - int off, resid; - /* Deal with trailer protocol: if type is trailer type - * get true type from first 16-bit word past data. - * Remember that type was trailer by setting off. - */ eh = (struct ether_header *)buf; - eh->ether_type = ntohs((u_short)eh->ether_type); -#define eldataaddr(eh,off,type) ((type)(((caddr_t)((eh)+1)+(off)))) - if(eh->ether_type >= ETHERTYPE_TRAIL && - eh->ether_type < ETHERTYPE_TRAIL+ETHERTYPE_NTRAILER) { - off = (eh->ether_type - ETHERTYPE_TRAIL) * 512; - if(off >= ETHERMTU) - return; - eh->ether_type = ntohs(*eldataaddr(eh,off,u_short *)); - resid = ntohs(*(eldataaddr(eh,off+2,u_short *))); - if((off+resid) > len) - return; - len = off + resid; - } - else - off = 0; - - if(len <= 0) - return; #if NBPFILTER > 0 /* * Check if there's a bpf filter listening on this interface. - * If so, hand off the raw packet to bpf, which must deal with - * trailers in its own way. + * If so, hand off the raw packet to bpf. */ if(sc->bpf) { - eh->ether_type = htons((u_short)eh->ether_type); bpf_tap(sc->bpf,buf,len+sizeof(struct ether_header)); - eh->ether_type = ntohs((u_short)eh->ether_type); /* * Note that the interface cannot be in promiscuous mode if @@ -621,12 +595,9 @@ static inline void elread(struct el_softc *sc,caddr_t buf,int len) #endif /* - * Pull packet off interface. Off is nonzero if packet - * has trailing header; neget will then force this header - * information to be at the front, but we still have to drop - * the type and length which are at the front of any trailer data. + * Pull packet off interface. */ - m = elget(buf,len,off,&sc->arpcom.ac_if); + m = elget(buf,len,0,&sc->arpcom.ac_if); if(m == 0) return; @@ -636,11 +607,6 @@ static inline void elread(struct el_softc *sc,caddr_t buf,int len) /* * Pull read data off a interface. * Len is length of data, with local net header stripped. - * Off is non-zero if a trailer protocol was used, and - * gives the offset of the trailer information. - * We copy the trailer information and then all the normal - * data into mbufs. When full cluster sized units are present - * we copy into clusters. */ struct mbuf * elget(buf, totlen, off0, ifp) diff --git a/sys/i386/isa/if_ep.c b/sys/i386/isa/if_ep.c index 9534182..f73c9a6 100644 --- a/sys/i386/isa/if_ep.c +++ b/sys/i386/isa/if_ep.c @@ -52,10 +52,6 @@ * used while working on this driver and the program that displays this * information (epstat). * - * NB 2: About trailers, I didn't care if this implementation was OK, I just - * adapted it to have the same behaviour as in the original driver (donne - * just for epread()). - * * * Some driver statistics can be viewed with the epstat utility. In order to * use this, you have to compile if_ep.c with @@ -812,62 +808,7 @@ startagain: #if NBPFILTER > 0 if (sc->bpf) { - u_short etype; - int off, datasize, resid; - struct ether_header *eh; - struct trailer_header { - u_short ether_type; - u_short ether_residual; - } trailer_header; - char ether_packet[ETHER_MAX_LEN]; - char *ep; - - ep = ether_packet; - - /* - * We handle trailers below: Copy ether header first, then residual - * data, then data. Put all this in a temporary buffer 'ether_packet' - * and send off to bpf. Since the system has generated this packet, - * we assume that all of the offsets in the packet are correct; if - * they're not, the system will almost certainly crash in m_copydata. - * We make no assumptions about how the data is arranged in the mbuf - * chain (i.e. how much data is in each mbuf, if mbuf clusters are - * used, etc.), which is why we use m_copydata to get the ether - * header rather than assume that this is located in the first mbuf. - */ - /* copy ether header */ - m_copydata(top, 0, sizeof(struct ether_header), ep); - eh = (struct ether_header *) ep; - ep += sizeof(struct ether_header); - eh->ether_type = etype = ntohs(eh->ether_type); - if (etype >= ETHERTYPE_TRAIL && - etype < ETHERTYPE_TRAIL + ETHERTYPE_NTRAILER) { - datasize = ((etype - ETHERTYPE_TRAIL) << 9); - off = datasize + sizeof(struct ether_header); - - /* copy trailer_header into a data structure */ - m_copydata(top, off, sizeof(struct trailer_header), - (caddr_t) & trailer_header.ether_type); - - /* copy residual data */ - resid = trailer_header.ether_residual - - sizeof(struct trailer_header); - resid = ntohs(resid); - m_copydata(top, off + sizeof(struct trailer_header), - resid, ep); - ep += resid; - - /* copy data */ - m_copydata(top, sizeof(struct ether_header), - datasize, ep); - ep += datasize; - - /* restore original ether packet type */ - eh->ether_type = trailer_header.ether_type; - - bpf_tap(sc->bpf, ether_packet, ep - ether_packet); - } else - bpf_mtap(sc->bpf, top); + bpf_mtap(sc->bpf, top); } #endif @@ -998,12 +939,7 @@ epread(sc) short rx_fifo2, status; register short delta; register short rx_fifo; - u_short etype; - /* - * XXX I have just adapted the code for the protocol trailing processing - * as programed in the original driver. FreeBSD 1.1.5.1 release - */ status = inw(BASE + EP_W1_RX_STATUS); read_again: @@ -1050,34 +986,6 @@ read_again: top->m_len = sizeof(struct ether_header); rx_fifo -= sizeof(struct ether_header); sc->cur_len = rx_fifo2; - - /* - * Test for trailers. - * I didn't care if this implementation was OK, I just adapted it to - * have the same behaviour as in the original driver - */ - eh = mtod(top, struct ether_header *); - etype = eh->ether_type = ntohs((u_short) eh->ether_type); - if (etype >= ETHERTYPE_TRAIL && - etype < ETHERTYPE_TRAIL + ETHERTYPE_NTRAILER) { - if ((etype - ETHERTYPE_TRAIL) * 512 >= ETHERMTU) - goto out; - m->m_data = m->m_dat; /* Convert back to regular mbuf. */ - m->m_flags = 0; /* This sucks but non-trailers are the norm */ - m->m_data += 2 * sizeof(u_short); /* Get rid of type & len */ - - sc->cur_len = sizeof(struct ether_header); - ep_fset(F_RX_TRAILER); - - /* in the case of trailers, we prefer to have the packet complete */ - if (status & ERR_RX_INCOMPLETE) { - ep_frst(F_RX_FIRST); - outw(BASE + EP_COMMAND, SET_RX_EARLY_THRESH | 2032); /* disable */ - return; - } else - /* We don't read the trailer, next we are reading the data */ - rx_fifo -= sizeof(struct ether_header); - } } else { /* come here if we didn't have a complete packet last time */ top = sc->top; diff --git a/sys/i386/isa/if_ie.c b/sys/i386/isa/if_ie.c index 6e3fded..ae49984 100644 --- a/sys/i386/isa/if_ie.c +++ b/sys/i386/isa/if_ie.c @@ -43,7 +43,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: if_ie.c,v 1.17 1994/10/23 21:27:20 wollman Exp $ + * $Id: if_ie.c,v 1.18 1994/10/26 00:16:17 phk Exp $ */ /* @@ -1231,8 +1231,6 @@ static void ie_readframe(unit, ie, num) * as a multicast router or when using BPF. */ - eh.ether_type = ntohs(eh.ether_type); - /* * Finally pass this packet up to higher layers. */ diff --git a/sys/i386/isa/if_is.c b/sys/i386/isa/if_is.c index 1ad368b..fdb1c4e 100644 --- a/sys/i386/isa/if_is.c +++ b/sys/i386/isa/if_is.c @@ -11,7 +11,7 @@ * of this software, nor does the author assume any responsibility * for damages incurred with its use. * - * $Id: if_is.c,v 1.30 1994/10/26 00:16:19 phk Exp $ + * $Id: if_is.c,v 1.31 1994/10/29 10:19:32 phk Exp $ */ /* TODO @@ -598,69 +598,9 @@ is_start(ifp) len += m->m_len; } #if NBPFILTER > 0 - if (is->bpf) { - u_short etype; - int off, datasize, resid; - struct ether_header *eh; - struct trailer_header { - u_short ether_type; - u_short ether_residual; - } trailer_header; - char ether_packet[ETHER_MAX_LEN]; - char *ep; - - ep = ether_packet; - - /* - * We handle trailers below: - * Copy ether header first, then residual data, - * then data. Put all this in a temporary buffer - * 'ether_packet' and send off to bpf. Since the - * system has generated this packet, we assume - * that all of the offsets in the packet are - * correct; if they're not, the system will almost - * certainly crash in m_copydata. - * We make no assumptions about how the data is - * arranged in the mbuf chain (i.e. how much - * data is in each mbuf, if mbuf clusters are - * used, etc.), which is why we use m_copydata - * to get the ether header rather than assume - * that this is located in the first mbuf. - */ - /* copy ether header */ - m_copydata(m0, 0, sizeof(struct ether_header), ep); - eh = (struct ether_header *) ep; - ep += sizeof(struct ether_header); - etype = ntohs(eh->ether_type); - if (etype >= ETHERTYPE_TRAIL && - etype < ETHERTYPE_TRAIL+ETHERTYPE_NTRAILER) { - datasize = ((etype - ETHERTYPE_TRAIL) << 9); - off = datasize + sizeof(struct ether_header); - - /* copy trailer_header into a data structure */ - m_copydata(m0, off, sizeof(struct trailer_header), - (caddr_t)&trailer_header.ether_type); - - /* copy residual data */ - resid = trailer_header.ether_residual - - sizeof(struct trailer_header); - resid = ntohs(resid); - m_copydata(m0, off+sizeof(struct trailer_header), - resid, ep); - ep += resid; - - /* copy data */ - m_copydata(m0, sizeof(struct ether_header), - datasize, ep); - ep += datasize; - - /* restore original ether packet type */ - eh->ether_type = trailer_header.ether_type; - - bpf_tap(is->bpf, ether_packet, ep - ether_packet); - } else - bpf_mtap(is->bpf, m0); - } + if (is->bpf) { + bpf_mtap(is->bpf, m0); + } #endif @@ -853,26 +793,9 @@ isread(struct is_softc *is, unsigned char *buf, int len) { register struct ether_header *eh; struct mbuf *m; - int off, resid; - /* - * Deal with trailer protocol: if type is trailer type - * get true type from first 16-bit word past data. - * Remember that type was trailer by setting off. - */ eh = (struct ether_header *)buf; - eh->ether_type = ntohs((u_short)eh->ether_type); len = len - sizeof(struct ether_header) - 4; -#define nedataaddr(eh, off, type) ((type)(((caddr_t)((eh)+1)+(off)))) - if (eh->ether_type >= ETHERTYPE_TRAIL && - eh->ether_type < ETHERTYPE_TRAIL+ETHERTYPE_NTRAILER) { - off = (eh->ether_type - ETHERTYPE_TRAIL) * 512; - if (off >= ETHERMTU) return; /* sanity */ - eh->ether_type = ntohs(*nedataaddr(eh, off, u_short *)); - resid = ntohs(*(nedataaddr(eh, off+2, u_short *))); - if (off + resid > len) return; /* sanity */ - len = off + resid; - } else off = 0; if (len == 0) return; @@ -882,7 +805,7 @@ isread(struct is_softc *is, unsigned char *buf, int len) * information to be at the front, but we still have to drop * the type and length which are at the front of any trailer data. */ - m = isget(buf, len, off, &is->arpcom.ac_if); + m = isget(buf, len, 0, &is->arpcom.ac_if); if (m == 0) return; #if NBPFILTER > 0 /* diff --git a/sys/i386/isa/if_le.c b/sys/i386/isa/if_le.c index d3ab8cf..68ed29f 100644 --- a/sys/i386/isa/if_le.c +++ b/sys/i386/isa/if_le.c @@ -21,9 +21,22 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: if_le.c,v 1.8 1994/10/19 01:59:03 wollman Exp $ + * $Id: if_le.c,v 1.9 1994/10/23 21:27:22 wollman Exp $ * * $Log: if_le.c,v $ + * Revision 1.9 1994/10/23 21:27:22 wollman + * Finished device configuration database work for all ISA devices (except `ze') + * and all SCSI devices (except that it's not done quite the way I want). New + * information added includes: + * + * - A text description of the device + * - A ``state''---unknown, unconfigured, idle, or busy + * - A generic parent device (with support in the m.i. code) + * - An interrupt mask type field (which will hopefully go away) so that + * . ``doconfig'' can be written + * + * This requires a new version of the `lsdev' program as well (next commit). + * * Revision 1.8 1994/10/19 01:59:03 wollman * Add support for devconf to a large number of device drivers, and do * the right thing in dev_goawayall() when kdc_goaway is null. @@ -476,7 +489,6 @@ le_input( return; } MEMCPY(&eh, seg1, sizeof(eh)); - eh.ether_type = ntohs(eh.ether_type); #if NBPFILTER > 0 if (sc->le_bpf != NULL && seg2 == NULL) { diff --git a/sys/i386/isa/if_lnc.c b/sys/i386/isa/if_lnc.c index ae3dd1c..311f3bd 100644 --- a/sys/i386/isa/if_lnc.c +++ b/sys/i386/isa/if_lnc.c @@ -454,7 +454,6 @@ lnc_rint(int unit) head->m_pkthdr.rcvif = &sc->arpcom.ac_if; head->m_pkthdr.len = pkt_len - sizeof(*eh); eh = (struct ether_header *) head->m_data; - eh->ether_type = ntohs(eh->ether_type); head->m_data += sizeof *eh; head->m_len -= sizeof *eh; diff --git a/sys/i386/isa/if_ze.c b/sys/i386/isa/if_ze.c index 31835cc..ff90fe5 100644 --- a/sys/i386/isa/if_ze.c +++ b/sys/i386/isa/if_ze.c @@ -47,7 +47,7 @@ */ /* - * $Id$ + * $Id: if_ze.c,v 1.8 1994/10/23 21:27:25 wollman Exp $ */ #include "ze.h" @@ -1283,70 +1283,10 @@ outloop: ze_xmit(ifp); /* * If there is BPF support in the configuration, tap off here. - * The following has support for converting trailer packets - * back to normal. */ #if NBPFILTER > 0 if (sc->bpf) { - u_short etype; - int off, datasize, resid; - struct ether_header *eh; - struct trailer_header { - u_short ether_type; - u_short ether_residual; - } trailer_header; - char ether_packet[ETHER_MAX_LEN]; - char *ep; - - ep = ether_packet; - - /* - * We handle trailers below: - * Copy ether header first, then residual data, - * then data. Put all this in a temporary buffer - * 'ether_packet' and send off to bpf. Since the - * system has generated this packet, we assume - * that all of the offsets in the packet are - * correct; if they're not, the system will almost - * certainly crash in m_copydata. - * We make no assumptions about how the data is - * arranged in the mbuf chain (i.e. how much - * data is in each mbuf, if mbuf clusters are - * used, etc.), which is why we use m_copydata - * to get the ether header rather than assume - * that this is located in the first mbuf. - */ - /* copy ether header */ - m_copydata(m0, 0, sizeof(struct ether_header), ep); - eh = (struct ether_header *) ep; - ep += sizeof(struct ether_header); - etype = ntohs(eh->ether_type); - if (etype >= ETHERTYPE_TRAIL && - etype < ETHERTYPE_TRAIL+ETHERTYPE_NTRAILER) { - datasize = ((etype - ETHERTYPE_TRAIL) << 9); - off = datasize + sizeof(struct ether_header); - - /* copy trailer_header into a data structure */ - m_copydata(m0, off, sizeof(struct trailer_header), - &trailer_header.ether_type); - - /* copy residual data */ - m_copydata(m0, off+sizeof(struct trailer_header), - resid = ntohs(trailer_header.ether_residual) - - sizeof(struct trailer_header), ep); - ep += resid; - - /* copy data */ - m_copydata(m0, sizeof(struct ether_header), - datasize, ep); - ep += datasize; - - /* restore original ether packet type */ - eh->ether_type = trailer_header.ether_type; - - bpf_tap(sc->bpf, ether_packet, ep - ether_packet); - } else - bpf_mtap(sc->bpf, m0); + bpf_mtap(sc->bpf, m0); } #endif @@ -1850,38 +1790,6 @@ ze_get_packet(sc, buf, len) head->m_len += sizeof(struct ether_header); len -= sizeof(struct ether_header); - etype = ntohs((u_short)eh->ether_type); - - /* - * Deal with trailer protocol: - * If trailer protocol, calculate the datasize as 'off', - * which is also the offset to the trailer header. - * Set resid to the amount of packet data following the - * trailer header. - * Finally, copy residual data into mbuf chain. - */ - if (etype >= ETHERTYPE_TRAIL && - etype < ETHERTYPE_TRAIL+ETHERTYPE_NTRAILER) { - - off = (etype - ETHERTYPE_TRAIL) << 9; - if ((off + sizeof(struct trailer_header)) > len) - goto bad; /* insanity */ - - eh->ether_type = *ringoffset(sc, buf, off, u_short *); - resid = ntohs(*ringoffset(sc, buf, off+2, u_short *)); - - if ((off + resid) > len) goto bad; /* insanity */ - - resid -= sizeof(struct trailer_header); - if (resid < 0) goto bad; /* insanity */ - - m = ze_ring_to_mbuf(sc, ringoffset(sc, buf, off+4, char *), head, resid); - if (m == NULL) goto bad; - - len = off; - head->m_pkthdr.len -= 4; /* subtract trailer header */ - } - /* * Pull packet off interface. Or if this was a trailer packet, * the data portion is appended. @@ -1921,11 +1829,6 @@ ze_get_packet(sc, buf, len) */ m_adj(head, sizeof(struct ether_header)); - /* - * silly ether_input routine needs 'type' in host byte order - */ - eh->ether_type = ntohs(eh->ether_type); - ether_input(&sc->arpcom.ac_if, eh, head); return; diff --git a/sys/i386/pci/if_de.c b/sys/i386/pci/if_de.c index 9e6a26b..c2be075 100644 --- a/sys/i386/pci/if_de.c +++ b/sys/i386/pci/if_de.c @@ -21,7 +21,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: if_de.c,v 1.6 1994/11/13 12:39:38 davidg Exp $ + * $Id: if_de.c,v 1.7 1994/11/22 09:47:31 davidg Exp $ * */ @@ -394,7 +394,6 @@ tulip_rx_intr( } #endif eh = *(struct ether_header *) bufaddr; - eh.ether_type = ntohs(eh.ether_type); #if NBPFILTER > 0 if (sc->tulip_bpf != NULL) { bpf_tap(sc->tulip_bpf, bufaddr, total_len); diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c index 3929fa3..b1dea77 100644 --- a/sys/net/if_ethersubr.c +++ b/sys/net/if_ethersubr.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)if_ethersubr.c 8.1 (Berkeley) 6/10/93 - * $Id: if_ethersubr.c,v 1.2 1994/08/02 07:46:14 davidg Exp $ + * $Id: if_ethersubr.c,v 1.3 1994/10/11 23:16:24 wollman Exp $ */ #include <sys/param.h> @@ -311,6 +311,7 @@ ether_input(ifp, eh, m) register struct ifqueue *inq; register struct llc *l; struct arpcom *ac = (struct arpcom *)ifp; + u_short ether_type; int s; if ((ifp->if_flags & IFF_UP) == 0) { @@ -327,7 +328,9 @@ ether_input(ifp, eh, m) if (m->m_flags & (M_BCAST|M_MCAST)) ifp->if_imcasts++; - switch (eh->ether_type) { + ether_type = ntohs(eh->ether_type); + + switch (ether_type) { #ifdef INET case ETHERTYPE_IP: schednetisr(NETISR_IP); @@ -348,7 +351,7 @@ ether_input(ifp, eh, m) #endif default: #if defined (ISO) || defined (LLC) - if (eh->ether_type > ETHERMTU) + if (ether_type > ETHERMTU) goto dropanyway; l = mtod(m, struct llc *); switch (l->llc_dsap) { @@ -360,8 +363,8 @@ ether_input(ifp, eh, m) if ((l->llc_dsap == LLC_ISO_LSAP) && (l->llc_ssap == LLC_ISO_LSAP)) { /* LSAP for ISO */ - if (m->m_pkthdr.len > eh->ether_type) - m_adj(m, eh->ether_type - m->m_pkthdr.len); + if (m->m_pkthdr.len > ether_type) + m_adj(m, ether_type - m->m_pkthdr.len); m->m_data += 3; /* XXX */ m->m_len -= 3; /* XXX */ m->m_pkthdr.len -= 3; /* XXX */ @@ -421,8 +424,8 @@ ether_input(ifp, eh, m) #ifdef LLC case LLC_X25_LSAP: { - if (m->m_pkthdr.len > eh->ether_type) - m_adj(m, eh->ether_type - m->m_pkthdr.len); + if (m->m_pkthdr.len > ether_type) + m_adj(m, ether_type - m->m_pkthdr.len); M_PREPEND(m, sizeof(struct sdl_hdr) , M_DONTWAIT); if (m == 0) return; @@ -430,7 +433,7 @@ ether_input(ifp, eh, m) eh->ether_dhost, LLC_X25_LSAP, 6, mtod(m, struct sdl_hdr *))) panic("ETHER cons addr failure"); - mtod(m, struct sdl_hdr *)->sdlhdr_len = eh->ether_type; + mtod(m, struct sdl_hdr *)->sdlhdr_len = ether_type; #ifdef LLC_DEBUG printf("llc packet\n"); #endif /* LLC_DEBUG */ diff --git a/sys/pci/if_de.c b/sys/pci/if_de.c index 9e6a26b..c2be075 100644 --- a/sys/pci/if_de.c +++ b/sys/pci/if_de.c @@ -21,7 +21,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: if_de.c,v 1.6 1994/11/13 12:39:38 davidg Exp $ + * $Id: if_de.c,v 1.7 1994/11/22 09:47:31 davidg Exp $ * */ @@ -394,7 +394,6 @@ tulip_rx_intr( } #endif eh = *(struct ether_header *) bufaddr; - eh.ether_type = ntohs(eh.ether_type); #if NBPFILTER > 0 if (sc->tulip_bpf != NULL) { bpf_tap(sc->tulip_bpf, bufaddr, total_len); |