chiark / gitweb /
check ifindex > 0 instead of subsystem == "net"
[elogind.git] / udev / udev-event.c
index 9b5326bf224948dc7bfcc0de49eae5cbf6862a6f..02a1767b1f8d7bd78c5d66af37344d3f66bc571e 100644 (file)
@@ -454,8 +454,8 @@ static void rename_netif_kernel_log(struct ifreq ifr)
                return;
        }
 
-       fprintf(f, "<6>udev: renamed network interface %s to %s\n",
-               ifr.ifr_name, ifr.ifr_newname);
+       fprintf(f, "<6>udev[%u]: renamed network interface %s to %s\n",
+               getpid(), ifr.ifr_name, ifr.ifr_newname);
        fclose(f);
 }
 
@@ -472,8 +472,9 @@ static int rename_netif(struct udev_event *event)
 
        sk = socket(PF_INET, SOCK_DGRAM, 0);
        if (sk < 0) {
+               err = -errno;
                err(event->udev, "error opening socket: %m\n");
-               return -errno;
+               return err;
        }
 
        memset(&ifr, 0x00, sizeof(struct ifreq));
@@ -534,6 +535,9 @@ int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules)
        struct udev_device *dev = event->dev;
        int err = 0;
 
+       if (udev_device_get_subsystem(dev) == NULL)
+               return -1;
+
        if (strcmp(udev_device_get_action(dev), "remove") == 0) {
                udev_device_read_db(dev);
                udev_device_delete_db(dev);
@@ -560,7 +564,7 @@ int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules)
                udev_rules_apply_to_event(rules, event);
 
                /* rename a new network interface, if needed */
-               if (strcmp(udev_device_get_subsystem(dev), "net") == 0 && strcmp(udev_device_get_action(dev), "add") == 0 &&
+               if (udev_device_get_ifindex(dev) > 0 && strcmp(udev_device_get_action(dev), "add") == 0 &&
                    event->name != NULL && strcmp(event->name, udev_device_get_sysname(dev)) != 0) {
                        char syspath[UTIL_PATH_SIZE];
                        char *pos;