From: Ondrej Zajicek Date: Mon, 18 Sep 2023 15:47:17 +0000 (+0200) Subject: MPLS: Improve label range reconfiguration X-Git-Tag: v2.14~23 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fcf22586200000f0d19ffed339524d2530ed0d6f;p=thirdparty%2Fbird.git MPLS: Improve label range reconfiguration Allow to shorten label range over unused area. --- diff --git a/nest/mpls.c b/nest/mpls.c index 788de7c13..bab6d1288 100644 --- a/nest/mpls.c +++ b/nest/mpls.c @@ -77,8 +77,7 @@ * * TODO: * - label range non-intersection check - * - better range reconfigurations (allow reduce ranges over unused labels) - * - protocols should do route refresh instead of resetart when reconfiguration + * - protocols should do route refresh instead of restart when reconfiguration * requires changing labels (e.g. different label range) * - registering static allocations * - checking range in static allocations @@ -349,9 +348,12 @@ mpls_find_range_(list *l, const char *name) } static int -mpls_reconfigure_range(struct mpls_domain *m UNUSED, struct mpls_range *r, struct mpls_range_config *cf) +mpls_reconfigure_range(struct mpls_domain *m, struct mpls_range *r, struct mpls_range_config *cf) { - if ((cf->start > r->lo) || (cf->start + cf->length < r->hi)) + uint last = lmap_last_one_in_range(&m->labels, r->lo, r->hi); + if (last == r->hi) last = 0; + + if ((cf->start > r->lo) || (cf->start + cf->length <= last)) return 0; cf->range = r;