From fcf22586200000f0d19ffed339524d2530ed0d6f Mon Sep 17 00:00:00 2001 From: Ondrej Zajicek Date: Mon, 18 Sep 2023 17:47:17 +0200 Subject: [PATCH] MPLS: Improve label range reconfiguration Allow to shorten label range over unused area. --- nest/mpls.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/nest/mpls.c b/nest/mpls.c index 788de7c1..bab6d128 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;