Annotation of embedaddon/quagga/ospf6d/ospf6_spf.h, revision 1.1.1.2

1.1       misho       1: /*
                      2:  * Copyright (C) 2003 Yasuhiro Ohara
                      3:  *
                      4:  * This file is part of GNU Zebra.
                      5:  *
                      6:  * GNU Zebra is free software; you can redistribute it and/or modify it
                      7:  * under the terms of the GNU General Public License as published by the
                      8:  * Free Software Foundation; either version 2, or (at your option) any
                      9:  * later version.
                     10:  *
                     11:  * GNU Zebra is distributed in the hope that it will be useful, but
                     12:  * WITHOUT ANY WARRANTY; without even the implied warranty of
                     13:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
                     14:  * General Public License for more details.
                     15:  *
                     16:  * You should have received a copy of the GNU General Public License
                     17:  * along with GNU Zebra; see the file COPYING.  If not, write to the 
                     18:  * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 
                     19:  * Boston, MA 02111-1307, USA.  
                     20:  */
                     21: 
                     22: #ifndef OSPF6_SPF_H
                     23: #define OSPF6_SPF_H
                     24: 
1.1.1.2 ! misho      25: #include "ospf6_top.h"
        !            26: 
1.1       misho      27: /* Debug option */
                     28: extern unsigned char conf_debug_ospf6_spf;
                     29: #define OSPF6_DEBUG_SPF_PROCESS   0x01
                     30: #define OSPF6_DEBUG_SPF_TIME      0x02
                     31: #define OSPF6_DEBUG_SPF_DATABASE  0x04
                     32: #define OSPF6_DEBUG_SPF_ON(level) \
                     33:   (conf_debug_ospf6_spf |= (level))
                     34: #define OSPF6_DEBUG_SPF_OFF(level) \
                     35:   (conf_debug_ospf6_spf &= ~(level))
                     36: #define IS_OSPF6_DEBUG_SPF(level) \
                     37:   (conf_debug_ospf6_spf & OSPF6_DEBUG_SPF_ ## level)
                     38: 
                     39: /* Transit Vertex */
                     40: struct ospf6_vertex
                     41: {
                     42:   /* type of this vertex */
                     43:   u_int8_t type;
                     44: 
                     45:   /* Vertex Identifier */
                     46:   struct prefix vertex_id;
                     47: 
                     48:   /* Identifier String */
                     49:   char name[128];
                     50: 
                     51:   /* Associated Area */
                     52:   struct ospf6_area *area;
                     53: 
                     54:   /* Associated LSA */
                     55:   struct ospf6_lsa *lsa;
                     56: 
                     57:   /* Distance from Root (i.e. Cost) */
                     58:   u_int32_t cost;
                     59: 
                     60:   /* Router hops to this node */
                     61:   u_char hops;
                     62: 
                     63:   /* nexthops to this node */
                     64:   struct ospf6_nexthop nexthop[OSPF6_MULTI_PATH_LIMIT];
                     65: 
                     66:   /* capability bits */
                     67:   u_char capability;
                     68: 
                     69:   /* Optional capabilities */
                     70:   u_char options[3];
                     71: 
                     72:   /* For tree display */
                     73:   struct ospf6_vertex *parent;
                     74:   struct list *child_list;
                     75: };
                     76: 
                     77: #define OSPF6_VERTEX_TYPE_ROUTER  0x01
                     78: #define OSPF6_VERTEX_TYPE_NETWORK 0x02
                     79: #define VERTEX_IS_TYPE(t, v) \
                     80:   ((v)->type == OSPF6_VERTEX_TYPE_ ## t ? 1 : 0)
                     81: 
1.1.1.2 ! misho      82: /* What triggered the SPF? */
        !            83: #define OSPF6_SPF_FLAGS_ROUTER_LSA_ADDED         (1 << 0)
        !            84: #define OSPF6_SPF_FLAGS_ROUTER_LSA_REMOVED       (1 << 1)
        !            85: #define OSPF6_SPF_FLAGS_NETWORK_LSA_ADDED        (1 << 2)
        !            86: #define OSPF6_SPF_FLAGS_NETWORK_LSA_REMOVED      (1 << 3)
        !            87: #define OSPF6_SPF_FLAGS_LINK_LSA_ADDED           (1 << 4)
        !            88: #define OSPF6_SPF_FLAGS_LINK_LSA_REMOVED         (1 << 5)
        !            89: #define OSPF6_SPF_FLAGS_ROUTER_LSA_ORIGINATED    (1 << 6)
        !            90: #define OSPF6_SPF_FLAGS_NETWORK_LSA_ORIGINATED   (1 << 7)
        !            91: 
        !            92: static inline void
        !            93: ospf6_set_spf_reason (struct ospf6* ospf, unsigned int reason)
        !            94: {
        !            95:   ospf->spf_reason |= reason;
        !            96: }
        !            97: 
        !            98: static inline void
        !            99: ospf6_reset_spf_reason (struct ospf6 *ospf)
        !           100: {
        !           101:   ospf->spf_reason = 0;
        !           102: }
        !           103: 
        !           104: static inline unsigned int
        !           105: ospf6_lsadd_to_spf_reason (struct ospf6_lsa *lsa)
        !           106: {
        !           107:   unsigned int reason = 0;
        !           108: 
        !           109:   switch (ntohs (lsa->header->type))
        !           110:     {
        !           111:     case OSPF6_LSTYPE_ROUTER:
        !           112:       reason = OSPF6_SPF_FLAGS_ROUTER_LSA_ADDED;
        !           113:       break;
        !           114:     case OSPF6_LSTYPE_NETWORK:
        !           115:       reason = OSPF6_SPF_FLAGS_NETWORK_LSA_ADDED;
        !           116:       break;
        !           117:     case OSPF6_LSTYPE_LINK:
        !           118:       reason = OSPF6_SPF_FLAGS_LINK_LSA_ADDED;
        !           119:       break;
        !           120:     default:
        !           121:       break;
        !           122:     }
        !           123:   return (reason);
        !           124: }
        !           125: 
        !           126: static inline unsigned int
        !           127: ospf6_lsremove_to_spf_reason (struct ospf6_lsa *lsa)
        !           128: {
        !           129:   unsigned int reason = 0;
        !           130: 
        !           131:   switch (ntohs (lsa->header->type))
        !           132:     {
        !           133:     case OSPF6_LSTYPE_ROUTER:
        !           134:       reason = OSPF6_SPF_FLAGS_ROUTER_LSA_REMOVED;
        !           135:       break;
        !           136:     case OSPF6_LSTYPE_NETWORK:
        !           137:       reason = OSPF6_SPF_FLAGS_NETWORK_LSA_REMOVED;
        !           138:       break;
        !           139:     case OSPF6_LSTYPE_LINK:
        !           140:       reason = OSPF6_SPF_FLAGS_LINK_LSA_REMOVED;
        !           141:       break;
        !           142:     default:
        !           143:       break;
        !           144:     }
        !           145:   return (reason);
        !           146: }
        !           147: 
1.1       misho     148: extern void ospf6_spf_table_finish (struct ospf6_route_table *result_table);
                    149: extern void ospf6_spf_calculation (u_int32_t router_id,
                    150:                                    struct ospf6_route_table *result_table,
                    151:                                    struct ospf6_area *oa);
1.1.1.2 ! misho     152: extern void ospf6_spf_schedule (struct ospf6 *ospf, unsigned int reason);
1.1       misho     153: 
                    154: extern void ospf6_spf_display_subtree (struct vty *vty, const char *prefix,
                    155:                                        int rest, struct ospf6_vertex *v);
                    156: 
1.1.1.2 ! misho     157: extern void ospf6_spf_config_write (struct vty *vty);
1.1       misho     158: extern int config_write_ospf6_debug_spf (struct vty *vty);
                    159: extern void install_element_ospf6_debug_spf (void);
                    160: extern void ospf6_spf_init (void);
1.1.1.2 ! misho     161: extern void ospf6_spf_reason_string (unsigned int reason, char *buf, int size);
1.1       misho     162: 
                    163: #endif /* OSPF6_SPF_H */
                    164: 

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