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>