[PATCH netifd 4/4] interface: proto_ip: order by address index first
Hans Dedecker
dedeckeh at gmail.com
Wed Oct 21 15:14:07 EDT 2020
On Wed, Oct 21, 2020 at 5:08 AM Yousong Zhou <yszhou4tech at gmail.com> wrote:
>
> At the moment, dnsmasq initscript generates dhcp-range for an interface
> by inspecting first address of that interface from netifd ubus output.
>
> Order by address index as specified in the uci config make netifd ubus
> output consistent with linux network interfaces' primary/secondary
> address settings. More importantly, the ubus output and dnsmasq config
> generation will be more predictable.
>
> Signed-off-by: Yousong Zhou <yszhou4tech at gmail.com>
Acked-by: Hans Dedecker <dedeckeh at gmail.com>
> ---
> interface-ip.c | 11 +++++++++--
> proto.c | 4 ++--
> 2 files changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/interface-ip.c b/interface-ip.c
> index f1ed8d3..35834a5 100644
> --- a/interface-ip.c
> +++ b/interface-ip.c
> @@ -516,8 +516,15 @@ 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;
> + }
small nitpick: remove the brackets to keep in line with existing coding style
> + 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;
More information about the openwrt-devel
mailing list