Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/net Fix bpf output on fddi to actually work. Make it co...



details:   https://anonhg.NetBSD.org/src/rev/66b7e24ad144
branches:  trunk
changeset: 486743:66b7e24ad144
user:      matt <matt%NetBSD.org@localhost>
date:      Sun May 28 02:49:35 2000 +0000

description:
Fix bpf output on fddi to actually work.  Make it compatible with ULTRIX
and Tru64.

diffstat:

 sys/net/bpf.c         |  17 +++++++++--------
 sys/net/if_fddisubr.c |  19 ++++++++++++++-----
 2 files changed, 23 insertions(+), 13 deletions(-)

diffs (88 lines):

diff -r 234c3966146d -r 66b7e24ad144 sys/net/bpf.c
--- a/sys/net/bpf.c     Sun May 28 02:42:16 2000 +0000
+++ b/sys/net/bpf.c     Sun May 28 02:49:35 2000 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: bpf.c,v 1.55 2000/05/12 05:58:01 jonathan Exp $        */
+/*     $NetBSD: bpf.c,v 1.56 2000/05/28 02:49:35 matt Exp $    */
 
 /*
  * Copyright (c) 1990, 1991, 1993
@@ -163,9 +163,9 @@
                break;
 
        case DLT_FDDI:
-               sockp->sa_family = AF_UNSPEC;
-               /* XXX 4(FORMAC)+6(dst)+6(src)+3(LLC)+5(SNAP) */
-               hlen = 24;
+               sockp->sa_family = AF_LINK;
+               /* XXX 4(FORMAC)+6(dst)+6(src) */
+               hlen = 16;
                align = 0;
                break;
 
@@ -518,7 +518,7 @@
        struct ifnet *ifp;
        struct mbuf *m;
        int error, s;
-       static struct sockaddr dst;
+       static struct sockaddr_storage dst;
 
        if (d->bd_bif == 0)
                return (ENXIO);
@@ -528,7 +528,8 @@
        if (uio->uio_resid == 0)
                return (0);
 
-       error = bpf_movein(uio, (int)d->bd_bif->bif_dlt, ifp->if_mtu, &m, &dst);
+       error = bpf_movein(uio, (int)d->bd_bif->bif_dlt, ifp->if_mtu, &m,
+               (struct sockaddr *) &dst);
        if (error)
                return (error);
 
@@ -536,10 +537,10 @@
                return (EMSGSIZE);
 
        if (d->bd_hdrcmplt)
-               dst.sa_family = pseudo_AF_HDRCMPLT;
+               dst.ss_family = pseudo_AF_HDRCMPLT;
 
        s = splsoftnet();
-       error = (*ifp->if_output)(ifp, m, &dst, NULL);
+       error = (*ifp->if_output)(ifp, m, (struct sockaddr *) &dst, NULL);
        splx(s);
        /*
         * The driver frees the mbuf.
diff -r 234c3966146d -r 66b7e24ad144 sys/net/if_fddisubr.c
--- a/sys/net/if_fddisubr.c     Sun May 28 02:42:16 2000 +0000
+++ b/sys/net/if_fddisubr.c     Sun May 28 02:49:35 2000 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_fddisubr.c,v 1.31 2000/03/30 09:45:35 augustss Exp $        */
+/*     $NetBSD: if_fddisubr.c,v 1.32 2000/05/28 02:49:36 matt Exp $    */
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -463,11 +463,20 @@
 
        case pseudo_AF_HDRCMPLT:
        {
-               struct ether_header *eh;
+               struct fddi_header *fh = (struct fddi_header *)dst->sa_data;
                hdrcmplt = 1;
-               eh = (struct ether_header *)dst->sa_data;
-               bcopy((caddr_t)eh->ether_shost, (caddr_t)esrc, sizeof (esrc));
-               /* FALLTHROUGH */
+               bcopy((caddr_t)fh->fddi_shost, (caddr_t)esrc, sizeof (esrc));
+               /*FALLTHROUGH*/
+       }
+
+       case AF_LINK:
+       {
+               struct fddi_header *fh = (struct fddi_header *)dst->sa_data;
+               bcopy((caddr_t)fh->fddi_dhost, (caddr_t)edst, sizeof (edst));
+               if (*edst & 1)
+                       m->m_flags |= (M_BCAST|M_MCAST);
+               etype = 0;
+               break;
        }
 
        case AF_UNSPEC:



Home | Main Index | Thread Index | Old Index