]> git.puffer.fish Git - matthieu/frr.git/commitdiff
2004-11-04 Paul Jakma <paul@dishone.st>
authorpaul <paul>
Thu, 4 Nov 2004 20:35:31 +0000 (20:35 +0000)
committerpaul <paul>
Thu, 4 Nov 2004 20:35:31 +0000 (20:35 +0000)
* ospfd.c: (ospf_network_match_iface) revert to previous network
          statement match behaviour.

ospfd/ChangeLog
ospfd/ospfd.c

index e3efeb10534de933b271917f4527530fcfab81f0..3adaeaf7b4cab70a7a671738fec5172c311088f5 100644 (file)
@@ -1,3 +1,8 @@
+2004-11-04 Paul Jakma <paul@dishone.st>
+
+       * ospfd.c: (ospf_network_match_iface) revert to previous network
+          statement match behaviour.
+
 2004-11-02 Paul Jakma <paul@dishone.st>
 
        * ospf_packet.c: (ospf_write_frags) remove iov arg, msg already points
index 054c3316c3dc323e7032a92bf10829ec44e6b577..34a36ea4273c6d133e3c47c5f8e860c5e46a19af 100644 (file)
@@ -686,17 +686,31 @@ ospf_network_match_iface(struct connected *co, struct prefix *net)
    *   PtP special case: network specified == iface peer addr -> ospf
    */
 
-  /* For PtP, match if peer address matches network address exactly
-   * in situations where the peer address is available and the prefix
-   * length is 32 (i.e. a dedicated subnet has not been assigned).
-   * This is not a test for falling within the prefix.  This
+  /* 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 not PtP, accept if the address is within the prefix.
    */
-  return CONNECTED_POINTOPOINT_HOST(co) ?
-        IPV4_ADDR_SAME ( &(co->destination->u.prefix4), &(net->u.prefix4)) :
-        prefix_match (net, co->address);
+  if (if_is_pointopoint (co->ifp) && co->destination &&
+      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 */
 }
 
 void