mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-12 05:34:41 +00:00
Merge pull request #6423 from rgirada/ospf_tag
ospfd: Route-tag is not set to external routes when applied using route maps
This commit is contained in:
commit
4244e5484f
@ -149,6 +149,7 @@ ospf_external_info_add(struct ospf *ospf, uint8_t type, unsigned short instance,
|
|||||||
new->ifindex = ifindex;
|
new->ifindex = ifindex;
|
||||||
new->nexthop = nexthop;
|
new->nexthop = nexthop;
|
||||||
new->tag = tag;
|
new->tag = tag;
|
||||||
|
new->orig_tag = tag;
|
||||||
|
|
||||||
/* we don't unlock rn from the get() because we're attaching the info */
|
/* we don't unlock rn from the get() because we're attaching the info */
|
||||||
if (rn)
|
if (rn)
|
||||||
|
@ -46,6 +46,9 @@ struct external_info {
|
|||||||
/* Additional Route tag. */
|
/* Additional Route tag. */
|
||||||
route_tag_t tag;
|
route_tag_t tag;
|
||||||
|
|
||||||
|
/* Actual tag received from zebra*/
|
||||||
|
route_tag_t orig_tag;
|
||||||
|
|
||||||
struct route_map_set_values route_map_set;
|
struct route_map_set_values route_map_set;
|
||||||
#define ROUTEMAP_METRIC(E) (E)->route_map_set.metric
|
#define ROUTEMAP_METRIC(E) (E)->route_map_set.metric
|
||||||
#define ROUTEMAP_METRIC_TYPE(E) (E)->route_map_set.metric_type
|
#define ROUTEMAP_METRIC_TYPE(E) (E)->route_map_set.metric_type
|
||||||
|
@ -696,6 +696,7 @@ int ospf_redistribute_check(struct ospf *ospf, struct external_info *ei,
|
|||||||
struct ospf_redist *red;
|
struct ospf_redist *red;
|
||||||
uint8_t type = is_prefix_default(&ei->p) ? DEFAULT_ROUTE : ei->type;
|
uint8_t type = is_prefix_default(&ei->p) ? DEFAULT_ROUTE : ei->type;
|
||||||
unsigned short instance = is_prefix_default(&ei->p) ? 0 : ei->instance;
|
unsigned short instance = is_prefix_default(&ei->p) ? 0 : ei->instance;
|
||||||
|
route_tag_t saved_tag = 0;
|
||||||
|
|
||||||
if (changed)
|
if (changed)
|
||||||
*changed = 0;
|
*changed = 0;
|
||||||
@ -726,6 +727,10 @@ int ospf_redistribute_check(struct ospf *ospf, struct external_info *ei,
|
|||||||
save_values = ei->route_map_set;
|
save_values = ei->route_map_set;
|
||||||
ospf_reset_route_map_set_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 */
|
/* apply route-map if needed */
|
||||||
red = ospf_redist_lookup(ospf, type, instance);
|
red = ospf_redist_lookup(ospf, type, instance);
|
||||||
if (red && ROUTEMAP_NAME(red)) {
|
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 */
|
/* check if 'route-map set' changed something */
|
||||||
if (changed)
|
if (changed) {
|
||||||
*changed = !ospf_route_map_set_compare(
|
*changed = !ospf_route_map_set_compare(
|
||||||
&ei->route_map_set, &save_values);
|
&ei->route_map_set, &save_values);
|
||||||
|
|
||||||
|
/* check if tag is modified */
|
||||||
|
*changed |= (saved_tag != ei->tag);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user