]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/net/if_disc.c
xnu-1228.0.2.tar.gz
[apple/xnu.git] / bsd / net / if_disc.c
index 5a95376fbb9f61cfa84ac9207f32be1f80258a5d..00531fdff7a960c51a9d922d0a2b15c4d36d8abb 100644 (file)
@@ -1,23 +1,29 @@
 /*
  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
  *
- * @APPLE_LICENSE_HEADER_START@
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
- * The contents of this file constitute Original Code as defined in and
- * are subject to the Apple Public Source License Version 1.1 (the
- * "License").  You may not use this file except in compliance with the
- * License.  Please obtain a copy of the License at
- * http://www.apple.com/publicsource and read it before using this file.
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. The rights granted to you under the License
+ * may not be used to create, or enable the creation or redistribution of,
+ * unlawful or unlicensed copies of an Apple operating system, or to
+ * circumvent, violate, or enable the circumvention or violation of, any
+ * terms of an Apple operating system software license agreement.
  * 
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
  * 
- * @APPLE_LICENSE_HEADER_END@
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
  */
 /*
  * Copyright (c) 1982, 1986, 1993
@@ -52,6 +58,7 @@
  * SUCH DAMAGE.
  *
  *     From: @(#)if_loop.c     8.1 (Berkeley) 6/10/93
+ * $FreeBSD: src/sys/net/if_disc.c,v 1.26.2.1 2001/03/06 00:32:09 obrien Exp $
  */
 
 /*
 #include <net/route.h>
 #include <net/bpf.h>
 
-#include "bpfilter.h"
-#include "opt_inet.h"
-
-#if TINY_DSMTU
+#ifdef TINY_DSMTU
 #define        DSMTU   (1024+512)
 #else
 #define DSMTU  65532
 #endif
 
-static void discattach __P((void *dummy));
-PSEUDO_SET(discattach, if_disc);
+static void discattach(void);
 
 static struct  ifnet discif;
 static int discoutput(struct ifnet *, struct mbuf *, struct sockaddr *,
@@ -91,8 +94,7 @@ static int discioctl(struct ifnet *, u_long, caddr_t);
 
 /* ARGSUSED */
 static void
-discattach(dummy)
-       void *dummy;
+discattach()
 {
        register struct ifnet *ifp = &discif;
 
@@ -106,11 +108,33 @@ discattach(dummy)
        ifp->if_hdrlen = 0;
        ifp->if_addrlen = 0;
        if_attach(ifp);
-#if NBPFILTER > 0
        bpfattach(ifp, DLT_NULL, sizeof(u_int));
-#endif
 }
 
+#ifndef __APPLE__
+static int
+disc_modevent(module_t mod, int type, void *data) 
+{ 
+       switch (type) { 
+       case MOD_LOAD: 
+               discattach();
+               break; 
+       case MOD_UNLOAD: 
+               printf("if_disc module unload - not possible for this module type\n"); 
+               return EINVAL; 
+       } 
+       return 0; 
+} 
+
+static moduledata_t disc_mod = { 
+       "if_disc", 
+       disc_modevent, 
+       NULL
+}; 
+
+DECLARE_MODULE(if_disc, disc_mod, SI_SUB_PSEUDO, SI_ORDER_ANY);
+#endif
+
 static int
 discoutput(ifp, m, dst, rt)
        struct ifnet *ifp;
@@ -120,7 +144,6 @@ discoutput(ifp, m, dst, rt)
 {
        if ((m->m_flags & M_PKTHDR) == 0)
                panic("discoutput no HDR");
-#if NBPFILTER > 0
        /* BPF write needs to be handled specially */
        if (dst->sa_family == AF_UNSPEC) {
                dst->sa_family = *(mtod(m, int *));
@@ -130,23 +153,11 @@ discoutput(ifp, m, dst, rt)
        }
 
        if (discif.if_bpf) {
-               /*
-                * We need to prepend the address family as
-                * a four byte field.  Cons up a dummy header
-                * to pacify bpf.  This is safe because bpf
-                * will only read from the mbuf (i.e., it won't
-                * try to free it or keep a pointer a to it).
-                */
-               struct mbuf m0;
+               /* We need to prepend the address family as a four byte field. */
                u_int af = dst->sa_family;
 
-               m0.m_next = m;
-               m0.m_len = 4;
-               m0.m_data = (char *)&af;
-
-               bpf_mtap(&discif, &m0);
+               bpf_tap_out(ifp, 0, m, &af, sizeof(af));
        }
-#endif
        m->m_pkthdr.rcvif = ifp;
 
        ifp->if_opackets++;
@@ -184,7 +195,7 @@ discioctl(ifp, cmd, data)
        switch (cmd) {
 
        case SIOCSIFADDR:
-               ifp->if_flags |= IFF_UP;
+               ifnet_set_flags(ifp, IFF_UP, IFF_UP);
                ifa = (struct ifaddr *)data;
                if (ifa != 0)
                        ifa->ifa_rtrequest = discrtrequest;
@@ -205,6 +216,10 @@ discioctl(ifp, cmd, data)
                case AF_INET:
                        break;
 #endif
+#if INET6
+               case AF_INET6:
+                       break;
+#endif
 
                default:
                        error = EAFNOSUPPORT;