summaryrefslogtreecommitdiffstats
path: root/isisd/isisd.h
blob: 3ca421adccd43ffc8c0cb4477b5128df6c0c5e29 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/*
 * IS-IS Rout(e)ing protocol - isisd.h   
 *
 * Copyright (C) 2001,2002   Sampo Saaristo
 *                           Tampere University of Technology      
 *                           Institute of Communications Engineering
 *
 * This program is free software; you can redistribute it and/or modify it 
 * under the terms of the GNU General Public Licenseas published by the Free 
 * Software Foundation; either version 2 of the License, or (at your option) 
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,but WITHOUT 
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
 * more details.

 * You should have received a copy of the GNU General Public License along 
 * with this program; if not, write to the Free Software Foundation, Inc., 
 * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */

#ifndef ISISD_H
#define ISISD_H

#define ISISD_VERSION "0.0.7"

/* uncomment if you are a developer in bug hunt */
/* #define EXTREME_DEBUG  */
/* #define EXTREME_TLV_DEBUG */

/* If you want topology stuff compiled in */
/* #define TOPOLOGY_GENERATE */

struct rmap{
  char *name;
  struct route_map *map;
};

struct isis
{
  u_long process_id;
  int sysid_set;
  u_char sysid[ISIS_SYS_ID_LEN];    /* SystemID for this IS */
  struct list *area_list;           /* list of IS-IS areas */
  struct list *init_circ_list;
  struct list *nexthops;            /* IPv4 next hops from this IS */
#ifdef HAVE_IPV6
  struct list  *nexthops6;          /* IPv6 next hops from this IS */
#endif /* HAVE_IPV6 */
  u_char max_area_addrs;            /* maximumAreaAdresses */
  struct area_addr *man_area_addrs; /* manualAreaAddresses */
  u_int32_t debugs;                 /* bitmap for debug */
  time_t uptime;                    /* when did we start */
  
  /* Redistributed external information. */
  struct route_table *external_info[ZEBRA_ROUTE_MAX + 1];
  /* Redistribute metric info. */
  struct {
    int type;                   /* Internal or External  */
    int value;                  /* metric value */
  } dmetric [ZEBRA_ROUTE_MAX + 1];

  struct {
    char *name;
    struct route_map *map;
  } rmap [ZEBRA_ROUTE_MAX + 1];
#ifdef HAVE_IPV6
  struct {
    struct {
      char *name;
      struct route_map *map;
    } rmap [ZEBRA_ROUTE_MAX + 1];
  } inet6_afmode;
#endif
};

struct isis_area 
{
  struct isis *isis;                          /* back pointer */
  dict_t *lspdb[ISIS_LEVELS];                 /* link-state dbs */
  struct isis_spftree *spftree[ISIS_LEVELS];  /* The v4 SPTs */
  struct route_table *route_table;            /* IPv4 routes */
#ifdef HAVE_IPV6
  struct isis_spftree *spftree6[ISIS_LEVELS]; /* The v4 SPTs */
  struct route_table *route_table6;           /* IPv6 routes */
#endif
  int min_bcast_mtu;
  struct list *circuit_list;                  /* IS-IS circuits */
  struct flags flags;                        
  struct thread *t_tick;                      /* LSP walker */
  struct thread *t_remove_aged;              
  int lsp_regenerate_pending[ISIS_LEVELS];
  struct thread *t_lsp_refresh[ISIS_LEVELS];
  
  /*
   * Configurables 
   */
  struct isis_passwd area_passwd;
  struct isis_passwd domain_passwd;
  /* do we support dynamic hostnames?  */
  char dynhostname;
  /* do we support new style metrics?  */
  char newmetric;  
  /* identifies the routing instance   */
  char *area_tag;  
  /* area addresses for this area      */
  struct list *area_addrs;  
  u_int16_t max_lsp_lifetime[ISIS_LEVELS];         
  char is_type;  /* level-1 level-1-2 or level-2-only */
  u_int16_t lsp_refresh[ISIS_LEVELS];
  /* minimum time allowed before lsp retransmission */
  u_int16_t lsp_gen_interval[ISIS_LEVELS];
  /* min interval between between consequtive SPFs */
  u_int16_t min_spf_interval[ISIS_LEVELS]; 
  /* the percentage of LSP mtu size used, before generating a new frag */
  int lsp_frag_threshold; 
  int ip_circuits;
#ifdef HAVE_IPV6
  int ipv6_circuits;
#endif /* HAVE_IPV6 */
  /* Counters */
  u_int32_t circuit_state_changes;
#ifdef TOPOLOGY_GENERATE
  struct list                   *topology;
  char   topology_baseis[ISIS_SYS_ID_LEN]; /* is for the first is emulated  */
  char                    top_params[200]; /* FIXME: what is reasonable?    */
#endif /* TOPOLOGY_GENERATE */
};

void isis_init(void);
struct isis_area *isis_area_lookup (char *);

#define DEBUG_ADJ_PACKETS                (1<<0)
#define DEBUG_CHECKSUM_ERRORS            (1<<1)
#define DEBUG_LOCAL_UPDATES              (1<<2)
#define DEBUG_PROTOCOL_ERRORS            (1<<3)
#define DEBUG_SNP_PACKETS                (1<<4)
#define DEBUG_UPDATE_PACKETS             (1<<5)
#define DEBUG_SPF_EVENTS                 (1<<6)
#define DEBUG_SPF_STATS                  (1<<7)
#define DEBUG_SPF_TRIGGERS               (1<<8)
#define DEBUG_RTE_EVENTS                 (1<<9)
#define DEBUG_EVENTS                     (1<<10)

#endif /* ISISD_H */