paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 1 | /* |
| 2 | * OSPF Link State Advertisement |
| 3 | * Copyright (C) 1999, 2000 Toshiaki Takada |
| 4 | * |
| 5 | * This file is part of GNU Zebra. |
| 6 | * |
| 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 |
| 10 | * later version. |
| 11 | * |
| 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. |
| 16 | * |
| 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 |
| 20 | * 02111-1307, USA. |
| 21 | */ |
| 22 | |
| 23 | #ifndef _ZEBRA_OSPF_LSA_H |
| 24 | #define _ZEBRA_OSPF_LSA_H |
| 25 | |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 26 | #include "stream.h" |
| 27 | |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 28 | /* OSPF LSA Range definition. */ |
| 29 | #define OSPF_MIN_LSA 1 /* begin range here */ |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 30 | #define OSPF_MAX_LSA 12 |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 31 | |
| 32 | /* OSPF LSA Type definition. */ |
| 33 | #define OSPF_UNKNOWN_LSA 0 |
| 34 | #define OSPF_ROUTER_LSA 1 |
| 35 | #define OSPF_NETWORK_LSA 2 |
| 36 | #define OSPF_SUMMARY_LSA 3 |
| 37 | #define OSPF_ASBR_SUMMARY_LSA 4 |
| 38 | #define OSPF_AS_EXTERNAL_LSA 5 |
| 39 | #define OSPF_GROUP_MEMBER_LSA 6 /* Not supported. */ |
| 40 | #define OSPF_AS_NSSA_LSA 7 |
| 41 | #define OSPF_EXTERNAL_ATTRIBUTES_LSA 8 /* Not supported. */ |
| 42 | #define OSPF_OPAQUE_LINK_LSA 9 |
| 43 | #define OSPF_OPAQUE_AREA_LSA 10 |
| 44 | #define OSPF_OPAQUE_AS_LSA 11 |
| 45 | |
paul | 779adb0 | 2006-01-18 15:07:38 +0000 | [diff] [blame] | 46 | #define OSPF_LSA_HEADER_SIZE 20U |
| 47 | #define OSPF_ROUTER_LSA_LINK_SIZE 12U |
Denis Ovsienko | 05b7709 | 2011-08-23 11:36:27 +0400 | [diff] [blame] | 48 | #define OSPF_ROUTER_LSA_TOS_SIZE 4U |
paul | 779adb0 | 2006-01-18 15:07:38 +0000 | [diff] [blame] | 49 | #define OSPF_MAX_LSA_SIZE 1500U |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 50 | |
| 51 | /* AS-external-LSA refresh method. */ |
| 52 | #define LSA_REFRESH_IF_CHANGED 0 |
| 53 | #define LSA_REFRESH_FORCE 1 |
| 54 | |
| 55 | /* OSPF LSA header. */ |
| 56 | struct lsa_header |
| 57 | { |
| 58 | u_int16_t ls_age; |
| 59 | u_char options; |
| 60 | u_char type; |
| 61 | struct in_addr id; |
| 62 | struct in_addr adv_router; |
paul | 6c83567 | 2004-10-11 11:00:30 +0000 | [diff] [blame] | 63 | u_int32_t ls_seqnum; |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 64 | u_int16_t checksum; |
| 65 | u_int16_t length; |
| 66 | }; |
| 67 | |
| 68 | /* OSPF LSA. */ |
| 69 | struct ospf_lsa |
| 70 | { |
| 71 | /* LSA origination flag. */ |
| 72 | u_char flags; |
| 73 | #define OSPF_LSA_SELF 0x01 |
| 74 | #define OSPF_LSA_SELF_CHECKED 0x02 |
| 75 | #define OSPF_LSA_RECEIVED 0x04 |
| 76 | #define OSPF_LSA_APPROVED 0x08 |
| 77 | #define OSPF_LSA_DISCARD 0x10 |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 78 | #define OSPF_LSA_LOCAL_XLT 0x20 |
paul | 7ddf1d6 | 2003-10-13 09:06:46 +0000 | [diff] [blame] | 79 | #define OSPF_LSA_PREMATURE_AGE 0x40 |
Stephen Hemminger | 3106a03 | 2009-08-06 12:58:05 -0700 | [diff] [blame] | 80 | #define OSPF_LSA_IN_MAXAGE 0x80 |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 81 | |
| 82 | /* LSA data. */ |
| 83 | struct lsa_header *data; |
| 84 | |
| 85 | /* Received time stamp. */ |
| 86 | struct timeval tv_recv; |
| 87 | |
| 88 | /* Last time it was originated */ |
| 89 | struct timeval tv_orig; |
| 90 | |
| 91 | /* All of reference count, also lock to remove. */ |
| 92 | int lock; |
| 93 | |
hasso | 462f20d | 2005-02-23 11:29:02 +0000 | [diff] [blame] | 94 | /* Flags for the SPF calculation. */ |
| 95 | int stat; |
| 96 | #define LSA_SPF_NOT_EXPLORED -1 |
| 97 | #define LSA_SPF_IN_SPFTREE -2 |
| 98 | /* If stat >= 0, stat is LSA position in candidates heap. */ |
| 99 | |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 100 | /* References to this LSA in neighbor retransmission lists*/ |
| 101 | int retransmit_counter; |
| 102 | |
| 103 | /* Area the LSA belongs to, may be NULL if AS-external-LSA. */ |
| 104 | struct ospf_area *area; |
| 105 | |
| 106 | /* Parent LSDB. */ |
| 107 | struct ospf_lsdb *lsdb; |
| 108 | |
| 109 | /* Related Route. */ |
| 110 | void *route; |
| 111 | |
| 112 | /* Refreshement List or Queue */ |
| 113 | int refresh_list; |
Paul Jakma | d71ea65 | 2011-03-22 15:23:55 +0000 | [diff] [blame] | 114 | |
| 115 | /* For Type-9 Opaque-LSAs */ |
| 116 | struct ospf_interface *oi; |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 117 | }; |
| 118 | |
| 119 | /* OSPF LSA Link Type. */ |
| 120 | #define LSA_LINK_TYPE_POINTOPOINT 1 |
| 121 | #define LSA_LINK_TYPE_TRANSIT 2 |
| 122 | #define LSA_LINK_TYPE_STUB 3 |
| 123 | #define LSA_LINK_TYPE_VIRTUALLINK 4 |
| 124 | |
| 125 | /* OSPF Router LSA Flag. */ |
| 126 | #define ROUTER_LSA_BORDER 0x01 /* The router is an ABR */ |
| 127 | #define ROUTER_LSA_EXTERNAL 0x02 /* The router is an ASBR */ |
| 128 | #define ROUTER_LSA_VIRTUAL 0x04 /* The router has a VL in this area */ |
paul | 0c9491b | 2003-06-22 08:23:01 +0000 | [diff] [blame] | 129 | #define ROUTER_LSA_NT 0x10 /* The routers always translates Type-7 */ |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 130 | #define ROUTER_LSA_SHORTCUT 0x20 /* Shortcut-ABR specific flag */ |
| 131 | |
| 132 | #define IS_ROUTER_LSA_VIRTUAL(x) ((x)->flags & ROUTER_LSA_VIRTUAL) |
| 133 | #define IS_ROUTER_LSA_EXTERNAL(x) ((x)->flags & ROUTER_LSA_EXTERNAL) |
| 134 | #define IS_ROUTER_LSA_BORDER(x) ((x)->flags & ROUTER_LSA_BORDER) |
| 135 | #define IS_ROUTER_LSA_SHORTCUT(x) ((x)->flags & ROUTER_LSA_SHORTCUT) |
paul | 0c9491b | 2003-06-22 08:23:01 +0000 | [diff] [blame] | 136 | #define IS_ROUTER_LSA_NT(x) ((x)->flags & ROUTER_LSA_NT) |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 137 | |
| 138 | /* OSPF Router-LSA Link information. */ |
| 139 | struct router_lsa_link |
| 140 | { |
| 141 | struct in_addr link_id; |
| 142 | struct in_addr link_data; |
| 143 | struct |
| 144 | { |
| 145 | u_char type; |
| 146 | u_char tos_count; |
| 147 | u_int16_t metric; |
| 148 | } m[1]; |
| 149 | }; |
| 150 | |
| 151 | /* OSPF Router-LSAs structure. */ |
Denis Ovsienko | a25a44d | 2012-04-03 20:33:24 +0400 | [diff] [blame] | 152 | #define OSPF_ROUTER_LSA_MIN_SIZE 4U /* w/0 link descriptors */ |
| 153 | /* There is an edge case, when number of links in a Router-LSA may be 0 without |
| 154 | breaking the specification. A router, which has no other links to backbone |
| 155 | area besides one virtual link, will not put any VL descriptor blocks into |
| 156 | the Router-LSA generated for area 0 until a full adjacency over the VL is |
| 157 | reached (RFC2328 12.4.1.3). In this case the Router-LSA initially received |
| 158 | by the other end of the VL will have 0 link descriptor blocks, but soon will |
| 159 | be replaced with the next revision having 1 descriptor block. */ |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 160 | struct router_lsa |
| 161 | { |
| 162 | struct lsa_header header; |
| 163 | u_char flags; |
| 164 | u_char zero; |
| 165 | u_int16_t links; |
| 166 | struct |
| 167 | { |
| 168 | struct in_addr link_id; |
| 169 | struct in_addr link_data; |
| 170 | u_char type; |
| 171 | u_char tos; |
| 172 | u_int16_t metric; |
| 173 | } link[1]; |
| 174 | }; |
| 175 | |
| 176 | /* OSPF Network-LSAs structure. */ |
Denis Ovsienko | 4e31de7 | 2012-02-17 16:20:50 +0400 | [diff] [blame] | 177 | #define OSPF_NETWORK_LSA_MIN_SIZE 8U /* w/1 router-ID */ |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 178 | struct network_lsa |
| 179 | { |
| 180 | struct lsa_header header; |
| 181 | struct in_addr mask; |
| 182 | struct in_addr routers[1]; |
| 183 | }; |
| 184 | |
| 185 | /* OSPF Summary-LSAs structure. */ |
Denis Ovsienko | 4e31de7 | 2012-02-17 16:20:50 +0400 | [diff] [blame] | 186 | #define OSPF_SUMMARY_LSA_MIN_SIZE 8U /* w/1 TOS metric block */ |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 187 | struct summary_lsa |
| 188 | { |
| 189 | struct lsa_header header; |
| 190 | struct in_addr mask; |
| 191 | u_char tos; |
| 192 | u_char metric[3]; |
| 193 | }; |
| 194 | |
| 195 | /* OSPF AS-external-LSAs structure. */ |
Denis Ovsienko | 4e31de7 | 2012-02-17 16:20:50 +0400 | [diff] [blame] | 196 | #define OSPF_AS_EXTERNAL_LSA_MIN_SIZE 16U /* w/1 TOS forwarding block */ |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 197 | struct as_external_lsa |
| 198 | { |
| 199 | struct lsa_header header; |
| 200 | struct in_addr mask; |
| 201 | struct |
| 202 | { |
| 203 | u_char tos; |
| 204 | u_char metric[3]; |
| 205 | struct in_addr fwd_addr; |
| 206 | u_int32_t route_tag; |
| 207 | } e[1]; |
| 208 | }; |
| 209 | |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 210 | #include "ospfd/ospf_opaque.h" |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 211 | |
| 212 | /* Macros. */ |
| 213 | #define GET_METRIC(x) get_metric(x) |
| 214 | #define IS_EXTERNAL_METRIC(x) ((x) & 0x80) |
| 215 | |
| 216 | #define GET_AGE(x) (ntohs ((x)->data->ls_age) + time (NULL) - (x)->tv_recv) |
| 217 | #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? \ |
| 218 | OSPF_LSA_MAXAGE : get_age(x)) |
| 219 | #define IS_LSA_SELF(L) (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF)) |
| 220 | #define IS_LSA_MAXAGE(L) (LS_AGE ((L)) == OSPF_LSA_MAXAGE) |
| 221 | |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 222 | #define OSPF_LSA_UPDATE_DELAY 2 |
| 223 | |
| 224 | #define OSPF_LSA_UPDATE_TIMER_ON(T,F) \ |
| 225 | if (!(T)) \ |
| 226 | (T) = thread_add_timer (master, (F), 0, 2) |
| 227 | |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 228 | /* Prototypes. */ |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 229 | /* XXX: Eek, time functions, similar are in lib/thread.c */ |
| 230 | extern struct timeval tv_adjust (struct timeval); |
| 231 | extern int tv_ceil (struct timeval); |
| 232 | extern int tv_floor (struct timeval); |
| 233 | extern struct timeval int2tv (int); |
Michael Rossberg | 2ef762e | 2015-07-27 07:56:25 +0200 | [diff] [blame] | 234 | extern struct timeval msec2tv (int); |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 235 | extern struct timeval tv_add (struct timeval, struct timeval); |
| 236 | extern struct timeval tv_sub (struct timeval, struct timeval); |
| 237 | extern int tv_cmp (struct timeval, struct timeval); |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 238 | |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 239 | extern int get_age (struct ospf_lsa *); |
| 240 | extern u_int16_t ospf_lsa_checksum (struct lsa_header *); |
Andrew Certain | 0798cee | 2012-12-04 13:43:42 -0800 | [diff] [blame] | 241 | extern int ospf_lsa_checksum_valid (struct lsa_header *); |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 242 | extern int ospf_lsa_refresh_delay (struct ospf_lsa *); |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 243 | |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 244 | extern const char *dump_lsa_key (struct ospf_lsa *); |
| 245 | extern u_int32_t lsa_seqnum_increment (struct ospf_lsa *); |
| 246 | extern void lsa_header_set (struct stream *, u_char, u_char, struct in_addr, |
paul | 6898008 | 2003-03-25 05:07:42 +0000 | [diff] [blame] | 247 | struct in_addr); |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 248 | extern struct ospf_neighbor *ospf_nbr_lookup_ptop (struct ospf_interface *); |
Christian Franke | 4c14b7f | 2013-02-20 10:00:54 +0000 | [diff] [blame] | 249 | extern int ospf_check_nbr_status (struct ospf *); |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 250 | |
| 251 | /* Prototype for LSA primitive. */ |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 252 | extern struct ospf_lsa *ospf_lsa_new (void); |
| 253 | extern struct ospf_lsa *ospf_lsa_dup (struct ospf_lsa *); |
| 254 | extern void ospf_lsa_free (struct ospf_lsa *); |
| 255 | extern struct ospf_lsa *ospf_lsa_lock (struct ospf_lsa *); |
Paul Jakma | 1fe6ed3 | 2006-07-26 09:37:26 +0000 | [diff] [blame] | 256 | extern void ospf_lsa_unlock (struct ospf_lsa **); |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 257 | extern void ospf_lsa_discard (struct ospf_lsa *); |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 258 | |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 259 | extern struct lsa_header *ospf_lsa_data_new (size_t); |
| 260 | extern struct lsa_header *ospf_lsa_data_dup (struct lsa_header *); |
| 261 | extern void ospf_lsa_data_free (struct lsa_header *); |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 262 | |
| 263 | /* Prototype for various LSAs */ |
Paul Jakma | c363d38 | 2010-01-24 22:42:13 +0000 | [diff] [blame] | 264 | extern int ospf_router_lsa_update (struct ospf *); |
| 265 | extern int ospf_router_lsa_update_area (struct ospf_area *); |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 266 | |
Paul Jakma | c363d38 | 2010-01-24 22:42:13 +0000 | [diff] [blame] | 267 | extern void ospf_network_lsa_update (struct ospf_interface *); |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 268 | |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 269 | extern struct ospf_lsa *ospf_summary_lsa_originate (struct prefix_ipv4 *, u_int32_t, |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 270 | struct ospf_area *); |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 271 | extern struct ospf_lsa *ospf_summary_asbr_lsa_originate (struct prefix_ipv4 *, |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 272 | u_int32_t, |
| 273 | struct ospf_area *); |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 274 | |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 275 | extern struct ospf_lsa *ospf_lsa_install (struct ospf *, |
paul | 6898008 | 2003-03-25 05:07:42 +0000 | [diff] [blame] | 276 | struct ospf_interface *, struct ospf_lsa *); |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 277 | |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 278 | extern void ospf_nssa_lsa_flush (struct ospf *ospf, struct prefix_ipv4 *p); |
| 279 | extern void ospf_external_lsa_flush (struct ospf *, u_char, struct prefix_ipv4 *, |
Paul Jakma | 9099f9b | 2016-01-18 10:12:10 +0000 | [diff] [blame] | 280 | ifindex_t /* , struct in_addr nexthop */); |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 281 | |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 282 | extern struct in_addr ospf_get_ip_from_ifp (struct ospf_interface *); |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 283 | |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 284 | extern struct ospf_lsa *ospf_external_lsa_originate (struct ospf *, struct external_info *); |
| 285 | extern int ospf_external_lsa_originate_timer (struct thread *); |
Denis Ovsienko | 8216f53 | 2011-10-03 14:08:01 +0400 | [diff] [blame] | 286 | extern int ospf_default_originate_timer (struct thread *); |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 287 | extern struct ospf_lsa *ospf_lsa_lookup (struct ospf_area *, u_int32_t, |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 288 | struct in_addr, struct in_addr); |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 289 | extern struct ospf_lsa *ospf_lsa_lookup_by_id (struct ospf_area *, |
paul | d4a53d5 | 2003-07-12 21:30:57 +0000 | [diff] [blame] | 290 | u_int32_t, |
| 291 | struct in_addr); |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 292 | extern struct ospf_lsa *ospf_lsa_lookup_by_header (struct ospf_area *, |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 293 | struct lsa_header *); |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 294 | extern int ospf_lsa_more_recent (struct ospf_lsa *, struct ospf_lsa *); |
| 295 | extern int ospf_lsa_different (struct ospf_lsa *, struct ospf_lsa *); |
| 296 | extern void ospf_flush_self_originated_lsas_now (struct ospf *); |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 297 | |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 298 | extern int ospf_lsa_is_self_originated (struct ospf *, struct ospf_lsa *); |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 299 | |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 300 | extern struct ospf_lsa *ospf_lsa_lookup_by_prefix (struct ospf_lsdb *, u_char, |
paul | 6898008 | 2003-03-25 05:07:42 +0000 | [diff] [blame] | 301 | struct prefix_ipv4 *, |
| 302 | struct in_addr); |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 303 | |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 304 | extern void ospf_lsa_maxage (struct ospf *, struct ospf_lsa *); |
| 305 | extern u_int32_t get_metric (u_char *); |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 306 | |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 307 | extern int ospf_lsa_maxage_walker (struct thread *); |
Paul Jakma | c363d38 | 2010-01-24 22:42:13 +0000 | [diff] [blame] | 308 | extern struct ospf_lsa *ospf_lsa_refresh (struct ospf *, struct ospf_lsa *); |
| 309 | |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 310 | extern void ospf_external_lsa_refresh_default (struct ospf *); |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 311 | |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 312 | extern void ospf_external_lsa_refresh_type (struct ospf *, u_char, int); |
Paul Jakma | c363d38 | 2010-01-24 22:42:13 +0000 | [diff] [blame] | 313 | extern struct ospf_lsa *ospf_external_lsa_refresh (struct ospf *, |
| 314 | struct ospf_lsa *, |
| 315 | struct external_info *, |
| 316 | int); |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 317 | extern struct in_addr ospf_lsa_unique_id (struct ospf *, struct ospf_lsdb *, u_char, |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 318 | struct prefix_ipv4 *); |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 319 | extern void ospf_schedule_lsa_flood_area (struct ospf_area *, struct ospf_lsa *); |
| 320 | extern void ospf_schedule_lsa_flush_area (struct ospf_area *, struct ospf_lsa *); |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 321 | |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 322 | extern void ospf_refresher_register_lsa (struct ospf *, struct ospf_lsa *); |
| 323 | extern void ospf_refresher_unregister_lsa (struct ospf *, struct ospf_lsa *); |
| 324 | extern int ospf_lsa_refresh_walker (struct thread *); |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 325 | |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 326 | extern void ospf_lsa_maxage_delete (struct ospf *, struct ospf_lsa *); |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 327 | |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 328 | extern void ospf_discard_from_db (struct ospf *, struct ospf_lsdb *, struct ospf_lsa*); |
| 329 | extern int is_prefix_default (struct prefix_ipv4 *); |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 330 | |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 331 | extern int metric_type (struct ospf *, u_char); |
| 332 | extern int metric_value (struct ospf *, u_char); |
paul | 6898008 | 2003-03-25 05:07:42 +0000 | [diff] [blame] | 333 | |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 334 | extern struct in_addr ospf_get_nssa_ip (struct ospf_area *); |
| 335 | extern int ospf_translated_nssa_compare (struct ospf_lsa *, struct ospf_lsa *); |
| 336 | extern struct ospf_lsa *ospf_translated_nssa_refresh (struct ospf *, struct ospf_lsa *, |
paul | d4a53d5 | 2003-07-12 21:30:57 +0000 | [diff] [blame] | 337 | struct ospf_lsa *); |
paul | 4dadc29 | 2005-05-06 21:37:42 +0000 | [diff] [blame] | 338 | extern struct ospf_lsa *ospf_translated_nssa_originate (struct ospf *, struct ospf_lsa *); |
paul | f2c8065 | 2002-12-13 21:44:27 +0000 | [diff] [blame] | 339 | |
paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 340 | #endif /* _ZEBRA_OSPF_LSA_H */ |