Annotation of kernel/bsd/netat/aurp_rx.c, 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: 
        !            25: /*
        !            26:  *     Copyright (c) 1996 Apple Computer, Inc. 
        !            27:  *
        !            28:  *     The information contained herein is subject to change without
        !            29:  *     notice and  should not be  construed as a commitment by Apple
        !            30:  *     Computer, Inc. Apple Computer, Inc. assumes no responsibility
        !            31:  *     for any errors that may appear.
        !            32:  *
        !            33:  *     Confidential and Proprietary to Apple Computer, Inc.
        !            34:  *
        !            35:  *     File: rx.c
        !            36:  */
        !            37: #include <sysglue.h>
        !            38: #include <at/appletalk.h>
        !            39: #include <lap.h>
        !            40: #include <routing_tables.h>
        !            41: #define _AURP
        !            42: #define _KERNSYS
        !            43: #include <at/aurp.h>
        !            44: #include <at_aurp.h>
        !            45: 
        !            46: /*
        !            47:  * Not using the stream queue for data; keep this around to handle
        !            48:  *  requests from the user proc (mostly setup).
        !            49:  */
        !            50: aurp_wput(gref, m)
        !            51:        gref_t *gref;
        !            52:        gbuf_t *m;
        !            53: {
        !            54:        unsigned char type, node;
        !            55:        register ioc_t *iocbp;
        !            56:        register aurp_hdr_t *hdrp;
        !            57:        register aurp_state_t *state;
        !            58:        register gbuf_t *mdata;
        !            59:        register int temp, error;
        !            60: 
        !            61:        switch (gbuf_type(m)) {
        !            62: 
        !            63:        case MSG_IOCTL:
        !            64:                iocbp = (ioc_t *)gbuf_rptr(m);
        !            65:                switch (iocbp->ioc_cmd) {
        !            66:                case AUC_CFGTNL: /* set up a tunnel, init the AURP daemon */
        !            67:                        mdata = gbuf_cont(m);
        !            68:                        temp = (int)(*gbuf_rptr(mdata));
        !            69:                        if (temp != dst_addr_cnt) {
        !            70:                                AURPiocnak(gref, m, ENOSPC);
        !            71:                                return 0;
        !            72:                        }
        !            73:                        if ((error = aurpd_start()) != 0) {
        !            74:                                AURPiocnak(gref, m, error);
        !            75:                                return 0;
        !            76:                        }
        !            77:                        if (AURPinit()) {
        !            78:                                AURPiocnak(gref, m, ENOMEM);
        !            79:                                return 0;
        !            80:                        }
        !            81:                        ddp_AURPfuncx(AURPCODE_AURPPROTO, 0, 0);
        !            82:                        AURPaccess();
        !            83:                        break;
        !            84: 
        !            85:                case AUC_SHTDOWN: /* shutdown AURP operation */
        !            86:                        AURPshutdown();
        !            87:                        break;
        !            88: 
        !            89:                case AUC_EXPNET: /* configure networks to be exported */
        !            90:                case AUC_HIDENET: /* configure networks to be hiden */
        !            91:                        mdata = gbuf_cont(m);
        !            92:                        net_access_cnt = (gbuf_len(mdata))/sizeof(short);
        !            93:                        if ((net_access_cnt==0) || (net_access_cnt>AURP_MaxNetAccess)) {
        !            94:                                AURPiocnak(gref, m, EINVAL);
        !            95:                                return 0;
        !            96:                        }
        !            97:                        bcopy(gbuf_rptr(mdata), net_access,
        !            98:                              gbuf_len(mdata));
        !            99:                        if (iocbp->ioc_cmd == AUC_EXPNET)
        !           100:                                net_export = 1;
        !           101:                        break;
        !           102: 
        !           103:                case AUC_UDPPORT:
        !           104:                        aurp_global.udp_port = *(char *)gbuf_rptr(mdata);
        !           105:                        break;
        !           106: 
        !           107:                case AUC_NETLIST:
        !           108:                        mdata = gbuf_cont(m);
        !           109:                        /*
        !           110:                         * Compute # addrs, Save for later check
        !           111:                         * We cheat with a shift.
        !           112:                         */
        !           113:                        dst_addr_cnt = ((gbuf_len(mdata)) >> 2)-1;
        !           114:                        bcopy(gbuf_rptr(mdata), &aurp_global.dst_addr,
        !           115:                              gbuf_len(mdata));
        !           116:                        aurp_global.src_addr = aurp_global.dst_addr[0];
        !           117:                        aurp_global.dst_addr[0] = 0;
        !           118:                        break;
        !           119: 
        !           120:                default:
        !           121:                        AURPiocnak(gref, m, EINVAL);
        !           122:                        return 0;
        !           123:                }
        !           124:                AURPiocack(gref, m);
        !           125:                break;
        !           126: 
        !           127:        default:
        !           128:                dPrintf(D_M_AURP, D_L_WARNING,
        !           129:                        ("aurp_wput: bad msg type=%d\n", gbuf_type(m)));
        !           130:                gbuf_freem(m);
        !           131:                break;
        !           132:        }
        !           133: 
        !           134:        return 0;
        !           135: }
        !           136: 
        !           137: /*
        !           138:  * Insert an appletalk packet into the appletalk stack.
        !           139:  * If it's an AURP data packet, just send it up; if it's AURP protocol,
        !           140:  *  switch out here.
        !           141:  */
        !           142: 
        !           143: at_insert(m, type, node)
        !           144:        register gbuf_t *m;
        !           145:        register unsigned int type, node;
        !           146: {
        !           147:        register ioc_t *iocbp;
        !           148:        register aurp_hdr_t *hdrp;
        !           149:        register aurp_state_t *state;
        !           150:        register gbuf_t *mdata;
        !           151: 
        !           152:        if (type == AUD_Atalk)
        !           153:                /* non-AURP proto packet */
        !           154:                ddp_AURPfuncx(AURPCODE_DATAPKT, m, node);
        !           155:        else
        !           156:        {       /* AURP proto packet */
        !           157:                state = (aurp_state_t *)&aurp_state[node];
        !           158:                state->tickle_retry = 0;
        !           159:                hdrp = (aurp_hdr_t *)gbuf_rptr(m);
        !           160: 
        !           161:                switch (hdrp->command_code) {
        !           162:                case AURPCMD_RIUpd:
        !           163:                        AURPrcvRIUpd(state, m); break;
        !           164: 
        !           165:                case AURPCMD_RIReq:
        !           166:                        AURPrcvRIReq(state, m); break;
        !           167: 
        !           168:                case AURPCMD_RIRsp:
        !           169:                        AURPrcvRIRsp(state, m); break;
        !           170: 
        !           171:                case AURPCMD_RIAck:
        !           172:                        AURPrcvRIAck(state, m); break;
        !           173: 
        !           174:                case AURPCMD_ZReq:
        !           175:                        AURPrcvZReq(state, m); break;
        !           176: 
        !           177:                case AURPCMD_ZRsp:
        !           178:                        AURPrcvZRsp(state, m); break;
        !           179: 
        !           180:                case AURPCMD_OpenReq:
        !           181:                        AURPrcvOpenReq(state, m); break;
        !           182: 
        !           183:                case AURPCMD_OpenRsp:
        !           184:                        AURPrcvOpenRsp(state, m); break;
        !           185: 
        !           186:                case AURPCMD_Tickle:
        !           187:                        AURPrcvTickle(state, m); break;
        !           188: 
        !           189:                case AURPCMD_TickleAck:
        !           190:                        AURPrcvTickleAck(state, m); break;
        !           191: 
        !           192:                case AURPCMD_RDReq:
        !           193:                        AURPrcvRDReq(state, m); break;
        !           194: 
        !           195:                default:
        !           196:                        dPrintf(D_M_AURP, D_L_WARNING,
        !           197:                                ("at_insert: bad proto cmd=%d\n",
        !           198:                                hdrp->command_code));
        !           199:                        gbuf_freem(m);
        !           200:                }
        !           201:        }
        !           202: 
        !           203:        return 0;
        !           204: }

unix.superglobalmegacorp.com

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