diff options
author | Ondrej Zajicek (work) <santiago@crfreenet.org> | 2016-08-30 17:17:27 +0200 |
---|---|---|
committer | Ondrej Zajicek (work) <santiago@crfreenet.org> | 2016-09-14 11:53:54 +0200 |
commit | 84cac51a51fc29349077e8cecadf1aed11f9b824 (patch) | |
tree | 68186ea208019211d06ad98df82df84ab255f5e6 /nest/rt-attr.c | |
parent | a1839f3c61af66814a8c52b9ad28e59aab4ede0e (diff) |
Nest: Keep multipath next hops sorted
Diffstat (limited to 'nest/rt-attr.c')
-rw-r--r-- | nest/rt-attr.c | 28 |
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) |