3 * Copyright (C) 1999, 2000 Toshiaki Takada
5 * This file is part of GNU Zebra.
7 * GNU Zebra is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2, or (at your option) any
12 * GNU Zebra is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with GNU Zebra; see the file COPYING. If not, write to the Free
19 * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
23 #ifndef _ZEBRA_OSPF_ROUTE_H
24 #define _ZEBRA_OSPF_ROUTE_H
26 #define OSPF_DESTINATION_ROUTER 1
27 #define OSPF_DESTINATION_NETWORK 2
28 #define OSPF_DESTINATION_DISCARD 3
30 #define OSPF_PATH_MIN 0
31 #define OSPF_PATH_INTRA_AREA 1
32 #define OSPF_PATH_INTER_AREA 2
33 #define OSPF_PATH_TYPE1_EXTERNAL 3
34 #define OSPF_PATH_TYPE2_EXTERNAL 4
35 #define OSPF_PATH_MAX 5
40 struct in_addr nexthop
;
41 struct in_addr adv_router
;
42 struct ospf_interface
*oi
;
45 /* Below is the structure linked to every
46 route node. Note that for Network routing
47 entries a single ospf_route is kept, while
48 for ABRs and ASBRs (Router routing entries),
49 we link an instance of ospf_router_route
50 where a list of paths is maintained, so
52 nr->info is a (struct ospf_route *) for OSPF_DESTINATION_NETWORK
54 nr->info is a (struct ospf_router_route *) for OSPF_DESTINATION_ROUTER
59 /* Link Sate Origin. */
60 struct lsa_header
*origin
;
62 /* Associated Area. */
63 struct in_addr area_id
; /* The area the route belongs to */
68 /* Optional Capability. */
69 u_char options
; /* Get from LSA header. */
72 u_char flags
; /* From router-LSA */
77 /* Link State Origin. */
78 struct ospf_lsa
*origin
;
80 /* Link State Cost Type2. */
87 struct ospf_route
*asbr
;
98 /* Destination Type. */
101 /* Destination ID. */ /* i.e. Link State ID. */
105 struct in_addr mask
; /* Only valid for networks. */
113 /* Link State Cost. */
114 u_int32_t cost
; /* i.e. metric. */
116 /* Route specific info. */
119 struct route_standard std
;
120 struct route_external ext
;
124 extern struct ospf_path
*ospf_path_new (void);
125 extern void ospf_path_free (struct ospf_path
*);
126 extern struct ospf_path
*ospf_path_lookup (struct list
*, struct ospf_path
*);
127 extern struct ospf_route
*ospf_route_new (void);
128 extern void ospf_route_free (struct ospf_route
*);
129 extern void ospf_route_delete (struct route_table
*);
130 extern void ospf_route_table_free (struct route_table
*);
132 extern void ospf_route_install (struct ospf
*, struct route_table
*);
133 extern void ospf_route_table_dump (struct route_table
*);
135 extern void ospf_intra_add_router (struct route_table
*, struct vertex
*,
138 extern void ospf_intra_add_transit (struct route_table
*, struct vertex
*,
141 extern void ospf_intra_add_stub (struct route_table
*,
142 struct router_lsa_link
*, struct vertex
*,
145 extern int ospf_route_cmp (struct ospf
*, struct ospf_route
*,
146 struct ospf_route
*);
147 extern void ospf_route_copy_nexthops (struct ospf_route
*, struct list
*);
148 extern void ospf_route_copy_nexthops_from_vertex (struct ospf_route
*,
151 extern void ospf_route_subst (struct route_node
*, struct ospf_route
*,
152 struct ospf_route
*);
153 extern void ospf_route_add (struct route_table
*, struct prefix_ipv4
*,
154 struct ospf_route
*, struct ospf_route
*);
156 extern void ospf_route_subst_nexthops (struct ospf_route
*, struct list
*);
157 extern void ospf_prune_unreachable_networks (struct route_table
*);
158 extern void ospf_prune_unreachable_routers (struct route_table
*);
159 extern int ospf_add_discard_route (struct route_table
*, struct ospf_area
*,
160 struct prefix_ipv4
*);
161 extern void ospf_delete_discard_route (struct prefix_ipv4
*);
162 extern int ospf_route_match_same (struct route_table
*, struct prefix_ipv4
*,
163 struct ospf_route
*);
165 #endif /* _ZEBRA_OSPF_ROUTE_H */