summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--interface-ip.c10
-rw-r--r--proto.c4
2 files changed, 10 insertions, 4 deletions
diff --git a/interface-ip.c b/interface-ip.c
index f1ed8d3..6efc3c5 100644
--- a/interface-ip.c
+++ b/interface-ip.c
@@ -516,8 +516,14 @@ error:
static int
addr_cmp(const void *k1, const void *k2, void *ptr)
{
- return memcmp(k1, k2, sizeof(struct device_addr) -
- offsetof(struct device_addr, flags));
+ const struct device_addr *a1 = k1;
+ const struct device_addr *a2 = k2;
+ const int cmp_offset = offsetof(struct device_addr, flags);
+ const int cmp_size = sizeof(struct device_addr) - cmp_offset;
+
+ if (a1->index != a2->index)
+ return a1->index - a2->index;
+ return memcmp(k1+cmp_offset, k2+cmp_offset, cmp_size);
}
static int
diff --git a/proto.c b/proto.c
index f7d27aa..01473f2 100644
--- a/proto.c
+++ b/proto.c
@@ -174,7 +174,7 @@ parse_static_address_option(struct interface *iface, struct blob_attr *attr,
}
addr->index = n_addr;
n_addr++;
- vlist_add(&iface->proto_ip.addr, &addr->node, &addr->flags);
+ vlist_add(&iface->proto_ip.addr, &addr->node, addr);
}
return n_addr;
@@ -275,7 +275,7 @@ parse_address_list(struct interface *iface, struct blob_attr *attr, bool v6,
addr->index = n_addr;
n_addr++;
- vlist_add(&iface->proto_ip.addr, &addr->node, &addr->flags);
+ vlist_add(&iface->proto_ip.addr, &addr->node, addr);
}
return n_addr;