summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--proto/ospf/iface.c6
-rw-r--r--proto/ospf/topology.c4
2 files changed, 7 insertions, 3 deletions
diff --git a/proto/ospf/iface.c b/proto/ospf/iface.c
index dfc892aa..656184c6 100644
--- a/proto/ospf/iface.c
+++ b/proto/ospf/iface.c
@@ -281,10 +281,16 @@ void
ospf_iface_remove(struct ospf_iface *ifa)
{
struct ospf_proto *p = ifa->oa->po;
+ int i;
if (ifa->type == OSPF_IT_VLINK)
OSPF_TRACE(D_EVENTS, "Removing vlink to %R via area %R", ifa->vid, ifa->voa->areaid);
+ /* Release LSAs from flood queue */
+ if (!ifa->stub)
+ for (i = 0; i < ifa->flood_queue_used; i++)
+ ifa->flood_queue[i]->ret_count--;
+
ospf_iface_sm(ifa, ISM_DOWN);
rem_node(NODE ifa);
rfree(ifa->pool);
diff --git a/proto/ospf/topology.c b/proto/ospf/topology.c
index c21c23d5..0613d34d 100644
--- a/proto/ospf/topology.c
+++ b/proto/ospf/topology.c
@@ -1177,9 +1177,7 @@ use_gw_for_fwaddr(struct ospf_proto *p, ip_addr gw, struct iface *iface)
WALK_LIST(ifa, p->iface_list)
if ((ifa->iface == iface) &&
- ((ifa->type == OSPF_IT_BCAST) || (ifa->type == OSPF_IT_NBMA)) &&
- (!ospf_is_v2(p) || ipa_in_net(gw, ifa->addr->prefix, ifa->addr->pxlen)) &&
- (!ifa->cf->stub))
+ (!ospf_is_v2(p) || ipa_in_net(gw, ifa->addr->prefix, ifa->addr->pxlen)))
return 1;
return 0;