diff options
Diffstat (limited to 'ospfd')
-rw-r--r-- | ospfd/ospfd.c | 62 | ||||
-rw-r--r-- | ospfd/ospfd.h | 1 |
2 files changed, 8 insertions, 55 deletions
diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c index b86986b5..a7553e73 100644 --- a/ospfd/ospfd.c +++ b/ospfd/ospfd.c @@ -71,6 +71,8 @@ static void ospf_area_free (struct ospf_area *); static void ospf_network_run (struct prefix *, struct ospf_area *); static void ospf_network_run_interface (struct prefix *, struct ospf_area *, struct interface *); +static int ospf_network_match_iface (const struct connected *, + const struct prefix *); static void ospf_finish_final (struct ospf *); #define OSPF_EXTERNAL_LSA_ORIGINATE_DELAY 1 @@ -589,7 +591,7 @@ ospf_area_new (struct ospf *ospf, struct in_addr area_id) return new; } -void +static void ospf_area_free (struct ospf_area *area) { struct route_node *rn; @@ -719,7 +721,7 @@ ospf_network_new (struct in_addr area_id, int format) return new; } -void +static void ospf_network_free (struct ospf *ospf, struct ospf_network *network) { ospf_area_check_free (ospf, network->area_id); @@ -832,62 +834,14 @@ ospf_network_unset (struct ospf *ospf, struct prefix_ipv4 *p, /* Check whether interface matches given network * returns: 1, true. 0, false */ -int -ospf_network_match_iface(struct connected *co, struct prefix *net) +static int +ospf_network_match_iface(const struct connected *co, const struct prefix *net) { -/* #define COMPATIBILITY_MODE */ - /* The old code used to have a special case for PtP interfaces: - - if (if_is_pointopoint (co->ifp) && co->destination && - IPV4_ADDR_SAME ( &(co->destination->u.prefix4), &(net->u.prefix4))) - return 1; - - The new approach is much more general. If a peer address is supplied, - then we are routing to that prefix, so that's the address to compare - against (not the local address, which may not be unique). - */ -#ifndef COMPATIBILITY_MODE /* new approach: more elegant and conceptually clean */ return prefix_match(net, CONNECTED_PREFIX(co)); -#else /* COMPATIBILITY_MODE */ - /* match old (strange?) behavior */ - - /* Behaviour to match both Cisco where: - * iface address lies within network specified -> ospf - * and zebra 0.9[2ish-3]: - * PtP special case: network specified == iface peer addr -> ospf - */ - - /* For PtP, match if peer address matches network address exactly. - * This can be addr/32 or addr/p for p < 32, but the addr must match - * exactly; this is not a test for falling within the prefix. This - * test is solely for compatibility with zebra. - */ - if (CONNECTED_PEER(co) && - IPV4_ADDR_SAME ( &(co->destination->u.prefix4), &(net->u.prefix4))) - return 1; - -#if 0 - /* Decline to accept PtP if dst address does not match the - * prefix. (ifdefed out because this is a workaround, not the - * desired behavior.) */ - if (if_is_pointopoint (co->ifp) && - ! prefix_match (net, co->destination)) - return 0; -#endif - - /* If the address is within the prefix, accept. Note that this - * applies to PtP as well as other types. - */ - if (prefix_match (net, co->address)) - return 1; - - return 0; /* no match */ - -#endif /* COMPATIBILITY_MODE */ } -void +static void ospf_network_run_interface (struct prefix *p, struct ospf_area *area, struct interface *ifp) { @@ -944,7 +898,7 @@ ospf_network_run_interface (struct prefix *p, struct ospf_area *area, } } -void +static void ospf_network_run (struct prefix *p, struct ospf_area *area) { struct interface *ifp; diff --git a/ospfd/ospfd.h b/ospfd/ospfd.h index f81c682c..b24b3ced 100644 --- a/ospfd/ospfd.h +++ b/ospfd/ospfd.h @@ -558,7 +558,6 @@ extern struct ospf *ospf_lookup (void); extern struct ospf *ospf_get (void); extern void ospf_finish (struct ospf *); extern void ospf_router_id_update (struct ospf *ospf); -extern int ospf_network_match_iface (struct connected *, struct prefix *); extern int ospf_network_set (struct ospf *, struct prefix_ipv4 *, struct in_addr); extern int ospf_network_unset (struct ospf *, struct prefix_ipv4 *, |