svn commit: trunk/busybox/networking

vda at busybox.net vda at busybox.net
Mon Feb 4 09:42:06 UTC 2008


Author: vda
Date: 2008-02-04 01:42:05 -0800 (Mon, 04 Feb 2008)
New Revision: 20942

Log:
zcip: open ARP socket before openlog
(else we can thrash syslog socket)



Modified:
   trunk/busybox/networking/zcip.c


Changeset:
Modified: trunk/busybox/networking/zcip.c
===================================================================
--- trunk/busybox/networking/zcip.c	2008-02-04 07:54:32 UTC (rev 20941)
+++ trunk/busybox/networking/zcip.c	2008-02-04 09:42:05 UTC (rev 20942)
@@ -178,7 +178,7 @@
 	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;
@@ -212,8 +212,17 @@
 	// 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;
 	}
@@ -224,11 +233,6 @@
 			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;
 
@@ -247,8 +251,6 @@
 	//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));
 
@@ -288,7 +290,7 @@
 	// 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
@@ -319,7 +321,7 @@
 		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




More information about the busybox-cvs mailing list