[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: [PATCH] zcip: add -w flag to daemonize only after obtaining an address
From: Luca Ceresoli <luca () lucaceresoli ! net>
Date: 2016-01-07 22:13:42
Message-ID: 1452204822-16949-1-git-send-email-luca () lucaceresoli ! net
[Download RAW message or body]
Currently zcip can either daemonize immediately or stay in the
foreground indefinitely (with -f). However it is sometimes useful to
have it stay in foreground while obtaining an address, then
daemonize. This allows to have a boot process that blocks until an
address has been established, then goes on and starts up services that
need to know the interface address when they start.
avahi-autoipd has option -w to do this, udhcpc does it as well. Add
this feature to zcip.
function old new delta
zcip_main 1395 1418 +23
.rodata 776 793 +17
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 40/0) Total: 40 bytes
Signed-off-by: Luca Ceresoli <luca@lucaceresoli.net>
---
networking/zcip.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/networking/zcip.c b/networking/zcip.c
index 1d69105550a3..15540e7c4462 100644
--- a/networking/zcip.c
+++ b/networking/zcip.c
@@ -28,6 +28,7 @@
//usage:#define zcip_full_usage "\n\n"
//usage: "Manage a ZeroConf IPv4 link-local address\n"
//usage: "\n -f Run in foreground"
+//usage: "\n -w Daemonize after obtaining address"
//usage: "\n -q Quit after obtaining address"
//usage: "\n -r 169.254.x.x Request this address first"
//usage: "\n -l x.x.0.0 Use this range instead of 169.254"
@@ -229,10 +230,11 @@ int zcip_main(int argc UNUSED_PARAM, char **argv)
#define FOREGROUND (opts & 1)
#define QUIT (opts & 2)
+#define DAEMONWAIT (opts & 8)
// Parse commandline: prog [options] ifname script
// exactly 2 args; -v accumulates and implies -f
- opt_complementary = "=2:vv:vf";
- opts = getopt32(argv, "fqr:l:v", &r_opt, &l_opt, &verbose);
+ opt_complementary = "=2:vv:vf:w--fq:f--w:q--w";
+ opts = getopt32(argv, "fqr:wl:v", &r_opt, &l_opt, &verbose);
#if !BB_MMU
// on NOMMU reexec early (or else we will rerun things twice)
if (!FOREGROUND)
@@ -315,7 +317,8 @@ int zcip_main(int argc UNUSED_PARAM, char **argv)
// Daemonize now; don't delay system startup
if (!FOREGROUND) {
#if BB_MMU
- bb_daemonize(0 /*was: DAEMON_CHDIR_ROOT*/);
+ if (!DAEMONWAIT)
+ bb_daemonize(0 /*was: DAEMON_CHDIR_ROOT*/);
#endif
bb_info_msg("start, interface %s", argv_intf);
}
@@ -411,6 +414,10 @@ int zcip_main(int argc UNUSED_PARAM, char **argv)
// NOTE: all other exit paths should deconfig...
if (QUIT)
return EXIT_SUCCESS;
+#if BB_MMU
+ if (!FOREGROUND && DAEMONWAIT)
+ bb_daemonize(0 /*was: DAEMON_CHDIR_ROOT*/);
+#endif
// fall through: switch to MONITOR
default:
// case DEFEND:
--
1.9.1
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic