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