From 570f7598ebf2e2107ac9976d4d9def22072c5b02 Mon Sep 17 00:00:00 2001 From: paul Date: Sat, 25 Jan 2003 06:47:41 +0000 Subject: Paul Jakma: [zebra 17352] ospf network matching (aka need for peer /32 for PtP) change behaviour of network area N statement wrt to PtP. --- ospfd/ospfd.c | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) (limited to 'ospfd/ospfd.c') diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c index 19bc1e53..a1ad929d 100644 --- a/ospfd/ospfd.c +++ b/ospfd/ospfd.c @@ -665,7 +665,25 @@ ospf_network_unset (struct ospf *ospf, struct prefix_ipv4 *p, return 1; } - +/* Check whether interface matches given network + * returns: 1, true. 0, false + */ +int +ospf_network_match_iface(struct connected *co, struct prefix *net) +{ + /* 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 + */ + return ( + ((ifc_pointopoint (co) && + IPV4_ADDR_SAME ( &(co->destination->u.prefix4), &(net->u.prefix4))) + || prefix_match (net, co->address)) + ? 1 : 0 + ); +} + void ospf_network_run (struct ospf *ospf, struct prefix *p, struct ospf_area *area) { @@ -704,13 +722,9 @@ ospf_network_run (struct ospf *ospf, struct prefix *p, struct ospf_area *area) else addr = co->address; - if (p->family == co->address->family && - ! ospf_if_is_configured (&(addr->u.prefix4))) - if ((ifc_pointopoint (co) && - IPV4_ADDR_SAME (&(addr->u.prefix4), &(p->u.prefix4))) || - prefix_match (p, addr)) - { - struct ospf_interface *oi; + if (ospf_network_match_iface(co,p)) + { + struct ospf_interface *oi; oi = ospf_if_new (ifp, co->address); oi->connected = co; @@ -835,10 +849,7 @@ ospf_if_update () if (rn->info == NULL) continue; - if ((oi->type == OSPF_IFTYPE_POINTOPOINT - && IPV4_ADDR_SAME (&(co->destination->u.prefix4), - &(rn->p.u.prefix4))) - || prefix_match (&(rn->p), co->address)) + if (ospf_network_match_iface(co,&rn->p)) { found = 1; route_unlock_node (rn); -- cgit v1.2.1