summaryrefslogtreecommitdiff
path: root/ospfd/ospf_zebra.c
diff options
context:
space:
mode:
Diffstat (limited to 'ospfd/ospf_zebra.c')
-rw-r--r--ospfd/ospf_zebra.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/ospfd/ospf_zebra.c b/ospfd/ospf_zebra.c
index c7e6bd9cbf..e8e2fbeaa6 100644
--- a/ospfd/ospf_zebra.c
+++ b/ospfd/ospf_zebra.c
@@ -696,6 +696,7 @@ int ospf_redistribute_check(struct ospf *ospf, struct external_info *ei,
struct ospf_redist *red;
uint8_t type = is_prefix_default(&ei->p) ? DEFAULT_ROUTE : ei->type;
unsigned short instance = is_prefix_default(&ei->p) ? 0 : ei->instance;
+ route_tag_t saved_tag = 0;
if (changed)
*changed = 0;
@@ -726,6 +727,10 @@ int ospf_redistribute_check(struct ospf *ospf, struct external_info *ei,
save_values = ei->route_map_set;
ospf_reset_route_map_set_values(&ei->route_map_set);
+ saved_tag = ei->tag;
+ /* Resetting with original route tag */
+ ei->tag = ei->orig_tag;
+
/* apply route-map if needed */
red = ospf_redist_lookup(ospf, type, instance);
if (red && ROUTEMAP_NAME(red)) {
@@ -747,9 +752,13 @@ int ospf_redistribute_check(struct ospf *ospf, struct external_info *ei,
}
/* check if 'route-map set' changed something */
- if (changed)
+ if (changed) {
*changed = !ospf_route_map_set_compare(
&ei->route_map_set, &save_values);
+
+ /* check if tag is modified */
+ *changed |= (saved_tag != ei->tag);
+ }
}
return 1;