On 18/05/08 17:20 +0200, Jona Joachim wrote:
> I very much appreciate the work of reyk@ on dhclient to make it renew the
> lease when the
> link is lost. However it might happen that you don't have a link at the
> moment where
> you launch dhclient but you know that you might get a link afterwards.
> This is true when you launch your laptop somewhere where you have wifi
> connectivity
> but unfortunately you're in a spot where you don't currently receive it.
> If you specify 'dhcp' in hostname.<if> you will have to wait until dhclient
> times out
> or hit Ctrl-C at startup.
> This tiny patch adds an option to dhclient to tell it to just go into
> background and wait
> until you get a link.
>
> I would appreciate any comments.
> Thanks!
>
>
> Index: dhclient.c
> ===================================================================
> RCS file: /cvs/src/sbin/dhclient/dhclient.c,v
> retrieving revision 1.118
> diff -u -r1.118 dhclient.c
> --- dhclient.c 9 May 2008 05:19:14 -0000 1.118
> +++ dhclient.c 18 May 2008 15:11:53 -0000
> @@ -253,7 +253,7 @@
> int
> main(int argc, char *argv[])
> {
> - int ch, fd, quiet = 0, i = 0, pipe_fd[2];
> + int ch, fd, quiet = 0, background = 0, i = 0, pipe_fd[2];
> extern char *__progname;
> struct passwd *pw;
>
> @@ -261,8 +261,11 @@
> openlog(__progname, LOG_PID | LOG_NDELAY, DHCPD_LOG_FACILITY);
> setlogmask(LOG_UPTO(LOG_INFO));
>
> - while ((ch = getopt(argc, argv, "c:dl:qu")) != -1)
> + while ((ch = getopt(argc, argv, "bc:dl:qu")) != -1)
> switch (ch) {
> + case 'b':
> + background = 1;
> + break;
> case 'c':
> path_dhclient_conf = optarg;
> break;
> @@ -319,6 +322,9 @@
>
> read_client_conf();
>
> + if (background)
> + goto dispatch;
> +
> if (!(ifi->linkstat = interface_link_status(ifi->name))) {
> fprintf(stderr, "%s: no link ...", ifi->name);
> if (config->link_timeout == 0) {
> @@ -409,7 +415,7 @@
> {
> extern char *__progname;
>
> - fprintf(stderr, "usage: %s [-dqu] [-c file] [-l file] interface\n",
> + fprintf(stderr, "usage: %s [-bdqu] [-c file] [-l file] interface\n",
> __progname);
> exit(1);
> }
>
>
Ehi! Your diff is already there!
cat /etc/dhclient.conf
link_timeout 0;
It works!