X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=isisd%2Fisisd.h;h=bad930ddf394a9ca07fbbaa9bf360b11ae28474d;hb=8375020ac65337d0ba246c884af28a7c64bba540;hp=d1ad9f3b8e74ba91866d7893b2bbb9842a3a9a76;hpb=97610b589f6537f7c456bebcf81d0fc8b71b4778;p=mirror_frr.git diff --git a/isisd/isisd.h b/isisd/isisd.h index d1ad9f3b8..bad930ddf 100644 --- a/isisd/isisd.h +++ b/isisd/isisd.h @@ -28,17 +28,40 @@ #include "isisd/isis_constants.h" #include "isisd/isis_common.h" #include "isisd/isis_redist.h" +#include "isisd/isis_pdu_counter.h" +#include "isisd/isis_circuit.h" #include "isis_flags.h" #include "dict.h" #include "isis_memory.h" #include "qobj.h" +#ifdef FABRICD +static const bool fabricd = true; +#define PROTO_TYPE ZEBRA_ROUTE_OPENFABRIC +#define PROTO_NAME "openfabric" +#define PROTO_HELP "OpenFabric routing protocol\n" +#define PROTO_REDIST_STR FRR_REDIST_STR_FABRICD +#define PROTO_REDIST_HELP FRR_REDIST_HELP_STR_FABRICD +#define ROUTER_NODE OPENFABRIC_NODE +#else +static const bool fabricd = false; +#define PROTO_TYPE ZEBRA_ROUTE_ISIS +#define PROTO_NAME "isis" +#define PROTO_HELP "IS-IS routing protocol\n" +#define PROTO_REDIST_STR FRR_REDIST_STR_ISISD +#define PROTO_REDIST_HELP FRR_REDIST_HELP_STR_ISISD +#define ROUTER_NODE ISIS_NODE +extern void isis_cli_init(void); +#endif + extern struct zebra_privs_t isisd_privs; /* uncomment if you are a developer in bug hunt */ /* #define EXTREME_DEBUG */ /* #define EXTREME_DICT_DEBUG */ +struct fabricd; + struct isis { unsigned long process_id; int sysid_set; @@ -63,19 +86,36 @@ struct isis { extern struct isis *isis; DECLARE_QOBJ_TYPE(isis_area) +enum spf_tree_id { + SPFTREE_IPV4 = 0, + SPFTREE_IPV6, + SPFTREE_DSTSRC, + SPFTREE_COUNT +}; + +struct lsp_refresh_arg { + struct isis_area *area; + int level; +}; + +/* for yang configuration */ +enum isis_metric_style { + ISIS_NARROW_METRIC = 0, + ISIS_WIDE_METRIC, + ISIS_TRANSITION_METRIC, +}; + 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[ISIS_LEVELS]; /* IPv4 routes */ - struct isis_spftree *spftree6[ISIS_LEVELS]; /* The v6 SPTs */ - struct route_table *route_table6[ISIS_LEVELS]; /* IPv6 routes */ + struct isis_spftree *spftree[SPFTREE_COUNT][ISIS_LEVELS]; #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]; + struct timeval last_lsp_refresh_event[ISIS_LEVELS]; /* t_lsp_refresh is used in two ways: * a) regular refresh of LSPs * b) (possibly throttled) updates to LSPs @@ -89,6 +129,8 @@ struct isis_area { */ int lsp_regenerate_pending[ISIS_LEVELS]; + struct fabricd *fabricd; + /* * Configurables */ @@ -116,12 +158,15 @@ struct isis_area { uint16_t min_spf_interval[ISIS_LEVELS]; /* the percentage of LSP mtu size used, before generating a new frag */ int lsp_frag_threshold; + uint64_t lsp_gen_count[ISIS_LEVELS]; + uint64_t lsp_purge_count[ISIS_LEVELS]; int ip_circuits; /* logging adjacency changes? */ uint8_t log_adj_changes; /* multi topology settings */ struct list *mt_settings; int ipv6_circuits; + bool purge_originator; /* Counters */ uint32_t circuit_state_changes; struct isis_redist redist_settings[REDIST_PROTOCOL_COUNT] @@ -133,6 +178,12 @@ struct isis_area { parameters*/ struct thread *spf_timer[ISIS_LEVELS]; + struct lsp_refresh_arg lsp_refresh_arg[ISIS_LEVELS]; + + pdu_counter_t pdu_tx_counters; + pdu_counter_t pdu_rx_counters; + uint64_t lsp_rxmt_count; + QOBJ_FIELDS }; DECLARE_QOBJ_TYPE(isis_area) @@ -142,7 +193,12 @@ void isis_new(unsigned long); struct isis_area *isis_area_create(const char *); struct isis_area *isis_area_lookup(const char *); int isis_area_get(struct vty *vty, const char *area_tag); +int isis_area_destroy(const char *area_tag); void print_debug(struct vty *, int, int); +struct isis_lsp *lsp_for_arg(const char *argv, dict_t *lspdb); + +void isis_area_invalidate_routes(struct isis_area *area, int levels); +void isis_area_verify_routes(struct isis_area *area); void isis_area_overload_bit_set(struct isis_area *area, bool overload_bit); void isis_area_attached_bit_set(struct isis_area *area, bool attached_bit); @@ -161,26 +217,54 @@ int isis_area_passwd_cleartext_set(struct isis_area *area, int level, const char *passwd, uint8_t snp_auth); int isis_area_passwd_hmac_md5_set(struct isis_area *area, int level, const char *passwd, uint8_t snp_auth); -void isis_vty_init(void); +extern const struct frr_yang_module_info frr_isisd_info; +extern void isis_northbound_init(void); + +/* YANG northbound notifications */ +extern void isis_notif_db_overload(const struct isis_area *area, bool overload); +extern void isis_notif_lsp_too_large(const struct isis_circuit *circuit, + uint32_t pdu_size, const char *lsp_id); +extern void isis_notif_if_state_change(const struct isis_circuit *circuit, + bool down); +extern void isis_notif_corrupted_lsp(const struct isis_area *area, + const char *lsp_id); /* currently unused */ +extern void isis_notif_lsp_exceed_max(const struct isis_area *area, + const char *lsp_id); +extern void +isis_notif_max_area_addr_mismatch(const struct isis_circuit *circuit, + uint8_t max_area_addrs, const char *raw_pdu); +extern void +isis_notif_authentication_type_failure(const struct isis_circuit *circuit, + const char *raw_pdu); +extern void +isis_notif_authentication_failure(const struct isis_circuit *circuit, + const char *raw_pdu); +extern void isis_notif_adj_state_change(const struct isis_adjacency *adj, + int new_state, const char *reason); +extern void isis_notif_reject_adjacency(const struct isis_circuit *circuit, + const char *reason, + const char *raw_pdu); +extern void isis_notif_area_mismatch(const struct isis_circuit *circuit, + const char *raw_pdu); +extern void isis_notif_lsp_received(const struct isis_circuit *circuit, + const char *lsp_id, uint32_t seqno, + uint32_t timestamp, const char *sys_id); /* Master of threads. */ extern struct thread_master *master; #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) -#define DEBUG_ZEBRA (1<<11) -#define DEBUG_PACKET_DUMP (1<<12) -#define DEBUG_LSP_GEN (1<<13) -#define DEBUG_LSP_SCHED (1<<14) +#define DEBUG_SNP_PACKETS (1<<1) +#define DEBUG_UPDATE_PACKETS (1<<2) +#define DEBUG_SPF_EVENTS (1<<3) +#define DEBUG_RTE_EVENTS (1<<4) +#define DEBUG_EVENTS (1<<5) +#define DEBUG_PACKET_DUMP (1<<6) +#define DEBUG_LSP_GEN (1<<7) +#define DEBUG_LSP_SCHED (1<<8) +#define DEBUG_FLOODING (1<<9) +#define DEBUG_BFD (1<<10) +#define DEBUG_TX_QUEUE (1<<11) #define lsp_debug(...) \ do { \ @@ -194,7 +278,7 @@ extern struct thread_master *master; zlog_debug(__VA_ARGS__); \ } while (0) -#define DEBUG_TE (1<<13) +#define DEBUG_TE DEBUG_LSP_GEN #define IS_DEBUG_ISIS(x) (isis->debugs & x)