diff options
Diffstat (limited to 'proto')
-rw-r--r-- | proto/ospf/iface.c | 6 | ||||
-rw-r--r-- | proto/ospf/topology.c | 4 |
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; |