]>
git.proxmox.com Git - mirror_frr.git/blob - ospfd/ospf_route.h
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 along
18 * with this program; see the file COPYING; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 #ifndef _ZEBRA_OSPF_ROUTE_H
23 #define _ZEBRA_OSPF_ROUTE_H
25 #define OSPF_DESTINATION_ROUTER 1
26 #define OSPF_DESTINATION_NETWORK 2
27 #define OSPF_DESTINATION_DISCARD 3
29 #define OSPF_PATH_MIN 0
30 #define OSPF_PATH_INTRA_AREA 1
31 #define OSPF_PATH_INTER_AREA 2
32 #define OSPF_PATH_TYPE1_EXTERNAL 3
33 #define OSPF_PATH_TYPE2_EXTERNAL 4
34 #define OSPF_PATH_MAX 5
36 /* Segment Routing information to complement ospf_path structure */
37 struct sr_nexthop_info
{
38 /* Output label associated to this route */
39 mpls_label_t label_out
;
41 * Pointer to SR Node which is the next hop for this route
42 * or NULL if next hop is the destination of the prefix
44 struct sr_node
*nexthop
;
47 struct mpls_label_stack
*backup_label_stack
;
48 struct in_addr backup_nexthop
;
53 struct in_addr nexthop
;
54 struct in_addr adv_router
;
56 unsigned char unnumbered
;
57 struct sr_nexthop_info srni
;
60 /* Below is the structure linked to every
61 route node. Note that for Network routing
62 entries a single ospf_route is kept, while
63 for ABRs and ASBRs (Router routing entries),
64 we link an instance of ospf_router_route
65 where a list of paths is maintained, so
67 nr->info is a (struct ospf_route *) for OSPF_DESTINATION_NETWORK
69 nr->info is a (struct ospf_router_route *) for OSPF_DESTINATION_ROUTER
72 struct route_standard
{
73 /* Link Sate Origin. */
74 struct lsa_header
*origin
;
76 /* Associated Area. */
77 struct in_addr area_id
; /* The area the route belongs to */
82 /* Optional Capability. */
83 uint8_t options
; /* Get from LSA header. */
86 uint8_t flags
; /* From router-LSA */
89 struct route_external
{
90 /* Link State Origin. */
91 struct ospf_lsa
*origin
;
93 /* Link State Cost Type2. */
100 struct ospf_route
*asbr
;
104 /* Destination Type. */
107 /* Destination ID. */ /* i.e. Link State ID. */
111 struct in_addr mask
; /* Only valid for networks. */
119 /* Link State Cost. */
120 uint32_t cost
; /* i.e. metric. */
122 /* Route specific info. */
124 struct route_standard std
;
125 struct route_external ext
;
131 extern const char *ospf_path_type_name(int path_type
);
132 extern struct ospf_path
*ospf_path_new(void);
133 extern void ospf_path_free(struct ospf_path
*);
134 extern struct ospf_path
*ospf_path_lookup(struct list
*, struct ospf_path
*);
135 extern struct ospf_route
*ospf_route_new(void);
136 extern void ospf_route_free(struct ospf_route
*);
137 extern void ospf_route_delete(struct ospf
*, struct route_table
*);
138 extern void ospf_route_table_free(struct route_table
*);
140 extern void ospf_route_install(struct ospf
*, struct route_table
*);
141 extern void ospf_route_table_dump(struct route_table
*);
143 extern void ospf_intra_add_router(struct route_table
*, struct vertex
*,
146 extern void ospf_intra_add_transit(struct route_table
*, struct vertex
*,
149 extern void ospf_intra_add_stub(struct route_table
*, struct router_lsa_link
*,
150 struct vertex
*, struct ospf_area
*,
151 int parent_is_root
, int);
153 extern int ospf_route_cmp(struct ospf
*, struct ospf_route
*,
154 struct ospf_route
*);
155 extern void ospf_route_copy_nexthops(struct ospf_route
*, struct list
*);
156 extern void ospf_route_copy_nexthops_from_vertex(struct ospf_area
*area
,
160 extern void ospf_route_subst(struct route_node
*, struct ospf_route
*,
161 struct ospf_route
*);
162 extern void ospf_route_add(struct route_table
*, struct prefix_ipv4
*,
163 struct ospf_route
*, struct ospf_route
*);
165 extern void ospf_route_subst_nexthops(struct ospf_route
*, struct list
*);
166 extern void ospf_prune_unreachable_networks(struct route_table
*);
167 extern void ospf_prune_unreachable_routers(struct route_table
*);
168 extern int ospf_add_discard_route(struct ospf
*, struct route_table
*,
169 struct ospf_area
*, struct prefix_ipv4
*);
170 extern void ospf_delete_discard_route(struct ospf
*, struct route_table
*,
171 struct prefix_ipv4
*);
172 extern int ospf_route_match_same(struct route_table
*, struct prefix_ipv4
*,
173 struct ospf_route
*);
175 #endif /* _ZEBRA_OSPF_ROUTE_H */