static u_int32 get_pfxmatch(const char **, struct masks *);
static u_int32 get_match(const char *, struct masks *);
static u_int32 get_logmask(const char *);
+static int/*BOOL*/ is_refclk_addr(const address_node * addr);
+
+
#ifndef SIM
static int getnetnum(const char *num, sockaddr_u *addr, int complain,
enum gnn_type a_type);
break;
case T_Ttl:
- if (option->value.u >= MAX_TTL) {
+ if (is_refclk_addr(addr)) {
+ msyslog(LOG_ERR, "'ttl' does not apply for refclocks");
+ errflag = 1;
+ } else if (option->value.u >= MAX_TTL) {
msyslog(LOG_ERR, "ttl: invalid argument");
errflag = 1;
} else {
break;
case T_Mode:
- my_node->ttl = option->value.u;
+ if (is_refclk_addr(addr)) {
+ my_node->ttl = option->value.u;
+ } else {
+ msyslog(LOG_ERR, "'mode' does not apply for network peers");
+ errflag = 1;
+ }
break;
case T_Key:
#endif
}
+/* Hack to disambiguate 'server' statements for refclocks and network peers.
+ * Please note the qualification 'hack'. It's just that.
+ */
+static int/*BOOL*/
+is_refclk_addr(
+ const address_node * addr
+ )
+{
+ return addr && addr->address && !strncmp(addr->address, "127.127.", 6);
+}
static void
ntpd_set_tod_using(
}
}
peer->t21_bytes = sendlen;
- sendpkt(&peer->srcadr, peer->dstadr, sys_ttl[peer->ttl],
- &xpkt, sendlen);
+ sendpkt(&peer->srcadr, peer->dstadr,
+ sys_ttl[(peer->ttl >= sys_ttlmax) ? sys_ttlmax : peer->ttl],
+ &xpkt, sendlen);
peer->sent++;
peer->throttle += (1 << peer->minpoll) - 2;
exit (-1);
}
peer->t21_bytes = sendlen;
- sendpkt(&peer->srcadr, peer->dstadr, sys_ttl[peer->ttl], &xpkt,
- sendlen);
+ sendpkt(&peer->srcadr, peer->dstadr,
+ sys_ttl[(peer->ttl >= sys_ttlmax) ? sys_ttlmax : peer->ttl],
+ &xpkt, sendlen);
peer->sent++;
peer->throttle += (1 << peer->minpoll) - 2;
get_systime(&xmt_tx);
pool->aorg = xmt_tx;
HTONL_FP(&xmt_tx, &xpkt.xmt);
- sendpkt(rmtadr, lcladr, sys_ttl[pool->ttl], &xpkt,
- LEN_PKT_NOMAC);
+ sendpkt(rmtadr, lcladr,
+ sys_ttl[(pool->ttl >= sys_ttlmax) ? sys_ttlmax : pool->ttl],
+ &xpkt, LEN_PKT_NOMAC);
pool->sent++;
pool->throttle += (1 << pool->minpoll) - 2;
DPRINTF(1, ("pool_xmit: at %ld %s->%s pool\n",
sys_stattime = current_time;
orphwait = current_time + sys_orphwait;
proto_clr_stats();
- for (i = 0; i < MAX_TTL; i++) {
+ for (i = 0; i < MAX_TTL; ++i)
sys_ttl[i] = (u_char)((i * 256) / MAX_TTL);
- sys_ttlmax = i;
- }
+ sys_ttlmax = (MAX_TTL - 1);
hardpps_enable = 0;
stats_control = 1;
}