Merge pull request #2978 from ton31337/fix/default_originate_after_second_enter

osfpd: Install default route after second try instantly
This commit is contained in:
David Lamparter 2018-09-21 22:57:28 +02:00 committed by GitHub
commit fc81954dd1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 17 deletions

View File

@ -8201,6 +8201,8 @@ DEFUN (no_ospf_redistribute_source,
return CMD_SUCCESS;
ospf_routemap_unset(red);
ospf_redist_del(ospf, source, 0);
return ospf_redistribute_unset(ospf, source, 0);
}
@ -8315,6 +8317,8 @@ DEFUN (no_ospf_redistribute_instance_source,
return CMD_SUCCESS;
ospf_routemap_unset(red);
ospf_redist_del(ospf, source, instance);
return ospf_redistribute_unset(ospf, source, instance);
}
@ -8447,6 +8451,8 @@ DEFUN (no_ospf_default_information_originate,
return CMD_SUCCESS;
ospf_routemap_unset(red);
ospf_redist_del(ospf, DEFAULT_ROUTE, 0);
return ospf_redistribute_default_unset(ospf);
}

View File

@ -740,8 +740,6 @@ int ospf_redistribute_unset(struct ospf *ospf, int type,
zlog_debug("Redistribute[%s][%d] vrf id %u: Stop",
ospf_redist_string(type), instance, ospf->vrf_id);
ospf_redist_del(ospf, type, instance);
/* Remove the routes from OSPF table. */
ospf_redistribute_withdraw(ospf, type, instance);
@ -755,30 +753,17 @@ int ospf_redistribute_unset(struct ospf *ospf, int type,
int ospf_redistribute_default_set(struct ospf *ospf, int originate, int mtype,
int mvalue)
{
struct ospf_redist *red;
ospf->default_originate = originate;
red = ospf_redist_add(ospf, DEFAULT_ROUTE, 0);
red->dmetric.type = mtype;
red->dmetric.value = mvalue;
ospf_external_add(ospf, DEFAULT_ROUTE, 0);
if (ospf_is_type_redistributed(ospf, DEFAULT_ROUTE, 0)) {
/* if ospf->default_originate changes value, is calling
ospf_external_lsa_refresh_default sufficient to implement
the change? */
ospf_external_lsa_refresh_default(ospf);
if (ospf_is_type_redistributed(ospf, DEFAULT_ROUTE, 0))
if (IS_DEBUG_OSPF(zebra, ZEBRA_REDISTRIBUTE))
zlog_debug(
"Redistribute[%s]: Refresh Type[%d], Metric[%d]",
ospf_redist_string(DEFAULT_ROUTE),
metric_type(ospf, DEFAULT_ROUTE, 0),
metric_value(ospf, DEFAULT_ROUTE, 0));
return CMD_SUCCESS;
}
zclient_redistribute_default(ZEBRA_REDISTRIBUTE_DEFAULT_ADD, zclient,
ospf->vrf_id);
@ -788,6 +773,8 @@ int ospf_redistribute_default_set(struct ospf *ospf, int originate, int mtype,
metric_type(ospf, DEFAULT_ROUTE, 0),
metric_value(ospf, DEFAULT_ROUTE, 0));
ospf_external_lsa_refresh_default(ospf);
if (ospf->router_id.s_addr == 0)
ospf->external_origin |= (1 << DEFAULT_ROUTE);
else
@ -805,7 +792,6 @@ int ospf_redistribute_default_unset(struct ospf *ospf)
return CMD_SUCCESS;
ospf->default_originate = DEFAULT_ORIGINATE_NONE;
ospf_redist_del(ospf, DEFAULT_ROUTE, 0);
zclient_redistribute_default(ZEBRA_REDISTRIBUTE_DEFAULT_DELETE, zclient,
ospf->vrf_id);