summaryrefslogtreecommitdiffstats
path: root/ospf6d/ospf6_spf.h
diff options
context:
space:
mode:
authorDinesh Dutt <ddutt@cumulusnetworks.com>2013-08-26 03:40:23 +0000
committerDavid Lamparter <equinox@opensourcerouting.org>2013-11-07 18:15:43 -0800
commita0edf6740e8203abec1ee3efa344a417c16fec7b (patch)
tree501efcc33069c129987ac1ec98dd0656ad67e278 /ospf6d/ospf6_spf.h
parent3d35ca482babab4267570143b8327fc894df0ff8 (diff)
downloadquagga-a0edf6740e8203abec1ee3efa344a417c16fec7b.tar.bz2
quagga-a0edf6740e8203abec1ee3efa344a417c16fec7b.tar.xz
ospf6d: add SPF logs, statistics, and display of SPF parameters
Signed-off-by: Pradosh Mohapatra <pmohapat at cumulusnetworks.com> Reviewed-by: Scott Feldman <sfeldma at cumulusnetworks.com> [DL: adapted to rebase / readded randomly lost line] [DL: killed timeval_subtract] Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'ospf6d/ospf6_spf.h')
-rw-r--r--ospf6d/ospf6_spf.h69
1 files changed, 68 insertions, 1 deletions
diff --git a/ospf6d/ospf6_spf.h b/ospf6d/ospf6_spf.h
index 6c40424f..b3481dc3 100644
--- a/ospf6d/ospf6_spf.h
+++ b/ospf6d/ospf6_spf.h
@@ -79,11 +79,77 @@ struct ospf6_vertex
#define VERTEX_IS_TYPE(t, v) \
((v)->type == OSPF6_VERTEX_TYPE_ ## t ? 1 : 0)
+/* What triggered the SPF? */
+#define OSPF6_SPF_FLAGS_ROUTER_LSA_ADDED (1 << 0)
+#define OSPF6_SPF_FLAGS_ROUTER_LSA_REMOVED (1 << 1)
+#define OSPF6_SPF_FLAGS_NETWORK_LSA_ADDED (1 << 2)
+#define OSPF6_SPF_FLAGS_NETWORK_LSA_REMOVED (1 << 3)
+#define OSPF6_SPF_FLAGS_LINK_LSA_ADDED (1 << 4)
+#define OSPF6_SPF_FLAGS_LINK_LSA_REMOVED (1 << 5)
+#define OSPF6_SPF_FLAGS_ROUTER_LSA_ORIGINATED (1 << 6)
+#define OSPF6_SPF_FLAGS_NETWORK_LSA_ORIGINATED (1 << 7)
+
+static inline void
+ospf6_set_spf_reason (struct ospf6* ospf, unsigned int reason)
+{
+ ospf->spf_reason |= reason;
+}
+
+static inline void
+ospf6_reset_spf_reason (struct ospf6 *ospf)
+{
+ ospf->spf_reason = 0;
+}
+
+static inline unsigned int
+ospf6_lsadd_to_spf_reason (struct ospf6_lsa *lsa)
+{
+ unsigned int reason = 0;
+
+ switch (ntohs (lsa->header->type))
+ {
+ case OSPF6_LSTYPE_ROUTER:
+ reason = OSPF6_SPF_FLAGS_ROUTER_LSA_ADDED;
+ break;
+ case OSPF6_LSTYPE_NETWORK:
+ reason = OSPF6_SPF_FLAGS_NETWORK_LSA_ADDED;
+ break;
+ case OSPF6_LSTYPE_LINK:
+ reason = OSPF6_SPF_FLAGS_LINK_LSA_ADDED;
+ break;
+ default:
+ break;
+ }
+ return (reason);
+}
+
+static inline unsigned int
+ospf6_lsremove_to_spf_reason (struct ospf6_lsa *lsa)
+{
+ unsigned int reason = 0;
+
+ switch (ntohs (lsa->header->type))
+ {
+ case OSPF6_LSTYPE_ROUTER:
+ reason = OSPF6_SPF_FLAGS_ROUTER_LSA_REMOVED;
+ break;
+ case OSPF6_LSTYPE_NETWORK:
+ reason = OSPF6_SPF_FLAGS_NETWORK_LSA_REMOVED;
+ break;
+ case OSPF6_LSTYPE_LINK:
+ reason = OSPF6_SPF_FLAGS_LINK_LSA_REMOVED;
+ break;
+ default:
+ break;
+ }
+ return (reason);
+}
+
extern void ospf6_spf_table_finish (struct ospf6_route_table *result_table);
extern void ospf6_spf_calculation (u_int32_t router_id,
struct ospf6_route_table *result_table,
struct ospf6_area *oa);
-extern void ospf6_spf_schedule (struct ospf6 *ospf);
+extern void ospf6_spf_schedule (struct ospf6 *ospf, unsigned int reason);
extern void ospf6_spf_display_subtree (struct vty *vty, const char *prefix,
int rest, struct ospf6_vertex *v);
@@ -92,6 +158,7 @@ extern void ospf6_spf_config_write (struct vty *vty);
extern int config_write_ospf6_debug_spf (struct vty *vty);
extern void install_element_ospf6_debug_spf (void);
extern void ospf6_spf_init (void);
+extern void ospf6_spf_reason_string (unsigned int reason, char *buf, int size);
#endif /* OSPF6_SPF_H */