summaryrefslogtreecommitdiff
path: root/ospf6d/ospf6_route.h
diff options
context:
space:
mode:
Diffstat (limited to 'ospf6d/ospf6_route.h')
-rw-r--r--ospf6d/ospf6_route.h209
1 files changed, 209 insertions, 0 deletions
diff --git a/ospf6d/ospf6_route.h b/ospf6d/ospf6_route.h
new file mode 100644
index 00000000..71b2562b
--- /dev/null
+++ b/ospf6d/ospf6_route.h
@@ -0,0 +1,209 @@
+/*
+ * Copyright (C) 1999 Yasuhiro Ohara
+ *
+ * This file is part of GNU Zebra.
+ *
+ * GNU Zebra is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2, or (at your option) any
+ * later version.
+ *
+ * GNU Zebra is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * 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.
+ */
+
+#ifndef OSPF6_ROUTE_H
+#define OSPF6_ROUTE_H
+
+#include "ospf6_hook.h"
+#include "ospf6_linklist.h"
+
+struct ospf6_route_table
+{
+ char name[128];
+
+ int freeze;
+
+ /* radix tree */
+ struct route_table *table;
+
+ /* list of hooks */
+ struct linklist *hook_list[3];
+ void (*hook_add) (void *);
+ void (*hook_change) (void *);
+ void (*hook_remove) (void *);
+
+ u_int32_t route_id;
+};
+
+
+
+struct ospf6_route
+{
+ /* Destination ID */
+ struct prefix prefix;
+
+ /* Destination Type */
+ u_char type;
+};
+
+/* Path */
+struct ls_origin
+{
+ u_int16_t type;
+ u_int32_t id;
+ u_int32_t adv_router;
+};
+
+struct ospf6_path
+{
+ /* Link State Origin */
+ struct ls_origin origin;
+
+ /* Router bits */
+ u_char router_bits;
+
+ /* Optional Capabilities */
+ u_char capability[3];
+
+ /* Prefix Options */
+ u_char prefix_options;
+
+ /* Associated Area */
+ u_int32_t area_id;
+
+ /* Path-type */
+ u_char type;
+
+ /* Cost */
+ u_int8_t metric_type;
+ u_int32_t cost;
+ u_int32_t cost_e2;
+};
+
+/* Nexthop */
+struct ospf6_nexthop
+{
+ /* Interface index */
+ unsigned int ifindex;
+
+ /* IP address, if any */
+ struct in6_addr address;
+};
+
+struct ospf6_route_node
+{
+ struct ospf6_route_table *table;
+ int count;
+ u_int32_t route_id;
+
+ struct route_node *route_node;
+ struct ospf6_route route;
+ struct linklist *path_list;
+};
+
+struct ospf6_path_node
+{
+ struct ospf6_route_node *route_node;
+ struct ospf6_path path;
+ struct linklist *nexthop_list;
+};
+
+struct ospf6_nexthop_node
+{
+ int flag;
+ struct timeval installed;
+
+ struct ospf6_path_node *path_node;
+ struct ospf6_nexthop nexthop;
+};
+
+struct ospf6_route_req
+{
+ struct ospf6_route_table *table;
+ struct route_node *route_node;
+ struct linklist_node path_lnode;
+ struct linklist_node nexthop_lnode;
+ u_int32_t route_id;
+
+ int count;
+ struct ospf6_route route;
+ struct ospf6_path path;
+ struct ospf6_nexthop nexthop;
+};
+
+#define OSPF6_DEST_TYPE_NONE 0
+#define OSPF6_DEST_TYPE_ROUTER 1
+#define OSPF6_DEST_TYPE_NETWORK 2
+#define OSPF6_DEST_TYPE_DISCARD 3
+#define OSPF6_DEST_TYPE_MAX 4
+
+#define OSPF6_PATH_TYPE_NONE 0
+#define OSPF6_PATH_TYPE_INTRA 1
+#define OSPF6_PATH_TYPE_INTER 2
+#define OSPF6_PATH_TYPE_EXTERNAL1 3
+#define OSPF6_PATH_TYPE_EXTERNAL2 4
+#define OSPF6_PATH_TYPE_ZOFFSET 5
+#define OSPF6_PATH_TYPE_ZSYSTEM (OSPF6_PATH_TYPE_ZOFFSET + ZEBRA_ROUTE_SYSTEM)
+#define OSPF6_PATH_TYPE_ZKERNEL (OSPF6_PATH_TYPE_ZOFFSET + ZEBRA_ROUTE_KERNEL)
+#define OSPF6_PATH_TYPE_ZCONNECT (OSPF6_PATH_TYPE_ZOFFSET + ZEBRA_ROUTE_CONNECT)
+#define OSPF6_PATH_TYPE_ZSTATIC (OSPF6_PATH_TYPE_ZOFFSET + ZEBRA_ROUTE_STATIC)
+#define OSPF6_PATH_TYPE_ZRIP (OSPF6_PATH_TYPE_ZOFFSET + ZEBRA_ROUTE_RIP)
+#define OSPF6_PATH_TYPE_ZRIPNG (OSPF6_PATH_TYPE_ZOFFSET + ZEBRA_ROUTE_RIPNG)
+#define OSPF6_PATH_TYPE_ZOSPF (OSPF6_PATH_TYPE_ZOFFSET + ZEBRA_ROUTE_OSPF)
+#define OSPF6_PATH_TYPE_ZOSPF6 (OSPF6_PATH_TYPE_ZOFFSET + ZEBRA_ROUTE_OSPF6)
+#define OSPF6_PATH_TYPE_ZBGP (OSPF6_PATH_TYPE_ZOFFSET + ZEBRA_ROUTE_BGP)
+#define OSPF6_PATH_TYPE_MAX (OSPF6_PATH_TYPE_ZOFFSET + ZEBRA_ROUTE_MAX)
+
+#define OSPF6_ROUTE_FLAG_ROUTE_CHANGE 0x01
+#define OSPF6_ROUTE_FLAG_PATH_CHANGE 0x02
+#define OSPF6_ROUTE_FLAG_ADD 0x04
+#define OSPF6_ROUTE_FLAG_REMOVE 0x08
+#define OSPF6_ROUTE_FLAG_CHANGE 0x10
+
+int ospf6_route_lookup (struct ospf6_route_req *request,
+ struct prefix *prefix,
+ struct ospf6_route_table *table);
+void ospf6_route_head (struct ospf6_route_req *request,
+ struct ospf6_route_table *table);
+int ospf6_route_end (struct ospf6_route_req *request);
+void ospf6_route_next (struct ospf6_route_req *request);
+
+void ospf6_route_add (struct ospf6_route_req *, struct ospf6_route_table *);
+void ospf6_route_remove (struct ospf6_route_req *, struct ospf6_route_table *);
+void ospf6_route_remove_all (struct ospf6_route_table *);
+
+struct ospf6_route_table *ospf6_route_table_create ();
+void ospf6_route_table_delete (struct ospf6_route_table *);
+
+void ospf6_route_table_freeze (struct ospf6_route_table *);
+void ospf6_route_table_thaw (struct ospf6_route_table *);
+
+void ospf6_route_log_request (char *what, char *where,
+ struct ospf6_route_req *request);
+
+void
+ospf6_route_hook_register (void (*add) (struct ospf6_route_req *),
+ void (*change) (struct ospf6_route_req *),
+ void (*remove) (struct ospf6_route_req *),
+ struct ospf6_route_table *table);
+void
+ospf6_route_hook_unregister (void (*add) (struct ospf6_route_req *),
+ void (*change) (struct ospf6_route_req *),
+ void (*remove) (struct ospf6_route_req *),
+ struct ospf6_route_table *table);
+
+void ospf6_route_init ();
+
+int ospf6_route_table_show (struct vty *, int, char **,
+ struct ospf6_route_table *);
+
+#endif /* OSPF6_ROUTE_H */
+