VTY_GET_INTEGER ("metric", metric, argv[1]);
red = bgp_redist_add(vty->index, AFI_IP, type, 0);
- bgp_redistribute_metric_set (red, metric);
+ bgp_redistribute_metric_set(vty->index, red, AFI_IP, type, metric);
return bgp_redistribute_set (AFI_IP, type, 0);
}
red = bgp_redist_add(vty->index, AFI_IP, type, 0);
bgp_redistribute_rmap_set (red, argv[1]);
- bgp_redistribute_metric_set (red, metric);
+ bgp_redistribute_metric_set(vty->index, red, AFI_IP, type, metric);
return bgp_redistribute_set (AFI_IP, type, 0);
}
VTY_GET_INTEGER ("metric", metric, argv[1]);
red = bgp_redist_add(vty->index, AFI_IP, type, 0);
- bgp_redistribute_metric_set (red, metric);
+ bgp_redistribute_metric_set(vty->index, red, AFI_IP, type, metric);
bgp_redistribute_rmap_set (red, argv[2]);
return bgp_redistribute_set (AFI_IP, type, 0);
}
VTY_GET_INTEGER ("metric", metric, argv[2]);
red = bgp_redist_add(vty->index, AFI_IP, protocol, instance);
- bgp_redistribute_metric_set (red, metric);
+ bgp_redistribute_metric_set(vty->index, red, AFI_IP, protocol, metric);
return bgp_redistribute_set (AFI_IP, protocol, instance);
}
red = bgp_redist_add(vty->index, AFI_IP, protocol, instance);
bgp_redistribute_rmap_set (red, argv[2]);
- bgp_redistribute_metric_set (red, metric);
+ bgp_redistribute_metric_set(vty->index, red, AFI_IP, protocol, metric);
return bgp_redistribute_set (AFI_IP, protocol, instance);
}
VTY_GET_INTEGER ("metric", metric, argv[2]);
red = bgp_redist_add(vty->index, AFI_IP, protocol, instance);
- bgp_redistribute_metric_set (red, metric);
+ bgp_redistribute_metric_set(vty->index, red, AFI_IP, protocol, metric);
bgp_redistribute_rmap_set (red, argv[3]);
return bgp_redistribute_set (AFI_IP, protocol, instance);
}
VTY_GET_INTEGER ("metric", metric, argv[1]);
red = bgp_redist_add(vty->index, AFI_IP6, type, 0);
- bgp_redistribute_metric_set (red, metric);
+ bgp_redistribute_metric_set(vty->index, red, AFI_IP6, type, metric);
return bgp_redistribute_set (AFI_IP6, type, 0);
}
red = bgp_redist_add(vty->index, AFI_IP6, type, 0);
bgp_redistribute_rmap_set (red, argv[1]);
- bgp_redistribute_metric_set (red, metric);
+ bgp_redistribute_metric_set(vty->index, red, AFI_IP6, type, metric);
return bgp_redistribute_set (AFI_IP6, type, 0);
}
VTY_GET_INTEGER ("metric", metric, argv[1]);
red = bgp_redist_add(vty->index, AFI_IP6, type, 0);
- bgp_redistribute_metric_set (red, metric);
+ bgp_redistribute_metric_set(vty->index, red, AFI_IP6, SAFI_UNICAST, metric);
bgp_redistribute_rmap_set (red, argv[2]);
return bgp_redistribute_set (AFI_IP6, type, 0);
}
/* Redistribute with metric specification. */
int
-bgp_redistribute_metric_set (struct bgp_redist *red, u_int32_t metric)
+bgp_redistribute_metric_set (struct bgp *bgp, struct bgp_redist *red, afi_t afi,
+ int type, u_int32_t metric)
{
+ struct bgp_node *rn;
+ struct bgp_info *ri;
+
if (red->redist_metric_flag
&& red->redist_metric == metric)
return 0;
red->redist_metric_flag = 1;
red->redist_metric = metric;
+ for (rn = bgp_table_top(bgp->rib[afi][SAFI_UNICAST]); rn; rn = bgp_route_next(rn)) {
+ for (ri = rn->info; ri; ri = ri->next) {
+ if (ri->sub_type == BGP_ROUTE_REDISTRIBUTE && ri->type == type) {
+ ri->attr->med = red->redist_metric;
+ bgp_info_set_flag(rn, ri, BGP_INFO_ATTR_CHANGED);
+ bgp_process(bgp, rn, afi, SAFI_UNICAST);
+ }
+ }
+ }
+
return 1;
}