]> git.pld-linux.org Git - packages/systemd.git/blame - net-rename-revert.patch
- Obsoletes elogind
[packages/systemd.git] / net-rename-revert.patch
CommitLineData
d3c9da06
JR
1From: Michael Biebl <biebl@debian.org>
2Date: Thu, 18 Jul 2013 01:04:07 +0200
3Subject: Revert "udev: network device renaming - immediately give up if the
4 target name isn't available"
5112024c 5
d3c9da06 6This reverts commit 97595710b77aa162ca5e20da57d0a1ed7355eaad.
5112024c 7
d3c9da06
JR
8Since we are keeping the old persistent network interface naming for
9now, and make the new naming scheme [1] explictly opt-in [2], re-apply
10this old hack to make the renaming less likely to fail.
5112024c 11
d3c9da06
JR
12[1] http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/
13[2] d5051f7666e25ecf2b32c7076ce18c1de969d01b
14---
15 src/udev/udev-event.c | 41 ++++++++++++++++++++++++++++++++++++++---
16 1 file changed, 38 insertions(+), 3 deletions(-)
5112024c
JR
17
18diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
d3c9da06 19index bc115f1..a673f51 100644
5112024c
JR
20--- a/src/udev/udev-event.c
21+++ b/src/udev/udev-event.c
d3c9da06
JR
22@@ -769,18 +769,53 @@ static int rename_netif(struct udev_event *event) {
23 char name[IFNAMSIZ];
24 const char *oldname;
25 int r;
5112024c 26+ int loop;
5112024c 27
d3c9da06
JR
28 oldname = udev_device_get_sysname(dev);
29
30 strscpy(name, IFNAMSIZ, event->name);
31
32 r = rtnl_set_link_name(&event->rtnl, udev_device_get_ifindex(dev), name);
33+ if (r >= 0) {
34+ log_debug("renamed network interface %s to %s\n", oldname, name);
5112024c
JR
35+ goto out;
36+ }
37+
38+ /* keep trying if the destination interface name already exists */
d3c9da06 39+ if (r != -EEXIST)
5112024c
JR
40+ goto out;
41+
42+ /* free our own name, another process may wait for us */
d3c9da06
JR
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);
45 if (r < 0)
46- return log_error_errno(r, "Error changing net interface name '%s' to '%s': %m", oldname, name);
47+ goto out;
48
49- log_debug("renamed network interface '%s' to '%s'", oldname, name);
5112024c 50+ /* log temporary name */
d3c9da06
JR
51+ log_debug("renamed network interface %s to %s\n", oldname, name);
52
53- return 0;
5112024c 54+ /* wait a maximum of 90 seconds for our target to become available */
d3c9da06 55+ strscpy(name, IFNAMSIZ, event->name);
5112024c
JR
56+ loop = 90 * 20;
57+ while (loop--) {
58+ const struct timespec duration = { 0, 1000 * 1000 * 1000 / 20 };
59+
60+ nanosleep(&duration, NULL);
61+
d3c9da06
JR
62+ r = rtnl_set_link_name(&event->rtnl, udev_device_get_ifindex(dev), name);
63+ if (r >= 0) {
64+ log_debug("renamed network interface %s to %s\n", oldname, name);
5112024c
JR
65+ break;
66+ }
d3c9da06 67+ if (r != -EEXIST)
5112024c 68+ break;
d3c9da06 69+ }
5112024c
JR
70+
71+out:
d3c9da06
JR
72+ if (r < 0)
73+ log_error("error changing net interface name '%s' to '%s': %s",
74+ oldname, name, strerror(-r));
75+ return r;
5112024c 76 }
d3c9da06
JR
77
78 void udev_event_execute_rules(struct udev_event *event,
This page took 0.047658 seconds and 4 git commands to generate.