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

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;
        !            42:   unsigned int ifindex;
        !            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 *,
        !           144:                                 int parent_is_root);
        !           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 *);
        !           162: extern void ospf_delete_discard_route (struct prefix_ipv4 *);
        !           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>