Annotation of embedaddon/quagga/ospfd/ospfd.h, revision 1.1.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>