]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/net/if_disc.c
xnu-792.6.56.tar.gz
[apple/xnu.git] / bsd / net / if_disc.c
index 5a95376fbb9f61cfa84ac9207f32be1f80258a5d..41c2be131d38c75556fc644b463806817817845e 100644 (file)
@@ -3,19 +3,20 @@
  *
  * @APPLE_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. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
  * 
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * 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@
  */
@@ -52,6 +53,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 +89,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 +103,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 +139,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 *));
@@ -146,7 +164,6 @@ discoutput(ifp, m, dst, rt)
 
                bpf_mtap(&discif, &m0);
        }
-#endif
        m->m_pkthdr.rcvif = ifp;
 
        ifp->if_opackets++;
@@ -184,7 +201,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 +222,10 @@ discioctl(ifp, cmd, data)
                case AF_INET:
                        break;
 #endif
+#if INET6
+               case AF_INET6:
+                       break;
+#endif
 
                default:
                        error = EAFNOSUPPORT;