]>
git.proxmox.com Git - mirror_frr.git/blob - ospfd/ospf_route.h
1 // SPDX-License-Identifier: GPL-2.0-or-later
4 * Copyright (C) 1999, 2000 Toshiaki Takada
7 #ifndef _ZEBRA_OSPF_ROUTE_H
8 #define _ZEBRA_OSPF_ROUTE_H
10 #define OSPF_DESTINATION_ROUTER 1
11 #define OSPF_DESTINATION_NETWORK 2
12 #define OSPF_DESTINATION_DISCARD 3
14 #define OSPF_PATH_MIN 0
15 #define OSPF_PATH_INTRA_AREA 1
16 #define OSPF_PATH_INTER_AREA 2
17 #define OSPF_PATH_TYPE1_EXTERNAL 3
18 #define OSPF_PATH_TYPE2_EXTERNAL 4
19 #define OSPF_PATH_MAX 5
21 /* Segment Routing information to complement ospf_path structure */
22 struct sr_nexthop_info
{
23 /* Output label associated to this route */
24 mpls_label_t label_out
;
26 * Pointer to SR Node which is the next hop for this route
27 * or NULL if next hop is the destination of the prefix
29 struct sr_node
*nexthop
;
32 struct mpls_label_stack
*backup_label_stack
;
33 struct in_addr backup_nexthop
;
38 struct in_addr nexthop
;
39 struct in_addr adv_router
;
41 unsigned char unnumbered
;
42 struct sr_nexthop_info srni
;
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
57 struct route_standard
{
58 /* Link Sate Origin. */
59 struct lsa_header
*origin
;
61 /* Associated Area. */
62 struct in_addr area_id
; /* The area the route belongs to */
67 /* Optional Capability. */
68 uint8_t options
; /* Get from LSA header. */
71 uint8_t flags
; /* From router-LSA */
74 struct route_external
{
75 /* Link State Origin. */
76 struct ospf_lsa
*origin
;
78 /* Link State Cost Type2. */
85 struct ospf_route
*asbr
;
89 /* Destination Type. */
92 /* Destination ID. */ /* i.e. Link State ID. */
96 struct in_addr mask
; /* Only valid for networks. */
104 /* Link State Cost. */
105 uint32_t cost
; /* i.e. metric. */
107 /* Route specific info. */
109 struct route_standard std
;
110 struct route_external ext
;
116 extern const char *ospf_path_type_name(int path_type
);
117 extern struct ospf_path
*ospf_path_new(void);
118 extern void ospf_path_free(struct ospf_path
*);
119 extern struct ospf_path
*ospf_path_lookup(struct list
*, struct ospf_path
*);
120 extern struct ospf_route
*ospf_route_new(void);
121 extern void ospf_route_free(struct ospf_route
*);
122 extern void ospf_route_delete(struct ospf
*, struct route_table
*);
123 extern void ospf_route_table_free(struct route_table
*);
125 extern void ospf_route_install(struct ospf
*, struct route_table
*);
126 extern void ospf_route_table_dump(struct route_table
*);
127 extern void ospf_router_route_table_dump(struct route_table
*rt
);
129 extern void ospf_intra_add_router(struct route_table
*rt
, struct vertex
*v
,
130 struct ospf_area
*area
, bool add_all
);
132 extern void ospf_intra_add_transit(struct route_table
*, struct vertex
*,
135 extern void ospf_intra_add_stub(struct route_table
*, struct router_lsa_link
*,
136 struct vertex
*, struct ospf_area
*,
137 int parent_is_root
, int);
139 extern int ospf_route_cmp(struct ospf
*, struct ospf_route
*,
140 struct ospf_route
*);
141 extern void ospf_route_copy_nexthops(struct ospf_route
*, struct list
*);
142 extern void ospf_route_copy_nexthops_from_vertex(struct ospf_area
*area
,
146 extern void ospf_route_subst(struct route_node
*, struct ospf_route
*,
147 struct ospf_route
*);
148 extern void ospf_route_add(struct route_table
*, struct prefix_ipv4
*,
149 struct ospf_route
*, struct ospf_route
*);
151 extern void ospf_route_subst_nexthops(struct ospf_route
*, struct list
*);
152 extern void ospf_prune_unreachable_networks(struct route_table
*);
153 extern void ospf_prune_unreachable_routers(struct route_table
*);
154 extern int ospf_add_discard_route(struct ospf
*, struct route_table
*,
155 struct ospf_area
*, struct prefix_ipv4
*);
156 extern void ospf_delete_discard_route(struct ospf
*, struct route_table
*,
157 struct prefix_ipv4
*);
158 extern int ospf_route_match_same(struct route_table
*, struct prefix_ipv4
*,
159 struct ospf_route
*);
161 #endif /* _ZEBRA_OSPF_ROUTE_H */