ospfd: re-fix default origination check

ospf->external[DEFAULT_ROUTE] and zclient->default_information don't
line up with each other; the former is only used for "originate always".

Fixes: #4237
Signed-off-by: David Lamparter <equinox@diac24.net>
This commit is contained in:
David Lamparter 2019-07-29 14:44:26 +02:00
parent fd9a1d5afe
commit 5af13f54dc

View File

@ -83,6 +83,9 @@ struct external_info *ospf_external_info_check(struct ospf *ospf,
struct as_external_lsa *al;
struct prefix_ipv4 p;
struct route_node *rn;
struct list *ext_list;
struct listnode *node;
struct ospf_external *ext;
int type;
al = (struct as_external_lsa *)lsa->data;
@ -105,10 +108,6 @@ struct external_info *ospf_external_info_check(struct ospf *ospf,
ospf->vrf_id));
// Pending: check for MI above.
if (redist_on) {
struct list *ext_list;
struct listnode *node;
struct ospf_external *ext;
ext_list = ospf->external[type];
if (!ext_list)
continue;
@ -129,6 +128,22 @@ struct external_info *ospf_external_info_check(struct ospf *ospf,
}
}
if (is_prefix_default(&p) && ospf->external[DEFAULT_ROUTE]) {
ext_list = ospf->external[DEFAULT_ROUTE];
for (ALL_LIST_ELEMENTS_RO(ext_list, node, ext)) {
if (!ext->external_info)
continue;
rn = route_node_lookup(ext->external_info,
(struct prefix *)&p);
if (!rn)
continue;
route_unlock_node(rn);
if (rn->info != NULL)
return (struct external_info *)rn->info;
}
}
return NULL;
}