summaryrefslogtreecommitdiff
path: root/nest/rt-attr.c
diff options
context:
space:
mode:
authorOndrej Zajicek (work) <santiago@crfreenet.org>2016-08-30 17:17:27 +0200
committerOndrej Zajicek (work) <santiago@crfreenet.org>2016-09-14 11:53:54 +0200
commit84cac51a51fc29349077e8cecadf1aed11f9b824 (patch)
tree68186ea208019211d06ad98df82df84ab255f5e6 /nest/rt-attr.c
parenta1839f3c61af66814a8c52b9ad28e59aab4ede0e (diff)
Nest: Keep multipath next hops sorted
Diffstat (limited to 'nest/rt-attr.c')
-rw-r--r--nest/rt-attr.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/nest/rt-attr.c b/nest/rt-attr.c
index 42b74f34..ab0069b5 100644
--- a/nest/rt-attr.c
+++ b/nest/rt-attr.c
@@ -302,6 +302,34 @@ mpnh_merge(struct mpnh *x, struct mpnh *y, int rx, int ry, int max, linpool *lp)
return root;
}
+void
+mpnh_insert(struct mpnh **n, struct mpnh *x)
+{
+ for (; *n; n = &((*n)->next))
+ {
+ int cmp = mpnh_compare_node(*n, x);
+
+ if (cmp < 0)
+ continue;
+ else if (cmp > 0)
+ break;
+ else
+ return;
+ }
+
+ x->next = *n;
+ *n = x;
+}
+
+int
+mpnh_is_sorted(struct mpnh *x)
+{
+ for (; x && x->next; x = x->next)
+ if (mpnh_compare_node(x, x->next) >= 0)
+ return 0;
+
+ return 1;
+}
static struct mpnh *
mpnh_copy(struct mpnh *o)