Annotation of driverkit/tests/netif.m, revision 1.1.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.