]> git.proxmox.com Git - mirror_frr.git/blobdiff - ospfd/ospf_spf.h
lib: enforce vrf_name_to_id by returning default_vrf when name is null
[mirror_frr.git] / ospfd / ospf_spf.h
index 928d98b73b19ddbf608d0dfe5825a8f7217ee359..85f42bcd18292cf9d0d7f6d2cd9cfd109c1f1417 100644 (file)
  * 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 GNU Zebra; see the file COPYING.  If not, write to the Free
- * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
+ * You should have received a copy of the GNU General Public License along
+ * with this program; see the file COPYING; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#ifndef _QUAGGA_OSPF_SPF_H
+#define _QUAGGA_OSPF_SPF_H
+
 /* values for vertex->type */
 #define OSPF_VERTEX_ROUTER  1  /* for a Router-LSA */
 #define OSPF_VERTEX_NETWORK 2  /* for a Network-LSA */
 /* The "root" is the node running the SPF calculation */
 
 /* A router or network in an area */
-struct vertex
-{
-  u_char flags;
-  u_char type;         /* copied from LSA header */
-  struct in_addr id;   /* copied from LSA header */
-  struct lsa_header *lsa; /* Router or Network LSA */
-  u_int32_t distance;  /* from root to this vertex */
-  int backlink;        /* link index of back-link */
-  list child;          /* list of vertex: children in SPF tree*/
-  list nexthop;                /* list of vertex_nexthop from root to this vertex */
+struct vertex {
+       uint8_t flags;
+       uint8_t type;           /* copied from LSA header */
+       struct in_addr id;      /* copied from LSA header */
+       struct lsa_header *lsa; /* Router or Network LSA */
+       int *stat;              /* Link to LSA status. */
+       uint32_t distance;      /* from root to this vertex */
+       struct list *parents;   /* list of parents in SPF tree */
+       struct list *children;  /* list of children in SPF tree*/
 };
 
 /* A nexthop taken on the root node to get to this (parent) vertex */
-struct vertex_nexthop
-{
-  struct ospf_interface *oi;   /* output intf on root node */
-  struct in_addr router;       /* router address to send to */
-  struct vertex *parent;       /* parent in SPF tree */
+struct vertex_nexthop {
+       struct ospf_interface *oi; /* output intf on root node */
+       struct in_addr router;     /* router address to send to */
+};
+
+struct vertex_parent {
+       struct vertex_nexthop
+               *nexthop;      /* link to nexthop info for this parent */
+       struct vertex *parent; /* parent vertex */
+       int backlink;     /* index back to parent for router-lsa's */
 };
 
-void ospf_spf_calculate_schedule (struct ospf *);
-void ospf_rtrs_free (struct route_table *);
+/* What triggered the SPF ? */
+typedef enum {
+       SPF_FLAG_ROUTER_LSA_INSTALL = 1,
+       SPF_FLAG_NETWORK_LSA_INSTALL,
+       SPF_FLAG_SUMMARY_LSA_INSTALL,
+       SPF_FLAG_ASBR_SUMMARY_LSA_INSTALL,
+       SPF_FLAG_MAXAGE,
+       SPF_FLAG_ABR_STATUS_CHANGE,
+       SPF_FLAG_ASBR_STATUS_CHANGE,
+       SPF_FLAG_CONFIG_CHANGE,
+} ospf_spf_reason_t;
+
+extern void ospf_spf_calculate_schedule(struct ospf *, ospf_spf_reason_t);
+extern void ospf_rtrs_free(struct route_table *);
 
 /* void ospf_spf_calculate_timer_add (); */
+#endif /* _QUAGGA_OSPF_SPF_H */