Annotation of driverkit/tests/netif.m, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
        !             3:  *
        !             4:  * @APPLE_LICENSE_HEADER_START@
        !             5:  * 
        !             6:  * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
        !             7:  * Reserved.  This file contains Original Code and/or Modifications of
        !             8:  * Original Code as defined in and that are subject to the Apple Public
        !             9:  * Source License Version 1.1 (the "License").  You may not use this file
        !            10:  * except in compliance with the License.  Please obtain a copy of the
        !            11:  * License at http://www.apple.com/publicsource and read it before using
        !            12:  * this file.
        !            13:  * 
        !            14:  * The Original Code and all software distributed under the License are
        !            15:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
        !            16:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
        !            17:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
        !            18:  * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT.  Please see the
        !            19:  * License for the specific language governing rights and limitations
        !            20:  * under the License.
        !            21:  * 
        !            22:  * @APPLE_LICENSE_HEADER_END@
        !            23:  */
        !            24: /*     Copyright (c) 1991 NeXT Computer, Inc.  All rights reserved. 
        !            25:  *
        !            26:  * netif.m - netif stub for testing NetDriver objects.
        !            27:  *
        !            28:  * HISTORY
        !            29:  * 24-Jul-91    Doug Mitchell at NeXT
        !            30:  *      Created. 
        !            31:  */
        !            32: 
        !            33: /*
        !            34:  * Hmmm...we need KERNEL defined to get netif.h...
        !            35:  */
        !            36: #import <bsd/sys/socket.h>             
        !            37: #define KERNEL 1
        !            38: #import <net/netif.h>
        !            39: #undef KERNEL
        !            40: #import <driverkit/IONetDevice.h>
        !            41: #import <net/if.h>
        !            42: #import <bsd/sys/errno.h>
        !            43: #import <bsd/sys/ioctl.h>
        !            44: #import <driverkit/generalFuncs.h>
        !            45: #import <libc.h>
        !            46: 
        !            47: /*
        !            48:  * Horrible hack; these are kenel globals.
        !            49:  */
        !            50: const char IFCONTROL_SETFLAGS[] = "setflags";
        !            51: const char IFCONTROL_SETADDR[] = "setaddr";
        !            52: const char IFCONTROL_GETADDR[] = "getaddr";
        !            53: const char IFCONTROL_AUTOADDR[] = "autoaddr";
        !            54: const char IFCONTROL_UNIXIOCTL[] = "unix-ioctl";
        !            55: 
        !            56: /*
        !            57:  * This emulates all the calls to netif.c which a typical driver will make
        !            58:  * except for if_handle_input(); the client test program must implement
        !            59:  * that function to provide dispatch of incoming buffers.
        !            60:  *
        !            61:  * The client test program can define any arbitrary 'netbuf' struct desired.
        !            62:  * This module does not manipulate netbufs.
        !            63:  * We happen to use ifnet for internal representation for convenience - a lot
        !            64:  * of this code is just cloned from the kernel's netif.c.
        !            65:  */
        !            66: 
        !            67: int if_output(netif_t netif, netbuf_t packet, void *addr)
        !            68: {
        !            69:        struct ifnet *ifp = (struct ifnet *)netif;
        !            70: 
        !            71:        if (ifp->if_output == NULL) {
        !            72:                return (ENXIO);
        !            73:        } else {
        !            74:                return (ifp->if_output(netif, packet, addr));
        !            75:        }
        !            76: }
        !            77: 
        !            78: int if_init(netif_t netif)
        !            79: {
        !            80:        struct ifnet *ifp = (struct ifnet *)netif;
        !            81: 
        !            82:        if (ifp->if_init == NULL) {
        !            83:                return (ENXIO);
        !            84:        } else {
        !            85:                return (ifp->if_init(netif));
        !            86:        }
        !            87: }
        !            88: 
        !            89: int if_control(netif_t netif, const char *command, void *data)
        !            90: {
        !            91:        struct ifnet *ifp = (struct ifnet *)netif;
        !            92: 
        !            93:        if (ifp->if_control == NULL) {
        !            94:                return (ENXIO);
        !            95:        } else {
        !            96:                return (ifp->if_control(netif, command, data));
        !            97:        }
        !            98: }
        !            99: 
        !           100: int if_ioctl(netif_t netif, unsigned command, void *data)
        !           101: {
        !           102:        struct ifnet *ifp = (struct ifnet *)netif;
        !           103:        struct ifreq *ifr = (struct ifreq *)data;
        !           104:        if_ioctl_t ioctl_stuff;
        !           105: 
        !           106:        if (ifp->if_control == NULL) {
        !           107:                return (ENXIO);
        !           108:        } 
        !           109:        switch (command) {
        !           110:        case SIOCAUTOADDR:
        !           111:                return (ifp->if_control(netif, IFCONTROL_AUTOADDR,
        !           112:                                        (void *)&ifr->ifr_ifru));
        !           113:                                        
        !           114:                
        !           115:        case SIOCSIFADDR:
        !           116:                /*
        !           117:                 * XXX: IP calls this incorrectly with an ifaddr
        !           118:                 * struct instead of an ifreq struct
        !           119:                 */
        !           120:                return (ifp->if_control(netif, IFCONTROL_SETADDR,
        !           121:                                        (void *)data));
        !           122:                
        !           123:        case SIOCGIFADDR:
        !           124:                return (ifp->if_control(netif, IFCONTROL_GETADDR,
        !           125:                                        (void *)&ifr->ifr_ifru));
        !           126:                
        !           127:        case SIOCSIFFLAGS:
        !           128:                return (ifp->if_control(netif, IFCONTROL_SETFLAGS,
        !           129:                                        (void *)&ifr->ifr_ifru));
        !           130:                
        !           131:        default:
        !           132:                ioctl_stuff.ioctl_command = command;
        !           133:                ioctl_stuff.ioctl_data = data;
        !           134:                return (ifp->if_control(netif, IFCONTROL_UNIXIOCTL, 
        !           135:                                        (void *)&ioctl_stuff));
        !           136:        }
        !           137: }
        !           138: 
        !           139: netbuf_t if_getbuf(netif_t netif)
        !           140: {
        !           141:        struct ifnet *ifp = (struct ifnet *)netif;
        !           142: 
        !           143:        if (ifp->if_getbuf == NULL) {
        !           144:                return (NULL);          /* should never happen */
        !           145:        } else {
        !           146:                return (ifp->if_getbuf(netif));
        !           147:        }
        !           148: }
        !           149: 
        !           150: netif_t if_attach(if_init_func_t init_func, 
        !           151:                         if_input_func_t input_func,
        !           152:                         if_output_func_t output_func,
        !           153:                         if_getbuf_func_t getbuf_func,
        !           154:                         if_control_func_t control_func,
        !           155:                         const char *name,
        !           156:                         unsigned unit,
        !           157:                         const char *type,
        !           158:                         unsigned mtu,
        !           159:                         unsigned flags,
        !           160:                         netif_class_t class,
        !           161:                         void *private)
        !           162: {
        !           163:        struct ifnet *ifp;
        !           164: 
        !           165:        ifp = (struct ifnet *)IOMalloc(sizeof(struct ifnet));
        !           166:        bzero((void *)ifp, sizeof(struct ifnet));
        !           167:        ifp->if_name = (char *)name;
        !           168:        ifp->if_type = (char *)type;
        !           169:        ifp->if_unit = unit;
        !           170:        ifp->if_mtu = mtu;
        !           171:        ifp->if_flags = flags;
        !           172:        ifp->if_snd.ifq_maxlen = /* ifqmaxlen */ IFQ_MAXLEN;
        !           173:        ifp->if_init = init_func;
        !           174:        ifp->if_output = output_func;
        !           175:        ifp->if_control = control_func;
        !           176:        ifp->if_input = input_func;
        !           177:        ifp->if_getbuf = getbuf_func;
        !           178:        ifp->if_private = private;
        !           179:        ifp->if_class = class;
        !           180:        
        !           181: #ifdef notdef
        !           182:        /* we don't need this. */
        !           183:        for (ifpp = &ifnet; 
        !           184:             *ifpp != NULL && (*ifpp)->if_class >= class;
        !           185:             ifpp = &(*ifpp)->if_next) {
        !           186:        }
        !           187:        ifp->if_next = *ifpp;
        !           188:        *ifpp = ifp;    
        !           189:        if (ifp->if_class == NETIFCLASS_REAL) {
        !           190:                pingvirtuals((netif_t)ifp);
        !           191:        }
        !           192: #endif notdef
        !           193:        return ((netif_t)ifp);
        !           194: }
        !           195: 
        !           196: void if_registervirtual(if_attach_func_t attach_func, void *private)
        !           197: {
        !           198:        return;         // ??
        !           199: }
        !           200:                  
        !           201: void *
        !           202: if_private(
        !           203:           netif_t netif
        !           204:           )
        !           205: {
        !           206:        return (((struct ifnet *)netif)->if_private);
        !           207: }
        !           208: 
        !           209: unsigned
        !           210: if_unit(
        !           211:        netif_t netif
        !           212:        )
        !           213: {
        !           214:        return (((struct ifnet *)netif)->if_unit);
        !           215: }
        !           216: 
        !           217: const char *
        !           218: if_name(
        !           219:        netif_t netif
        !           220:        )
        !           221: {
        !           222:        return (((struct ifnet *)netif)->if_name);
        !           223: }
        !           224: 
        !           225: const char *
        !           226: if_type(
        !           227:        netif_t netif
        !           228:        )
        !           229: {
        !           230:        return (((struct ifnet *)netif)->if_type);
        !           231: }
        !           232: 
        !           233: unsigned
        !           234: if_mtu(
        !           235:        netif_t netif
        !           236:        )
        !           237: {
        !           238:        return (((struct ifnet *)netif)->if_mtu);
        !           239: }
        !           240: 
        !           241: unsigned
        !           242: if_flags(
        !           243:         netif_t netif
        !           244:         )
        !           245: {
        !           246:        return (((struct ifnet *)netif)->if_flags);
        !           247: }
        !           248: 
        !           249: unsigned
        !           250: if_opackets(
        !           251:            netif_t netif
        !           252:            )
        !           253: {
        !           254:        return (((struct ifnet *)netif)->if_opackets);
        !           255: }
        !           256: 
        !           257: unsigned
        !           258: if_ipackets(
        !           259:            netif_t netif
        !           260:            )
        !           261: {
        !           262:        return (((struct ifnet *)netif)->if_ipackets);
        !           263: }
        !           264: 
        !           265: unsigned
        !           266: if_oerrors(
        !           267:           netif_t netif
        !           268:           )
        !           269: {
        !           270:        return (((struct ifnet *)netif)->if_oerrors);
        !           271: }
        !           272: 
        !           273: unsigned
        !           274: if_ierrors(
        !           275:           netif_t netif
        !           276:           )
        !           277: {
        !           278:        return (((struct ifnet *)netif)->if_ierrors);
        !           279: }
        !           280: 
        !           281: unsigned
        !           282: if_collisions(
        !           283:              netif_t netif
        !           284:              )
        !           285: {
        !           286:        return (((struct ifnet *)netif)->if_collisions);
        !           287: }
        !           288: 
        !           289: void
        !           290: if_flags_set(
        !           291:             netif_t netif,
        !           292:             unsigned flags
        !           293:             )
        !           294: {
        !           295:        ((struct ifnet *)netif)->if_flags = flags;
        !           296: }
        !           297: 
        !           298: void
        !           299: if_opackets_set(
        !           300:                netif_t netif,
        !           301:                unsigned opackets
        !           302:                )
        !           303: {
        !           304:        ((struct ifnet *)netif)->if_opackets = opackets;
        !           305: }
        !           306: 
        !           307: void
        !           308: if_ipackets_set(
        !           309:                netif_t netif,
        !           310:                unsigned ipackets
        !           311:                )
        !           312: {
        !           313:        ((struct ifnet *)netif)->if_ipackets = ipackets;
        !           314: }
        !           315: 
        !           316: void
        !           317: if_oerrors_set(
        !           318:                netif_t netif,
        !           319:                unsigned oerrors
        !           320:                )
        !           321: {
        !           322:        ((struct ifnet *)netif)->if_oerrors = oerrors;
        !           323: }
        !           324: 
        !           325: void
        !           326: if_ierrors_set(
        !           327:                netif_t netif,
        !           328:                unsigned ierrors
        !           329:                )
        !           330: {
        !           331:        ((struct ifnet *)netif)->if_oerrors = ierrors;
        !           332: }
        !           333: 
        !           334: void
        !           335: if_collisions_set(
        !           336:                netif_t netif,
        !           337:                unsigned collisions
        !           338:                )
        !           339: {
        !           340:        ((struct ifnet *)netif)->if_collisions = collisions;
        !           341: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.