Inline…

> On Sep 28, 2017, at 2:32 AM, Martin Schiller <m...@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 <m...@dev.tdt.de>
> ---
> 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)
> 


I’m a little unclear about how all of this would work.

We have a platform where the kernel always detects certain devices (mostly i210 
and i350 Intel NICs) in the wrong order, so early on (S19) we run an init.d 
script which looks at their PCI bus information and then depending on whether 
it matches the pattern of the devices which get mis-numbered, we do the 
following:

ip link set eth0 name _eth0
ip link set eth1 name _eth1
...
ip link set eth7 name _eth7

ip link set _eth7 name eth0
ip link set _eth6 name eth1
...
ip link set _eth0 name eth7

so it seems to me that your logic would get confused by the “old” instance of 
“eth0” and the new one.

Am I missing anything?

And yes, we do this as a work-around to not having udev rules to handle the 
naming for us.

-Philip


_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to