Annotation of embedaddon/quagga/ospfd/ospf_lsdb.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * OSPF LSDB support.
                      3:  * Copyright (C) 1999, 2000 Alex Zinin, 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_OSPF_LSDB_H
                     24: #define _ZEBRA_OSPF_LSDB_H
                     25: 
                     26: /* OSPF LSDB structure. */
                     27: struct ospf_lsdb
                     28: {
                     29:   struct
                     30:   {
                     31:     unsigned long count;
                     32:     unsigned long count_self;
                     33:     unsigned int checksum;
                     34:     struct route_table *db;
                     35:   } type[OSPF_MAX_LSA];
                     36:   unsigned long total;
                     37: #define MONITOR_LSDB_CHANGE 1 /* XXX */
                     38: #ifdef MONITOR_LSDB_CHANGE
                     39:   /* Hooks for callback functions to catch every add/del event. */
                     40:   int (* new_lsa_hook)(struct ospf_lsa *);
                     41:   int (* del_lsa_hook)(struct ospf_lsa *);
                     42: #endif /* MONITOR_LSDB_CHANGE */
                     43: };
                     44: 
                     45: /* Macros. */
                     46: #define LSDB_LOOP(T,N,L)                                                      \
                     47:   if ((T) != NULL)                                                            \
                     48:   for ((N) = route_top ((T)); ((N)); ((N)) = route_next ((N)))                \
                     49:     if (((L) = (N)->info))
                     50: 
                     51: #define ROUTER_LSDB(A)       ((A)->lsdb->type[OSPF_ROUTER_LSA].db)
                     52: #define NETWORK_LSDB(A)             ((A)->lsdb->type[OSPF_NETWORK_LSA].db)
                     53: #define SUMMARY_LSDB(A)      ((A)->lsdb->type[OSPF_SUMMARY_LSA].db)
                     54: #define ASBR_SUMMARY_LSDB(A) ((A)->lsdb->type[OSPF_ASBR_SUMMARY_LSA].db)
                     55: #define EXTERNAL_LSDB(O)     ((O)->lsdb->type[OSPF_AS_EXTERNAL_LSA].db)
                     56: #define NSSA_LSDB(A)         ((A)->lsdb->type[OSPF_AS_NSSA_LSA].db)
                     57: #define OPAQUE_LINK_LSDB(A)  ((A)->lsdb->type[OSPF_OPAQUE_LINK_LSA].db)
                     58: #define OPAQUE_AREA_LSDB(A)  ((A)->lsdb->type[OSPF_OPAQUE_AREA_LSA].db)
                     59: #define OPAQUE_AS_LSDB(O)    ((O)->lsdb->type[OSPF_OPAQUE_AS_LSA].db)
                     60: 
                     61: #define AREA_LSDB(A,T)       ((A)->lsdb->type[(T)].db)
                     62: #define AS_LSDB(O,T)         ((O)->lsdb->type[(T)].db)
                     63: 
                     64: /* OSPF LSDB related functions. */
                     65: extern struct ospf_lsdb *ospf_lsdb_new (void);
                     66: extern void ospf_lsdb_init (struct ospf_lsdb *);
                     67: extern void ospf_lsdb_free (struct ospf_lsdb *);
                     68: extern void ospf_lsdb_cleanup (struct ospf_lsdb *);
                     69: extern void ospf_lsdb_add (struct ospf_lsdb *, struct ospf_lsa *);
                     70: extern void ospf_lsdb_delete (struct ospf_lsdb *, struct ospf_lsa *);
                     71: extern void ospf_lsdb_delete_all (struct ospf_lsdb *);
                     72: /* Set all stats to -1 (LSA_SPF_NOT_EXPLORED). */
                     73: extern void ospf_lsdb_clean_stat (struct ospf_lsdb *lsdb);
                     74: extern struct ospf_lsa *ospf_lsdb_lookup (struct ospf_lsdb *, struct ospf_lsa *);
                     75: extern struct ospf_lsa *ospf_lsdb_lookup_by_id (struct ospf_lsdb *, u_char,
                     76:                                        struct in_addr, struct in_addr);
                     77: extern struct ospf_lsa *ospf_lsdb_lookup_by_id_next (struct ospf_lsdb *, u_char,
                     78:                                             struct in_addr, struct in_addr,
                     79:                                             int);
                     80: extern unsigned long ospf_lsdb_count_all (struct ospf_lsdb *);
                     81: extern unsigned long ospf_lsdb_count (struct ospf_lsdb *, int);
                     82: extern unsigned long ospf_lsdb_count_self (struct ospf_lsdb *, int);
                     83: extern unsigned int ospf_lsdb_checksum (struct ospf_lsdb *, int);
                     84: extern unsigned long ospf_lsdb_isempty (struct ospf_lsdb *);
                     85: 
                     86: #endif /* _ZEBRA_OSPF_LSDB_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>