Annotation of XNU/bsd/netat/routing_tables.h, 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:  *    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_ */

unix.superglobalmegacorp.com

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