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

unix.superglobalmegacorp.com

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