|
|
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: * This include file defines the RTMP table and ZIP table ! 24: * for the AppleTalk AIX router ! 25: * ! 26: * ! 27: * 0.01 03/16/94 LD Creation ! 28: * 0.10 08/19/94 LD merged ! 29: * ! 30: */ ! 31: ! 32: #ifndef _NETAT_ROUTING_TABLES_H_ ! 33: #define _NETAT_ROUTING_TABLES_H_ ! 34: ! 35: #define DDP_MAX_DATA 586 /* should probably be somewhere else... */ ! 36: ! 37: /* RTMP table entry state bitmap (EntryState) values */ ! 38: ! 39: #define RTE_STATE_UNUSED 0 /* this entry is not in used */ ! 40: #define RTE_STATE_BAD 2 /* The route is almost ready to be removed */ ! 41: #define RTE_STATE_SUSPECT 4 /* didn't received an update for route */ ! 42: #define RTE_STATE_GOOD 8 /* this route is 100% valid */ ! 43: #define RTE_STATE_ZKNOWN 16 /* we know the zones for this entry */ ! 44: #define RTE_STATE_UPDATED 32 /* set when updated from received rtmp table */ ! 45: #define RTE_STATE_BKUP 64 /* for future use : AURP */ ! 46: #define RTE_STATE_PERMANENT 128 /* This is a directly attached route */ ! 47: ! 48: #define PORT_ONLINE 32 /* router port in forwarding state */ ! 49: #define PORT_SEEDING 31 /* router port seeding */ ! 50: #define PORT_ACTIVATING 16 /* router port waiting for net infos */ ! 51: #define PORT_ERR_NOZONE 6 /* router no zones for non seed port*/ ! 52: #define PORT_ERR_BADRTMP 5 /* router problem bad rtmp version*/ ! 53: #define PORT_ERR_STARTUP 4 /* router problem cable in start range*/ ! 54: #define PORT_ERR_CABLER 3 /* router problem bad cable range*/ ! 55: #define PORT_ERR_SEED 2 /* router startup seeding problem */ ! 56: #define PORT_ONERROR 1 /* router port with generic problem*/ ! 57: #define PORT_OFFLINE 0 /* router port disabled/not ready */ ! 58: ! 59: #define ZT_MAX 1024 /* Don't allow more zones than that */ ! 60: #define ZT_MIN 32 /* Minimum for a good behaviour*/ ! 61: #define ZT_DEFAULT 512 /* Minimum for a good behaviour*/ ! 62: #define RT_MAX 4096 /* Don't allow more entries than that */ ! 63: #define RT_MIN 128 /* Minimum for a good behaviour*/ ! 64: #define RT_DEFAULT 1024 /* Minimum for a good behaviour*/ ! 65: #define ZT_BYTES (ZT_MAX/8) /* Bytes in Zone Bitmap */ ! 66: #define ZT_MAXEDOUT ZT_MAX+1 /* reached the entry limit.. */ ! 67: #define RT_MIX_DEFAULT 2000 /* default for nbr of ppsec */ ! 68: ! 69: ! 70: #define NOTIFY_N_DIST 31 /* Notify Neighbor distance (when shutdown or so) */ ! 71: ! 72: /* Useful macros to access the RTMP tuple fields */ ! 73: ! 74: #define TUPLENET(x) NET_VALUE(((at_rtmp_tuple *)(x))->at_rtmp_net) ! 75: #define TUPLEDIST(x) ((((at_rtmp_tuple *)(x))->at_rtmp_data) & RTMP_DISTANCE) ! 76: #define TUPLERANGE(x) ((((at_rtmp_tuple *)(x))->at_rtmp_data) & RTMP_RANGE_FLAG) ! 77: ! 78: #define CableStart ifID->ifThisCableStart ! 79: #define CableStop ifID->ifThisCableEnd ! 80: ! 81: #define RTMP_IDLENGTH 4 /* RTMP packet Node header length */ ! 82: ! 83: ! 84: #define RTMP_VERSION_NUMBER 0x82 /* V2 only version of RTMP supported */ ! 85: ! 86: #define ERTR_SEED_CONFLICT 0x101 /* Conflict between port information and net ! 87: * value received for the port (fatal for Rtr) ! 88: */ ! 89: #define ERTR_CABLE_CONFLICT 0x102 /* Conflict between port information and net ! 90: * information received in a RTMP packet ! 91: */ ! 92: ! 93: #define ERTR_RTMP_BAD_VERSION 0x103 /* We received a non phase-II RTMP packet ! 94: * that's bad... We can't deal with it ! 95: */ ! 96: ! 97: #define ERTR_CABLE_STARTUP 0x104 /* the cable range we're on happen to ! 98: * be in the startup range. Shouldn't ! 99: */ ! 100: ! 101: #define ERTR_CABLE_NOZONE 0x105 /* We haven't found any zones for that port ! 102: * after all the timeout expired ! 103: */ ! 104: ! 105: ! 106: /* RTMP table entry */ ! 107: ! 108: typedef struct rt_entry { ! 109: ! 110: struct rt_entry *left; /* btree left pointer */ ! 111: struct rt_entry *right; /* btree right pointer */ ! 112: ! 113: at_net_al NetStop; /* Last net # in the range, or network # if ! 114: non extended network */ ! 115: at_net_al NetStart; /* Starting network number in the range, 0 ! 116: non extended network */ ! 117: at_net_al NextIRNet; /* Network number of next Internet Router */ ! 118: at_node NextIRNode; /* Node ID of next Router */ ! 119: u_char ZoneBitMap[ZT_BYTES]; /* One bit per Zone defined for this entry */ ! 120: u_char NetDist; /* Distance in hops of the destination net */ ! 121: u_char NetPort; /* Physical port number to forward to */ ! 122: u_char EntryState; /* State of the entry bitmap field */ ! 123: u_char RTMPFlag; ! 124: u_char AURPFlag; ! 125: ! 126: } RT_entry; ! 127: ! 128: ! 129: /* ZIP Table entry */ ! 130: ! 131: typedef struct { ! 132: ! 133: u_short ZoneCount; /* Count of reference to zone entry */ ! 134: at_nvestr_t Zone; /* zone name as a Network Visible Entity */ ! 135: ! 136: } ZT_entry; ! 137: ! 138: /* for zone retrieval to user space only */ ! 139: typedef struct { ! 140: unsigned short entryno; /* zone table entry number (1st = 0) */ ! 141: ZT_entry zt; /* the zone table entry */ ! 142: } ZT_entryno; ! 143: ! 144: #ifdef KERNEL ! 145: ! 146: /* Macros for Routing table B-tree easy access */ ! 147: ! 148: #define RT_DELETE(NetStop, NetStart) {\ ! 149: RT_entry *found; \ ! 150: if ((found = rt_bdelete(NetStop, NetStart))) { \ ! 151: memset(found, '\0', sizeof(RT_entry)); \ ! 152: found->right = RT_table_freelist; \ ! 153: RT_table_freelist = found; \ ! 154: } \ ! 155: } ! 156: ! 157: /* Set/Reset and test the All zones known bit in for the entry field */ ! 158: ! 159: #define RT_ALL_ZONES_KNOWN(entry) ((entry)->EntryState & RTE_STATE_ZKNOWN) ! 160: #define RT_SET_ZONE_KNOWN(entry) ((entry)->EntryState |= RTE_STATE_ZKNOWN) ! 161: #define RT_CLR_ZONE_KNOWN(entry) ((entry)->EntryState ^= RTE_STATE_ZKNOWN) ! 162: ! 163: /* ! 164: * check if a zone number is in a given zone map ! 165: */ ! 166: #define ZT_ISIN_ZMAP(znum, zmap) ((zmap)[(znum-1) >> 3] & 0x80 >> (znum-1) % 8) ! 167: ! 168: /* remove a zone from the zone bitmap, and check if the zone ! 169: * is still in use by someone else. ! 170: */ ! 171: ! 172: #define ZT_CLR_ZMAP(num, zmap) { \ ! 173: if ((zmap)[(num-1) >> 3] & 0x80 >> (num-1) % 8) { \ ! 174: (zmap)[(num-1) >> 3] ^= 0x80 >> (num-1) % 8; \ ! 175: ZT_table[(num-1)].ZoneCount-- ; \ ! 176: } \ ! 177: } ! 178: ! 179: /* set a bit in an entry bit map */ ! 180: ! 181: #define ZT_SET_ZMAP(num, zmap) { \ ! 182: if (!zmap[(num-1) >> 3] & 0x80 >> (num-1) % 8) { \ ! 183: zmap[(num-1) >> 3] |= 0x80 >> (num-1) % 8; \ ! 184: ZT_table[(num-1)].ZoneCount++ ; \ ! 185: } \ ! 186: } ! 187: ! 188: extern int regDefaultZone(at_ifaddr_t *); ! 189: extern int zonename_equal(at_nvestr_t *, at_nvestr_t *); ! 190: ! 191: extern RT_entry *RT_table_freelist; ! 192: extern RT_entry RT_table_start; ! 193: extern RT_entry *RT_table; ! 194: extern RT_entry *rt_binsert(); ! 195: extern RT_entry *rt_insert(); ! 196: extern RT_entry *rt_bdelete(); ! 197: extern RT_entry *rt_blookup(int); ! 198: extern RT_entry *rt_getNextRoute(int); ! 199: ! 200: extern ZT_entry *ZT_table; ! 201: extern short RT_maxentry; ! 202: extern short ZT_maxentry; ! 203: ! 204: extern volatile int RouterMix; ! 205: ! 206: extern int zt_add_zone(char *, short); ! 207: extern int zt_add_zonename(at_nvestr_t *); ! 208: extern int zt_ent_zindex(u_char *); ! 209: extern ZT_entryno *zt_getNextZone(int); ! 210: extern void zt_remove_zones(u_char *); ! 211: extern void zt_set_zmap(u_short, char *); ! 212: extern void rtmp_router_input(); ! 213: ! 214: #endif /* KERNEL */ ! 215: ! 216: #endif /* _NETAT_ROUTING_TABLES_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.