[systemd-devel] [PATCH] sd-dhcp-client: fix REBOOT state handling

Patrik Flykt Patrik.Flykt at linux.intel.com
Wed Nov 19 06:20:05 PST 2014


On Tue, 2014-11-18 at 18:41 +0100, Tom Gundersen wrote:

> (but cc'ing Patrik just to make sure)

> > RFC 2131:
> >
> >  secs   2  Filled in by client, seconds elapsed since client
> >            began address acquisition or renewal process.

> > @@ -422,7 +423,15 @@ static int client_message_init(sd_dhcp_client *client, DHCPPacket **ret,
> >
> >          /* Although 'secs' field is a SHOULD in RFC 2131, certain DHCP servers
> >             refuse to issue an DHCP lease if 'secs' is set to zero */
> > -        packet->dhcp.secs = htobe16(client->secs);
> > +        r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now);
> > +        if (r < 0)
> > +                return r;
> > +        assert(time_now >= client->start_time);
> > +
> > +        /* seconds between sending first and last DISCOVER
> > +         * must always be strictly positive to deal with broken servers */
> > +        secs = ((time_now - client->start_time) / USEC_PER_SEC) ? : 1;
> > +        packet->dhcp.secs = htobe16(secs);

The previous code assumed that resending a message mean really sending
an identical one in place of the lost one. This change actually nags on
the other end that time has really passed, be it a clue to a DHCP relay
that it should do something else than before. Looking at the RFC snippet
and the patch, I think this is what the RFC actually tried to say.

Cheers,

	Patrik



More information about the systemd-devel mailing list