]> git.pld-linux.org Git - packages/systemd.git/blame - net-rename-revert.patch
- x32 rebuild
[packages/systemd.git] / net-rename-revert.patch
CommitLineData
5112024c
JR
1https://bugs.freedesktop.org/show_bug.cgi?id=53837
2
3Kay Sievers <kay@vrfy.org> changed:
4
5 What |Removed |Added
6----------------------------------------------------------------------------
7 Status|NEW |RESOLVED
8 Resolution| |WONTFIX
9
10--- Comment #1 from Kay Sievers <kay@vrfy.org> 2012-08-20 12:12:56 UTC ---
11Please use biosdevname or name the devices other than ethX.
12
13We do not try to race against the kernel anymore, and therefore do not
14support swapping names around in the kernel namespace.
15
16In short: Devices can no longer be renamed to ethX.
17
18============================================================================
19
20Revert 97595710b77aa162ca5e20da57d0a1ed7355eaad
21
22From: Kay Sievers <kay@vrfy.org>
23Date: Thu, 05 Jul 2012 15:40:50 +0000
24Subject: udev: network device renaming - immediately give up if the target name isn't available
25
26diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
69f834fc 27index 2ade0ab..aff1487 100644
5112024c
JR
28--- a/src/udev/udev-event.c
29+++ b/src/udev/udev-event.c
30@@ -745,11 +745,32 @@ out:
31 return err;
32 }
33
34+static void rename_netif_kernel_log(struct ifreq ifr)
35+{
36+ int klog;
37+ FILE *f;
38+
39+ klog = open("/dev/kmsg", O_WRONLY|O_CLOEXEC);
40+ if (klog < 0)
41+ return;
42+
43+ f = fdopen(klog, "w");
44+ if (f == NULL) {
45+ close(klog);
46+ return;
47+ }
48+
49+ fprintf(f, "<30>udevd[%u]: renamed network interface %s to %s\n",
50+ getpid(), ifr.ifr_name, ifr.ifr_newname);
51+ fclose(f);
52+}
53+
54 static int rename_netif(struct udev_event *event)
55 {
56 struct udev_device *dev = event->dev;
57 int sk;
58 struct ifreq ifr;
59+ int loop;
60 int err;
61
62 log_debug("changing net interface name from '%s' to '%s'\n",
63@@ -766,12 +787,49 @@ static int rename_netif(struct udev_event *event)
d31498aa
JR
64 strscpy(ifr.ifr_name, IFNAMSIZ, udev_device_get_sysname(dev));
65 strscpy(ifr.ifr_newname, IFNAMSIZ, event->name);
5112024c
JR
66 err = ioctl(sk, SIOCSIFNAME, &ifr);
67- if (err >= 0) {
618c1d39 68- print_kmsg("renamed network interface %s to %s\n", ifr.ifr_name, ifr.ifr_newname);
5112024c
JR
69- } else {
70+ if (err == 0) {
71+ rename_netif_kernel_log(ifr);
72+ goto out;
73+ }
74+
75+ /* keep trying if the destination interface name already exists */
76+ err = -errno;
77+ if (err != -EEXIST)
78+ goto out;
79+
80+ /* free our own name, another process may wait for us */
81+ snprintf(ifr.ifr_newname, IFNAMSIZ, "rename%u", udev_device_get_ifindex(dev));
82+ err = ioctl(sk, SIOCSIFNAME, &ifr);
83+ if (err < 0) {
84 err = -errno;
85- log_error("error changing net interface name %s to %s: %m\n", ifr.ifr_name, ifr.ifr_newname);
86+ goto out;
87+ }
88+
89+ /* log temporary name */
90+ rename_netif_kernel_log(ifr);
91+
92+ /* wait a maximum of 90 seconds for our target to become available */
d31498aa
JR
93+ strscpy(ifr.ifr_name, IFNAMSIZ, ifr.ifr_newname);
94+ strscpy(ifr.ifr_newname, IFNAMSIZ, event->name);
5112024c
JR
95+ loop = 90 * 20;
96+ while (loop--) {
97+ const struct timespec duration = { 0, 1000 * 1000 * 1000 / 20 };
98+
99+ nanosleep(&duration, NULL);
100+
101+ err = ioctl(sk, SIOCSIFNAME, &ifr);
102+ if (err == 0) {
103+ rename_netif_kernel_log(ifr);
104+ break;
105+ }
106+ err = -errno;
107+ if (err != -EEXIST)
108+ break;
109 }
110+
111+out:
112+ if (err < 0)
113+ log_error("error changing net interface name %s to %s: %m\n", ifr.ifr_name, ifr.ifr_newname);
114 close(sk);
115 return err;
116 }
This page took 0.089193 seconds and 4 git commands to generate.