On 19/05/08 15:50 +0200, Cesare Gargano wrote:
> 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;
  ^^^^^^^^^^^^
is link-timeout

Ehm! Enjoy!

> 
> It works!

Reply via email to