]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blob - src/patches/dhcp-4.2.1-retransmission.patch
firewall: Remove redundant rule.
[people/teissler/ipfire-2.x.git] / src / patches / dhcp-4.2.1-retransmission.patch
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 }