ntpd: do not use a peer more than once (say, if two peers resolve to the same IP)
function old new delta add_peers 98 166 +68 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
4c48a64747
commit
f37f28199f
@ -727,7 +727,7 @@ reset_peer_stats(peer_t *p, double offset)
|
|||||||
|
|
||||||
/* Used to set p->filter_datapoint[i].d_dispersion = MAXDISP
|
/* Used to set p->filter_datapoint[i].d_dispersion = MAXDISP
|
||||||
* and clear reachable bits, but this proved to be too agressive:
|
* and clear reachable bits, but this proved to be too agressive:
|
||||||
* after step (tested with suspinding laptop for ~30 secs),
|
* after step (tested with suspending laptop for ~30 secs),
|
||||||
* this caused all previous data to be considered invalid,
|
* this caused all previous data to be considered invalid,
|
||||||
* making us needing to collect full ~8 datapoins per peer
|
* making us needing to collect full ~8 datapoins per peer
|
||||||
* after step in order to start trusting them.
|
* after step in order to start trusting them.
|
||||||
@ -766,11 +766,26 @@ reset_peer_stats(peer_t *p, double offset)
|
|||||||
static void
|
static void
|
||||||
add_peers(const char *s)
|
add_peers(const char *s)
|
||||||
{
|
{
|
||||||
|
llist_t *item;
|
||||||
peer_t *p;
|
peer_t *p;
|
||||||
|
|
||||||
p = xzalloc(sizeof(*p));
|
p = xzalloc(sizeof(*p));
|
||||||
p->p_lsa = xhost2sockaddr(s, 123);
|
p->p_lsa = xhost2sockaddr(s, 123);
|
||||||
p->p_dotted = xmalloc_sockaddr2dotted_noport(&p->p_lsa->u.sa);
|
p->p_dotted = xmalloc_sockaddr2dotted_noport(&p->p_lsa->u.sa);
|
||||||
|
|
||||||
|
/* Names like N.<country2chars>.pool.ntp.org are randomly resolved
|
||||||
|
* to a pool of machines. Sometimes different N's resolve to the same IP.
|
||||||
|
* It is not useful to have two peers with same IP. We skip duplicates.
|
||||||
|
*/
|
||||||
|
for (item = G.ntp_peers; item != NULL; item = item->link) {
|
||||||
|
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);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
p->p_fd = -1;
|
p->p_fd = -1;
|
||||||
p->p_xmt_msg.m_status = MODE_CLIENT | (NTP_VERSION << 3);
|
p->p_xmt_msg.m_status = MODE_CLIENT | (NTP_VERSION << 3);
|
||||||
p->next_action_time = G.cur_time; /* = set_next(p, 0); */
|
p->next_action_time = G.cur_time; /* = set_next(p, 0); */
|
||||||
|
Loading…
Reference in New Issue
Block a user