chiark / gitweb /
libvolume_id: squashfs - add endianess support for LZMA compression
[elogind.git] / udev_device.c
index bbf7963afce78897f38d88eca4a2b23efade9853..62217ff58509564aea08c219461f41fdabeb0c77 100644 (file)
@@ -78,6 +78,26 @@ dev_t udev_device_get_devt(struct udevice *udev)
        return makedev(0, 0);
 }
 
+static void kernel_log(struct ifreq ifr)
+{
+       int klog;
+       FILE *f;
+
+       klog = open("/dev/kmsg", O_WRONLY);
+       if (klog < 0)
+               return;
+
+       f = fdopen(klog, "w");
+       if (f == NULL) {
+               close(klog);
+               return;
+       }
+
+       fprintf(f, "<6>udev: renamed network interface %s to %s\n",
+               ifr.ifr_name, ifr.ifr_newname);
+       fclose(f);
+}
+
 static int rename_netif(struct udevice *udev)
 {
        int sk;
@@ -98,7 +118,9 @@ static int rename_netif(struct udevice *udev)
        strlcpy(ifr.ifr_name, udev->dev->kernel, IFNAMSIZ);
        strlcpy(ifr.ifr_newname, udev->name, IFNAMSIZ);
        retval = ioctl(sk, SIOCSIFNAME, &ifr);
-       if (retval != 0) {
+       if (retval == 0)
+               kernel_log(ifr);
+       else {
                int loop;
 
                /* see if the destination interface name already exists */
@@ -122,8 +144,10 @@ static int rename_netif(struct udevice *udev)
                loop = 30 * 20;
                while (loop--) {
                        retval = ioctl(sk, SIOCSIFNAME, &ifr);
-                       if (retval == 0)
+                       if (retval == 0) {
+                               kernel_log(ifr);
                                break;
+                       }
 
                        if (errno != EEXIST) {
                                err("error changing net interface name %s to %s: %s",
@@ -144,6 +168,10 @@ int udev_device_event(struct udev_rules *rules, struct udevice *udev)
 {
        int retval = 0;
 
+       if (udev->devpath_old != NULL)
+               if (udev_db_rename(udev->devpath_old, udev->dev->devpath) == 0)
+                       info("moved database from '%s' to '%s'", udev->devpath_old, udev->dev->devpath);
+
        /* add device node */
        if (major(udev->devt) != 0 &&
            (strcmp(udev->action, "add") == 0 || strcmp(udev->action, "change") == 0)) {
@@ -238,10 +266,6 @@ int udev_device_event(struct udev_rules *rules, struct udevice *udev)
                /* import database entry, and delete it */
                if (udev_db_get_device(udev, udev->dev->devpath) == 0) {
                        udev_db_delete_device(udev);
-                       if (udev->ignore_remove) {
-                               info("ignore_remove for '%s'", udev->name);
-                               goto exit;
-                       }
                        /* restore stored persistent data */
                        list_for_each_entry(name_loop, &udev->env_list, node)
                                putenv(name_loop->name);
@@ -257,6 +281,10 @@ int udev_device_event(struct udev_rules *rules, struct udevice *udev)
                        goto exit;
                }
 
+               if (udev->ignore_remove) {
+                       info("ignore_remove for '%s'", udev->name);
+                       goto exit;
+               }
                /* remove the node */
                retval = udev_node_remove(udev);