summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikael Magnusson <mikma@users.sourceforge.net>2023-11-25 23:41:45 +0100
committerMikael Magnusson <mikma@users.sourceforge.net>2023-11-25 23:41:45 +0100
commit9db9a7c08c586690cdb7e357f11071597b389ea1 (patch)
tree8828e45286c9a5e67afec4f0079039c1377f288b
parentba91f21ea97972e3705420c906b2eecafa85c4b8 (diff)
parentfcf22586200000f0d19ffed339524d2530ed0d6f (diff)
Merge commit 'fcf22586' into wireguard-next-tmp7-1
-rw-r--r--nest/mpls.c10
1 files 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;