[LEDE-DEV] [PATCH netifd] system-linux: add support for hotplug event 'move'

Hans Dedecker dedeckeh at gmail.com
Fri Oct 6 04:53:54 PDT 2017


On Thu, Sep 28, 2017 at 10:32 AM, Martin Schiller <ms at dev.tdt.de> wrote:
> If you rename a network interface, there is a move uevent
> invoked instead of remove/add.
>
> This patch adds support for this kind of event.
>
> Signed-off-by: Martin Schiller <ms at dev.tdt.de>
Acked-by: Hans Dedecker <dedeckeh at gmail.com>
> ---
>  system-linux.c | 31 ++++++++++++++++++++++++++++---
>  1 file changed, 28 insertions(+), 3 deletions(-)
>
> diff --git a/system-linux.c b/system-linux.c
> index 6d97a02..e2017d0 100644
> --- a/system-linux.c
> +++ b/system-linux.c
> @@ -543,16 +543,20 @@ out:
>  static void
>  handle_hotplug_msg(char *data, int size)
>  {
> -       const char *subsystem = NULL, *interface = NULL;
> +       const char *subsystem = NULL, *interface = NULL, *interface_old = NULL;
>         char *cur, *end, *sep;
>         struct device *dev;
>         int skip;
> -       bool add;
> +       bool add, move = false;
>
>         if (!strncmp(data, "add@", 4))
>                 add = true;
>         else if (!strncmp(data, "remove@", 7))
>                 add = false;
> +       else if (!strncmp(data, "move@", 5)) {
> +               add = true;
> +               move = true;
> +       }
>         else
>                 return;
>
> @@ -574,11 +578,32 @@ handle_hotplug_msg(char *data, int size)
>                         if (strcmp(subsystem, "net") != 0)
>                                 return;
>                 }
> -               if (subsystem && interface)
> +               else if (!strcmp(cur, "DEVPATH_OLD")) {
> +                       interface_old = strrchr(sep + 1, '/');
> +                       if (interface_old)
> +                               interface_old++;
> +               }
> +       }
> +
> +       if (subsystem && interface) {
> +               if (move && interface_old)
> +                       goto move;
> +               else
>                         goto found;
>         }
> +
>         return;
>
> +move:
> +       dev = device_find(interface_old);
> +       if (!dev)
> +               goto found;
> +
> +       if (dev->type != &simple_device_type)
> +               goto found;
> +
> +       device_set_present(dev, false);
> +
>  found:
>         dev = device_find(interface);
>         if (!dev)
> --
> 2.11.0
>
>
> _______________________________________________
> Lede-dev mailing list
> Lede-dev at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/lede-dev



More information about the Lede-dev mailing list