]>
Commit | Line | Data |
---|---|---|
78ab9b04 MT |
1 | diff -up dhcp-4.2.1b1/client/dhc6.c.retransmission dhcp-4.2.1b1/client/dhc6.c |
2 | --- dhcp-4.2.1b1/client/dhc6.c.retransmission 2011-01-28 08:40:56.000000000 +0100 | |
3 | +++ dhcp-4.2.1b1/client/dhc6.c 2011-01-28 08:39:22.000000000 +0100 | |
4 | @@ -361,7 +361,7 @@ dhc6_retrans_init(struct client_state *c | |
5 | static void | |
6 | dhc6_retrans_advance(struct client_state *client) | |
7 | { | |
8 | - struct timeval elapsed; | |
9 | + struct timeval elapsed, elapsed_after_RT; | |
10 | ||
11 | /* elapsed = cur - start */ | |
12 | elapsed.tv_sec = cur_tv.tv_sec - client->start_time.tv_sec; | |
13 | @@ -378,6 +378,8 @@ dhc6_retrans_advance(struct client_state | |
14 | elapsed.tv_sec += 1; | |
15 | elapsed.tv_usec -= 1000000; | |
16 | } | |
17 | + elapsed_after_RT.tv_sec = elapsed.tv_sec; | |
18 | + elapsed_after_RT.tv_usec = elapsed.tv_usec; | |
19 | ||
20 | /* | |
21 | * RT for each subsequent message transmission is based on the previous | |
22 | @@ -415,13 +417,10 @@ dhc6_retrans_advance(struct client_state | |
23 | elapsed.tv_usec -= 1000000; | |
24 | } | |
25 | if (elapsed.tv_sec >= client->MRD) { | |
26 | - /* | |
27 | - * wake at RT + cur = start + MRD | |
28 | - */ | |
29 | - client->RT = client->MRD + | |
30 | - (client->start_time.tv_sec - cur_tv.tv_sec); | |
31 | - client->RT = client->RT * 100 + | |
32 | - (client->start_time.tv_usec - cur_tv.tv_usec) / 10000; | |
33 | + client->RT = client->MRD - elapsed_after_RT.tv_sec; | |
34 | + client->RT = client->RT * 100 - elapsed_after_RT.tv_usec / 10000; | |
35 | + if (client->RT < 0) | |
36 | + client->RT = 0; | |
37 | } | |
38 | client->txcount++; | |
39 | } | |
40 | @@ -1497,7 +1496,7 @@ check_timing6 (struct client_state *clie | |
41 | } | |
42 | ||
43 | /* Check if finished (-1 argument). */ | |
44 | - if ((client->MRD != 0) && (elapsed.tv_sec > client->MRD)) { | |
45 | + if ((client->MRD != 0) && (elapsed.tv_sec >= client->MRD)) { | |
46 | log_info("Max retransmission duration exceeded."); | |
47 | return(CHK_TIM_MRD_EXCEEDED); | |
48 | } |