ospf_route.h
上传用户:xiaozhuqw
上传日期:2009-11-15
资源大小:1338k
文件大小:4k
源码类别:

网络

开发平台:

Unix_Linux

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