Hello,

Joan Lledó, le sam. 27 juin 2026 12:07:58 +0200, a ecrit:
>     Drop the now-unused
>     addr6_prefix_len parameter from configure_device()

?? Isn't this needed?

It's not the size of the ipv6 address, but the amount of bits in the
network part of it.

Currently it's mostly hardcoded to 64, but we should really aim to
support different prefix sizes.

Samuel


> and the addr6
>     parameter handling in update_if_args, and update all call sites in
>     iioctl-ops.c, options.c and pfinet-ops.c accordingly.
> ---
>  lwip/iioctl-ops.c | 54 +++++++++++++++++++++--------------------
>  lwip/lwip-util.c  | 62 +++++++++++++++++++++++------------------------
>  lwip/lwip-util.h  | 16 ++++++------
>  lwip/options.c    | 20 +++++++--------
>  lwip/options.h    |  2 +-
>  lwip/pfinet-ops.c | 19 +++++++++------
>  6 files changed, 88 insertions(+), 85 deletions(-)
> 
> diff --git a/lwip/iioctl-ops.c b/lwip/iioctl-ops.c
> index 875bfb75..9f62d059 100644
> --- a/lwip/iioctl-ops.c
> +++ b/lwip/iioctl-ops.c
> @@ -81,7 +81,7 @@ siocgifXaddr (struct sock_user *user,
>    struct sockaddr_in *sin = (struct sockaddr_in *) addr;
>    size_t buflen = sizeof (struct sockaddr);
>    struct netif *netif;
> -  uint32_t addrs[5];
> +  ip4_addr_t addrs[5];
>  
>    if (!user)
>      return EOPNOTSUPP;
> @@ -104,7 +104,7 @@ siocgifXaddr (struct sock_user *user,
>      {
>        inquire_device (netif, &addrs[ADDR], &addrs[NETMASK], &addrs[DSTADDR],
>                     &addrs[BRDADDR], &addrs[GWADDR], 0, 0);
> -      sin->sin_addr.s_addr = addrs[type];
> +      sin->sin_addr.s_addr = addrs[type].addr;
>      }
>  
>    return err;
> @@ -128,7 +128,7 @@ siocsifXaddr (struct sock_user *user,
>    struct sockaddr_in sin;
>    size_t buflen = sizeof (struct sockaddr_in);
>    struct netif *netif;
> -  uint32_t ipv4_addrs[5];
> +  ip4_addr_t ipv4_addrs[5];
>  
>    if (!user)
>      return EOPNOTSUPP;
> @@ -160,11 +160,11 @@ siocsifXaddr (struct sock_user *user,
>                     &ipv4_addrs[DSTADDR], &ipv4_addrs[BRDADDR],
>                     &ipv4_addrs[GWADDR], 0, 0);
>  
> -      ipv4_addrs[type] = ((struct sockaddr_in *) addr)->sin_addr.s_addr;
> +      ipv4_addrs[type].addr = ((struct sockaddr_in *) addr)->sin_addr.s_addr;
>  
>        err = configure_device (netif, ipv4_addrs[ADDR], ipv4_addrs[NETMASK],
>                             ipv4_addrs[DSTADDR], ipv4_addrs[BRDADDR],
> -                           ipv4_addrs[GWADDR], 0, 0);
> +                           ipv4_addrs[GWADDR], 0);
>      }
>  
>    return err;
> @@ -212,7 +212,7 @@ lwip_S_rioctl_siocaddrt (struct sock_user *user,
>    struct netif *netif;
>    struct sockaddr sa;
>    size_t buflen = sizeof (struct sockaddr);
> -  uint32_t ipv4_addrs[5];
> +  ip4_addr_t ipv4_addrs[5];
>  
>    if (!user)
>      return EOPNOTSUPP;
> @@ -247,11 +247,12 @@ lwip_S_rioctl_siocaddrt (struct sock_user *user,
>         */
>  
>        /* masking current IP must match given dest to be valid */
> -      if (ipv4_addrs[ADDR] != INADDR_ANY && ipv4_addrs[ADDR] != INADDR_NONE
> -       && (ipv4_addrs[ADDR] & route.rt_mask) != route.rt_dest)
> +      if (ipv4_addrs[ADDR].addr != INADDR_ANY
> +       && ipv4_addrs[ADDR].addr != INADDR_NONE
> +       && (ipv4_addrs[ADDR].addr & route.rt_mask) != route.rt_dest)
>       return ENETUNREACH;
>  
> -      ipv4_addrs[NETMASK] = route.rt_mask;
> +      ipv4_addrs[NETMASK].addr = route.rt_mask;
>      }
>    else if (route.rt_gateway != INADDR_ANY)
>      {
> @@ -261,11 +262,12 @@ lwip_S_rioctl_siocaddrt (struct sock_user *user,
>         */
>  
>        /* First we verify the gateway is reachable from this netif */
> -      if (ipv4_addrs[ADDR] != INADDR_ANY && ipv4_addrs[ADDR] != INADDR_NONE
> -       && ipv4_addrs[NETMASK] != INADDR_ANY
> -       && ipv4_addrs[NETMASK] != INADDR_NONE
> -       && (route.rt_gateway & ipv4_addrs[NETMASK]) !=
> -       (ipv4_addrs[ADDR] & ipv4_addrs[NETMASK]))
> +      if (ipv4_addrs[ADDR].addr != INADDR_ANY
> +       && ipv4_addrs[ADDR].addr != INADDR_NONE
> +       && ipv4_addrs[NETMASK].addr != INADDR_ANY
> +       && ipv4_addrs[NETMASK].addr != INADDR_NONE
> +       && (route.rt_gateway & ipv4_addrs[NETMASK].addr) !=
> +       (ipv4_addrs[ADDR].addr & ipv4_addrs[NETMASK].addr))
>       return EHOSTUNREACH;
>  
>        /*
> @@ -276,7 +278,7 @@ lwip_S_rioctl_siocaddrt (struct sock_user *user,
>         */
>        tcpip_callback (clear_gateways, NULL);
>  
> -      ipv4_addrs[GWADDR] = route.rt_gateway;
> +      ipv4_addrs[GWADDR].addr = route.rt_gateway;
>        tcpip_callback (set_default_if, netif);
>      }
>    else
> @@ -287,7 +289,7 @@ lwip_S_rioctl_siocaddrt (struct sock_user *user,
>  
>    err = configure_device (netif, ipv4_addrs[ADDR], ipv4_addrs[NETMASK],
>                         ipv4_addrs[DSTADDR], ipv4_addrs[BRDADDR],
> -                       ipv4_addrs[GWADDR], 0, 0);
> +                       ipv4_addrs[GWADDR], 0);
>  
>    return err;
>  }
> @@ -312,7 +314,7 @@ lwip_S_rioctl_siocdelrt (struct sock_user *user,
>    struct netif *netif;
>    struct sockaddr sa;
>    size_t buflen = sizeof (struct sockaddr);
> -  uint32_t ipv4_addrs[5];
> +  ip4_addr_t ipv4_addrs[5];
>  
>    if (!user)
>      return EOPNOTSUPP;
> @@ -343,12 +345,12 @@ lwip_S_rioctl_siocdelrt (struct sock_user *user,
>         */
>  
>        /* We remove the netmask only if it matches the given one */
> -      if (ipv4_addrs[NETMASK] != INADDR_ANY
> -       && ipv4_addrs[NETMASK] != INADDR_NONE
> -       && ipv4_addrs[NETMASK] != route.rt_mask)
> +      if (ipv4_addrs[NETMASK].addr != INADDR_ANY
> +       && ipv4_addrs[NETMASK].addr != INADDR_NONE
> +       && ipv4_addrs[NETMASK].addr != route.rt_mask)
>       return EINVAL;
>  
> -      ipv4_addrs[NETMASK] = INADDR_NONE;
> +      ipv4_addrs[NETMASK].addr = INADDR_NONE;
>      }
>    else if (route.rt_gateway != INADDR_ANY)
>      {
> @@ -358,16 +360,16 @@ lwip_S_rioctl_siocdelrt (struct sock_user *user,
>         */
>  
>        /* We remove the gateway only if it matches the given one */
> -      if (ipv4_addrs[GWADDR] != INADDR_ANY
> -       && ipv4_addrs[GWADDR] != INADDR_NONE
> -       && ipv4_addrs[GWADDR] != route.rt_gateway)
> +      if (ipv4_addrs[GWADDR].addr != INADDR_ANY
> +       && ipv4_addrs[GWADDR].addr != INADDR_NONE
> +       && ipv4_addrs[GWADDR].addr != route.rt_gateway)
>       return EINVAL;
>  
>        /* And only if it was the default one */
>        if (netif != netif_default)
>       return EINVAL;
>  
> -      ipv4_addrs[GWADDR] = INADDR_NONE;
> +      ipv4_addrs[GWADDR].addr = INADDR_NONE;
>      }
>    else
>      {
> @@ -377,7 +379,7 @@ lwip_S_rioctl_siocdelrt (struct sock_user *user,
>  
>    err = configure_device (netif, ipv4_addrs[ADDR], ipv4_addrs[NETMASK],
>                         ipv4_addrs[DSTADDR], ipv4_addrs[BRDADDR],
> -                       ipv4_addrs[GWADDR], 0, 0);
> +                       ipv4_addrs[GWADDR], 0);
>  
>    return err;
>  }
> diff --git a/lwip/lwip-util.c b/lwip/lwip-util.c
> index eff15137..8f12f3ac 100644
> --- a/lwip/lwip-util.c
> +++ b/lwip/lwip-util.c
> @@ -237,13 +237,12 @@ init_ifs (void *arg)
>  struct update_if_args
>  {
>    struct netif *netif;
> -  uint32_t addr;
> -  uint32_t netmask;
> -  uint32_t peer;
> -  uint32_t broadcast;
> -  uint32_t gateway;
> -  uint32_t *addr6;
> -  uint8_t *addr6_prefix_len;
> +  ip4_addr_t addr;
> +  ip4_addr_t netmask;
> +  ip4_addr_t peer;
> +  ip4_addr_t broadcast;
> +  ip4_addr_t gateway;
> +  ip6_addr_t *addr6;
>  };
>  
>  /*
> @@ -255,9 +254,7 @@ update_if (void *arg)
>    int i;
>    struct update_if_args *args = arg;
>  
> -  netif_set_addr (args->netif, (ip4_addr_t *) & args->addr,
> -                        (ip4_addr_t *) & args->netmask,
> -                        (ip4_addr_t *) & args->gateway);
> +  netif_set_addr (args->netif, &args->addr, &args->netmask, &args->gateway);
>  
>    if (args->addr6)
>      for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++)
> @@ -283,29 +280,29 @@ update_if (void *arg)
>  
>  /* Get the IP configuration of an interface */
>  void
> -inquire_device (struct netif *netif, uint32_t * addr, uint32_t * netmask,
> -             uint32_t * peer, uint32_t * broadcast, uint32_t * gateway,
> -             uint32_t * addr6, uint8_t * addr6_prefix_len)
> +inquire_device (struct netif *netif, ip4_addr_t * addr, ip4_addr_t * netmask,
> +                ip4_addr_t * peer, ip4_addr_t * broadcast, ip4_addr_t * 
> gateway,
> +                ip6_addr_t * addr6, uint8_t * addr6_prefix_len)
>  {
>    int i;
>  
>    if (netif)
>      {
>        if (addr)
> -     *addr = netif_ip4_addr (netif)->addr;
> +     addr->addr = netif_ip4_addr (netif)->addr;
>  
>        if (netmask)
> -     *netmask = netif_ip4_netmask (netif)->addr;
> +     netmask->addr = netif_ip4_netmask (netif)->addr;
>  
>        if (peer)
> -     *peer = INADDR_NONE;
> +     peer->addr = INADDR_NONE;
>  
>        if (broadcast)
> -     *broadcast =
> +     broadcast->addr =
>         netif_ip4_addr (netif)->addr | ~netif_ip4_netmask (netif)->addr;
>  
>        if (gateway)
> -     *gateway = netif_ip4_gw (netif)->addr;
> +     gateway->addr = netif_ip4_gw (netif)->addr;
>  
>        if (addr6)
>       for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++)
> @@ -327,9 +324,9 @@ inquire_device (struct netif *netif, uint32_t * addr, 
> uint32_t * netmask,
>   * Called from ioctls.
>   */
>  error_t
> -configure_device (struct netif *netif, uint32_t addr, uint32_t netmask,
> -               uint32_t peer, uint32_t broadcast, uint32_t gateway,
> -               uint32_t * addr6, uint8_t * addr6_prefix_len)
> +configure_device (struct netif *netif, ip4_addr_t addr, ip4_addr_t netmask,
> +               ip4_addr_t peer, ip4_addr_t broadcast, ip4_addr_t gateway,
> +               ip6_addr_t * addr6)
>  {
>    error_t err = 0;
>  
> @@ -337,25 +334,27 @@ configure_device (struct netif *netif, uint32_t addr, 
> uint32_t netmask,
>     * The caller is trying to set an invalid address,
>     * set all fields to empty so it passes the validation
>     */
> -  if (addr == INADDR_ANY || addr == INADDR_NONE)
> +  if (addr.addr == INADDR_ANY || addr.addr == INADDR_NONE)
>      {
> -      addr = INADDR_NONE;
> -      netmask = INADDR_NONE;
> -      peer = INADDR_NONE;
> -      broadcast = INADDR_NONE;
> -      gateway = INADDR_NONE;
> +      addr.addr = INADDR_NONE;
> +      netmask.addr = INADDR_NONE;
> +      peer.addr = INADDR_NONE;
> +      broadcast.addr = INADDR_NONE;
> +      gateway.addr = INADDR_NONE;
>      }
>  
> -  if (netmask != INADDR_NONE)
> +  if (netmask.addr != INADDR_NONE)
>      /*
>       * If broadcasting is enabled and we have a netmask lesser than 31 bits
>       * long, we need to update the broadcast address too.
>       */
>      if ((netif->flags & NETIF_FLAG_BROADCAST)
> -     && ip4_addr_netmask_valid (netmask) && netmask <= 0xfffffffc)
> -      broadcast = (addr | ~netmask);
> +     && ip4_addr_netmask_valid (netmask.addr)
> +     && netmask.addr <= 0xfffffffc)
> +      broadcast.addr = (addr.addr | ~netmask.addr);
>  
> -  if (!ipv4config_is_valid (addr, netmask, gateway, broadcast))
> +  if (!ipv4config_is_valid
> +      (addr.addr, netmask.addr, gateway.addr, broadcast.addr))
>      err = EINVAL;
>    else
>      {
> @@ -368,7 +367,6 @@ configure_device (struct netif *netif, uint32_t addr, 
> uint32_t netmask,
>        arg->broadcast = broadcast;
>        arg->gateway = gateway;
>        arg->addr6 = addr6;
> -      arg->addr6_prefix_len = addr6_prefix_len;
>        err = err_to_errno(tcpip_callback (update_if, arg));
>      }
>  
> diff --git a/lwip/lwip-util.h b/lwip/lwip-util.h
> index c1bf8c58..018ffc96 100644
> --- a/lwip/lwip-util.h
> +++ b/lwip/lwip-util.h
> @@ -31,13 +31,13 @@
>  
>  void init_ifs (void *arg);
>  
> -void inquire_device (struct netif *netif, uint32_t * addr, uint32_t * 
> netmask,
> -                  uint32_t * peer, uint32_t * broadcast,
> -                  uint32_t * gateway, uint32_t * addr6,
> -                  uint8_t * addr6_prefix_len);
> -error_t configure_device (struct netif *netif, uint32_t addr,
> -                       uint32_t netmask, uint32_t peer, uint32_t broadcast,
> -                       uint32_t gateway, uint32_t * addr6,
> -                       uint8_t * addr6_prefix_len);
> +void inquire_device (struct netif *netif, ip4_addr_t * addr,
> +                  ip4_addr_t * netmask, ip4_addr_t * peer,
> +                  ip4_addr_t * broadcast, ip4_addr_t * gateway,
> +                  ip6_addr_t * addr6, uint8_t * addr6_prefix_len);
> +error_t configure_device (struct netif *netif, ip4_addr_t addr,
> +                       ip4_addr_t netmask, ip4_addr_t peer,
> +                       ip4_addr_t broadcast, ip4_addr_t gateway,
> +                       ip6_addr_t * addr6);
>  
>  #endif /* LWIP_UTIL_H */
> diff --git a/lwip/options.c b/lwip/options.c
> index a22be26c..c25a60ef 100644
> --- a/lwip/options.c
> +++ b/lwip/options.c
> @@ -296,8 +296,8 @@ trivfs_append_args (struct trivfs_control * fsys, char 
> **argz,
>    error_t err = 0;
>    struct netif *netif;
>    int i;
> -  uint32_t addr, netmask, gateway;
> -  uint32_t addr6[LWIP_IPV6_NUM_ADDRESSES][4];
> +  ip4_addr_t addr, netmask, gateway;
> +  ip6_addr_t addr6[LWIP_IPV6_NUM_ADDRESSES];
>    uint8_t addr6_prefix_len[LWIP_IPV6_NUM_ADDRESSES];
>  
>  #define ADD_OPT(fmt, args...)           \
> @@ -318,16 +318,16 @@ trivfs_append_args (struct trivfs_control * fsys, char 
> **argz,
>         continue;
>       }
>  
> -      inquire_device (netif, &addr, &netmask, 0, 0, &gateway,
> -                   (uint32_t *) addr6, addr6_prefix_len);
> +    inquire_device (netif, &addr, &netmask, 0, 0, &gateway, addr6,
> +                 addr6_prefix_len);
>  
>        ADD_OPT ("--interface=%s", netif_get_state (netif)->devname);
> -      if (addr != INADDR_NONE)
> -     ADD_ADDR_OPT ("address", addr);
> -      if (netmask != INADDR_NONE)
> -     ADD_ADDR_OPT ("netmask", netmask);
> -      if (gateway != INADDR_NONE)
> -     ADD_ADDR_OPT ("gateway", gateway);
> +      if (addr.addr != INADDR_NONE)
> +     ADD_ADDR_OPT ("address", addr.addr);
> +      if (netmask.addr != INADDR_NONE)
> +     ADD_ADDR_OPT ("netmask", netmask.addr);
> +      if (gateway.addr != INADDR_NONE)
> +     ADD_ADDR_OPT ("gateway", gateway.addr);
>        for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++)
>       if (!ip6_addr_isany (((ip6_addr_t *) & addr6[i])))
>         ADD_OPT ("--address6=%s/%d",
> diff --git a/lwip/options.h b/lwip/options.h
> index 7d1c96c7..10893545 100644
> --- a/lwip/options.h
> +++ b/lwip/options.h
> @@ -45,7 +45,7 @@ struct parse_interface
>    ip4_addr_t address, netmask, peer, gateway;
>  
>    /* New IPv6 configuration to apply. */
> -  uint32_t addr6[LWIP_IPV6_NUM_ADDRESSES][4];
> +  ip6_addr_t addr6[LWIP_IPV6_NUM_ADDRESSES];
>  };
>  
>  /* Used to hold data during argument parsing.  */
> diff --git a/lwip/pfinet-ops.c b/lwip/pfinet-ops.c
> index 93373e51..83e7b03e 100644
> --- a/lwip/pfinet-ops.c
> +++ b/lwip/pfinet-ops.c
> @@ -132,7 +132,8 @@ static uint32_t get_routes(ifrtreq_t *rtable) {
>    ifrtreq_t *rtable_it;
>    struct netif *netif;
>    char *devname;
> -  uint32_t addr, netmask, gw, count;
> +  ip4_addr_t addr, netmask, gw;
> +  uint32_t count;
>  
>    rtable_it = rtable;
>    count = 0;
> @@ -142,9 +143,9 @@ static uint32_t get_routes(ifrtreq_t *rtable) {
>    if (netif_default != NULL) {
>      inquire_device (netif_default, 0, 0, 0, 0, &gw, 0, 0);
>  
> -    if (gw != INADDR_ANY && gw != INADDR_NONE) {
> +    if (gw.addr != INADDR_ANY && gw.addr != INADDR_NONE) {
>        devname = netif_get_state (netif_default)->devname;
> -      add_route(rtable_it++, devname, INADDR_ANY, INADDR_ANY, gw);
> +      add_route(rtable_it++, devname, INADDR_ANY, INADDR_ANY, gw.addr);
>        count++;
>      }
>    }
> @@ -155,11 +156,13 @@ static uint32_t get_routes(ifrtreq_t *rtable) {
>    {
>      inquire_device (netif, &addr, &netmask, 0, 0, &gw, 0, 0);
>  
> -    if(addr != INADDR_ANY && addr != INADDR_NONE
> -      && netmask != INADDR_ANY && netmask != INADDR_NONE) {
> -      devname = netif_get_state (netif)->devname;
> -      add_route(rtable_it++, devname, addr & netmask, netmask, INADDR_ANY);
> -      count++;
> +    if (addr.addr != INADDR_ANY && addr.addr != INADDR_NONE
> +     && netmask.addr != INADDR_ANY && netmask.addr != INADDR_NONE)
> +      {
> +     devname = netif_get_state (netif)->devname;
> +     add_route (rtable_it++, devname, addr.addr & netmask.addr,
> +                netmask.addr, INADDR_ANY);
> +     count++;
>        }
>  
>      if (count == MAX_ROUTES)
> -- 
> 2.50.1
> 
> 

-- 
Samuel
<N>  sl  -  display animations aimed to correct users who accidentally enter
<N>        sl instead of ls.

Reply via email to