X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fudev%2Fudev-event.c;h=0d1049cf1cc13ceb725e072a277754bdc8abb88b;hb=30374ebe5e9f0b37e99dcbdc965c00fcf542f89d;hp=c4603a0c0ec3dc353668073c839854ecb6203b5f;hpb=c26547d612733371494330e26c7d3604a5dba3d9;p=elogind.git diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c index c4603a0c0..0d1049cf1 100644 --- a/src/udev/udev-event.c +++ b/src/udev/udev-event.c @@ -25,16 +25,14 @@ #include #include #include -#include #include #include #include #include -#include #include -#include #include "udev.h" +#include "rtnl-util.h" struct udev_event *udev_event_new(struct udev_device *dev) { @@ -750,32 +748,30 @@ out: static int rename_netif(struct udev_event *event) { struct udev_device *dev = event->dev; - int sk; - struct ifreq ifr; - int err; + _cleanup_sd_rtnl_unref_ sd_rtnl *rtnl = NULL; + char name[IFNAMSIZ]; + const char *oldname; + int r; + + oldname = udev_device_get_sysname(dev); log_debug("changing net interface name from '%s' to '%s'\n", - udev_device_get_sysname(dev), event->name); + oldname, event->name); - sk = socket(PF_INET, SOCK_DGRAM, 0); - if (sk < 0) { - err = -errno; - log_error("error opening socket: %m\n"); - return err; - } + strscpy(name, IFNAMSIZ, event->name); - memset(&ifr, 0x00, sizeof(struct ifreq)); - strscpy(ifr.ifr_name, IFNAMSIZ, udev_device_get_sysname(dev)); - strscpy(ifr.ifr_newname, IFNAMSIZ, event->name); - err = ioctl(sk, SIOCSIFNAME, &ifr); - if (err >= 0) { - print_kmsg("renamed network interface %s to %s\n", ifr.ifr_name, ifr.ifr_newname); - } else { - err = -errno; - log_error("error changing net interface name %s to %s: %m\n", ifr.ifr_name, ifr.ifr_newname); - } - close(sk); - return err; + r = sd_rtnl_open(0, &rtnl); + if (r < 0) + return r; + + r = rtnl_set_link_name(rtnl, udev_device_get_ifindex(dev), name); + if (r < 0) + log_error("error changing net interface name %s to %s: %s", + oldname, name, strerror(-r)); + else + print_kmsg("renamed network interface %s to %s", oldname, name); + + return r; } int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules, const sigset_t *sigmask)