Annotation of XNU/bsd/netat/aurp_misc.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*
                     23:  *     Copyright (c) 1996 Apple Computer, Inc. 
                     24:  *
                     25:  *             Created April 8, 1996 by Tuyen Nguyen
                     26:  *   Modified, March 17, 1997 by Tuyen Nguyen for MacOSX.
                     27:  *
                     28:  *     File: misc.c
                     29:  */
                     30: #include <sys/errno.h>
                     31: #include <sys/types.h>
                     32: #include <sys/param.h>
                     33: #include <machine/spl.h>
                     34: #include <sys/systm.h>
                     35: #include <sys/kernel.h>
                     36: #include <sys/proc.h>
                     37: #include <sys/filedesc.h>
                     38: #include <sys/fcntl.h>
                     39: #include <sys/mbuf.h>
                     40: #include <sys/socket.h>
                     41: #include <sys/socketvar.h>
                     42: #include <net/if.h>
                     43: 
                     44: #include <netat/sysglue.h>
                     45: #include <netat/appletalk.h>
                     46: #include <netat/at_var.h>
                     47: #include <netat/rtmp.h>
                     48: #include <netat/routing_tables.h>
                     49: #include <netat/at_pcb.h>
                     50: #include <netat/aurp.h>
                     51: #include <netat/debug.h>
                     52: 
                     53: /* */
                     54: void AURPiocack(gref, m)
                     55:        gref_t *gref;
                     56:        gbuf_t *m;
                     57: {
                     58:        /* send ok reply to ioctl command */
                     59:        gbuf_set_type(m, MSG_IOCACK);
                     60:        atalk_putnext(gref, m);
                     61: }
                     62: 
                     63: void AURPiocnak(gref, m, error)
                     64:        gref_t *gref;
                     65:        gbuf_t *m;
                     66:        int error;
                     67: {
                     68:        ioc_t *iocbp = (ioc_t *)gbuf_rptr(m);
                     69: 
                     70:        /* send error reply to ioctl command */
                     71:        if (gbuf_cont(m)) {
                     72:         gbuf_freem(gbuf_cont(m));
                     73:         gbuf_cont(m) = 0;
                     74:        }
                     75:        iocbp->ioc_error = error;
                     76:        iocbp->ioc_count = 0;
                     77:        iocbp->ioc_rval = -1;
                     78:        gbuf_set_type(m, MSG_IOCNAK);
                     79:        atalk_putnext(gref, m);
                     80: }
                     81: 
                     82: /* */
                     83: void AURPupdate(arg)
                     84:        void *arg;
                     85: {
                     86:        unsigned char node;
                     87:        aurp_state_t *state = (aurp_state_t *)&aurp_state[1];
                     88: 
                     89:        if (aurp_gref == 0)
                     90:                return;
                     91: 
                     92:        /*
                     93:         * for every tunnel peer, do the following periodically:
                     94:         * 1. send zone requests to determine zone names of networks
                     95:         *    that still do not have asssociated zone names.
                     96:         * 2. send any RI update that are pending
                     97:         */
                     98:        for (node=1; node <= dst_addr_cnt; node++, state++) {
                     99:                AURPsndZReq(state);
                    100:                AURPsndRIUpd(state);
                    101:        }
                    102: 
                    103:        /* restart the periodic update timer */
                    104:        timeout(AURPupdate, arg, AURP_UpdateRate*10*HZ);
                    105:        update_tmo = 1;
                    106: }
                    107: 
                    108: /* */
                    109: void AURPfreemsg(m)
                    110:        gbuf_t *m;
                    111: {
                    112:        gbuf_t *tmp_m;
                    113: 
                    114:        while ((tmp_m = m) != 0) {
                    115:                m = gbuf_next(m);
                    116:                gbuf_next(tmp_m) = 0;
                    117:                gbuf_freem(tmp_m);
                    118:        }
                    119: }
                    120: 
                    121: /* */
                    122: int AURPinit()
                    123: {
                    124:        unsigned char node;
                    125:        aurp_state_t *state = (aurp_state_t *)&aurp_state[1];
                    126:        short entry_num;
                    127:        RT_entry *entry = (RT_entry *)RT_table;
                    128: 
                    129:        /* start the periodic update timer */
                    130:        timeout(AURPupdate, 0, AURP_UpdateRate*10*HZ);
                    131:        update_tmo = 1;
                    132: 
                    133:        /* initialize AURP flags for entries in the RT table */
                    134:        for (entry_num=0; entry_num < RT_maxentry; entry_num++,entry++)
                    135:                entry->AURPFlag = 0;
                    136: 
                    137:        /* initiate connections to peers */
                    138:        for (node=1; node <= dst_addr_cnt; node++, state++) {
                    139:                bzero((char *)state, sizeof(*state));
                    140:                state->rem_node = node;
                    141:                state->snd_state = AURPSTATE_Unconnected;
                    142:                state->rcv_state = AURPSTATE_Unconnected;
                    143:                dPrintf(D_M_AURP, D_L_STARTUP_INFO,
                    144:                        ("AURPinit: sending OpenReq to node %u\n", node));
                    145:                AURPsndOpenReq(state);
                    146:        }
                    147: 
                    148:        return 0;
                    149: }
                    150: 
                    151: /* */
                    152: void AURPcleanup(state)
                    153:        aurp_state_t *state;
                    154: {
                    155:        if (state->rsp_m) {
                    156:                gbuf_freem(state->rsp_m);
                    157:                state->rsp_m = 0;
                    158:        }
                    159: 
                    160:        if (state->upd_m) {
                    161:                gbuf_freem(state->upd_m);
                    162:                state->upd_m = 0;
                    163:        }
                    164: }
                    165: 
                    166: /*
                    167:  *
                    168:  */
                    169: void AURPshutdown()
                    170: {
                    171:        unsigned char node;
                    172:        aurp_state_t *state = (aurp_state_t *)&aurp_state[1];
                    173: 
                    174:        /* cancel the periodic update timer */
                    175:        untimeout(AURPupdate, 0);
                    176:        update_tmo = 0;
                    177: 
                    178:        /* notify tunnel peers of router going-down */
                    179:        for (node=1; node <= dst_addr_cnt; node++, state++) {
                    180:                AURPcleanup(state);
                    181:                AURPsndRDReq(state);
                    182:        }
                    183: 
                    184:        /* bring down the router */ 
                    185:        aurp_wakeup(NULL, (caddr_t) AE_SHUTDOWN, 0);
                    186: }
                    187: 
                    188: void AURPaccess()
                    189: {
                    190:        unsigned char i;
                    191:        short entry_num;
                    192:        RT_entry *entry;
                    193: 
                    194:                entry = (RT_entry *)RT_table;
                    195:                for (entry_num=0; entry_num < RT_maxentry; entry_num++,entry++)
                    196:                        entry->AURPFlag = net_export ? AURP_NetHiden : 0;
                    197: 
                    198:        for (i=0; i < net_access_cnt; i++) {
                    199:                /* export or hide networks as configured */
                    200:                if ((entry = rt_blookup(net_access[i])) != 0)
                    201:                        entry->AURPFlag = net_export ? 0 : AURP_NetHiden;
                    202:        }
                    203: }

unix.superglobalmegacorp.com

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