]> git.proxmox.com Git - mirror_frr.git/commitdiff
osfpd: Install default route after second try instantly
authorDonatas Abraitis <donatas.abraitis@gmail.com>
Wed, 5 Sep 2018 15:01:47 +0000 (18:01 +0300)
committerDonatas Abraitis <donatas.abraitis@gmail.com>
Thu, 20 Sep 2018 11:30:42 +0000 (14:30 +0300)
Signed-off-by: Donatas Abraitis donatas.abraitis@gmail.com
ospfd/ospf_vty.c
ospfd/ospf_zebra.c

index aa877903fc07f20d6468082a8620d5b7be782838..e25d1a31dedf333b164a2708da6012f9ad1a25de 100644 (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);
 }
 
index 8c94a8ef9949bde227fa446aa0b05d7014a7e82e..b6968ff8c82d2fa253c1495ffd7b1dc4e3bd0df0 100644 (file)
@@ -744,8 +744,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);
 
@@ -759,30 +757,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);
@@ -792,6 +777,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
@@ -809,7 +796,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);