1 From: Michael Biebl <biebl@debian.org>
2 Date: Thu, 18 Jul 2013 01:04:07 +0200
3 Subject: Revert "udev: network device renaming - immediately give up if the
4 target name isn't available"
6 This reverts commit 97595710b77aa162ca5e20da57d0a1ed7355eaad.
8 Since we are keeping the old persistent network interface naming for
9 now, and make the new naming scheme [1] explictly opt-in [2], re-apply
10 this old hack to make the renaming less likely to fail.
12 [1] http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/
13 [2] d5051f7666e25ecf2b32c7076ce18c1de969d01b
15 src/udev/udev-event.c | 41 ++++++++++++++++++++++++++++++++++++++---
16 1 file changed, 38 insertions(+), 3 deletions(-)
18 diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
19 index bc115f1..a673f51 100644
20 --- a/src/udev/udev-event.c
21 +++ b/src/udev/udev-event.c
22 @@ -769,18 +769,53 @@ static int rename_netif(struct udev_event *event) {
28 oldname = udev_device_get_sysname(dev);
30 strscpy(name, IFNAMSIZ, event->name);
32 r = rtnl_set_link_name(&event->rtnl, udev_device_get_ifindex(dev), name);
34 + log_debug("renamed network interface %s to %s\n", oldname, name);
38 + /* keep trying if the destination interface name already exists */
42 + /* free our own name, another process may wait for us */
43 + snprintf(name, IFNAMSIZ, "rename%u", udev_device_get_ifindex(dev));
44 + r = rtnl_set_link_name(&event->rtnl, udev_device_get_ifindex(dev), name);
46 - return log_error_errno(r, "Error changing net interface name '%s' to '%s': %m", oldname, name);
49 - log_debug("renamed network interface '%s' to '%s'", oldname, name);
50 + /* log temporary name */
51 + log_debug("renamed network interface %s to %s\n", oldname, name);
54 + /* wait a maximum of 90 seconds for our target to become available */
55 + strscpy(name, IFNAMSIZ, event->name);
58 + const struct timespec duration = { 0, 1000 * 1000 * 1000 / 20 };
60 + nanosleep(&duration, NULL);
62 + r = rtnl_set_link_name(&event->rtnl, udev_device_get_ifindex(dev), name);
64 + log_debug("renamed network interface %s to %s\n", oldname, name);
73 + log_error("error changing net interface name '%s' to '%s': %s",
74 + oldname, name, strerror(-r));
78 void udev_event_execute_rules(struct udev_event *event,