bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 4/4] lwip: Stop using netifapi.


From: Samuel Thibault
Subject: Re: [PATCH 4/4] lwip: Stop using netifapi.
Date: Sun, 31 Mar 2019 20:03:02 +0200
User-agent: NeoMutt/20170113 (1.7.2)

Joan Lledó, le dim. 31 mars 2019 19:55:41 +0200, a ecrit:
> Use tcpip_callback() to reconfigure interfaces in a thread-safe
> context instead.

Applied, thanks!

> * lwip/lwip-util.c:
>       * Replace all netifapi calls by their non-netifapi versions.
>       * update_ifs() is called through tcpip_callback().
> * lwip/options.c:
>       * Call init_fs() through tcpip_callback().
> * lwip/port/netif/ifcommon.c:
>       * Replace all netifapi calls by their non-netifapi versions.
> ---
>  lwip/lwip-util.c           | 73 +++++++++++++++++++++++---------------
>  lwip/options.c             | 12 ++++---
>  lwip/port/netif/ifcommon.c |  6 ++--
>  3 files changed, 55 insertions(+), 36 deletions(-)
> 
> diff --git a/lwip/lwip-util.c b/lwip/lwip-util.c
> index 69991b4c..2d3c954c 100644
> --- a/lwip/lwip-util.c
> +++ b/lwip/lwip-util.c
> @@ -27,7 +27,7 @@
>  
>  #include <lwip/sockets.h>
>  #include <lwip/inet.h>
> -#include <lwip/netifapi.h>
> +#include <lwip/tcpip.h>
>  
>  #include <lwip-hurd.h>
>  #include <options.h>
> @@ -35,6 +35,17 @@
>  #include <netif/hurdtunif.h>
>  #include <netif/hurdloopif.h>
>  
> +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;
> +};
> +
>  /*
>   * Detect the proper module for the given device name
>   * and returns its init callback
> @@ -128,7 +139,7 @@ remove_ifs ()
>         continue;
>       }
>        if_terminate (netif);
> -      netifapi_netif_remove (netif);
> +      netif_remove (netif);
>        free (netif);
>  
>        netif = netif_list;
> @@ -141,7 +152,6 @@ remove_ifs ()
>  void
>  init_ifs (void *arg)
>  {
> -  error_t err;
>    struct parse_interface *in;
>    struct parse_hook *ifs;
>    struct netif *netif;
> @@ -183,10 +193,8 @@ init_ifs (void *arg)
>         *
>         * Fifth parameter (ifc) is a hook.
>         */
> -      err = netifapi_netif_add
> -     (netif, &in->address, &in->netmask, &in->gateway, &ifc, if_init,
> -      tcpip_input);
> -      if (err)
> +      if (!netif_add (netif, &in->address, &in->netmask, &in->gateway, &ifc,
> +                     if_init, tcpip_input))
>       {
>         /* The interface failed to init */
>         if (netif->state != &ifc)
> @@ -220,12 +228,12 @@ init_ifs (void *arg)
>       }
>  
>        /* Up the inerface */
> -      netifapi_netif_set_up (netif);
> +      netif_set_up (netif);
>  
>        /* Set the first interface with valid gateway as default */
>        if (in->gateway.addr != INADDR_NONE)
>       {
> -       netifapi_netif_set_default (netif);
> +       netif_set_default (netif);
>       }
>      }
>  
> @@ -239,38 +247,37 @@ init_ifs (void *arg)
>  /*
>   * Change the IP configuration of an interface
>   */
> -static error_t
> -update_if (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)
> +static void
> +update_if (void *arg)
>  {
> -  error_t err;
>    int i;
>  
> -  err = 0;
> +  struct update_if_args *args = (struct update_if_args*)arg;
>  
> -  netifapi_netif_set_addr (netif, (ip4_addr_t *) & addr,
> -                        (ip4_addr_t *) & netmask,
> -                        (ip4_addr_t *) & gateway);
> +  netif_set_addr (args->netif, (ip4_addr_t *) & args->addr,
> +                        (ip4_addr_t *) & args->netmask,
> +                        (ip4_addr_t *) & args->gateway);
>  
> -  if (addr6)
> +  if (args->addr6)
>      for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++)
>        {
> -     ip6_addr_t *laddr6 = ((ip6_addr_t *) addr6 + i);
> +     ip6_addr_t *laddr6 = ((ip6_addr_t *) args->addr6 + i);
>       if (!ip6_addr_isany (laddr6))
>         {
> -         netif_ip6_addr_set (netif, i, laddr6);
> +         netif_ip6_addr_set (args->netif, i, laddr6);
>  
>           if (!ip6_addr_islinklocal (laddr6))
> -           netif_ip6_addr_set_state (netif, i, IP6_ADDR_TENTATIVE);
> +           netif_ip6_addr_set_state (args->netif, i, IP6_ADDR_TENTATIVE);
>         }
>        }
>  
> -  if (addr6_prefix_len)
> +  if (args->addr6_prefix_len)
>      for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++)
> -      *(addr6_prefix_len + i) = 64;
> +      *(args->addr6_prefix_len + i) = 64;
>  
> -  return err;
> +  free(args);
> +
> +  return;
>  }
>  
>  /* Get the IP configuration of an interface */
> @@ -336,9 +343,19 @@ configure_device (struct netif *netif, uint32_t addr, 
> uint32_t netmask,
>  
>    if (!ipv4config_is_valid (addr, netmask, gateway, broadcast))
>      err = EINVAL;
> -  else
> -    err = update_if (netif, addr, netmask, peer, broadcast,
> -                  gateway, addr6, addr6_prefix_len);
> +  else {
> +    /* Call update_if() inside the tcpip_thread */
> +    struct update_if_args *arg = calloc (1, sizeof (struct update_if_args));
> +    arg->netif = netif;
> +    arg->addr = addr;
> +    arg->netmask = netmask;
> +    arg->peer = peer;
> +    arg->broadcast = broadcast;
> +    arg->gateway = gateway;
> +    arg->addr6 = addr6;
> +    arg->addr6_prefix_len = addr6_prefix_len;
> +    err = tcpip_callback(update_if, arg);
> +  }
>  
>    return err;
>  }
> diff --git a/lwip/options.c b/lwip/options.c
> index d35b9f32..2cfad44d 100644
> --- a/lwip/options.c
> +++ b/lwip/options.c
> @@ -264,11 +264,15 @@ parse_opt (int opt, char *arg, struct argp_state *state)
>      case ARGP_KEY_SUCCESS:
>        /* If the interface list is not empty, a previous configuration exists 
> */
>        if (netif_list == 0)
> -     /* Inititalize LwIP */
> -     tcpip_init (init_ifs, h);
> +     {
> +       /* Inititalize LwIP */
> +       tcpip_init (init_ifs, h);
> +     }
>        else
> -     /* No need to initialize the stack again */
> -     init_ifs (h);
> +     {
> +       /* No need to initialize the stack again */
> +       tcpip_callback (init_ifs, h);
> +     }
>        break;
>  
>      case ARGP_KEY_ERROR:
> diff --git a/lwip/port/netif/ifcommon.c b/lwip/port/netif/ifcommon.c
> index 5a1c68a2..a7f28351 100644
> --- a/lwip/port/netif/ifcommon.c
> +++ b/lwip/port/netif/ifcommon.c
> @@ -25,8 +25,6 @@
>  #include <net/if.h>
>  #include <errno.h>
>  
> -#include <lwip/netifapi.h>
> -
>  /* Open the device and set the interface up */
>  static error_t
>  if_open (struct netif *netif)
> @@ -40,7 +38,7 @@ if_open (struct netif *netif)
>      {
>        /* Up the inerface */
>        ifc->flags |= IFF_UP | IFF_RUNNING;
> -      netifapi_netif_set_up (netif);
> +      netif_set_up (netif);
>      }
>  
>    return err;
> @@ -59,7 +57,7 @@ if_close (struct netif *netif)
>      {
>        /* Down the inerface */
>        ifc->flags &= ~(IFF_UP | IFF_RUNNING);
> -      netifapi_netif_set_down (netif);
> +      netif_set_down (netif);
>      }
>  
>    return err;
> -- 
> 2.17.1
> 
> 

-- 
Samuel
"c'est pas nous qui sommes à la rue, c'est la rue qui est à nous"



reply via email to

[Prev in Thread] Current Thread [Next in Thread]