Annotation of embedaddon/quagga/ospfd/ospf_route.h, revision 1.1.1.3

1.1       misho       1: /*
                      2:  * OSPF routing table.
                      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_ROUTE_H
                     24: #define _ZEBRA_OSPF_ROUTE_H
                     25: 
                     26: #define OSPF_DESTINATION_ROUTER                1
                     27: #define OSPF_DESTINATION_NETWORK       2
                     28: #define OSPF_DESTINATION_DISCARD       3
                     29: 
                     30: #define OSPF_PATH_MIN                  0
                     31: #define OSPF_PATH_INTRA_AREA           1
                     32: #define OSPF_PATH_INTER_AREA           2
                     33: #define OSPF_PATH_TYPE1_EXTERNAL       3
                     34: #define OSPF_PATH_TYPE2_EXTERNAL       4
                     35: #define OSPF_PATH_MAX                  5
                     36: 
                     37: /* OSPF Path. */
                     38: struct ospf_path
                     39: {
                     40:   struct in_addr nexthop;
                     41:   struct in_addr adv_router;
1.1.1.3 ! misho      42:   ifindex_t ifindex;
1.1       misho      43: };
                     44: 
                     45: /* Below is the structure linked to every
                     46:    route node. Note that for Network routing
                     47:    entries a single ospf_route is kept, while
                     48:    for ABRs and ASBRs (Router routing entries),
                     49:    we link an instance of ospf_router_route
                     50:    where a list of paths is maintained, so
                     51: 
                     52:    nr->info is a (struct ospf_route *) for OSPF_DESTINATION_NETWORK
                     53:    but
                     54:    nr->info is a (struct ospf_router_route *) for OSPF_DESTINATION_ROUTER
                     55: */
                     56: 
                     57: struct route_standard
                     58: {
                     59:   /* Link Sate Origin. */
                     60:   struct lsa_header *origin;
                     61: 
                     62:   /* Associated Area. */
                     63:   struct in_addr area_id;      /* The area the route belongs to */
                     64: 
                     65:   /*  Area Type */
                     66:   int external_routing;
                     67: 
                     68:   /* Optional Capability. */
                     69:   u_char options;              /* Get from LSA header. */
                     70: 
                     71:   /*  */
                     72:   u_char flags;                /* From router-LSA */
                     73: };
                     74: 
                     75: struct route_external
                     76: {
                     77:   /* Link State Origin. */
                     78:   struct ospf_lsa *origin;
                     79: 
                     80:   /* Link State Cost Type2. */
                     81:   u_int32_t type2_cost;
                     82: 
                     83:   /* Tag value. */
                     84:   u_int32_t tag;
                     85: 
                     86:   /* ASBR route. */
                     87:   struct ospf_route *asbr;
                     88: };
                     89: 
                     90: struct ospf_route
                     91: {
                     92:   /* Create time. */
                     93:   time_t ctime;
                     94: 
                     95:   /* Modified time. */
                     96:   time_t mtime;
                     97: 
                     98:   /* Destination Type. */
                     99:   u_char type;
                    100: 
                    101:   /* Destination ID. */                /* i.e. Link State ID. */
                    102:   struct in_addr id;
                    103: 
                    104:   /* Address Mask. */
                    105:   struct in_addr mask;         /* Only valid for networks. */
                    106: 
                    107:   /* Path Type. */
                    108:   u_char path_type;
                    109: 
                    110:   /* List of Paths. */
                    111:   struct list *paths;
                    112: 
                    113:   /* Link State Cost. */
                    114:   u_int32_t cost;              /* i.e. metric. */
                    115: 
                    116:   /* Route specific info. */
                    117:   union
                    118:   {
                    119:     struct route_standard std;
                    120:     struct route_external ext;
                    121:   } u;
                    122: };
                    123: 
                    124: extern struct ospf_path *ospf_path_new (void);
                    125: extern void ospf_path_free (struct ospf_path *);
                    126: extern struct ospf_path *ospf_path_lookup (struct list *, struct ospf_path *);
                    127: extern struct ospf_route *ospf_route_new (void);
                    128: extern void ospf_route_free (struct ospf_route *);
                    129: extern void ospf_route_delete (struct route_table *);
                    130: extern void ospf_route_table_free (struct route_table *);
                    131: 
                    132: extern void ospf_route_install (struct ospf *, struct route_table *);
                    133: extern void ospf_route_table_dump (struct route_table *);
                    134: 
                    135: extern void ospf_intra_add_router (struct route_table *, struct vertex *,
                    136:                                   struct ospf_area *);
                    137: 
                    138: extern void ospf_intra_add_transit (struct route_table *, struct vertex *,
                    139:                                    struct ospf_area *);
                    140: 
                    141: extern void ospf_intra_add_stub (struct route_table *,
                    142:                                 struct router_lsa_link *, struct vertex *,
                    143:                                 struct ospf_area *,
1.1.1.2   misho     144:                                 int parent_is_root, int);
1.1       misho     145: 
                    146: extern int ospf_route_cmp (struct ospf *, struct ospf_route *,
                    147:                           struct ospf_route *);
                    148: extern void ospf_route_copy_nexthops (struct ospf_route *, struct list *);
                    149: extern void ospf_route_copy_nexthops_from_vertex (struct ospf_route *,
                    150:                                                  struct vertex *);
                    151: 
                    152: extern void ospf_route_subst (struct route_node *, struct ospf_route *,
                    153:                              struct ospf_route *);
                    154: extern void ospf_route_add (struct route_table *, struct prefix_ipv4 *,
                    155:                            struct ospf_route *, struct ospf_route *);
                    156: 
                    157: extern void ospf_route_subst_nexthops (struct ospf_route *, struct list *);
                    158: extern void ospf_prune_unreachable_networks (struct route_table *);
                    159: extern void ospf_prune_unreachable_routers (struct route_table *);
                    160: extern int ospf_add_discard_route (struct route_table *, struct ospf_area *,
                    161:                                   struct prefix_ipv4 *);
1.1.1.2   misho     162: extern void ospf_delete_discard_route (struct route_table *, struct prefix_ipv4 *);
1.1       misho     163: extern int ospf_route_match_same (struct route_table *, struct prefix_ipv4 *,
                    164:                                  struct ospf_route *);
                    165: 
                    166: #endif /* _ZEBRA_OSPF_ROUTE_H */

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