1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
From c8641962e4cbde48108ddfc1c105e3320778190d Mon Sep 17 00:00:00 2001
From: Denys Vlasenko <vda.linux@googlemail.com>
Date: Fri, 4 Mar 2016 07:26:08 +0100
Subject: [PATCH 4006/4007] ntpd: if peer does not reply anymore, try
re-resolving its hostname
function old new delta
ntpd_main 1053 1130 +77
add_peers 166 195 +29
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
---
networking/ntpd.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/networking/ntpd.c b/networking/ntpd.c
index 517806e..4103189 100644
--- a/networking/ntpd.c
+++ b/networking/ntpd.c
@@ -267,6 +267,7 @@ typedef struct {
typedef struct {
len_and_sockaddr *p_lsa;
+ char *p_hostname;
char *p_dotted;
int p_fd;
int datapoint_idx;
@@ -781,11 +782,14 @@ add_peers(const char *s)
peer_t *pp = (peer_t *) item->data;
if (strcmp(p->p_dotted, pp->p_dotted) == 0) {
bb_error_msg("duplicate peer %s (%s)", s, p->p_dotted);
+ free(p->p_lsa);
+ free(p->p_dotted);
free(p);
return;
}
}
+ p->p_hostname = xstrdup(s);
p->p_fd = -1;
p->p_xmt_msg.m_status = MODE_CLIENT | (NTP_VERSION << 3);
p->next_action_time = G.cur_time; /* = set_next(p, 0); */
@@ -2332,6 +2336,21 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv)
timeout = poll_interval(NOREPLY_INTERVAL);
bb_error_msg("timed out waiting for %s, reach 0x%02x, next query in %us",
p->p_dotted, p->reachable_bits, timeout);
+
+ /* What if don't see it because it changed its IP? */
+ if (p->reachable_bits == 0) {
+ len_and_sockaddr *lsa = host2sockaddr(p->p_hostname, 123);
+ if (lsa) {
+ char *dotted = xmalloc_sockaddr2dotted_noport(&lsa->u.sa);
+ //if (strcmp(dotted, p->p_dotted) != 0)
+ // bb_error_msg("peer IP changed");
+ free(p->p_lsa);
+ free(p->p_dotted);
+ p->p_lsa = lsa;
+ p->p_dotted = dotted;
+ }
+ }
+
set_next(p, timeout);
}
}
--
2.8.3
|