Annotation of embedaddon/quagga/ospfd/ospfd.h, revision 1.1
1.1 ! misho 1: /*
! 2: * OSPFd main header.
! 3: * Copyright (C) 1998, 99, 2000 Kunihiro Ishiguro, 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_OSPFD_H
! 24: #define _ZEBRA_OSPFD_H
! 25:
! 26: #include <zebra.h>
! 27:
! 28: #include "filter.h"
! 29: #include "log.h"
! 30:
! 31: #define OSPF_VERSION 2
! 32:
! 33: /* Default protocol, port number. */
! 34: #ifndef IPPROTO_OSPFIGP
! 35: #define IPPROTO_OSPFIGP 89
! 36: #endif /* IPPROTO_OSPFIGP */
! 37:
! 38: /* IP precedence. */
! 39: #ifndef IPTOS_PREC_INTERNETCONTROL
! 40: #define IPTOS_PREC_INTERNETCONTROL 0xC0
! 41: #endif /* IPTOS_PREC_INTERNETCONTROL */
! 42:
! 43: /* VTY port number. */
! 44: #define OSPF_VTY_PORT 2604
! 45:
! 46: /* IP TTL for OSPF protocol. */
! 47: #define OSPF_IP_TTL 1
! 48: #define OSPF_VL_IP_TTL 100
! 49:
! 50: /* Default configuration file name for ospfd. */
! 51: #define OSPF_DEFAULT_CONFIG "ospfd.conf"
! 52:
! 53: /* Architectual Constants */
! 54: #ifdef DEBUG
! 55: #define OSPF_LS_REFRESH_TIME 60
! 56: #else
! 57: #define OSPF_LS_REFRESH_TIME 1800
! 58: #endif
! 59: #define OSPF_MIN_LS_INTERVAL 5
! 60: #define OSPF_MIN_LS_ARRIVAL 1
! 61: #define OSPF_LSA_INITIAL_AGE 0 /* useful for debug */
! 62: #define OSPF_LSA_MAXAGE 3600
! 63: #define OSPF_CHECK_AGE 300
! 64: #define OSPF_LSA_MAXAGE_DIFF 900
! 65: #define OSPF_LS_INFINITY 0xffffff
! 66: #define OSPF_DEFAULT_DESTINATION 0x00000000 /* 0.0.0.0 */
! 67: #define OSPF_INITIAL_SEQUENCE_NUMBER 0x80000001
! 68: #define OSPF_MAX_SEQUENCE_NUMBER 0x7fffffff
! 69:
! 70: #define OSPF_NSSA_TRANS_STABLE_DEFAULT 40
! 71:
! 72: #define OSPF_ALLSPFROUTERS 0xe0000005 /* 224.0.0.5 */
! 73: #define OSPF_ALLDROUTERS 0xe0000006 /* 224.0.0.6 */
! 74:
! 75: #define OSPF_AREA_BACKBONE 0x00000000 /* 0.0.0.0 */
! 76:
! 77: /* OSPF Authentication Type. */
! 78: #define OSPF_AUTH_NULL 0
! 79: #define OSPF_AUTH_SIMPLE 1
! 80: #define OSPF_AUTH_CRYPTOGRAPHIC 2
! 81: /* For Interface authentication setting default */
! 82: #define OSPF_AUTH_NOTSET -1
! 83: /* For the consumption and sanity of the command handler */
! 84: /* DO NIOT REMOVE!!! Need to detect whether a value has
! 85: been given or not in VLink command handlers */
! 86: #define OSPF_AUTH_CMD_NOTSEEN -2
! 87:
! 88: /* OSPF SPF timer values. */
! 89: #define OSPF_SPF_DELAY_DEFAULT 200
! 90: #define OSPF_SPF_HOLDTIME_DEFAULT 1000
! 91: #define OSPF_SPF_MAX_HOLDTIME_DEFAULT 10000
! 92:
! 93: /* OSPF interface default values. */
! 94: #define OSPF_OUTPUT_COST_DEFAULT 10
! 95: #define OSPF_OUTPUT_COST_INFINITE UINT16_MAX
! 96: #define OSPF_ROUTER_DEAD_INTERVAL_DEFAULT 40
! 97: #define OSPF_ROUTER_DEAD_INTERVAL_MINIMAL 1
! 98: #define OSPF_HELLO_INTERVAL_DEFAULT 10
! 99: #define OSPF_ROUTER_PRIORITY_DEFAULT 1
! 100: #define OSPF_RETRANSMIT_INTERVAL_DEFAULT 5
! 101: #define OSPF_TRANSMIT_DELAY_DEFAULT 1
! 102: #define OSPF_DEFAULT_BANDWIDTH 10000 /* Kbps */
! 103:
! 104: #define OSPF_DEFAULT_REF_BANDWIDTH 100000 /* Kbps */
! 105:
! 106: #define OSPF_POLL_INTERVAL_DEFAULT 60
! 107: #define OSPF_NEIGHBOR_PRIORITY_DEFAULT 0
! 108:
! 109: #define OSPF_MTU_IGNORE_DEFAULT 0
! 110: #define OSPF_FAST_HELLO_DEFAULT 0
! 111:
! 112: /* OSPF options. */
! 113: #define OSPF_OPTION_T 0x01 /* TOS. */
! 114: #define OSPF_OPTION_E 0x02
! 115: #define OSPF_OPTION_MC 0x04
! 116: #define OSPF_OPTION_NP 0x08
! 117: #define OSPF_OPTION_EA 0x10
! 118: #define OSPF_OPTION_DC 0x20
! 119: #define OSPF_OPTION_O 0x40
! 120:
! 121: /* OSPF Database Description flags. */
! 122: #define OSPF_DD_FLAG_MS 0x01
! 123: #define OSPF_DD_FLAG_M 0x02
! 124: #define OSPF_DD_FLAG_I 0x04
! 125: #define OSPF_DD_FLAG_ALL 0x07
! 126:
! 127: #define OSPF_LS_REFRESH_SHIFT (60 * 15)
! 128: #define OSPF_LS_REFRESH_JITTER 60
! 129:
! 130: /* OSPF master for system wide configuration and variables. */
! 131: struct ospf_master
! 132: {
! 133: /* OSPF instance. */
! 134: struct list *ospf;
! 135:
! 136: /* OSPF thread master. */
! 137: struct thread_master *master;
! 138:
! 139: /* Zebra interface list. */
! 140: struct list *iflist;
! 141:
! 142: /* Redistributed external information. */
! 143: struct route_table *external_info[ZEBRA_ROUTE_MAX + 1];
! 144: #define EXTERNAL_INFO(T) om->external_info[T]
! 145:
! 146: /* OSPF start time. */
! 147: time_t start_time;
! 148:
! 149: /* Various OSPF global configuration. */
! 150: u_char options;
! 151: #define OSPF_MASTER_SHUTDOWN (1 << 0) /* deferred-shutdown */
! 152: };
! 153:
! 154: /* OSPF instance structure. */
! 155: struct ospf
! 156: {
! 157: /* OSPF Router ID. */
! 158: struct in_addr router_id; /* Configured automatically. */
! 159: struct in_addr router_id_static; /* Configured manually. */
! 160:
! 161: /* ABR/ASBR internal flags. */
! 162: u_char flags;
! 163: #define OSPF_FLAG_ABR 0x0001
! 164: #define OSPF_FLAG_ASBR 0x0002
! 165:
! 166: /* ABR type. */
! 167: u_char abr_type;
! 168: #define OSPF_ABR_UNKNOWN 0
! 169: #define OSPF_ABR_STAND 1
! 170: #define OSPF_ABR_IBM 2
! 171: #define OSPF_ABR_CISCO 3
! 172: #define OSPF_ABR_SHORTCUT 4
! 173: #define OSPF_ABR_DEFAULT OSPF_ABR_CISCO
! 174:
! 175: /* NSSA ABR */
! 176: u_char anyNSSA; /* Bump for every NSSA attached. */
! 177:
! 178: /* Configured variables. */
! 179: u_char config;
! 180: #define OSPF_RFC1583_COMPATIBLE (1 << 0)
! 181: #define OSPF_OPAQUE_CAPABLE (1 << 2)
! 182: #define OSPF_LOG_ADJACENCY_CHANGES (1 << 3)
! 183: #define OSPF_LOG_ADJACENCY_DETAIL (1 << 4)
! 184:
! 185: #ifdef HAVE_OPAQUE_LSA
! 186: /* Opaque-LSA administrative flags. */
! 187: u_char opaque;
! 188: #define OPAQUE_OPERATION_READY_BIT (1 << 0)
! 189: #define OPAQUE_BLOCK_TYPE_09_LSA_BIT (1 << 1)
! 190: #define OPAQUE_BLOCK_TYPE_10_LSA_BIT (1 << 2)
! 191: #define OPAQUE_BLOCK_TYPE_11_LSA_BIT (1 << 3)
! 192: #endif /* HAVE_OPAQUE_LSA */
! 193:
! 194: /* RFC3137 stub router. Configured time to stay stub / max-metric */
! 195: unsigned int stub_router_startup_time; /* seconds */
! 196: unsigned int stub_router_shutdown_time; /* seconds */
! 197: #define OSPF_STUB_ROUTER_UNCONFIGURED 0
! 198:
! 199: /* SPF parameters */
! 200: unsigned int spf_delay; /* SPF delay time. */
! 201: unsigned int spf_holdtime; /* SPF hold time. */
! 202: unsigned int spf_max_holdtime; /* SPF maximum-holdtime */
! 203: unsigned int spf_hold_multiplier; /* Adaptive multiplier for hold time */
! 204:
! 205: int default_originate; /* Default information originate. */
! 206: #define DEFAULT_ORIGINATE_NONE 0
! 207: #define DEFAULT_ORIGINATE_ZEBRA 1
! 208: #define DEFAULT_ORIGINATE_ALWAYS 2
! 209: u_int32_t ref_bandwidth; /* Reference Bandwidth (Kbps). */
! 210: struct route_table *networks; /* OSPF config networks. */
! 211: struct list *vlinks; /* Configured Virtual-Links. */
! 212: struct list *areas; /* OSPF areas. */
! 213: struct route_table *nbr_nbma;
! 214: struct ospf_area *backbone; /* Pointer to the Backbone Area. */
! 215:
! 216: struct list *oiflist; /* ospf interfaces */
! 217: u_char passive_interface_default; /* passive-interface default */
! 218:
! 219: /* LSDB of AS-external-LSAs. */
! 220: struct ospf_lsdb *lsdb;
! 221:
! 222: /* Flags. */
! 223: int external_origin; /* AS-external-LSA origin flag. */
! 224: int ase_calc; /* ASE calculation flag. */
! 225:
! 226: #ifdef HAVE_OPAQUE_LSA
! 227: struct list *opaque_lsa_self; /* Type-11 Opaque-LSAs */
! 228: #endif /* HAVE_OPAQUE_LSA */
! 229:
! 230: /* Routing tables. */
! 231: struct route_table *old_table; /* Old routing table. */
! 232: struct route_table *new_table; /* Current routing table. */
! 233:
! 234: struct route_table *old_rtrs; /* Old ABR/ASBR RT. */
! 235: struct route_table *new_rtrs; /* New ABR/ASBR RT. */
! 236:
! 237: struct route_table *new_external_route; /* New External Route. */
! 238: struct route_table *old_external_route; /* Old External Route. */
! 239:
! 240: struct route_table *external_lsas; /* Database of external LSAs,
! 241: prefix is LSA's adv. network*/
! 242:
! 243: /* Time stamps. */
! 244: struct timeval ts_spf; /* SPF calculation time stamp. */
! 245:
! 246: struct list *maxage_lsa; /* List of MaxAge LSA for deletion. */
! 247: int redistribute; /* Num of redistributed protocols. */
! 248:
! 249: /* Threads. */
! 250: struct thread *t_abr_task; /* ABR task timer. */
! 251: struct thread *t_asbr_check; /* ASBR check timer. */
! 252: struct thread *t_distribute_update; /* Distirbute list update timer. */
! 253: struct thread *t_spf_calc; /* SPF calculation timer. */
! 254: struct thread *t_ase_calc; /* ASE calculation timer. */
! 255: struct thread *t_external_lsa; /* AS-external-LSA origin timer. */
! 256: #ifdef HAVE_OPAQUE_LSA
! 257: struct thread *t_opaque_lsa_self; /* Type-11 Opaque-LSAs origin event. */
! 258: #endif /* HAVE_OPAQUE_LSA */
! 259:
! 260: #define OSFP_LSA_MAXAGE_REMOVE_DELAY_DEFAULT 60
! 261: unsigned int maxage_delay; /* Delay on Maxage remover timer, sec */
! 262: struct thread *t_maxage; /* MaxAge LSA remover timer. */
! 263: #define OSPF_LSA_MAXAGE_CHECK_INTERVAL 30
! 264: struct thread *t_maxage_walker; /* MaxAge LSA checking timer. */
! 265:
! 266: struct thread *t_deferred_shutdown; /* deferred/stub-router shutdown timer*/
! 267:
! 268: struct thread *t_write;
! 269: struct thread *t_read;
! 270: int fd;
! 271: int maxsndbuflen;
! 272: struct stream *ibuf;
! 273: struct list *oi_write_q;
! 274:
! 275: /* Distribute lists out of other route sources. */
! 276: struct
! 277: {
! 278: char *name;
! 279: struct access_list *list;
! 280: } dlist[ZEBRA_ROUTE_MAX];
! 281: #define DISTRIBUTE_NAME(O,T) (O)->dlist[T].name
! 282: #define DISTRIBUTE_LIST(O,T) (O)->dlist[T].list
! 283:
! 284: /* Redistribute metric info. */
! 285: struct
! 286: {
! 287: int type; /* External metric type (E1 or E2). */
! 288: int value; /* Value for static metric (24-bit).
! 289: -1 means metric value is not set. */
! 290: } dmetric [ZEBRA_ROUTE_MAX + 1];
! 291:
! 292: /* For redistribute route map. */
! 293: struct
! 294: {
! 295: char *name;
! 296: struct route_map *map;
! 297: } route_map [ZEBRA_ROUTE_MAX + 1]; /* +1 is for default-information */
! 298: #define ROUTEMAP_NAME(O,T) (O)->route_map[T].name
! 299: #define ROUTEMAP(O,T) (O)->route_map[T].map
! 300:
! 301: int default_metric; /* Default metric for redistribute. */
! 302:
! 303: #define OSPF_LSA_REFRESHER_GRANULARITY 10
! 304: #define OSPF_LSA_REFRESHER_SLOTS ((OSPF_LS_REFRESH_TIME + \
! 305: OSPF_LS_REFRESH_SHIFT)/10 + 1)
! 306: struct
! 307: {
! 308: u_int16_t index;
! 309: struct list *qs[OSPF_LSA_REFRESHER_SLOTS];
! 310: } lsa_refresh_queue;
! 311:
! 312: struct thread *t_lsa_refresher;
! 313: time_t lsa_refresher_started;
! 314: #define OSPF_LSA_REFRESH_INTERVAL_DEFAULT 10
! 315: u_int16_t lsa_refresh_interval;
! 316:
! 317: /* Distance parameter. */
! 318: u_char distance_all;
! 319: u_char distance_intra;
! 320: u_char distance_inter;
! 321: u_char distance_external;
! 322:
! 323: /* Statistics for LSA origination. */
! 324: u_int32_t lsa_originate_count;
! 325:
! 326: /* Statistics for LSA used for new instantiation. */
! 327: u_int32_t rx_lsa_count;
! 328:
! 329: struct route_table *distance_table;
! 330: };
! 331:
! 332: /* OSPF area structure. */
! 333: struct ospf_area
! 334: {
! 335: /* OSPF instance. */
! 336: struct ospf *ospf;
! 337:
! 338: /* Zebra interface list belonging to the area. */
! 339: struct list *oiflist;
! 340:
! 341: /* Area ID. */
! 342: struct in_addr area_id;
! 343:
! 344: /* Area ID format. */
! 345: char format;
! 346: #define OSPF_AREA_ID_FORMAT_ADDRESS 1
! 347: #define OSPF_AREA_ID_FORMAT_DECIMAL 2
! 348:
! 349: /* Address range. */
! 350: struct list *address_range;
! 351:
! 352: /* Configured variables. */
! 353: int external_routing; /* ExternalRoutingCapability. */
! 354: #define OSPF_AREA_DEFAULT 0
! 355: #define OSPF_AREA_STUB 1
! 356: #define OSPF_AREA_NSSA 2
! 357: #define OSPF_AREA_TYPE_MAX 3
! 358: int no_summary; /* Don't inject summaries into stub.*/
! 359: int shortcut_configured; /* Area configured as shortcut. */
! 360: #define OSPF_SHORTCUT_DEFAULT 0
! 361: #define OSPF_SHORTCUT_ENABLE 1
! 362: #define OSPF_SHORTCUT_DISABLE 2
! 363: int shortcut_capability; /* Other ABRs agree on S-bit */
! 364: u_int32_t default_cost; /* StubDefaultCost. */
! 365: int auth_type; /* Authentication type. */
! 366:
! 367:
! 368: u_char NSSATranslatorRole; /* NSSA configured role */
! 369: #define OSPF_NSSA_ROLE_NEVER 0
! 370: #define OSPF_NSSA_ROLE_CANDIDATE 1
! 371: #define OSPF_NSSA_ROLE_ALWAYS 2
! 372: u_char NSSATranslatorState; /* NSSA operational role */
! 373: #define OSPF_NSSA_TRANSLATE_DISABLED 0
! 374: #define OSPF_NSSA_TRANSLATE_ENABLED 1
! 375: int NSSATranslatorStabilityInterval;
! 376:
! 377: u_char transit; /* TransitCapability. */
! 378: #define OSPF_TRANSIT_FALSE 0
! 379: #define OSPF_TRANSIT_TRUE 1
! 380: struct route_table *ranges; /* Configured Area Ranges. */
! 381:
! 382: /* RFC3137 stub router state flags for area */
! 383: u_char stub_router_state;
! 384: #define OSPF_AREA_ADMIN_STUB_ROUTED (1 << 0) /* admin stub-router set */
! 385: #define OSPF_AREA_IS_STUB_ROUTED (1 << 1) /* stub-router active */
! 386: #define OSPF_AREA_WAS_START_STUB_ROUTED (1 << 2) /* startup SR was done */
! 387:
! 388: /* Area related LSDBs[Type1-4]. */
! 389: struct ospf_lsdb *lsdb;
! 390:
! 391: /* Self-originated LSAs. */
! 392: struct ospf_lsa *router_lsa_self;
! 393: #ifdef HAVE_OPAQUE_LSA
! 394: struct list *opaque_lsa_self; /* Type-10 Opaque-LSAs */
! 395: #endif /* HAVE_OPAQUE_LSA */
! 396:
! 397: /* Area announce list. */
! 398: struct
! 399: {
! 400: char *name;
! 401: struct access_list *list;
! 402: } _export;
! 403: #define EXPORT_NAME(A) (A)->_export.name
! 404: #define EXPORT_LIST(A) (A)->_export.list
! 405:
! 406: /* Area acceptance list. */
! 407: struct
! 408: {
! 409: char *name;
! 410: struct access_list *list;
! 411: } import;
! 412: #define IMPORT_NAME(A) (A)->import.name
! 413: #define IMPORT_LIST(A) (A)->import.list
! 414:
! 415: /* Type 3 LSA Area prefix-list. */
! 416: struct
! 417: {
! 418: char *name;
! 419: struct prefix_list *list;
! 420: } plist_in;
! 421: #define PREFIX_LIST_IN(A) (A)->plist_in.list
! 422: #define PREFIX_NAME_IN(A) (A)->plist_in.name
! 423:
! 424: struct
! 425: {
! 426: char *name;
! 427: struct prefix_list *list;
! 428: } plist_out;
! 429: #define PREFIX_LIST_OUT(A) (A)->plist_out.list
! 430: #define PREFIX_NAME_OUT(A) (A)->plist_out.name
! 431:
! 432: /* Shortest Path Tree. */
! 433: struct vertex *spf;
! 434:
! 435: /* Threads. */
! 436: struct thread *t_stub_router; /* Stub-router timer */
! 437: #ifdef HAVE_OPAQUE_LSA
! 438: struct thread *t_opaque_lsa_self; /* Type-10 Opaque-LSAs origin. */
! 439: #endif /* HAVE_OPAQUE_LSA */
! 440:
! 441: /* Statistics field. */
! 442: u_int32_t spf_calculation; /* SPF Calculation Count. */
! 443:
! 444: /* Router count. */
! 445: u_int32_t abr_count; /* ABR router in this area. */
! 446: u_int32_t asbr_count; /* ASBR router in this area. */
! 447:
! 448: /* Counters. */
! 449: u_int32_t act_ints; /* Active interfaces. */
! 450: u_int32_t full_nbrs; /* Fully adjacent neighbors. */
! 451: u_int32_t full_vls; /* Fully adjacent virtual neighbors. */
! 452: };
! 453:
! 454: /* OSPF config network structure. */
! 455: struct ospf_network
! 456: {
! 457: /* Area ID. */
! 458: struct in_addr area_id;
! 459: int format;
! 460: };
! 461:
! 462: /* OSPF NBMA neighbor structure. */
! 463: struct ospf_nbr_nbma
! 464: {
! 465: /* Neighbor IP address. */
! 466: struct in_addr addr;
! 467:
! 468: /* OSPF interface. */
! 469: struct ospf_interface *oi;
! 470:
! 471: /* OSPF neighbor structure. */
! 472: struct ospf_neighbor *nbr;
! 473:
! 474: /* Neighbor priority. */
! 475: u_char priority;
! 476:
! 477: /* Poll timer value. */
! 478: u_int32_t v_poll;
! 479:
! 480: /* Poll timer thread. */
! 481: struct thread *t_poll;
! 482:
! 483: /* State change. */
! 484: u_int32_t state_change;
! 485: };
! 486:
! 487: /* Macro. */
! 488: #define OSPF_AREA_SAME(X,Y) \
! 489: (memcmp ((X->area_id), (Y->area_id), IPV4_MAX_BYTELEN) == 0)
! 490:
! 491: #define IS_OSPF_ABR(O) ((O)->flags & OSPF_FLAG_ABR)
! 492: #define IS_OSPF_ASBR(O) ((O)->flags & OSPF_FLAG_ASBR)
! 493:
! 494: #define OSPF_IS_AREA_ID_BACKBONE(I) ((I).s_addr == OSPF_AREA_BACKBONE)
! 495: #define OSPF_IS_AREA_BACKBONE(A) OSPF_IS_AREA_ID_BACKBONE ((A)->area_id)
! 496:
! 497: #ifdef roundup
! 498: # define ROUNDUP(val, gran) roundup(val, gran)
! 499: #else /* roundup */
! 500: # define ROUNDUP(val, gran) (((val) - 1 | (gran) - 1) + 1)
! 501: #endif /* roundup */
! 502:
! 503: #define LSA_OPTIONS_GET(area) \
! 504: (((area)->external_routing == OSPF_AREA_DEFAULT) ? OSPF_OPTION_E : 0)
! 505: #define LSA_OPTIONS_NSSA_GET(area) \
! 506: (((area)->external_routing == OSPF_AREA_NSSA) ? OSPF_OPTION_NP : 0)
! 507:
! 508: #define OSPF_TIMER_ON(T,F,V) \
! 509: do { \
! 510: if (!(T)) \
! 511: (T) = thread_add_timer (master, (F), ospf, (V)); \
! 512: } while (0)
! 513:
! 514: #define OSPF_AREA_TIMER_ON(T,F,V) \
! 515: do { \
! 516: if (!(T)) \
! 517: (T) = thread_add_timer (master, (F), area, (V)); \
! 518: } while (0)
! 519:
! 520: #define OSPF_POLL_TIMER_ON(T,F,V) \
! 521: do { \
! 522: if (!(T)) \
! 523: (T) = thread_add_timer (master, (F), nbr_nbma, (V)); \
! 524: } while (0)
! 525:
! 526: #define OSPF_POLL_TIMER_OFF(X) OSPF_TIMER_OFF((X))
! 527:
! 528: #define OSPF_TIMER_OFF(X) \
! 529: do { \
! 530: if (X) \
! 531: { \
! 532: thread_cancel (X); \
! 533: (X) = NULL; \
! 534: } \
! 535: } while (0)
! 536:
! 537: /* Extern variables. */
! 538: extern struct ospf_master *om;
! 539: extern const struct message ospf_ism_state_msg[];
! 540: extern const struct message ospf_nsm_state_msg[];
! 541: extern const struct message ospf_lsa_type_msg[];
! 542: extern const struct message ospf_link_state_id_type_msg[];
! 543: extern const struct message ospf_network_type_msg[];
! 544: extern const int ospf_ism_state_msg_max;
! 545: extern const int ospf_nsm_state_msg_max;
! 546: extern const int ospf_lsa_type_msg_max;
! 547: extern const int ospf_link_state_id_type_msg_max;
! 548: extern const int ospf_redistributed_proto_max;
! 549: extern const int ospf_network_type_msg_max;
! 550: extern struct zclient *zclient;
! 551: extern struct thread_master *master;
! 552: extern int ospf_zlog;
! 553:
! 554: /* Prototypes. */
! 555: extern const char *ospf_redist_string(u_int route_type);
! 556: extern struct ospf *ospf_lookup (void);
! 557: extern struct ospf *ospf_get (void);
! 558: extern void ospf_finish (struct ospf *);
! 559: extern void ospf_router_id_update (struct ospf *ospf);
! 560: extern int ospf_network_set (struct ospf *, struct prefix_ipv4 *,
! 561: struct in_addr);
! 562: extern int ospf_network_unset (struct ospf *, struct prefix_ipv4 *,
! 563: struct in_addr);
! 564: extern int ospf_area_stub_set (struct ospf *, struct in_addr);
! 565: extern int ospf_area_stub_unset (struct ospf *, struct in_addr);
! 566: extern int ospf_area_no_summary_set (struct ospf *, struct in_addr);
! 567: extern int ospf_area_no_summary_unset (struct ospf *, struct in_addr);
! 568: extern int ospf_area_nssa_set (struct ospf *, struct in_addr);
! 569: extern int ospf_area_nssa_unset (struct ospf *, struct in_addr);
! 570: extern int ospf_area_nssa_translator_role_set (struct ospf *, struct in_addr,
! 571: int);
! 572: extern int ospf_area_export_list_set (struct ospf *, struct ospf_area *,
! 573: const char *);
! 574: extern int ospf_area_export_list_unset (struct ospf *, struct ospf_area *);
! 575: extern int ospf_area_import_list_set (struct ospf *, struct ospf_area *,
! 576: const char *);
! 577: extern int ospf_area_import_list_unset (struct ospf *, struct ospf_area *);
! 578: extern int ospf_area_shortcut_set (struct ospf *, struct ospf_area *, int);
! 579: extern int ospf_area_shortcut_unset (struct ospf *, struct ospf_area *);
! 580: extern int ospf_timers_refresh_set (struct ospf *, int);
! 581: extern int ospf_timers_refresh_unset (struct ospf *);
! 582: extern int ospf_nbr_nbma_set (struct ospf *, struct in_addr);
! 583: extern int ospf_nbr_nbma_unset (struct ospf *, struct in_addr);
! 584: extern int ospf_nbr_nbma_priority_set (struct ospf *, struct in_addr, u_char);
! 585: extern int ospf_nbr_nbma_priority_unset (struct ospf *, struct in_addr);
! 586: extern int ospf_nbr_nbma_poll_interval_set (struct ospf *, struct in_addr,
! 587: unsigned int);
! 588: extern int ospf_nbr_nbma_poll_interval_unset (struct ospf *, struct in_addr);
! 589: extern void ospf_prefix_list_update (struct prefix_list *);
! 590: extern void ospf_init (void);
! 591: extern void ospf_if_update (struct ospf *, struct interface *);
! 592: extern void ospf_ls_upd_queue_empty (struct ospf_interface *);
! 593: extern void ospf_terminate (void);
! 594: extern void ospf_nbr_nbma_if_update (struct ospf *, struct ospf_interface *);
! 595: extern struct ospf_nbr_nbma *ospf_nbr_nbma_lookup (struct ospf *,
! 596: struct in_addr);
! 597: extern struct ospf_nbr_nbma *ospf_nbr_nbma_lookup_next (struct ospf *,
! 598: struct in_addr *,
! 599: int);
! 600: extern int ospf_oi_count (struct interface *);
! 601:
! 602: extern struct ospf_area *ospf_area_get (struct ospf *, struct in_addr, int);
! 603: extern void ospf_area_check_free (struct ospf *, struct in_addr);
! 604: extern struct ospf_area *ospf_area_lookup_by_area_id (struct ospf *,
! 605: struct in_addr);
! 606: extern void ospf_area_add_if (struct ospf_area *, struct ospf_interface *);
! 607: extern void ospf_area_del_if (struct ospf_area *, struct ospf_interface *);
! 608:
! 609: extern void ospf_route_map_init (void);
! 610: extern void ospf_snmp_init (void);
! 611:
! 612: extern void ospf_master_init (void);
! 613:
! 614: #endif /* _ZEBRA_OSPFD_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>