isisd: add Google's changes to IS-IS
diff --git a/isisd/isis_spf.h b/isisd/isis_spf.h
index 6bdab2d..f31b510 100644
--- a/isisd/isis_spf.h
+++ b/isisd/isis_spf.h
@@ -54,25 +54,32 @@
     struct prefix prefix;
   } N;
 
-  struct isis_lsp *lsp;
   u_int32_t d_N;		/* d(N) Distance from this IS      */
   u_int16_t depth;		/* The depth in the imaginary tree */
-
-  struct list *Adj_N;		/* {Adj(N)}  */
+  struct list *Adj_N;		/* {Adj(N)} next hop or neighbor list */
+  struct list *parents;         /* list of parents for ECMP */
+  struct list *children;        /* list of children used for tree dump */
 };
 
 struct isis_spftree
 {
   struct thread *t_spf;		/* spf threads */
-  time_t lastrun;		/* for scheduling */
-  int pending;			/* already scheduled */
   struct list *paths;		/* the SPT */
   struct list *tents;		/* TENT */
-
-  u_int32_t timerun;		/* statistics */
+  struct isis_area *area;       /* back pointer to area */
+  int pending;			/* already scheduled */
+  time_t lastrun;		/* for scheduling */
+  unsigned int runcount;        /* number of runs since uptime */
 };
 
+struct isis_spftree * isis_spftree_new (struct isis_area *area);
+void isis_spftree_del (struct isis_spftree *spftree);
+void isis_spftree_adj_del (struct isis_spftree *spftree,
+                           struct isis_adjacency *adj);
 void spftree_area_init (struct isis_area *area);
+void spftree_area_del (struct isis_area *area);
+void spftree_area_adj_del (struct isis_area *area,
+                           struct isis_adjacency *adj);
 int isis_spf_schedule (struct isis_area *area, int level);
 void isis_spf_cmds_init (void);
 #ifdef HAVE_IPV6