From: Dave Hart Date: Sun, 18 Dec 2011 04:24:58 +0000 (+0000) Subject: [Bug 2015] Overriding sys_tick should recalculate sys_precision. X-Git-Tag: NTP_4_2_7P241~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=412223cf41231d355f7d4403afc1339649ecac05;p=thirdparty%2Fntp.git [Bug 2015] Overriding sys_tick should recalculate sys_precision. [Bug 2068] "tos ceiling" default and cap changed to 15. Floor peer delay using system precision, as with jitter, reflecting inability to measure shorter intervals. bk: 4eed6b1aAW-Z0QoSkP3iBo0pczczaQ --- diff --git a/ChangeLog b/ChangeLog index 037ff3965..c8e79d359 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,8 @@ +* [Bug 2015] Overriding sys_tick should recalculate sys_precision. * [Bug 2037] Fuzzed non-interpolated clock may decrease. +* [Bug 2068] "tos ceiling" default and cap changed to 15. +* Floor peer delay using system precision, as with jitter, reflecting + inability to measure shorter intervals. (4.2.7p240) 2011/12/15 Released by Harlan Stenn * [Bug 2092] clock_select() selection jitter miscalculated. * [Bug 2093] Reintroduce smaller stratum factor to system peer metric. diff --git a/include/ntp.h b/include/ntp.h index bb547aac0..9e3f92887 100644 --- a/include/ntp.h +++ b/include/ntp.h @@ -696,7 +696,7 @@ struct pkt { #define PROTO_CALLDELAY 20 #define PROTO_MINDISP 21 #define PROTO_MAXDIST 22 -#define PROTO_ADJ 23 + /* available 23 */ #define PROTO_MAXHOP 24 #define PROTO_BEACON 25 #define PROTO_ORPHAN 26 @@ -718,6 +718,7 @@ struct pkt { #define LOOP_FREQ 10 /* set initial frequency */ #define LOOP_CODEC 11 /* set audio codec frequency */ #define LOOP_LEAP 12 /* insert leap after second 23:59 */ +#define LOOP_TICK 13 /* sim. low precision clock */ /* * Configuration items for the stats printer diff --git a/include/ntp_stdlib.h b/include/ntp_stdlib.h index f7973b2d1..98b3fb7e2 100644 --- a/include/ntp_stdlib.h +++ b/include/ntp_stdlib.h @@ -276,6 +276,7 @@ extern char * ntp_strerror (int e); /* systime.c */ extern double sys_tick; /* tick size or time to read */ +extern double measured_tick; /* non-overridable sys_tick */ extern double sys_fuzz; /* min clock read latency */ /* version.c */ diff --git a/include/ntp_unixtime.h b/include/ntp_unixtime.h index 52e2991f8..0fb738885 100644 --- a/include/ntp_unixtime.h +++ b/include/ntp_unixtime.h @@ -8,6 +8,8 @@ #include "ntp_types.h" /* picks up time.h via ntp_machine.h */ #include "ntp_calendar.h" +#include "timespecops.h" +#include "timevalops.h" #ifdef SIM # define GETTIMEOFDAY(a, b) (node_gettime(&ntp_node, a)) diff --git a/include/ntpd.h b/include/ntpd.h index bf2ceb98c..7a6026702 100644 --- a/include/ntpd.h +++ b/include/ntpd.h @@ -236,6 +236,7 @@ extern void poll_update (struct peer *, u_char); extern void clear (struct peer *); extern void clock_filter (struct peer *, double, double, double); extern void init_proto (void); +extern void set_sys_tick_precision(double); extern void proto_config (int, u_long, double, sockaddr_u *); extern void proto_clr_stats (void); diff --git a/libntp/systime.c b/libntp/systime.c index b75eb2a4f..88429e491 100644 --- a/libntp/systime.c +++ b/libntp/systime.c @@ -71,10 +71,13 @@ double sys_tick = 0; /* tick size or time to read (s) */ double sys_fuzz = 0; /* min. time to read the clock (s) */ long sys_fuzz_nsec = 0; /* min. time to read the clock (ns) */ +double measured_tick; /* non-overridable sys_tick (s) */ double sys_residual = 0; /* adjustment residue (s) */ time_stepped_callback step_callback; +#ifndef SIM static int lamport_violated; /* clock was stepped back */ +#endif void set_sys_fuzz( @@ -95,7 +98,8 @@ get_ostime( struct timespec * tsp ) { - int rc; + int rc; + long ticks; #if defined(HAVE_CLOCK_GETTIME) rc = clock_gettime(CLOCK_REALTIME, tsp); @@ -113,6 +117,11 @@ get_ostime( errno); exit(1); } + + if (sys_tick > measured_tick) { + ticks = (long)((tsp->tv_nsec * 1e-9) / sys_tick); + tsp->tv_nsec = (long)(ticks * 1e9 * sys_tick); + } } @@ -125,8 +134,7 @@ get_systime( ) { static struct timespec ts_prev; /* prior os time */ - static l_fp lfp_prev; /* prior pre-residual result */ - static l_fp lfp_prev_w_resid;/* prior result including sys_residual */ + static l_fp lfp_prev; /* prior result */ struct timespec ts; /* seconds and nanoseconds */ struct timespec ts_min; /* earliest permissible */ struct timespec ts_lam; /* lamport fictional increment */ diff --git a/ntpd/complete.conf b/ntpd/complete.conf index 04f39fbc9..7c9a251ef 100644 --- a/ntpd/complete.conf +++ b/ntpd/complete.conf @@ -24,7 +24,7 @@ requestkey 12 enable auth ntp monitor disable bclient calibrate kernel mode7 tos beacon 3600 ceiling 16 cohort 0 floor 1 maxclock 10 maxdist 1.5 minclock 3 mindist 0.001 minsane 1 orphan 16 orphanwait 300 -tinker allan 1500 dispersion 15 freq 0 huffpuff 7200 panic 1000 step 0.128 stepout 900 +tinker allan 1500 dispersion 15 freq 0 huffpuff 7200 panic 1000 step 0.128 stepout 900 tick 0.01 broadcastclient server 127.127.1.0 mode 4294967295 prefer true fudge 127.127.1.0 time1 0 time2 1.1 stratum 7 refid Abcd diff --git a/ntpd/ntp_config.c b/ntpd/ntp_config.c index eecff179b..eda00b4be 100644 --- a/ntpd/ntp_config.c +++ b/ntpd/ntp_config.c @@ -1942,12 +1942,14 @@ config_tos( config_tree *ptree ) { - attr_val *tos; - int item; + attr_val * tos; + int item; + double val; item = -1; /* quiet warning */ tos = HEAD_PFIFO(ptree->orphan_cmds); for (; tos != NULL; tos = tos->link) { + val = tos->value.d; switch(tos->attr) { default: @@ -1955,6 +1957,12 @@ config_tos( break; case T_Ceiling: + if (val > STRATUM_UNSPEC - 1) { + msyslog(LOG_WARNING, + "Using maximum tos ceiling %d, %g requested", + STRATUM_UNSPEC - 1, val); + val = STRATUM_UNSPEC - 1; + } item = PROTO_CEILING; break; @@ -1998,7 +2006,7 @@ config_tos( item = PROTO_BEACON; break; } - proto_config(item, 0, tos->value.d, NULL); + proto_config(item, 0, val, NULL); } } @@ -2580,6 +2588,10 @@ config_tinker( case T_Stepout: item = LOOP_MINSTEP; break; + + case T_Tick: + item = LOOP_TICK; + break; } loop_config(item, tinker->value.d); } @@ -3395,8 +3407,9 @@ config_vars( case T_Broadcastdelay: proto_config(PROTO_BROADDELAY, 0, curr_var->value.d, NULL); break; + case T_Tick: - proto_config(PROTO_ADJ, 0, curr_var->value.d, NULL); + loop_config(LOOP_TICK, curr_var->value.d); break; case T_Driftfile: diff --git a/ntpd/ntp_control.c b/ntpd/ntp_control.c index 1b6bd5f63..17456b110 100644 --- a/ntpd/ntp_control.c +++ b/ntpd/ntp_control.c @@ -219,7 +219,8 @@ static const struct ctl_proc control_codes[] = { #define CS_TIMERSTATS_RESET 85 #define CS_TIMER_OVERRUNS 86 #define CS_TIMER_XMTS 87 -#define CS_MAX_NOAUTOKEY CS_TIMER_XMTS +#define CS_FUZZ 88 +#define CS_MAX_NOAUTOKEY CS_FUZZ #ifdef AUTOKEY #define CS_FLAGS (1 + CS_MAX_NOAUTOKEY) #define CS_HOST (2 + CS_MAX_NOAUTOKEY) @@ -413,6 +414,7 @@ static const struct ctl_var sys_var[] = { { CS_TIMERSTATS_RESET, RO, "timerstats_reset" },/* 85 */ { CS_TIMER_OVERRUNS, RO, "timer_overruns" }, /* 86 */ { CS_TIMER_XMTS, RO, "timer_xmts" }, /* 87 */ + { CS_FUZZ, RO, "fuzz" }, /* 88 */ #ifdef AUTOKEY { CS_FLAGS, RO, "flags" }, /* 1 + CS_MAX_NOAUTOKEY */ { CS_HOST, RO, "host" }, /* 2 + CS_MAX_NOAUTOKEY */ @@ -679,7 +681,7 @@ int num_ctl_traps; * different than CTL_SST_TS_UNSPEC. */ #ifdef REFCLOCK -static u_char clocktypes[] = { +static const u_char clocktypes[] = { CTL_SST_TS_NTP, /* REFCLK_NONE (0) */ CTL_SST_TS_LOCAL, /* REFCLK_LOCALCLOCK (1) */ CTL_SST_TS_UHF, /* deprecated REFCLK_GPS_TRAK (2) */ @@ -2232,6 +2234,10 @@ ctl_putsys( case CS_TIMER_XMTS: ctl_putuint(sys_var[varid].text, timer_xmtcalls); break; + + case CS_FUZZ: + ctl_putdbl(sys_var[varid].text, sys_fuzz * 1e3); + break; #ifdef AUTOKEY case CS_FLAGS: if (crypto_flags) diff --git a/ntpd/ntp_io.c b/ntpd/ntp_io.c index f5f78b9f0..d8537be6f 100644 --- a/ntpd/ntp_io.c +++ b/ntpd/ntp_io.c @@ -3162,51 +3162,56 @@ fetch_timestamp( ) { #ifdef USE_TIMESTAMP_CMSG - struct cmsghdr *cmsghdr; + struct cmsghdr * cmsghdr; + struct timeval * tvp; + long ticks; + double fuzz; + l_fp lfpfuzz; + l_fp nts; +#ifdef DEBUG_TIMING + l_fp dts; +#endif cmsghdr = CMSG_FIRSTHDR(msghdr); while (cmsghdr != NULL) { switch (cmsghdr->cmsg_type) { case SCM_TIMESTAMP: - { - struct timeval *tvp; - double dtemp; - l_fp nts; - tvp = (struct timeval *)CMSG_DATA(cmsghdr); + if (sys_tick > measured_tick && + sys_tick > 1e-6) { + ticks = (long)((tvp->tv_usec * 1e-6) / + sys_tick); + tvp->tv_usec = (long)(ticks * 1e6 * + sys_tick); + } DPRINTF(4, ("fetch_timestamp: system network time stamp: %ld.%06ld\n", tvp->tv_sec, tvp->tv_usec)); - nts.l_i = tvp->tv_sec + JAN_1970; - dtemp = (tvp->tv_usec - + (ntp_random() * 2. / FRAC)) / 1e6; - nts.l_uf = (u_int32)(dtemp * FRAC); + timeval_abstolfp(&nts, tvp); + fuzz = ntp_random() * 2. / FRAC * sys_fuzz; + DTOLFP(fuzz, &lfpfuzz); + L_ADD(&nts, &lfpfuzz); #ifdef DEBUG_TIMING - { - l_fp dts; - - dts = ts; - L_SUB(&dts, &nts); - collect_timing(rb, - "input processing delay", - 1, &dts); - DPRINTF(4, ("fetch_timestamp: timestamp delta: %s (incl. prec fuzz)\n", - lfptoa(&dts, 9))); - } -#endif + dts = ts; + L_SUB(&dts, &nts); + collect_timing(rb, "input processing delay", 1, + &dts); + DPRINTF(4, ("fetch_timestamp: timestamp delta: %s (incl. prec fuzz)\n", + lfptoa(&dts, 9))); +#endif /* DEBUG_TIMING */ ts = nts; /* network time stamp */ break; - } + default: DPRINTF(4, ("fetch_timestamp: skipping control message 0x%x\n", cmsghdr->cmsg_type)); } cmsghdr = CMSG_NXTHDR(msghdr, cmsghdr); } -#endif +#endif /* USE_TIMESTAMP_CMSG */ return ts; } -#endif +#endif /* HAVE_TIMESTAMP */ /* diff --git a/ntpd/ntp_loopfilter.c b/ntpd/ntp_loopfilter.c index 0ca46e17c..a6d9b3d39 100644 --- a/ntpd/ntp_loopfilter.c +++ b/ntpd/ntp_loopfilter.c @@ -1060,7 +1060,11 @@ loop_config( clock_minstep = freq; break; - case LOOP_LEAP: /* not used */ + case LOOP_TICK: /* tick increment (tick) */ + set_sys_tick_precision(freq); + break; + + case LOOP_LEAP: /* not used, fall through */ default: msyslog(LOG_NOTICE, "loop_config: unsupported option %d", item); diff --git a/ntpd/ntp_parser.c b/ntpd/ntp_parser.c index fe95991c8..13fa5db01 100644 --- a/ntpd/ntp_parser.c +++ b/ntpd/ntp_parser.c @@ -749,18 +749,18 @@ union yyalloc #endif /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 195 +#define YYFINAL 196 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 560 +#define YYLAST 584 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 189 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 100 /* YYNRULES -- Number of rules. */ -#define YYNRULES 297 +#define YYNRULES 298 /* YYNRULES -- Number of states. */ -#define YYNSTATES 398 +#define YYNSTATES 399 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -843,16 +843,16 @@ static const yytype_uint16 yyprhs[] = 401, 404, 407, 409, 411, 413, 415, 417, 419, 422, 425, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 453, 456, 458, 461, 463, 465, 467, - 469, 471, 473, 475, 477, 479, 482, 485, 488, 492, - 494, 497, 500, 503, 506, 510, 513, 515, 517, 519, - 521, 523, 525, 527, 529, 531, 533, 536, 537, 542, - 544, 545, 546, 549, 552, 555, 558, 560, 562, 566, - 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, - 591, 594, 596, 598, 600, 602, 604, 606, 608, 610, - 613, 615, 618, 620, 622, 624, 630, 633, 635, 638, - 640, 642, 644, 646, 648, 650, 656, 658, 662, 665, - 669, 671, 673, 676, 678, 684, 689, 693, 696, 698, - 705, 709, 712, 716, 718, 720, 722, 724 + 469, 471, 473, 475, 477, 479, 481, 484, 487, 490, + 494, 496, 499, 502, 505, 508, 512, 515, 517, 519, + 521, 523, 525, 527, 529, 531, 533, 535, 538, 539, + 544, 546, 547, 548, 551, 554, 557, 560, 562, 564, + 568, 572, 574, 576, 578, 580, 582, 584, 586, 588, + 590, 593, 596, 598, 600, 602, 604, 606, 608, 610, + 612, 615, 617, 620, 622, 624, 626, 632, 635, 637, + 640, 642, 644, 646, 648, 650, 652, 658, 660, 664, + 667, 671, 673, 675, 678, 680, 686, 691, 695, 698, + 700, 707, 711, 714, 718, 720, 722, 724, 726 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ @@ -905,32 +905,32 @@ static const yytype_int16 yyrhs[] = 66, -1, 98, -1, 113, -1, 97, -1, 143, -1, 156, 246, -1, 246, 247, -1, 247, -1, 248, 274, -1, 5, -1, 30, -1, 46, -1, 49, -1, 118, - -1, 145, -1, 146, -1, 260, -1, 264, -1, 250, - 274, -1, 251, 148, -1, 252, 148, -1, 57, 148, - 192, -1, 36, -1, 32, 253, -1, 76, 258, -1, - 121, 271, -1, 140, 254, -1, 158, 196, 256, -1, - 161, 267, -1, 15, -1, 106, -1, 151, -1, 51, - -1, 72, -1, 123, -1, 130, -1, 77, -1, 138, - -1, 148, -1, 148, 31, -1, -1, 148, 184, 148, - 255, -1, 26, -1, -1, -1, 256, 257, -1, 125, - 58, -1, 59, 196, -1, 258, 259, -1, 259, -1, - 148, -1, 261, 263, 262, -1, 261, 263, 148, -1, - 59, -1, 102, -1, 4, -1, 62, -1, 64, -1, - 169, -1, 75, -1, 52, -1, 33, -1, 135, 265, - -1, 265, 266, -1, 266, -1, 6, -1, 7, -1, - 24, -1, 61, -1, 89, -1, 149, -1, 154, -1, - 267, 58, -1, 58, -1, 268, 269, -1, 269, -1, - 58, -1, 270, -1, 185, 58, 34, 58, 186, -1, - 271, 148, -1, 148, -1, 272, 195, -1, 195, -1, - 58, -1, 159, -1, 37, -1, 58, -1, 31, -1, - 276, 187, 277, 280, 188, -1, 174, -1, 277, 278, - 173, -1, 278, 173, -1, 279, 184, 274, -1, 175, - -1, 176, -1, 280, 281, -1, 281, -1, 283, 187, - 282, 284, 188, -1, 177, 184, 274, 173, -1, 139, - 184, 195, -1, 284, 285, -1, 285, -1, 178, 184, - 274, 187, 286, 188, -1, 286, 287, 173, -1, 287, - 173, -1, 288, 184, 274, -1, 179, -1, 180, -1, - 181, -1, 182, -1, 183, -1 + -1, 145, -1, 146, -1, 151, -1, 260, -1, 264, + -1, 250, 274, -1, 251, 148, -1, 252, 148, -1, + 57, 148, 192, -1, 36, -1, 32, 253, -1, 76, + 258, -1, 121, 271, -1, 140, 254, -1, 158, 196, + 256, -1, 161, 267, -1, 15, -1, 106, -1, 151, + -1, 51, -1, 72, -1, 123, -1, 130, -1, 77, + -1, 138, -1, 148, -1, 148, 31, -1, -1, 148, + 184, 148, 255, -1, 26, -1, -1, -1, 256, 257, + -1, 125, 58, -1, 59, 196, -1, 258, 259, -1, + 259, -1, 148, -1, 261, 263, 262, -1, 261, 263, + 148, -1, 59, -1, 102, -1, 4, -1, 62, -1, + 64, -1, 169, -1, 75, -1, 52, -1, 33, -1, + 135, 265, -1, 265, 266, -1, 266, -1, 6, -1, + 7, -1, 24, -1, 61, -1, 89, -1, 149, -1, + 154, -1, 267, 58, -1, 58, -1, 268, 269, -1, + 269, -1, 58, -1, 270, -1, 185, 58, 34, 58, + 186, -1, 271, 148, -1, 148, -1, 272, 195, -1, + 195, -1, 58, -1, 159, -1, 37, -1, 58, -1, + 31, -1, 276, 187, 277, 280, 188, -1, 174, -1, + 277, 278, 173, -1, 278, 173, -1, 279, 184, 274, + -1, 175, -1, 176, -1, 280, 281, -1, 281, -1, + 283, 187, 282, 284, 188, -1, 177, 184, 274, 173, + -1, 139, 184, 195, -1, 284, 285, -1, 285, -1, + 178, 184, 274, 187, 286, 188, -1, 286, 287, 173, + -1, 287, 173, -1, 288, 184, 274, -1, 179, -1, + 180, -1, 181, -1, 182, -1, 183, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ @@ -956,16 +956,16 @@ static const yytype_uint16 yyrline[] = 942, 944, 949, 950, 954, 955, 956, 957, 965, 967, 972, 977, 985, 987, 1004, 1005, 1006, 1007, 1008, 1009, 1013, 1014, 1022, 1027, 1032, 1040, 1045, 1046, 1047, 1048, - 1049, 1050, 1051, 1060, 1061, 1062, 1069, 1076, 1092, 1111, - 1116, 1118, 1120, 1122, 1124, 1131, 1136, 1137, 1138, 1142, - 1143, 1144, 1145, 1149, 1150, 1154, 1161, 1171, 1180, 1185, - 1187, 1192, 1193, 1201, 1203, 1211, 1216, 1224, 1249, 1256, - 1266, 1267, 1271, 1272, 1273, 1274, 1278, 1279, 1280, 1284, - 1289, 1294, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1318, - 1323, 1331, 1336, 1344, 1346, 1350, 1355, 1360, 1368, 1373, - 1381, 1390, 1391, 1395, 1396, 1405, 1423, 1427, 1432, 1440, - 1445, 1446, 1450, 1455, 1463, 1468, 1473, 1478, 1483, 1491, - 1496, 1501, 1509, 1514, 1515, 1516, 1517, 1518 + 1049, 1050, 1051, 1052, 1061, 1062, 1063, 1070, 1077, 1093, + 1112, 1117, 1119, 1121, 1123, 1125, 1132, 1137, 1138, 1139, + 1143, 1144, 1145, 1146, 1150, 1151, 1155, 1162, 1172, 1181, + 1186, 1188, 1193, 1194, 1202, 1204, 1212, 1217, 1225, 1250, + 1257, 1267, 1268, 1272, 1273, 1274, 1275, 1279, 1280, 1281, + 1285, 1290, 1295, 1303, 1304, 1305, 1306, 1307, 1308, 1309, + 1319, 1324, 1332, 1337, 1345, 1347, 1351, 1356, 1361, 1369, + 1374, 1382, 1391, 1392, 1396, 1397, 1406, 1424, 1428, 1433, + 1441, 1446, 1447, 1451, 1456, 1464, 1469, 1474, 1479, 1484, + 1492, 1497, 1502, 1510, 1515, 1516, 1517, 1518, 1519 }; #endif @@ -1093,16 +1093,16 @@ static const yytype_uint16 yyr1[] = 237, 237, 238, 238, 239, 239, 239, 239, 240, 240, 241, 241, 242, 242, 243, 243, 243, 243, 243, 243, 244, 244, 245, 246, 246, 247, 248, 248, 248, 248, - 248, 248, 248, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 250, 250, 250, 251, - 251, 251, 251, 252, 252, 253, 253, 253, 254, 255, - 255, 256, 256, 257, 257, 258, 258, 259, 260, 260, - 261, 261, 262, 262, 262, 262, 263, 263, 263, 264, - 265, 265, 266, 266, 266, 266, 266, 266, 266, 267, - 267, 268, 268, 269, 269, 270, 271, 271, 272, 272, - 273, 273, 273, 274, 274, 275, 276, 277, 277, 278, - 279, 279, 280, 280, 281, 282, 283, 284, 284, 285, - 286, 286, 287, 288, 288, 288, 288, 288 + 248, 248, 248, 248, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 250, 250, 250, + 251, 251, 251, 251, 252, 252, 253, 253, 253, 254, + 255, 255, 256, 256, 257, 257, 258, 258, 259, 260, + 260, 261, 261, 262, 262, 262, 262, 263, 263, 263, + 264, 265, 265, 266, 266, 266, 266, 266, 266, 266, + 267, 267, 268, 268, 269, 269, 270, 271, 271, 272, + 272, 273, 273, 273, 274, 274, 275, 276, 277, 277, + 278, 279, 279, 280, 280, 281, 282, 283, 284, 284, + 285, 286, 286, 287, 288, 288, 288, 288, 288 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -1128,16 +1128,16 @@ static const yytype_uint8 yyr2[] = 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 3, 1, - 2, 2, 2, 2, 3, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 0, 4, 1, - 0, 0, 2, 2, 2, 2, 1, 1, 3, 3, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 1, 2, 1, 1, 1, 5, 2, 1, 2, 1, - 1, 1, 1, 1, 1, 5, 1, 3, 2, 3, - 1, 1, 2, 1, 5, 4, 3, 2, 1, 6, - 3, 2, 3, 1, 1, 1, 1, 1 + 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, + 1, 2, 2, 2, 2, 3, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 0, 4, + 1, 0, 0, 2, 2, 2, 2, 1, 1, 3, + 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 1, 2, 1, 1, 1, 5, 2, 1, 2, + 1, 1, 1, 1, 1, 1, 5, 1, 3, 2, + 3, 1, 1, 2, 1, 5, 4, 3, 2, 1, + 6, 3, 2, 3, 1, 1, 1, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -1145,123 +1145,123 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 0, 0, 0, 23, 57, 216, 0, 69, 0, 0, - 227, 0, 209, 0, 0, 219, 0, 240, 0, 0, - 220, 0, 223, 24, 0, 0, 0, 241, 217, 0, - 22, 0, 221, 21, 222, 0, 0, 0, 0, 224, - 20, 0, 0, 0, 218, 0, 0, 0, 0, 0, - 55, 56, 276, 0, 2, 0, 7, 0, 8, 0, + 0, 0, 0, 23, 57, 217, 0, 69, 0, 0, + 228, 0, 210, 0, 0, 220, 0, 241, 0, 0, + 221, 0, 224, 24, 0, 0, 0, 242, 218, 0, + 22, 0, 222, 21, 223, 0, 0, 0, 0, 225, + 20, 0, 0, 0, 219, 0, 0, 0, 0, 0, + 55, 56, 277, 0, 2, 0, 7, 0, 8, 0, 9, 10, 13, 11, 12, 14, 15, 16, 17, 0, - 0, 0, 203, 0, 204, 18, 0, 5, 60, 61, + 0, 0, 204, 0, 205, 18, 0, 5, 60, 61, 62, 184, 185, 186, 187, 190, 188, 189, 191, 179, - 181, 182, 183, 151, 152, 153, 124, 149, 0, 225, - 210, 178, 99, 100, 101, 102, 106, 103, 104, 105, + 181, 182, 183, 151, 152, 153, 124, 149, 0, 226, + 211, 178, 99, 100, 101, 102, 106, 103, 104, 105, 107, 28, 29, 27, 0, 25, 0, 6, 63, 64, - 237, 211, 236, 269, 58, 157, 158, 159, 160, 161, - 162, 163, 164, 125, 155, 0, 59, 68, 267, 212, - 65, 252, 253, 254, 255, 256, 257, 258, 249, 251, - 132, 28, 29, 132, 132, 25, 66, 0, 213, 94, - 98, 95, 196, 197, 198, 199, 200, 201, 202, 192, - 194, 0, 89, 84, 0, 85, 93, 91, 92, 90, - 88, 86, 87, 78, 80, 0, 0, 231, 263, 0, - 67, 262, 264, 260, 215, 1, 0, 4, 30, 54, - 274, 273, 205, 206, 207, 248, 247, 246, 0, 0, - 77, 73, 74, 75, 76, 0, 70, 0, 180, 148, - 150, 226, 96, 174, 175, 176, 177, 0, 0, 172, - 173, 165, 167, 0, 0, 26, 208, 235, 268, 154, - 156, 266, 250, 128, 132, 132, 131, 126, 0, 0, - 97, 193, 195, 272, 270, 271, 83, 79, 81, 82, - 214, 0, 261, 259, 3, 19, 242, 243, 244, 239, - 245, 238, 280, 281, 0, 0, 0, 72, 71, 116, - 115, 0, 113, 114, 0, 108, 111, 112, 171, 170, - 166, 168, 169, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 133, 129, 130, - 132, 230, 0, 0, 232, 0, 36, 37, 38, 53, - 46, 48, 47, 50, 39, 40, 41, 42, 49, 51, - 43, 31, 32, 35, 33, 0, 34, 0, 0, 0, - 0, 283, 0, 278, 0, 109, 123, 119, 121, 117, - 118, 120, 122, 110, 127, 229, 228, 234, 233, 0, - 44, 45, 52, 0, 277, 275, 282, 0, 279, 265, - 286, 0, 0, 0, 0, 0, 288, 0, 0, 284, - 287, 285, 0, 0, 293, 294, 295, 296, 297, 0, - 0, 0, 289, 0, 291, 0, 290, 292 + 238, 212, 237, 270, 58, 157, 158, 159, 160, 161, + 162, 163, 164, 125, 155, 0, 59, 68, 268, 213, + 65, 253, 254, 255, 256, 257, 258, 259, 250, 252, + 132, 28, 29, 132, 132, 25, 66, 0, 214, 94, + 98, 95, 196, 197, 198, 199, 200, 201, 202, 203, + 192, 194, 0, 89, 84, 0, 85, 93, 91, 92, + 90, 88, 86, 87, 78, 80, 0, 0, 232, 264, + 0, 67, 263, 265, 261, 216, 1, 0, 4, 30, + 54, 275, 274, 206, 207, 208, 249, 248, 247, 0, + 0, 77, 73, 74, 75, 76, 0, 70, 0, 180, + 148, 150, 227, 96, 174, 175, 176, 177, 0, 0, + 172, 173, 165, 167, 0, 0, 26, 209, 236, 269, + 154, 156, 267, 251, 128, 132, 132, 131, 126, 0, + 0, 97, 193, 195, 273, 271, 272, 83, 79, 81, + 82, 215, 0, 262, 260, 3, 19, 243, 244, 245, + 240, 246, 239, 281, 282, 0, 0, 0, 72, 71, + 116, 115, 0, 113, 114, 0, 108, 111, 112, 171, + 170, 166, 168, 169, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 133, 129, + 130, 132, 231, 0, 0, 233, 0, 36, 37, 38, + 53, 46, 48, 47, 50, 39, 40, 41, 42, 49, + 51, 43, 31, 32, 35, 33, 0, 34, 0, 0, + 0, 0, 284, 0, 279, 0, 109, 123, 119, 121, + 117, 118, 120, 122, 110, 127, 230, 229, 235, 234, + 0, 44, 45, 52, 0, 278, 276, 283, 0, 280, + 266, 287, 0, 0, 0, 0, 0, 289, 0, 0, + 285, 288, 286, 0, 0, 294, 295, 296, 297, 298, + 0, 0, 0, 290, 0, 292, 0, 291, 293 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 53, 54, 55, 56, 57, 123, 115, 116, 265, - 331, 332, 333, 334, 335, 336, 337, 58, 59, 60, - 61, 80, 216, 217, 62, 183, 184, 185, 186, 63, - 159, 110, 222, 285, 286, 287, 353, 64, 243, 307, - 96, 97, 98, 133, 134, 135, 65, 231, 232, 233, - 234, 66, 89, 90, 91, 92, 67, 169, 170, 171, - 68, 69, 70, 71, 100, 158, 356, 260, 314, 121, - 122, 72, 73, 271, 208, 74, 148, 149, 194, 190, - 191, 192, 139, 124, 256, 202, 75, 76, 274, 275, - 276, 340, 341, 372, 342, 375, 376, 389, 390, 391 + -1, 53, 54, 55, 56, 57, 123, 115, 116, 266, + 332, 333, 334, 335, 336, 337, 338, 58, 59, 60, + 61, 80, 217, 218, 62, 184, 185, 186, 187, 63, + 159, 110, 223, 286, 287, 288, 354, 64, 244, 308, + 96, 97, 98, 133, 134, 135, 65, 232, 233, 234, + 235, 66, 89, 90, 91, 92, 67, 170, 171, 172, + 68, 69, 70, 71, 100, 158, 357, 261, 315, 121, + 122, 72, 73, 272, 209, 74, 148, 149, 195, 191, + 192, 193, 139, 124, 257, 203, 75, 76, 275, 276, + 277, 341, 342, 373, 343, 376, 377, 390, 391, 392 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -170 +#define YYPACT_NINF -171 static const yytype_int16 yypact[] = { - 12, -144, -20, -170, -170, -170, -16, -170, 123, 8, - -98, 123, -170, -11, -7, -170, -96, -170, -95, -94, - -170, -91, -170, -170, -7, 467, -7, -170, -170, -72, - -170, -71, -170, -170, -170, -3, 54, 40, 27, -170, - -170, -62, -11, -61, -170, 19, 419, -58, -53, 33, - -170, -170, -170, 96, 178, -75, -170, -7, -170, -7, - -170, -170, -170, -170, -170, -170, -170, -170, -170, 39, - -49, -48, -170, -13, -170, -170, -83, -170, -170, -170, - 241, -170, -170, -170, -170, -170, -170, -170, -170, 123, - -170, -170, -170, -170, -170, -170, 8, -170, 49, 80, - -170, 123, -170, -170, -170, -170, -170, -170, -170, -170, - -170, -170, -170, -170, 264, -170, -32, 332, -170, -170, - -170, -91, -170, -170, -7, -170, -170, -170, -170, -170, - -170, -170, -170, 467, -170, 61, -7, -170, -170, -25, - -170, -170, -170, -170, -170, -170, -170, -170, 54, -170, - -170, 100, 102, -170, -170, 47, -170, -39, -170, -11, - -170, -170, -170, -170, -170, -170, -170, -170, -170, 19, - -170, 39, -170, -170, -21, -170, -170, -170, -170, -170, - -170, -170, -170, 419, -170, 95, 39, -170, -170, 97, - -53, -170, -170, -170, 99, -170, -12, -170, -170, -170, - -170, -170, -170, -170, -170, -170, -170, -170, 10, -140, - -170, -170, -170, -170, -170, 101, -170, 14, -170, -170, - -170, -170, 195, -170, -170, -170, -170, 18, 109, -170, - -170, 264, -170, 39, -21, -170, -170, -170, -170, -170, - -170, -170, -170, 311, -170, -170, 311, 311, -58, 30, - -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, - -50, 146, -170, -170, -170, 390, -170, -170, -170, -170, - -170, -170, -170, -170, -93, 9, -1, -170, -170, -170, - -170, 36, -170, -170, 3, -170, -170, -170, -170, -170, - -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, - -170, -170, -170, -170, -170, -170, -170, -170, 311, 311, - -170, 164, -58, 143, -170, 144, -170, -170, -170, -170, - -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, - -170, -170, -170, -170, -170, -43, -170, 57, 31, 38, - -109, -170, 29, -170, 39, -170, -170, -170, -170, -170, - -170, -170, -170, -170, 311, -170, -170, -170, -170, 32, - -170, -170, -170, -7, -170, -170, -170, 42, -170, -170, - -170, 43, 44, 39, 48, -156, -170, 51, 39, -170, - -170, -170, 41, 15, -170, -170, -170, -170, -170, 60, - 58, 50, -170, 65, -170, 39, -170, -170 + 12, -142, -26, -171, -171, -171, -23, -171, 123, 8, + -112, 123, -171, 136, -41, -171, -110, -171, -96, -94, + -171, -87, -171, -171, -41, 244, -41, -171, -171, -83, + -171, -75, -171, -171, -171, 18, 43, 40, 19, -171, + -171, -69, 136, -66, -171, 48, 443, -65, -48, 27, + -171, -171, -171, 86, 202, -86, -171, -41, -171, -41, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -16, + -58, -57, -171, -13, -171, -171, -89, -171, -171, -171, + 191, -171, -171, -171, -171, -171, -171, -171, -171, 123, + -171, -171, -171, -171, -171, -171, 8, -171, 41, 69, + -171, 123, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, 160, -171, -39, 356, -171, -171, + -171, -87, -171, -171, -41, -171, -171, -171, -171, -171, + -171, -171, -171, 244, -171, 53, -41, -171, -171, -33, + -171, -171, -171, -171, -171, -171, -171, -171, 43, -171, + -171, 93, 94, -171, -171, 39, -171, -56, -171, 136, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + 48, -171, -16, -171, -171, -21, -171, -171, -171, -171, + -171, -171, -171, -171, 443, -171, 71, -16, -171, -171, + 81, -48, -171, -171, -171, 83, -171, -30, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, 10, + -146, -171, -171, -171, -171, -171, 87, -171, -4, -171, + -171, -171, -171, 88, -171, -171, -171, -171, 5, 99, + -171, -171, 160, -171, -16, -21, -171, -171, -171, -171, + -171, -171, -171, -171, 335, -171, -171, 335, 335, -65, + 16, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -50, 126, -171, -171, -171, 414, -171, -171, -171, + -171, -171, -171, -171, -171, -120, -8, -17, -171, -171, + -171, -171, 30, -171, -171, 3, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, 335, + 335, -171, 154, -65, 124, -171, 125, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -46, -171, 36, 6, + 14, -131, -171, 9, -171, -16, -171, -171, -171, -171, + -171, -171, -171, -171, -171, 335, -171, -171, -171, -171, + 20, -171, -171, -171, -41, -171, -171, -171, 21, -171, + -171, -171, 11, 29, -16, 24, -118, -171, 32, -16, + -171, -171, -171, 23, 217, -171, -171, -171, -171, -171, + 64, 46, 28, -171, 49, -171, -16, -171, -171 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -170, -170, -170, -44, -170, -170, -14, -36, -170, -170, - -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, - -170, -170, -170, -170, -170, -170, 62, -170, -170, -170, - -170, -35, -170, -170, -170, -170, -170, -170, -150, -170, - -170, 148, -170, -170, 116, -170, -170, -170, 20, -170, - -170, -170, 242, -70, -170, -170, -170, -170, 83, -170, - -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, - 135, -170, -170, -170, -170, -170, -170, 112, -170, -170, - 67, -170, -170, 235, 28, -169, -170, -170, -170, -10, - -170, -170, -77, -170, -170, -170, -110, -170, -122, -170 + -171, -171, -171, -49, -171, -171, -14, -36, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, 44, -171, -171, -171, + -171, -35, -171, -171, -171, -171, -171, -171, -150, -171, + -171, 129, -171, -171, 96, -171, -171, -171, -5, -171, + -171, -171, 221, -43, -171, -171, -171, -171, 63, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + 114, -171, -171, -171, -171, -171, -171, 92, -171, -171, + 57, -171, -171, 225, 22, -170, -171, -171, -171, -20, + -171, -171, -81, -171, -171, -171, -122, -171, -132, -171 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -1271,124 +1271,128 @@ static const yytype_int16 yypgoto[] = #define YYTABLE_NINF -7 static const yytype_int16 yytable[] = { - 114, 155, 252, 246, 247, 188, 346, 160, 102, 312, - 196, 187, 103, 1, 266, 360, 253, 259, 93, 218, - 205, 2, 374, 154, 162, 3, 4, 5, 347, 77, - 338, 218, 379, 6, 7, 272, 273, 254, 78, 206, - 8, 9, 79, 198, 10, 199, 338, 11, 12, 163, - 99, 13, 117, 118, 119, 140, 111, 120, 112, 14, - 141, 142, 207, 15, 291, 164, 150, 104, 165, 16, - 200, 17, 267, 236, 268, 313, 137, 138, 143, 365, - 18, 19, 272, 273, 20, 156, 157, 161, 21, 22, - 113, 193, 23, 24, 308, 309, 195, 201, 197, 203, - 204, 94, 348, 151, 209, 152, 95, 220, 349, 105, - 238, 221, 25, 26, 27, 144, 235, 106, 28, 240, - 361, 107, 238, 241, 250, 350, 244, 29, 245, 248, - 81, 30, 189, 31, 82, 32, 33, 166, 255, 108, - 83, 113, 34, 145, 109, 249, 35, 36, 37, 38, - 39, 40, 41, 258, 42, 261, 43, 263, 269, 277, - 354, 264, 278, 44, 167, 168, 288, 289, 45, 46, - 47, 351, 48, 49, 352, 368, 50, 51, 311, 270, - 315, 153, 343, 344, 345, -6, 52, 2, 113, 84, - 355, 3, 4, 5, 384, 385, 386, 387, 388, 6, - 7, 358, 359, 146, 377, 362, 8, 9, 147, 382, - 10, 364, 310, 11, 12, 363, 367, 13, 369, 371, - 85, 86, 374, 279, 381, 14, 397, 373, 383, 15, - 280, 394, 378, 281, 395, 16, 87, 17, 396, 384, - 385, 386, 387, 388, 219, 257, 18, 19, 392, 239, - 20, 290, 251, 101, 21, 22, 237, 262, 23, 24, - 242, 136, 292, 366, 339, 380, 88, 393, 210, 282, - 0, 0, 0, 0, 0, 0, 357, 0, 25, 26, - 27, 0, 0, 0, 28, 0, 0, 0, 0, 211, - 0, 0, 212, 29, 0, 0, 0, 30, 283, 31, - 0, 32, 33, 0, 223, 224, 225, 226, 34, 0, - 0, 0, 35, 36, 37, 38, 39, 40, 41, 0, - 42, 0, 43, 0, 0, 0, 0, 0, 0, 44, - 0, 0, 0, 0, 45, 46, 47, 0, 48, 49, - 0, 2, 50, 51, 0, 3, 4, 5, 0, 370, - 0, -6, 52, 6, 7, 293, 0, 284, 0, 0, - 8, 9, 0, 294, 10, 0, 0, 11, 12, 0, - 213, 13, 214, 0, 0, 0, 0, 0, 215, 14, - 0, 295, 296, 15, 297, 0, 0, 0, 0, 16, - 298, 17, 0, 0, 0, 0, 0, 227, 316, 0, - 18, 19, 0, 0, 20, 0, 317, 0, 21, 22, - 0, 228, 23, 24, 0, 299, 229, 230, 300, 301, - 0, 302, 303, 304, 0, 305, 0, 0, 0, 0, - 0, 172, 25, 26, 27, 0, 0, 173, 28, 174, - 318, 319, 0, 0, 0, 0, 0, 29, 0, 0, - 0, 30, 0, 31, 0, 32, 33, 320, 0, 0, - 0, 0, 34, 0, 175, 0, 35, 36, 37, 38, - 39, 40, 41, 0, 42, 0, 43, 306, 321, 0, - 0, 0, 0, 44, 322, 0, 323, 0, 45, 46, - 47, 0, 48, 49, 0, 0, 50, 51, 0, 324, - 0, 0, 0, 176, 0, 177, 52, 0, 0, 178, - 0, 179, 0, 0, 180, 0, 325, 326, 0, 0, - 125, 126, 127, 128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 181, 182, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, - 129, 328, 130, 0, 131, 0, 329, 0, 132, 0, - 330 + 114, 155, 253, 247, 248, 197, 347, 160, 339, 313, + 189, 188, 361, 1, 267, 201, 254, 260, 93, 339, + 206, 2, 111, 154, 112, 3, 4, 5, 348, 273, + 274, 77, 78, 6, 7, 79, 99, 255, 117, 207, + 8, 9, 202, 199, 10, 200, 219, 11, 12, 141, + 142, 13, 118, 162, 119, 273, 274, 366, 219, 14, + 375, 120, 208, 15, 292, 137, 150, 143, 237, 16, + 380, 17, 268, 138, 269, 314, 140, 156, 163, 157, + 18, 19, 161, 113, 20, 194, 196, 198, 21, 22, + 204, 205, 23, 24, 164, 309, 310, 165, 210, 221, + 222, 94, 349, 151, 144, 152, 95, 113, 350, 236, + 239, 241, 25, 26, 27, 242, 280, 362, 28, 245, + 246, 249, 239, 281, 251, 351, 282, 29, 250, 259, + 81, 30, 145, 31, 82, 32, 33, 190, 256, 262, + 83, 264, 34, 265, 279, 278, 35, 36, 37, 38, + 39, 40, 41, 289, 42, 102, 43, 290, 270, 103, + 316, 355, 283, 44, 312, 344, 166, 345, 45, 46, + 47, 352, 48, 49, 353, 369, 50, 51, 346, 271, + 356, 153, 359, 360, 363, -6, 52, 365, 113, 84, + 364, 284, 146, 167, 168, 374, 368, 147, 372, 169, + 224, 225, 226, 227, 378, 382, 370, 375, 379, 383, + 384, 2, 396, 311, 104, 3, 4, 5, 211, 395, + 85, 86, 397, 6, 7, 220, 398, 291, 258, 240, + 8, 9, 101, 252, 10, 238, 87, 11, 12, 212, + 243, 13, 213, 385, 386, 387, 388, 389, 263, 14, + 285, 136, 393, 15, 381, 340, 105, 293, 394, 16, + 367, 17, 0, 0, 106, 0, 88, 0, 107, 0, + 18, 19, 0, 0, 20, 0, 0, 358, 21, 22, + 0, 0, 23, 24, 0, 0, 108, 0, 0, 0, + 0, 109, 0, 228, 0, 0, 0, 125, 126, 127, + 128, 0, 25, 26, 27, 0, 0, 229, 28, 0, + 0, 0, 230, 231, 0, 0, 0, 29, 0, 0, + 214, 30, 215, 31, 0, 32, 33, 129, 216, 130, + 0, 131, 34, 0, 0, 132, 35, 36, 37, 38, + 39, 40, 41, 0, 42, 0, 43, 0, 0, 0, + 371, 0, 0, 44, 0, 0, 0, 0, 45, 46, + 47, 0, 48, 49, 0, 2, 50, 51, 0, 3, + 4, 5, 0, 0, 0, -6, 52, 6, 7, 294, + 0, 0, 0, 0, 8, 9, 0, 295, 10, 0, + 0, 11, 12, 0, 0, 13, 385, 386, 387, 388, + 389, 0, 0, 14, 0, 296, 297, 15, 298, 0, + 0, 0, 0, 16, 299, 17, 0, 0, 0, 0, + 0, 0, 317, 0, 18, 19, 0, 0, 20, 0, + 318, 0, 21, 22, 0, 0, 23, 24, 0, 300, + 0, 0, 301, 302, 0, 303, 304, 305, 0, 306, + 0, 0, 0, 0, 0, 173, 25, 26, 27, 0, + 0, 174, 28, 175, 319, 320, 0, 0, 0, 0, + 0, 29, 0, 0, 0, 30, 0, 31, 0, 32, + 33, 321, 0, 0, 0, 0, 34, 0, 176, 0, + 35, 36, 37, 38, 39, 40, 41, 0, 42, 0, + 43, 307, 322, 0, 0, 0, 0, 44, 323, 0, + 324, 0, 45, 46, 47, 0, 48, 49, 0, 0, + 50, 51, 0, 325, 0, 0, 0, 177, 0, 178, + 52, 0, 0, 179, 0, 180, 0, 0, 181, 0, + 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, + 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 328, 0, 329, 0, 0, 0, 0, + 330, 0, 0, 0, 331 }; static const yytype_int16 yycheck[] = { - 14, 37, 171, 153, 154, 58, 3, 42, 19, 59, - 54, 47, 23, 1, 4, 58, 37, 186, 10, 89, - 33, 9, 178, 37, 5, 13, 14, 15, 25, 173, - 139, 101, 188, 21, 22, 175, 176, 58, 58, 52, - 28, 29, 58, 57, 32, 59, 139, 35, 36, 30, - 148, 39, 148, 148, 148, 58, 63, 148, 65, 47, - 6, 7, 75, 51, 233, 46, 26, 78, 49, 57, - 31, 59, 62, 117, 64, 125, 148, 148, 24, 188, - 68, 69, 175, 176, 72, 58, 148, 148, 76, 77, - 148, 58, 80, 81, 244, 245, 0, 58, 173, 148, - 148, 93, 99, 63, 187, 65, 98, 58, 105, 120, - 124, 31, 100, 101, 102, 61, 148, 128, 106, 58, - 163, 132, 136, 148, 159, 122, 26, 115, 26, 82, - 7, 119, 185, 121, 11, 123, 124, 118, 159, 150, - 17, 148, 130, 89, 155, 184, 134, 135, 136, 137, - 138, 139, 140, 58, 142, 58, 144, 58, 148, 58, - 310, 173, 148, 151, 145, 146, 148, 58, 156, 157, - 158, 168, 160, 161, 171, 344, 164, 165, 148, 169, - 34, 141, 173, 184, 148, 173, 174, 9, 148, 66, - 26, 13, 14, 15, 179, 180, 181, 182, 183, 21, - 22, 58, 58, 149, 373, 148, 28, 29, 154, 378, - 32, 173, 248, 35, 36, 184, 187, 39, 186, 177, - 97, 98, 178, 28, 173, 47, 395, 184, 187, 51, - 35, 173, 184, 38, 184, 57, 113, 59, 173, 179, - 180, 181, 182, 183, 96, 183, 68, 69, 188, 133, - 72, 231, 169, 11, 76, 77, 121, 190, 80, 81, - 148, 26, 234, 340, 274, 375, 143, 389, 27, 74, - -1, -1, -1, -1, -1, -1, 312, -1, 100, 101, - 102, -1, -1, -1, 106, -1, -1, -1, -1, 48, - -1, -1, 51, 115, -1, -1, -1, 119, 103, 121, - -1, 123, 124, -1, 40, 41, 42, 43, 130, -1, - -1, -1, 134, 135, 136, 137, 138, 139, 140, -1, - 142, -1, 144, -1, -1, -1, -1, -1, -1, 151, - -1, -1, -1, -1, 156, 157, 158, -1, 160, 161, - -1, 9, 164, 165, -1, 13, 14, 15, -1, 363, - -1, 173, 174, 21, 22, 44, -1, 162, -1, -1, - 28, 29, -1, 52, 32, -1, -1, 35, 36, -1, - 129, 39, 131, -1, -1, -1, -1, -1, 137, 47, - -1, 70, 71, 51, 73, -1, -1, -1, -1, 57, - 79, 59, -1, -1, -1, -1, -1, 133, 8, -1, - 68, 69, -1, -1, 72, -1, 16, -1, 76, 77, - -1, 147, 80, 81, -1, 104, 152, 153, 107, 108, - -1, 110, 111, 112, -1, 114, -1, -1, -1, -1, - -1, 12, 100, 101, 102, -1, -1, 18, 106, 20, - 50, 51, -1, -1, -1, -1, -1, 115, -1, -1, - -1, 119, -1, 121, -1, 123, 124, 67, -1, -1, - -1, -1, 130, -1, 45, -1, 134, 135, 136, 137, - 138, 139, 140, -1, 142, -1, 144, 166, 88, -1, - -1, -1, -1, 151, 94, -1, 96, -1, 156, 157, - 158, -1, 160, 161, -1, -1, 164, 165, -1, 109, - -1, -1, -1, 84, -1, 86, 174, -1, -1, 90, - -1, 92, -1, -1, 95, -1, 126, 127, -1, -1, - 53, 54, 55, 56, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 116, 117, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 159, - 83, 161, 85, -1, 87, -1, 166, -1, 91, -1, - 170 + 14, 37, 172, 153, 154, 54, 3, 42, 139, 59, + 58, 47, 58, 1, 4, 31, 37, 187, 10, 139, + 33, 9, 63, 37, 65, 13, 14, 15, 25, 175, + 176, 173, 58, 21, 22, 58, 148, 58, 148, 52, + 28, 29, 58, 57, 32, 59, 89, 35, 36, 6, + 7, 39, 148, 5, 148, 175, 176, 188, 101, 47, + 178, 148, 75, 51, 234, 148, 26, 24, 117, 57, + 188, 59, 62, 148, 64, 125, 58, 58, 30, 148, + 68, 69, 148, 148, 72, 58, 0, 173, 76, 77, + 148, 148, 80, 81, 46, 245, 246, 49, 187, 58, + 31, 93, 99, 63, 61, 65, 98, 148, 105, 148, + 124, 58, 100, 101, 102, 148, 28, 163, 106, 26, + 26, 82, 136, 35, 159, 122, 38, 115, 184, 58, + 7, 119, 89, 121, 11, 123, 124, 185, 159, 58, + 17, 58, 130, 173, 148, 58, 134, 135, 136, 137, + 138, 139, 140, 148, 142, 19, 144, 58, 148, 23, + 34, 311, 74, 151, 148, 173, 118, 184, 156, 157, + 158, 168, 160, 161, 171, 345, 164, 165, 148, 169, + 26, 141, 58, 58, 148, 173, 174, 173, 148, 66, + 184, 103, 149, 145, 146, 184, 187, 154, 177, 151, + 40, 41, 42, 43, 374, 173, 186, 178, 184, 379, + 187, 9, 184, 249, 78, 13, 14, 15, 27, 173, + 97, 98, 173, 21, 22, 96, 396, 232, 184, 133, + 28, 29, 11, 170, 32, 121, 113, 35, 36, 48, + 148, 39, 51, 179, 180, 181, 182, 183, 191, 47, + 162, 26, 188, 51, 376, 275, 120, 235, 390, 57, + 341, 59, -1, -1, 128, -1, 143, -1, 132, -1, + 68, 69, -1, -1, 72, -1, -1, 313, 76, 77, + -1, -1, 80, 81, -1, -1, 150, -1, -1, -1, + -1, 155, -1, 133, -1, -1, -1, 53, 54, 55, + 56, -1, 100, 101, 102, -1, -1, 147, 106, -1, + -1, -1, 152, 153, -1, -1, -1, 115, -1, -1, + 129, 119, 131, 121, -1, 123, 124, 83, 137, 85, + -1, 87, 130, -1, -1, 91, 134, 135, 136, 137, + 138, 139, 140, -1, 142, -1, 144, -1, -1, -1, + 364, -1, -1, 151, -1, -1, -1, -1, 156, 157, + 158, -1, 160, 161, -1, 9, 164, 165, -1, 13, + 14, 15, -1, -1, -1, 173, 174, 21, 22, 44, + -1, -1, -1, -1, 28, 29, -1, 52, 32, -1, + -1, 35, 36, -1, -1, 39, 179, 180, 181, 182, + 183, -1, -1, 47, -1, 70, 71, 51, 73, -1, + -1, -1, -1, 57, 79, 59, -1, -1, -1, -1, + -1, -1, 8, -1, 68, 69, -1, -1, 72, -1, + 16, -1, 76, 77, -1, -1, 80, 81, -1, 104, + -1, -1, 107, 108, -1, 110, 111, 112, -1, 114, + -1, -1, -1, -1, -1, 12, 100, 101, 102, -1, + -1, 18, 106, 20, 50, 51, -1, -1, -1, -1, + -1, 115, -1, -1, -1, 119, -1, 121, -1, 123, + 124, 67, -1, -1, -1, -1, 130, -1, 45, -1, + 134, 135, 136, 137, 138, 139, 140, -1, 142, -1, + 144, 166, 88, -1, -1, -1, -1, 151, 94, -1, + 96, -1, 156, 157, 158, -1, 160, 161, -1, -1, + 164, 165, -1, 109, -1, -1, -1, 84, -1, 86, + 174, -1, -1, 90, -1, 92, -1, -1, 95, -1, + 126, 127, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 116, + 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 159, -1, 161, -1, -1, -1, -1, + 166, -1, -1, -1, 170 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -1411,30 +1415,30 @@ static const yytype_uint16 yystos[] = 85, 87, 91, 232, 233, 234, 272, 148, 148, 271, 58, 6, 7, 24, 61, 89, 149, 154, 265, 266, 26, 63, 65, 141, 195, 196, 58, 148, 254, 219, - 220, 148, 5, 30, 46, 49, 118, 145, 146, 246, - 247, 248, 12, 18, 20, 45, 84, 86, 90, 92, - 95, 116, 117, 214, 215, 216, 217, 196, 58, 185, - 268, 269, 270, 58, 267, 0, 192, 173, 195, 195, - 31, 58, 274, 148, 148, 33, 52, 75, 263, 187, - 27, 48, 51, 129, 131, 137, 211, 212, 242, 230, - 58, 31, 221, 40, 41, 42, 43, 133, 147, 152, - 153, 236, 237, 238, 239, 148, 192, 259, 195, 233, - 58, 148, 266, 227, 26, 26, 227, 227, 82, 184, - 220, 247, 274, 37, 58, 159, 273, 215, 58, 274, - 256, 58, 269, 58, 173, 198, 4, 62, 64, 148, - 169, 262, 175, 176, 277, 278, 279, 58, 148, 28, - 35, 38, 74, 103, 162, 222, 223, 224, 148, 58, - 237, 274, 273, 44, 52, 70, 71, 73, 79, 104, - 107, 108, 110, 111, 112, 114, 166, 228, 227, 227, - 196, 148, 59, 125, 257, 34, 8, 16, 50, 51, - 67, 88, 94, 96, 109, 126, 127, 159, 161, 166, - 170, 199, 200, 201, 202, 203, 204, 205, 139, 278, - 280, 281, 283, 173, 184, 148, 3, 25, 99, 105, - 122, 168, 171, 225, 227, 26, 255, 196, 58, 58, - 58, 163, 148, 184, 173, 188, 281, 187, 274, 186, - 195, 177, 282, 184, 178, 284, 285, 274, 184, 188, - 285, 173, 274, 187, 179, 180, 181, 182, 183, 286, - 287, 288, 188, 287, 173, 184, 173, 274 + 220, 148, 5, 30, 46, 49, 118, 145, 146, 151, + 246, 247, 248, 12, 18, 20, 45, 84, 86, 90, + 92, 95, 116, 117, 214, 215, 216, 217, 196, 58, + 185, 268, 269, 270, 58, 267, 0, 192, 173, 195, + 195, 31, 58, 274, 148, 148, 33, 52, 75, 263, + 187, 27, 48, 51, 129, 131, 137, 211, 212, 242, + 230, 58, 31, 221, 40, 41, 42, 43, 133, 147, + 152, 153, 236, 237, 238, 239, 148, 192, 259, 195, + 233, 58, 148, 266, 227, 26, 26, 227, 227, 82, + 184, 220, 247, 274, 37, 58, 159, 273, 215, 58, + 274, 256, 58, 269, 58, 173, 198, 4, 62, 64, + 148, 169, 262, 175, 176, 277, 278, 279, 58, 148, + 28, 35, 38, 74, 103, 162, 222, 223, 224, 148, + 58, 237, 274, 273, 44, 52, 70, 71, 73, 79, + 104, 107, 108, 110, 111, 112, 114, 166, 228, 227, + 227, 196, 148, 59, 125, 257, 34, 8, 16, 50, + 51, 67, 88, 94, 96, 109, 126, 127, 159, 161, + 166, 170, 199, 200, 201, 202, 203, 204, 205, 139, + 278, 280, 281, 283, 173, 184, 148, 3, 25, 99, + 105, 122, 168, 171, 225, 227, 26, 255, 196, 58, + 58, 58, 163, 148, 184, 173, 188, 281, 187, 274, + 186, 195, 177, 282, 184, 178, 284, 285, 274, 184, + 188, 285, 173, 274, 187, 179, 180, 181, 182, 183, + 286, 287, 288, 188, 287, 173, 184, 173, 274 }; #define yyerrok (yyerrstatus = 0) @@ -3009,10 +3013,10 @@ yyreduce: { (yyval.Attr_val) = create_attr_dval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Double)); } break; - case 205: + case 206: /* Line 1464 of yacc.c */ -#line 1063 "ntp_parser.y" +#line 1064 "ntp_parser.y" { attr_val *av; @@ -3021,10 +3025,10 @@ yyreduce: } break; - case 206: + case 207: /* Line 1464 of yacc.c */ -#line 1070 "ntp_parser.y" +#line 1071 "ntp_parser.y" { attr_val *av; @@ -3033,10 +3037,10 @@ yyreduce: } break; - case 207: + case 208: /* Line 1464 of yacc.c */ -#line 1077 "ntp_parser.y" +#line 1078 "ntp_parser.y" { char error_text[64]; attr_val *av; @@ -3054,10 +3058,10 @@ yyreduce: } break; - case 208: + case 209: /* Line 1464 of yacc.c */ -#line 1093 "ntp_parser.y" +#line 1094 "ntp_parser.y" { if (!input_from_file) { yyerror("remote includefile ignored"); @@ -3078,48 +3082,48 @@ yyreduce: } break; - case 209: + case 210: /* Line 1464 of yacc.c */ -#line 1112 "ntp_parser.y" +#line 1113 "ntp_parser.y" { while (curr_include_level != -1) FCLOSE(fp[curr_include_level--]); } break; - case 210: + case 211: /* Line 1464 of yacc.c */ -#line 1117 "ntp_parser.y" +#line 1118 "ntp_parser.y" { /* see drift_parm below for actions */ } break; - case 211: + case 212: /* Line 1464 of yacc.c */ -#line 1119 "ntp_parser.y" +#line 1120 "ntp_parser.y" { CONCAT_G_FIFOS(cfgt.logconfig, (yyvsp[(2) - (2)].Attr_val_fifo)); } break; - case 212: + case 213: /* Line 1464 of yacc.c */ -#line 1121 "ntp_parser.y" +#line 1122 "ntp_parser.y" { CONCAT_G_FIFOS(cfgt.phone, (yyvsp[(2) - (2)].String_fifo)); } break; - case 213: + case 214: /* Line 1464 of yacc.c */ -#line 1123 "ntp_parser.y" +#line 1124 "ntp_parser.y" { APPEND_G_FIFO(cfgt.setvar, (yyvsp[(2) - (2)].Set_var)); } break; - case 214: + case 215: /* Line 1464 of yacc.c */ -#line 1125 "ntp_parser.y" +#line 1126 "ntp_parser.y" { addr_opts_node *aon; @@ -3128,17 +3132,17 @@ yyreduce: } break; - case 215: + case 216: /* Line 1464 of yacc.c */ -#line 1132 "ntp_parser.y" +#line 1133 "ntp_parser.y" { CONCAT_G_FIFOS(cfgt.ttl, (yyvsp[(2) - (2)].Attr_val_fifo)); } break; - case 225: + case 226: /* Line 1464 of yacc.c */ -#line 1155 "ntp_parser.y" +#line 1156 "ntp_parser.y" { attr_val *av; @@ -3147,10 +3151,10 @@ yyreduce: } break; - case 226: + case 227: /* Line 1464 of yacc.c */ -#line 1162 "ntp_parser.y" +#line 1163 "ntp_parser.y" { attr_val *av; @@ -3161,10 +3165,10 @@ yyreduce: } break; - case 227: + case 228: /* Line 1464 of yacc.c */ -#line 1171 "ntp_parser.y" +#line 1172 "ntp_parser.y" { attr_val *av; @@ -3173,78 +3177,78 @@ yyreduce: } break; - case 228: + case 229: /* Line 1464 of yacc.c */ -#line 1181 "ntp_parser.y" +#line 1182 "ntp_parser.y" { (yyval.Set_var) = create_setvar_node((yyvsp[(1) - (4)].String), (yyvsp[(3) - (4)].String), (yyvsp[(4) - (4)].Integer)); } break; - case 230: + case 231: /* Line 1464 of yacc.c */ -#line 1187 "ntp_parser.y" +#line 1188 "ntp_parser.y" { (yyval.Integer) = 0; } break; - case 231: + case 232: /* Line 1464 of yacc.c */ -#line 1192 "ntp_parser.y" +#line 1193 "ntp_parser.y" { (yyval.Attr_val_fifo) = NULL; } break; - case 232: + case 233: /* Line 1464 of yacc.c */ -#line 1194 "ntp_parser.y" +#line 1195 "ntp_parser.y" { (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo); APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val)); } break; - case 233: + case 234: /* Line 1464 of yacc.c */ -#line 1202 "ntp_parser.y" +#line 1203 "ntp_parser.y" { (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); } break; - case 234: + case 235: /* Line 1464 of yacc.c */ -#line 1204 "ntp_parser.y" +#line 1205 "ntp_parser.y" { (yyval.Attr_val) = create_attr_sval((yyvsp[(1) - (2)].Integer), estrdup((yyvsp[(2) - (2)].Address_node)->address)); destroy_address_node((yyvsp[(2) - (2)].Address_node)); } break; - case 235: + case 236: /* Line 1464 of yacc.c */ -#line 1212 "ntp_parser.y" +#line 1213 "ntp_parser.y" { (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo); APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val)); } break; - case 236: + case 237: /* Line 1464 of yacc.c */ -#line 1217 "ntp_parser.y" +#line 1218 "ntp_parser.y" { (yyval.Attr_val_fifo) = NULL; APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val)); } break; - case 237: + case 238: /* Line 1464 of yacc.c */ -#line 1225 "ntp_parser.y" +#line 1226 "ntp_parser.y" { char prefix; char * type; @@ -3268,10 +3272,10 @@ yyreduce: } break; - case 238: + case 239: /* Line 1464 of yacc.c */ -#line 1250 "ntp_parser.y" +#line 1251 "ntp_parser.y" { nic_rule_node *nrn; @@ -3280,10 +3284,10 @@ yyreduce: } break; - case 239: + case 240: /* Line 1464 of yacc.c */ -#line 1257 "ntp_parser.y" +#line 1258 "ntp_parser.y" { nic_rule_node *nrn; @@ -3292,131 +3296,131 @@ yyreduce: } break; - case 249: + case 250: /* Line 1464 of yacc.c */ -#line 1285 "ntp_parser.y" +#line 1286 "ntp_parser.y" { CONCAT_G_FIFOS(cfgt.reset_counters, (yyvsp[(2) - (2)].Int_fifo)); } break; - case 250: + case 251: /* Line 1464 of yacc.c */ -#line 1290 "ntp_parser.y" +#line 1291 "ntp_parser.y" { (yyval.Int_fifo) = (yyvsp[(1) - (2)].Int_fifo); APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[(2) - (2)].Integer))); } break; - case 251: + case 252: /* Line 1464 of yacc.c */ -#line 1295 "ntp_parser.y" +#line 1296 "ntp_parser.y" { (yyval.Int_fifo) = NULL; APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[(1) - (1)].Integer))); } break; - case 259: + case 260: /* Line 1464 of yacc.c */ -#line 1319 "ntp_parser.y" +#line 1320 "ntp_parser.y" { (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo); APPEND_G_FIFO((yyval.Attr_val_fifo), create_int_node((yyvsp[(2) - (2)].Integer))); } break; - case 260: + case 261: /* Line 1464 of yacc.c */ -#line 1324 "ntp_parser.y" +#line 1325 "ntp_parser.y" { (yyval.Attr_val_fifo) = NULL; APPEND_G_FIFO((yyval.Attr_val_fifo), create_int_node((yyvsp[(1) - (1)].Integer))); } break; - case 261: + case 262: /* Line 1464 of yacc.c */ -#line 1332 "ntp_parser.y" +#line 1333 "ntp_parser.y" { (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo); APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val)); } break; - case 262: + case 263: /* Line 1464 of yacc.c */ -#line 1337 "ntp_parser.y" +#line 1338 "ntp_parser.y" { (yyval.Attr_val_fifo) = NULL; APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val)); } break; - case 263: + case 264: /* Line 1464 of yacc.c */ -#line 1345 "ntp_parser.y" +#line 1346 "ntp_parser.y" { (yyval.Attr_val) = create_attr_ival('i', (yyvsp[(1) - (1)].Integer)); } break; - case 265: + case 266: /* Line 1464 of yacc.c */ -#line 1351 "ntp_parser.y" +#line 1352 "ntp_parser.y" { (yyval.Attr_val) = create_attr_rangeval('-', (yyvsp[(2) - (5)].Integer), (yyvsp[(4) - (5)].Integer)); } break; - case 266: + case 267: /* Line 1464 of yacc.c */ -#line 1356 "ntp_parser.y" +#line 1357 "ntp_parser.y" { (yyval.String_fifo) = (yyvsp[(1) - (2)].String_fifo); APPEND_G_FIFO((yyval.String_fifo), create_string_node((yyvsp[(2) - (2)].String))); } break; - case 267: + case 268: /* Line 1464 of yacc.c */ -#line 1361 "ntp_parser.y" +#line 1362 "ntp_parser.y" { (yyval.String_fifo) = NULL; APPEND_G_FIFO((yyval.String_fifo), create_string_node((yyvsp[(1) - (1)].String))); } break; - case 268: + case 269: /* Line 1464 of yacc.c */ -#line 1369 "ntp_parser.y" +#line 1370 "ntp_parser.y" { (yyval.Address_fifo) = (yyvsp[(1) - (2)].Address_fifo); APPEND_G_FIFO((yyval.Address_fifo), (yyvsp[(2) - (2)].Address_node)); } break; - case 269: + case 270: /* Line 1464 of yacc.c */ -#line 1374 "ntp_parser.y" +#line 1375 "ntp_parser.y" { (yyval.Address_fifo) = NULL; APPEND_G_FIFO((yyval.Address_fifo), (yyvsp[(1) - (1)].Address_node)); } break; - case 270: + case 271: /* Line 1464 of yacc.c */ -#line 1382 "ntp_parser.y" +#line 1383 "ntp_parser.y" { if ((yyvsp[(1) - (1)].Integer) != 0 && (yyvsp[(1) - (1)].Integer) != 1) { yyerror("Integer value is not boolean (0 or 1). Assuming 1"); @@ -3427,31 +3431,31 @@ yyreduce: } break; - case 271: + case 272: /* Line 1464 of yacc.c */ -#line 1390 "ntp_parser.y" +#line 1391 "ntp_parser.y" { (yyval.Integer) = 1; } break; - case 272: + case 273: /* Line 1464 of yacc.c */ -#line 1391 "ntp_parser.y" +#line 1392 "ntp_parser.y" { (yyval.Integer) = 0; } break; - case 273: + case 274: /* Line 1464 of yacc.c */ -#line 1395 "ntp_parser.y" +#line 1396 "ntp_parser.y" { (yyval.Double) = (double)(yyvsp[(1) - (1)].Integer); } break; - case 275: + case 276: /* Line 1464 of yacc.c */ -#line 1406 "ntp_parser.y" +#line 1407 "ntp_parser.y" { sim_node *sn; @@ -3463,139 +3467,139 @@ yyreduce: } break; - case 276: + case 277: /* Line 1464 of yacc.c */ -#line 1423 "ntp_parser.y" +#line 1424 "ntp_parser.y" { old_config_style = 0; } break; - case 277: + case 278: /* Line 1464 of yacc.c */ -#line 1428 "ntp_parser.y" +#line 1429 "ntp_parser.y" { (yyval.Attr_val_fifo) = (yyvsp[(1) - (3)].Attr_val_fifo); APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (3)].Attr_val)); } break; - case 278: + case 279: /* Line 1464 of yacc.c */ -#line 1433 "ntp_parser.y" +#line 1434 "ntp_parser.y" { (yyval.Attr_val_fifo) = NULL; APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (2)].Attr_val)); } break; - case 279: + case 280: /* Line 1464 of yacc.c */ -#line 1441 "ntp_parser.y" +#line 1442 "ntp_parser.y" { (yyval.Attr_val) = create_attr_dval((yyvsp[(1) - (3)].Integer), (yyvsp[(3) - (3)].Double)); } break; - case 282: + case 283: /* Line 1464 of yacc.c */ -#line 1451 "ntp_parser.y" +#line 1452 "ntp_parser.y" { (yyval.Sim_server_fifo) = (yyvsp[(1) - (2)].Sim_server_fifo); APPEND_G_FIFO((yyval.Sim_server_fifo), (yyvsp[(2) - (2)].Sim_server)); } break; - case 283: + case 284: /* Line 1464 of yacc.c */ -#line 1456 "ntp_parser.y" +#line 1457 "ntp_parser.y" { (yyval.Sim_server_fifo) = NULL; APPEND_G_FIFO((yyval.Sim_server_fifo), (yyvsp[(1) - (1)].Sim_server)); } break; - case 284: + case 285: /* Line 1464 of yacc.c */ -#line 1464 "ntp_parser.y" +#line 1465 "ntp_parser.y" { (yyval.Sim_server) = create_sim_server((yyvsp[(1) - (5)].Address_node), (yyvsp[(3) - (5)].Double), (yyvsp[(4) - (5)].Sim_script_fifo)); } break; - case 285: + case 286: /* Line 1464 of yacc.c */ -#line 1469 "ntp_parser.y" +#line 1470 "ntp_parser.y" { (yyval.Double) = (yyvsp[(3) - (4)].Double); } break; - case 286: + case 287: /* Line 1464 of yacc.c */ -#line 1474 "ntp_parser.y" +#line 1475 "ntp_parser.y" { (yyval.Address_node) = (yyvsp[(3) - (3)].Address_node); } break; - case 287: + case 288: /* Line 1464 of yacc.c */ -#line 1479 "ntp_parser.y" +#line 1480 "ntp_parser.y" { (yyval.Sim_script_fifo) = (yyvsp[(1) - (2)].Sim_script_fifo); APPEND_G_FIFO((yyval.Sim_script_fifo), (yyvsp[(2) - (2)].Sim_script)); } break; - case 288: + case 289: /* Line 1464 of yacc.c */ -#line 1484 "ntp_parser.y" +#line 1485 "ntp_parser.y" { (yyval.Sim_script_fifo) = NULL; APPEND_G_FIFO((yyval.Sim_script_fifo), (yyvsp[(1) - (1)].Sim_script)); } break; - case 289: + case 290: /* Line 1464 of yacc.c */ -#line 1492 "ntp_parser.y" +#line 1493 "ntp_parser.y" { (yyval.Sim_script) = create_sim_script_info((yyvsp[(3) - (6)].Double), (yyvsp[(5) - (6)].Attr_val_fifo)); } break; - case 290: + case 291: /* Line 1464 of yacc.c */ -#line 1497 "ntp_parser.y" +#line 1498 "ntp_parser.y" { (yyval.Attr_val_fifo) = (yyvsp[(1) - (3)].Attr_val_fifo); APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (3)].Attr_val)); } break; - case 291: + case 292: /* Line 1464 of yacc.c */ -#line 1502 "ntp_parser.y" +#line 1503 "ntp_parser.y" { (yyval.Attr_val_fifo) = NULL; APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (2)].Attr_val)); } break; - case 292: + case 293: /* Line 1464 of yacc.c */ -#line 1510 "ntp_parser.y" +#line 1511 "ntp_parser.y" { (yyval.Attr_val) = create_attr_dval((yyvsp[(1) - (3)].Integer), (yyvsp[(3) - (3)].Double)); } break; /* Line 1464 of yacc.c */ -#line 3599 "ntp_parser.c" +#line 3603 "ntp_parser.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -3807,7 +3811,7 @@ yyreturn: /* Line 1684 of yacc.c */ -#line 1521 "ntp_parser.y" +#line 1522 "ntp_parser.y" void diff --git a/ntpd/ntp_parser.y b/ntpd/ntp_parser.y index c576de0bf..88e61cffb 100644 --- a/ntpd/ntp_parser.y +++ b/ntpd/ntp_parser.y @@ -1049,6 +1049,7 @@ tinker_option_keyword | T_Panic | T_Step | T_Stepout + | T_Tick ; diff --git a/ntpd/ntp_proto.c b/ntpd/ntp_proto.c index 3b1fb595e..47f9e3005 100644 --- a/ntpd/ntp_proto.c +++ b/ntpd/ntp_proto.c @@ -108,7 +108,7 @@ char *sys_ident = NULL; /* identity scheme */ * TOS and multicast mapping stuff */ int sys_floor = 0; /* cluster stratum floor */ -int sys_ceiling = STRATUM_UNSPEC; /* cluster stratum ceiling */ +int sys_ceiling = STRATUM_UNSPEC - 1; /* cluster stratum ceiling */ int sys_minsane = 1; /* minimum candidates */ int sys_minclock = NTP_MINCLOCK; /* minimum candidates */ int sys_maxclock = NTP_MAXCLOCK; /* maximum candidates */ @@ -140,7 +140,7 @@ static void peer_xmit (struct peer *); static void fast_xmit (struct recvbuf *, int, keyid_t, int); static void pool_xmit (struct peer *); static void clock_update (struct peer *); -static int default_get_precision (void); +static void measure_precision(void); static int local_refid (struct peer *); static int peer_unfit (struct peer *); #ifdef AUTOKEY @@ -1692,6 +1692,7 @@ process_packet( p_del = fabs(t21 - t34); p_offset = (t21 + t34) / 2.; } + p_del = max(p_del, LOGTOD(sys_precision)); p_disp = LOGTOD(sys_precision) + LOGTOD(peer->precision) + clock_phi * p_del; @@ -3804,7 +3805,7 @@ peer_unfit( /* * Find the precision of this particular machine */ -#define MINSTEP 100e-9 /* minimum clock increment (s) */ +#define MINSTEP 20e-9 /* minimum clock increment (s) */ #define MAXSTEP 1 /* maximum clock increment (s) */ #define MINCHANGES 5 /* minimum number of step samples */ #define MAXLOOPS ((int)(1. / MINSTEP)) /* avoid infinite loop */ @@ -3829,8 +3830,8 @@ peer_unfit( * to read the clock is saved as sys_fuzz, and used to ensure the * get_systime() readings always increase and are fuzzed below sys_fuzz. */ -int -default_get_precision(void) +void +measure_precision(void) { l_fp val; /* current seconds fraction */ l_fp last; /* last seconds fraction */ @@ -3845,13 +3846,17 @@ default_get_precision(void) /* * Loop to find precision value in seconds. With sys_fuzz set * to zero, get_systime() disables its fuzzing of low bits. + * measured_tick and sys_tick are zeroed to disable get_ostime() + * low-precision clock simulation. */ tick = MAXSTEP; + sys_tick = 0; + measured_tick = 0; set_sys_fuzz(0.); - get_systime(&last); max_repeats = 0; repeats = 0; changes = 0; + get_systime(&last); for (i = 0; i < MAXLOOPS && changes < MINCHANGES; i++) { get_systime(&val); ldiff = val; @@ -3871,15 +3876,43 @@ default_get_precision(void) msyslog(LOG_ERR, "Fatal error: precision could not be measured (MINSTEP too large?)"); exit(1); } - sys_tick = tick; + measured_tick = tick; + set_sys_tick_precision(tick); if (0 == max_repeats) { - set_sys_fuzz(sys_tick); + set_sys_fuzz(tick); } else { - set_sys_fuzz(sys_tick / max_repeats); + set_sys_fuzz(tick / max_repeats); msyslog(LOG_NOTICE, "proto: fuzz beneath %.3f usec", sys_fuzz * 1e6); } +} + + +void +set_sys_tick_precision( + double tick + ) +{ + int i; + + if (tick > 1.) { + msyslog(LOG_ERR, + "unsupported tick %.3f > 1s ignored", tick); + return; + } + if (tick < measured_tick) { + msyslog(LOG_ERR, + "proto: tick %.3f less than measured tick %.3f, ignored", + tick, measured_tick); + return; + } else if (tick > measured_tick) { + msyslog(LOG_NOTICE, + "proto: truncating system clock to multiples of %.9f", + tick); + } + sys_tick = tick; + /* * Find the nearest power of two. */ @@ -3887,10 +3920,10 @@ default_get_precision(void) tick *= 2; if (tick - 1 > 1 - tick / 2) i++; - msyslog(LOG_NOTICE, "proto: precision = %.3f usec (%d)", - sys_tick * 1e6, i); - return i; + sys_precision = (s_char)i; + msyslog(LOG_NOTICE, "proto: precision = %.3f usec (%d)", + sys_tick * 1e6, sys_precision); } @@ -3915,7 +3948,7 @@ init_proto(void) sys_rootdisp = 0; L_CLR(&sys_reftime); sys_jitter = 0; - sys_precision = (s_char)default_get_precision(); + measure_precision(); get_systime(&dummy); sys_survivors = 0; sys_manycastserver = 0; @@ -4057,10 +4090,6 @@ proto_config( orphwait += sys_orphwait; break; - case PROTO_ADJ: /* tick increment (tick) */ - sys_tick = dvalue; - break; - /* * Miscellaneous commands */ diff --git a/ports/winnt/ntpd/nt_clockstuff.c b/ports/winnt/ntpd/nt_clockstuff.c index c454d3f39..1e1efd7fd 100644 --- a/ports/winnt/ntpd/nt_clockstuff.c +++ b/ports/winnt/ntpd/nt_clockstuff.c @@ -559,15 +559,10 @@ adj_systime( sys_residual = dtemp / 1e6; -#if 0 - msyslog(LOG_NOTICE, "adj_systime: %.9f -> %.9f residual %.9f", - now, 1e-6 * (TimeAdjustment * ppm_per_adjust_unit), - sys_residual); -#endif DPRINTF(3, ("adj_systime: %.9f -> %.9f residual %.9f", now, 1e-6 * (TimeAdjustment * ppm_per_adjust_unit), sys_residual)); - if (0 == adjtime_carry) + if (0. == adjtime_carry) DPRINTF(3, ("\n")); else DPRINTF(3, (" adjtime %.9f\n", adjtime_carry)); @@ -577,16 +572,14 @@ adj_systime( if (last_Adj != TimeAdjustment) { last_Adj = TimeAdjustment; DPRINTF(2, ("SetSystemTimeAdjustment(%+ld)\n", TimeAdjustment)); - rc = !SetSystemTimeAdjustment(clockperiod + TimeAdjustment, FALSE); + rc = SetSystemTimeAdjustment(clockperiod + TimeAdjustment, FALSE); + if (!rc) + msyslog(LOG_ERR, "Can't adjust time: %m"); } else { - rc = FALSE; - } - if (rc) { - msyslog(LOG_ERR, "Can't adjust time: %m"); - return FALSE; + rc = TRUE; } - return TRUE; + return rc; } diff --git a/util/ntp-keygen.c b/util/ntp-keygen.c index c1a2b3023..8bb24c064 100644 --- a/util/ntp-keygen.c +++ b/util/ntp-keygen.c @@ -114,8 +114,7 @@ #define MD5SIZE 20 /* maximum key size */ #define DAY ((long)60*60*24) /* one day in seconds */ #define YEAR ((long)365) /* one year in days */ -#define MAXFILENAME 256 /* max file name length */ -#define MAXHOSTNAME 256 /* max host name length */ +#define MAXFILENAME MAXHOSTNAME /* max file name length */ #ifdef AUTOKEY #define PLEN 512 /* default prime modulus size (bits) */ #define ILEN 256 /* default identity modulus size (bits) */