Annotation of embedaddon/quagga/isisd/isisd.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * IS-IS Rout(e)ing protocol - isisd.h   
                      3:  *
                      4:  * Copyright (C) 2001,2002   Sampo Saaristo
                      5:  *                           Tampere University of Technology      
                      6:  *                           Institute of Communications Engineering
                      7:  *
                      8:  * This program is free software; you can redistribute it and/or modify it 
                      9:  * under the terms of the GNU General Public Licenseas published by the Free 
                     10:  * Software Foundation; either version 2 of the License, or (at your option) 
                     11:  * any later version.
                     12:  *
                     13:  * This program is distributed in the hope that it will be useful,but WITHOUT 
                     14:  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
                     15:  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
                     16:  * more details.
                     17: 
                     18:  * You should have received a copy of the GNU General Public License along 
                     19:  * with this program; if not, write to the Free Software Foundation, Inc., 
                     20:  * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
                     21:  */
                     22: 
                     23: #ifndef ISISD_H
                     24: #define ISISD_H
                     25: 
                     26: #define ISISD_VERSION "0.0.7"
                     27: 
                     28: /* uncomment if you are a developer in bug hunt */
                     29: /* #define EXTREME_DEBUG  */
                     30: /* #define EXTREME_TLV_DEBUG */
                     31: 
                     32: struct rmap
                     33: {
                     34:   char *name;
                     35:   struct route_map *map;
                     36: };
                     37: 
                     38: struct isis
                     39: {
                     40:   u_long process_id;
                     41:   int sysid_set;
                     42:   u_char sysid[ISIS_SYS_ID_LEN];       /* SystemID for this IS */
                     43:   struct list *area_list;      /* list of IS-IS areas */
                     44:   struct list *init_circ_list;
                     45:   struct list *nexthops;       /* IPv4 next hops from this IS */
                     46: #ifdef HAVE_IPV6
                     47:   struct list *nexthops6;      /* IPv6 next hops from this IS */
                     48: #endif                         /* HAVE_IPV6 */
                     49:   u_char max_area_addrs;       /* maximumAreaAdresses */
                     50:   struct area_addr *man_area_addrs;    /* manualAreaAddresses */
                     51:   u_int32_t debugs;            /* bitmap for debug */
                     52:   time_t uptime;               /* when did we start */
                     53:   struct thread *t_dync_clean; /* dynamic hostname cache cleanup thread */
                     54: 
                     55:   /* Redistributed external information. */
                     56:   struct route_table *external_info[ZEBRA_ROUTE_MAX + 1];
                     57:   /* Redistribute metric info. */
                     58:   struct
                     59:   {
                     60:     int type;                  /* Internal or External  */
                     61:     int value;                 /* metric value */
                     62:   } dmetric[ZEBRA_ROUTE_MAX + 1];
                     63: 
                     64:   struct
                     65:   {
                     66:     char *name;
                     67:     struct route_map *map;
                     68:   } rmap[ZEBRA_ROUTE_MAX + 1];
                     69: #ifdef HAVE_IPV6
                     70:   struct
                     71:   {
                     72:     struct
                     73:     {
                     74:       char *name;
                     75:       struct route_map *map;
                     76:     } rmap[ZEBRA_ROUTE_MAX + 1];
                     77:   } inet6_afmode;
                     78: #endif
                     79: };
                     80: 
                     81: struct isis_area
                     82: {
                     83:   struct isis *isis;                             /* back pointer */
                     84:   dict_t *lspdb[ISIS_LEVELS];                    /* link-state dbs */
                     85:   struct isis_spftree *spftree[ISIS_LEVELS];     /* The v4 SPTs */
                     86:   struct route_table *route_table[ISIS_LEVELS];          /* IPv4 routes */
                     87: #ifdef HAVE_IPV6
                     88:   struct isis_spftree *spftree6[ISIS_LEVELS];    /* The v6 SPTs */
                     89:   struct route_table *route_table6[ISIS_LEVELS];  /* IPv6 routes */
                     90: #endif
                     91:   unsigned int min_bcast_mtu;
                     92:   struct list *circuit_list;   /* IS-IS circuits */
                     93:   struct flags flags;
                     94:   struct thread *t_tick;       /* LSP walker */
                     95:   struct thread *t_remove_aged;
                     96:   struct thread *t_lsp_l1_regenerate;
                     97:   struct thread *t_lsp_l2_regenerate;
                     98:   int lsp_regenerate_pending[ISIS_LEVELS];
                     99:   struct thread *t_lsp_refresh[ISIS_LEVELS];
                    100: 
                    101:   /*
                    102:    * Configurables 
                    103:    */
                    104:   struct isis_passwd area_passwd;
                    105:   struct isis_passwd domain_passwd;
                    106:   /* do we support dynamic hostnames?  */
                    107:   char dynhostname;
                    108:   /* do we support new style metrics?  */
                    109:   char newmetric;
                    110:   char oldmetric;
                    111:   /* identifies the routing instance   */
                    112:   char *area_tag;
                    113:   /* area addresses for this area      */
                    114:   struct list *area_addrs;
                    115:   u_int16_t max_lsp_lifetime[ISIS_LEVELS];
                    116:   char is_type;                        /* level-1 level-1-2 or level-2-only */
                    117:   u_int16_t lsp_refresh[ISIS_LEVELS];
                    118:   /* minimum time allowed before lsp retransmission */
                    119:   u_int16_t lsp_gen_interval[ISIS_LEVELS];
                    120:   /* min interval between between consequtive SPFs */
                    121:   u_int16_t min_spf_interval[ISIS_LEVELS];
                    122:   /* the percentage of LSP mtu size used, before generating a new frag */
                    123:   int lsp_frag_threshold;
                    124:   int ip_circuits;
                    125: #ifdef HAVE_IPV6
                    126:   int ipv6_circuits;
                    127: #endif                         /* HAVE_IPV6 */
                    128:   /* Counters */
                    129:   u_int32_t circuit_state_changes;
                    130: 
                    131: #ifdef TOPOLOGY_GENERATE
                    132:   struct list *topology;
                    133:   char topology_baseis[ISIS_SYS_ID_LEN];  /* IS for the first IS emulated. */
                    134:   char *topology_basedynh;                /* Dynamic hostname base. */
                    135:   char top_params[200];                   /* FIXME: what is reasonable? */
                    136: #endif /* TOPOLOGY_GENERATE */
                    137: };
                    138: 
                    139: void isis_init (void);
                    140: struct isis_area *isis_area_lookup (const char *);
                    141: 
                    142: #define DEBUG_ADJ_PACKETS                (1<<0)
                    143: #define DEBUG_CHECKSUM_ERRORS            (1<<1)
                    144: #define DEBUG_LOCAL_UPDATES              (1<<2)
                    145: #define DEBUG_PROTOCOL_ERRORS            (1<<3)
                    146: #define DEBUG_SNP_PACKETS                (1<<4)
                    147: #define DEBUG_UPDATE_PACKETS             (1<<5)
                    148: #define DEBUG_SPF_EVENTS                 (1<<6)
                    149: #define DEBUG_SPF_STATS                  (1<<7)
                    150: #define DEBUG_SPF_TRIGGERS               (1<<8)
                    151: #define DEBUG_RTE_EVENTS                 (1<<9)
                    152: #define DEBUG_EVENTS                     (1<<10)
                    153: #define DEBUG_ZEBRA                      (1<<11)
                    154: 
                    155: #endif /* ISISD_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>