[PATCH netifd 2/4] proto: rework parse_addr to return struct device_addr
Hans Dedecker
dedeckeh at gmail.com
Wed Oct 21 15:10:03 EDT 2020
On Wed, Oct 21, 2020 at 5:08 AM Yousong Zhou <yszhou4tech at gmail.com> wrote:
>
> This is a preparation for the next commit to record address index for
> the returned device_addr struct
>
> Signed-off-by: Yousong Zhou <yszhou4tech at gmail.com>
Acked-by: Hans Dedecker <dedeckeh at gmail.com>
> ---
> proto.c | 26 +++++++++++++++-----------
> 1 file changed, 15 insertions(+), 11 deletions(-)
>
> diff --git a/proto.c b/proto.c
> index cbc92b1..d80cae0 100644
> --- a/proto.c
> +++ b/proto.c
> @@ -116,16 +116,16 @@ alloc_device_addr(bool v6, bool ext)
> return addr;
> }
>
> -static bool
> -parse_addr(struct interface *iface, const char *str, bool v6, int mask,
> - bool ext, uint32_t broadcast, uint32_t ptp, bool deprecated)
> +static struct device_addr *
> +parse_addr(const char *str, bool v6, int mask, bool ext, uint32_t broadcast,
> + uint32_t ptp, bool deprecated)
> {
> struct device_addr *addr;
> int af = v6 ? AF_INET6 : AF_INET;
>
> addr = alloc_device_addr(v6, ext);
> if (!addr)
> - return false;
> + return NULL;
>
> addr->mask = mask;
> if (!parse_ip_and_netmask(af, str, &addr->addr, &addr->mask))
> @@ -143,14 +143,12 @@ parse_addr(struct interface *iface, const char *str, bool v6, int mask,
> if (deprecated)
> addr->preferred_until = system_get_rtime();
>
> - vlist_add(&iface->proto_ip.addr, &addr->node, &addr->flags);
> - return true;
> + return addr;
>
> error:
> - interface_add_error(iface, "proto", "INVALID_ADDRESS", &str, 1);
> free(addr);
>
> - return false;
> + return NULL;
> }
>
> static int
> @@ -159,6 +157,8 @@ parse_static_address_option(struct interface *iface, struct blob_attr *attr,
> uint32_t ptp, bool deprecated)
> {
> struct blob_attr *cur;
> + struct device_addr *addr;
> + const char *str;
> int n_addr = 0;
> int rem;
>
> @@ -166,10 +166,14 @@ parse_static_address_option(struct interface *iface, struct blob_attr *attr,
> if (blobmsg_type(cur) != BLOBMSG_TYPE_STRING)
> return -1;
>
> - n_addr++;
> - if (!parse_addr(iface, blobmsg_data(cur), v6, netmask, ext,
> - broadcast, ptp, deprecated))
> + str = blobmsg_data(cur);
> + addr = parse_addr(str, v6, netmask, ext, broadcast, ptp, deprecated);
> + if (addr == NULL) {
> + interface_add_error(iface, "proto", "INVALID_ADDRESS", &str, 1);
> return -1;
> + }
> + n_addr++;
> + vlist_add(&iface->proto_ip.addr, &addr->node, &addr->flags);
> }
>
> return n_addr;
More information about the openwrt-devel
mailing list