|
|
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: /* ! 27: * Copyright (c) 1988, 1989 Apple Computer, Inc. ! 28: * ! 29: * The information contained herein is subject to change without ! 30: * notice and should not be construed as a commitment by Apple ! 31: * Computer, Inc. Apple Computer, Inc. assumes no responsibility ! 32: * for any errors that may appear. ! 33: * ! 34: * Confidential and Proprietary to Apple Computer, Inc. ! 35: */ ! 36: ! 37: /* "@(#)at_aarp.h: 2.0, 1.6; 10/4/93; Copyright 1988-89, Apple Computer, Inc." */ ! 38: ! 39: /* This is a header file for AARP. ! 40: * ! 41: * Author: R. C. Venkatraman ! 42: * Date : 3/2/88 ! 43: * ! 44: */ ! 45: ! 46: /* AARP packet */ ! 47: ! 48: typedef struct { ! 49: u_short hardware_type; ! 50: u_short stack_type; /* indicates appletalk or xns*/ ! 51: u_char hw_addr_len; /* len of hardware addr, e.g ! 52: * ethernet addr len, in bytes ! 53: */ ! 54: u_char stack_addr_len; /* protocol stack addr len, ! 55: * e.g., appletalk addr len ! 56: * in bytes ! 57: */ ! 58: u_short aarp_cmd; ! 59: struct etalk_addr src_addr; ! 60: struct atalk_addr src_at_addr; ! 61: struct etalk_addr dest_addr; ! 62: struct atalk_addr dest_at_addr; /* desired or dest. at addr */ ! 63: } aarp_pkt_t; ! 64: ! 65: ! 66: /* Constants currently defined in AARP */ ! 67: ! 68: #define AARP_AT_TYPE 0x80F3 /* indicates aarp packet */ ! 69: #define AARP_ETHER_HW_TYPE 0x1 ! 70: #define AARP_AT_PROTO 0x809B /* indicates stack type */ ! 71: #define AARP_ETHER_ADDR_LEN 6 /* in bytes */ ! 72: #define AARP_AT_ADDR_LEN 4 /* in bytes */ ! 73: ! 74: /* AARP cmd definitions */ ! 75: ! 76: #define AARP_REQ_CMD 0x1 /* address lookup request */ ! 77: #define AARP_RESP_CMD 0x2 /* address match response */ ! 78: #define AARP_PROBE_CMD 0x3 /* new kid probing... */ ! 79: ! 80: /* AARP timer and retry counts */ ! 81: ! 82: #define AARP_MAX_PROBE_RETRIES 20 ! 83: #define AARP_PROBE_TIMER_INT HZ/30 /* HZ defines in param.h */ ! 84: #define AARP_MAX_REQ_RETRIES 10 ! 85: #define AARP_REQ_TIMER_INT HZ/30 ! 86: #define AARP_MAX_NODES_TRIED 200 /* max no. of addresses tried */ ! 87: /* on the same net before */ ! 88: /* giving up on the net# */ ! 89: #define AARP_MAX_NETS_TRIED 10 /* max no. of net nos tried */ ! 90: /* before giving up on startup*/ ! 91: ! 92: /* Probe states */ ! 93: ! 94: #define PROBE_IDLE 0x1 /* There is no node addr */ ! 95: #define PROBE_TENTATIVE 0x2 /* probing */ ! 96: #define PROBE_DONE 0x3 /* an appletalk addr has been */ ! 97: /* assigned for the given node*/ ! 98: /* Errors returned by AARP routines */ ! 99: #define AARP_ERR_NOT_OURS 1 /* not our appletalk address */ ! 100: ! 101: /*************************************************/ ! 102: /* Declarations for AARP Address Map Table (AMT) */ ! 103: /*************************************************/ ! 104: ! 105: typedef struct { ! 106: struct atalk_addr dest_at_addr; ! 107: struct etalk_addr dest_addr; ! 108: char dummy[2]; /* pad out to struct size of 32 */ ! 109: time_t last_time; /* the last time that this addr ! 110: * was used. Read in lbolt ! 111: * whenever the addr is used. ! 112: */ ! 113: int no_of_retries; /* number of times we've xmitted */ ! 114: gbuf_t *m; /* ptr to msg blk to be sent out */ ! 115: elap_specifics_t *elapp; ! 116: int error; ! 117: void *tmo; ! 118: } aarp_amt_t; ! 119: ! 120: #define AMT_BSIZ 4 /* bucket size */ ! 121: #define AMT_NB 64 /* number of buckets */ ! 122: #define AMTSIZE (AMT_BSIZ * AMT_NB) ! 123: ! 124: #define AMT_HASH(a) \ ! 125: ((NET_VALUE(((struct atalk_addr *)&a)->atalk_net) + ((struct atalk_addr *)&a)->atalk_node) % AMT_NB) ! 126: ! 127: #define AMT_LOOK(at, at_addr, elapp) { \ ! 128: register n; \ ! 129: at = &et_aarp_amt[elapp->pat_id][AMT_HASH(at_addr) * AMT_BSIZ]; \ ! 130: for (n = 0 ; ; at++) { \ ! 131: if (ATALK_EQUAL(at->dest_at_addr, at_addr)) \ ! 132: break; \ ! 133: if (++n >= AMT_BSIZ) { \ ! 134: at = NULL; \ ! 135: break; \ ! 136: } \ ! 137: } \ ! 138: } ! 139: ! 140: #define NEW_AMT(at, at_addr, elapp) { \ ! 141: register n; \ ! 142: register aarp_amt_t *myat; \ ! 143: myat = at = &et_aarp_amt[elapp->pat_id][AMT_HASH(at_addr) * AMT_BSIZ]; \ ! 144: for (n = 0 ; ; at++) { \ ! 145: if (at->last_time == 0) \ ! 146: break; \ ! 147: if (++n >= AMT_BSIZ) { \ ! 148: at = aarp_lru_entry(myat); \ ! 149: break; \ ! 150: } \ ! 151: } \ ! 152: } ! 153: ! 154: #define AARP_NET_MCAST(p, elapp) \ ! 155: (NET_EQUAL((p)->dst_net, elapp->elap_if.ifThisNode.atalk_net) \ ! 156: ) /* network-wide broadcast */ ! 157: ! 158: #define AARP_CABLE_MCAST(p) \ ! 159: (NET_VALUE((p)->dst_net) == 0x0000 \ ! 160: ) ! 161: ! 162: #define AARP_BROADCAST(p, elapp) \ ! 163: (((p)->dst_node == 0xff) && \ ! 164: ( \ ! 165: (NET_VALUE((p)->dst_net) == 0x0000) || \ ! 166: (NET_EQUAL((p)->dst_net, elapp->elap_if.ifThisNode.atalk_net))) \ ! 167: ) /* is this some kind of a broadcast address (?) */ ! 168: ! 169: ! 170: #define ETHER_ADDR_EQUAL(addr1p, addr2p) \ ! 171: (( \ ! 172: ((addr1p)->etalk_addr_octet[0]==(addr2p)->etalk_addr_octet[0]) && \ ! 173: ((addr1p)->etalk_addr_octet[1]==(addr2p)->etalk_addr_octet[1]) && \ ! 174: ((addr1p)->etalk_addr_octet[2]==(addr2p)->etalk_addr_octet[2]) && \ ! 175: ((addr1p)->etalk_addr_octet[3]==(addr2p)->etalk_addr_octet[3]) && \ ! 176: ((addr1p)->etalk_addr_octet[4]==(addr2p)->etalk_addr_octet[4]) && \ ! 177: ((addr1p)->etalk_addr_octet[5]==(addr2p)->etalk_addr_octet[5]) \ ! 178: ) ? 1 : 0 \ ! 179: ) ! 180: ! 181: #ifdef _AIX ! 182: extern time_t lbolt; ! 183: #endif ! 184: ! 185: extern struct etalk_addr etalk_multicast_addr; ! 186: extern struct etalk_addr ttalk_multicast_addr; ! 187: extern struct etalk_addr zone_multicast_addr;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.