File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / ospfd / ospf_route.h
Revision 1.1.1.3 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Nov 2 10:09:12 2016 UTC (7 years, 9 months ago) by misho
Branches: quagga, MAIN
CVS tags: v1_0_20160315, HEAD
quagga 1.0.20160315

    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:   ifindex_t 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, int);
  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 route_table *, 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>