--- embedaddon/quagga/isisd/isisd.h 2012/10/09 09:22:28 1.1.1.2 +++ embedaddon/quagga/isisd/isisd.h 2016/11/02 10:09:10 1.1.1.3 @@ -25,16 +25,12 @@ #define ISISD_VERSION "0.0.7" +#include "isisd/isis_redist.h" + /* uncomment if you are a developer in bug hunt */ /* #define EXTREME_DEBUG */ /* #define EXTREME_TLV_DEBUG */ -struct rmap -{ - char *name; - struct route_map *map; -}; - struct isis { u_long process_id; @@ -53,30 +49,7 @@ struct isis time_t uptime; /* when did we start */ struct thread *t_dync_clean; /* dynamic hostname cache cleanup thread */ - /* 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 route_table *ext_info[REDIST_PROTOCOL_COUNT]; }; extern struct isis *isis; @@ -91,11 +64,23 @@ struct isis_area struct isis_spftree *spftree6[ISIS_LEVELS]; /* The v6 SPTs */ struct route_table *route_table6[ISIS_LEVELS]; /* IPv6 routes */ #endif - unsigned int min_bcast_mtu; +#define DEFAULT_LSP_MTU 1497 + unsigned int lsp_mtu; /* Size of LSPs to generate */ struct list *circuit_list; /* IS-IS circuits */ struct flags flags; struct thread *t_tick; /* LSP walker */ struct thread *t_lsp_refresh[ISIS_LEVELS]; + /* t_lsp_refresh is used in two ways: + * a) regular refresh of LSPs + * b) (possibly throttled) updates to LSPs + * + * The lsp_regenerate_pending flag tracks whether the timer is active + * for the a) or the b) case. + * + * It is of utmost importance to clear this flag when the timer is + * rescheduled for normal refresh, because otherwise, updates will + * be delayed until the next regular refresh. + */ int lsp_regenerate_pending[ISIS_LEVELS]; /* @@ -116,6 +101,8 @@ struct isis_area char is_type; /* level-1 level-1-2 or level-2-only */ /* are we overloaded? */ char overload_bit; + /* L1/L2 router identifier for inter-area traffic */ + char attached_bit; u_int16_t lsp_refresh[ISIS_LEVELS]; /* minimum time allowed before lsp retransmission */ u_int16_t lsp_gen_interval[ISIS_LEVELS]; @@ -131,6 +118,9 @@ struct isis_area #endif /* HAVE_IPV6 */ /* Counters */ u_int32_t circuit_state_changes; + struct isis_redist redist_settings[REDIST_PROTOCOL_COUNT] + [ZEBRA_ROUTE_MAX + 1][ISIS_LEVELS]; + struct route_table *ext_reach[REDIST_PROTOCOL_COUNT][ISIS_LEVELS]; #ifdef TOPOLOGY_GENERATE struct list *topology; @@ -163,5 +153,23 @@ extern struct thread_master *master; #define DEBUG_EVENTS (1<<10) #define DEBUG_ZEBRA (1<<11) #define DEBUG_PACKET_DUMP (1<<12) +#define DEBUG_LSP_GEN (1<<13) +#define DEBUG_LSP_SCHED (1<<14) + +#define lsp_debug(...) \ + do \ + { \ + if (isis->debugs & DEBUG_LSP_GEN) \ + zlog_debug(__VA_ARGS__); \ + } \ + while (0) + +#define sched_debug(...) \ + do \ + { \ + if (isis->debugs & DEBUG_LSP_SCHED) \ + zlog_debug(__VA_ARGS__); \ + } \ + while (0) #endif /* ISISD_H */