]>
Commit | Line | Data |
---|---|---|
d8feb2d7 SS |
1 | diff -up dhcp-4.3.4/client/dhclient.c.backoff dhcp-4.3.4/client/dhclient.c |
2 | --- dhcp-4.3.4/client/dhclient.c.backoff 2016-04-29 12:16:26.976245611 +0200 | |
3 | +++ dhcp-4.3.4/client/dhclient.c 2016-04-29 12:16:26.979245609 +0200 | |
4 | @@ -1423,6 +1423,8 @@ void state_init (cpp) | |
6df985df SS |
5 | void *cpp; |
6 | { | |
7 | struct client_state *client = cpp; | |
8 | + enum dhcp_state init_state = client->state; | |
9 | + struct timeval tv; | |
10 | ||
11 | ASSERT_STATE(state, S_INIT); | |
12 | ||
d8feb2d7 | 13 | @@ -1435,9 +1437,18 @@ void state_init (cpp) |
6df985df SS |
14 | client -> first_sending = cur_time; |
15 | client -> interval = client -> config -> initial_interval; | |
16 | ||
17 | - /* Add an immediate timeout to cause the first DHCPDISCOVER packet | |
18 | - to go out. */ | |
19 | - send_discover (client); | |
20 | + if (init_state != S_DECLINED) { | |
21 | + /* Add an immediate timeout to cause the first DHCPDISCOVER packet | |
22 | + to go out. */ | |
23 | + send_discover(client); | |
24 | + } else { | |
25 | + /* We've received an OFFER and it has been DECLINEd by dhclient-script. | |
26 | + * wait for a random time between 1 and backoff_cutoff seconds before | |
27 | + * trying again. */ | |
28 | + tv . tv_sec = cur_time + ((1 + (random() >> 2)) % client->config->backoff_cutoff); | |
29 | + tv . tv_usec = 0; | |
30 | + add_timeout(&tv, send_discover, client, 0, 0); | |
31 | + } | |
32 | } | |
33 | ||
34 | /* | |
d8feb2d7 SS |
35 | @@ -1734,6 +1745,7 @@ void bind_lease (client) |
36 | "try (declined). Exiting."); | |
37 | exit(2); | |
38 | } else { | |
39 | + client -> state = S_DECLINED; | |
40 | state_init(client); | |
41 | return; | |
42 | } | |
43 | @@ -4626,6 +4638,7 @@ void client_location_changed () | |
6df985df SS |
44 | case S_INIT: |
45 | case S_REBINDING: | |
46 | case S_STOPPED: | |
47 | + case S_DECLINED: | |
48 | break; | |
49 | } | |
50 | client -> state = S_INIT; | |
d8feb2d7 SS |
51 | diff -up dhcp-4.3.4/includes/dhcpd.h.backoff dhcp-4.3.4/includes/dhcpd.h |
52 | --- dhcp-4.3.4/includes/dhcpd.h.backoff 2016-04-29 12:16:26.980245609 +0200 | |
53 | +++ dhcp-4.3.4/includes/dhcpd.h 2016-04-29 12:17:30.893203533 +0200 | |
54 | @@ -1171,7 +1171,8 @@ enum dhcp_state { | |
6df985df SS |
55 | S_BOUND = 5, |
56 | S_RENEWING = 6, | |
57 | S_REBINDING = 7, | |
58 | - S_STOPPED = 8 | |
59 | + S_STOPPED = 8, | |
60 | + S_DECLINED = 9 | |
61 | }; | |
62 | ||
d8feb2d7 | 63 | /* Possible pending client operations. */ |