summaryrefslogtreecommitdiffstats
path: root/patches/busybox-1.9.0/generic/busybox-1.9.0-zcip.patch
blob: 90f003997057b16d1cee3f7e45df63d288696b9f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
Subject: busybox 1.9.0 fixes
From: http://busybox.net/downloads/fixes-1.9.0

---
 networking/zcip.c |   24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

Index: busybox-1.9.0/networking/zcip.c
===================================================================
--- busybox-1.9.0.orig/networking/zcip.c
+++ busybox-1.9.0/networking/zcip.c
@@ -180,7 +180,7 @@ int zcip_main(int argc, char **argv)
 	char *r_opt;
 	unsigned opts;
 
-	/* Ugly trick, but I want these zeroed in one go */
+	// ugly trick, but I want these zeroed in one go
 	struct {
 		const struct in_addr null_ip;
 		const struct ether_addr null_addr;
@@ -214,8 +214,17 @@ int zcip_main(int argc, char **argv)
 	// exactly 2 args; -v accumulates and implies -f
 	opt_complementary = "=2:vv:vf";
 	opts = getopt32(argv, "fqr:v", &r_opt, &verbose);
+#if !BB_MMU
+	// on NOMMU reexec early (or else we will rerun things twice)
+	if (!FOREGROUND)
+		bb_daemonize_or_rexec(DAEMON_CHDIR_ROOT, argv);
+#endif
+	// open an ARP socket
+	// (need to do it before openlog to prevent openlog from taking
+	// fd 3 (sock_fd==3))
+	xmove_fd(xsocket(AF_PACKET, SOCK_PACKET, htons(ETH_P_ARP)), sock_fd);
 	if (!FOREGROUND) {
-		/* Do it early, before all bb_xx_msg calls */
+		// do it before all bb_xx_msg calls
 		openlog(applet_name, 0, LOG_DAEMON);
 		logmode |= LOGMODE_SYSLOG;
 	}
@@ -226,11 +235,6 @@ int zcip_main(int argc, char **argv)
 			bb_error_msg_and_die("invalid link address");
 		}
 	}
-	// On NOMMU reexec early (or else we will rerun things twice)
-#if !BB_MMU
-	if (!FOREGROUND)
-		bb_daemonize_or_rexec(DAEMON_CHDIR_ROOT, argv);
-#endif
 	argc -= optind;
 	argv += optind;
 
@@ -249,8 +253,6 @@ int zcip_main(int argc, char **argv)
 	//TODO: are we leaving sa_family == 0 (AF_UNSPEC)?!
 	safe_strncpy(saddr.sa_data, intf, sizeof(saddr.sa_data));
 
-	// open an ARP socket
-	xmove_fd(xsocket(AF_PACKET, SOCK_PACKET, htons(ETH_P_ARP)), sock_fd);
 	// bind to the interface's ARP socket
 	xbind(sock_fd, &saddr, sizeof(saddr));
 
@@ -290,7 +292,7 @@ int zcip_main(int argc, char **argv)
 	// restarting after address conflicts:
 	//  - start with some address we want to try
 	//  - short random delay
-	//  - arp probes to see if another host else uses it
+	//  - arp probes to see if another host uses it
 	//  - arp announcements that we're claiming it
 	//  - use it
 	//  - defend it, within limits
@@ -321,7 +323,7 @@ int zcip_main(int argc, char **argv)
 		switch (safe_poll(fds, 1, timeout_ms)) {
 
 		default:
-			/*bb_perror_msg("poll"); - done in safe_poll */
+			//bb_perror_msg("poll"); - done in safe_poll
 			return EXIT_FAILURE;
 
 		// timeout