- register const struct ntpdata *bp;
- int mode, version, leapind;
-
- bp = (struct ntpdata *)cp;
-
- TCHECK(bp->status);
-
- version = (int)(bp->status & VERSIONMASK) >> 3;
- printf("NTPv%d", version);
-
- mode = bp->status & MODEMASK;
- if (!vflag) {
- printf (", %s, length %u",
- tok2str(ntp_mode_values, "Unknown mode", mode),
- length);
- return;
- }
-
- printf (", length %u\n\t%s",
- length,
- tok2str(ntp_mode_values, "Unknown mode", mode));
-
- leapind = bp->status & LEAPMASK;
- printf (", Leap indicator: %s (%u)",
- tok2str(ntp_leapind_values, "Unknown", leapind),
- leapind);
-
- TCHECK(bp->stratum);
- printf(", Stratum %u (%s)",
- bp->stratum,
- tok2str(ntp_stratum_values, (bp->stratum >=2 && bp->stratum<=15) ? "secondary reference" : "reserved", bp->stratum));
-
- TCHECK(bp->ppoll);
- printf(", poll %u (%us)", bp->ppoll, 1 << bp->ppoll);
-
- /* Can't TCHECK bp->precision bitfield so bp->distance + 0 instead */
- TCHECK2(bp->root_delay, 0);
- printf(", precision %d", bp->precision);
-
- TCHECK(bp->root_delay);
- fputs("\n\tRoot Delay: ", stdout);
- p_sfix(&bp->root_delay);
-
- TCHECK(bp->root_dispersion);
- fputs(", Root dispersion: ", stdout);
- p_sfix(&bp->root_dispersion);
-
- TCHECK(bp->refid);
- fputs(", Reference-ID: ", stdout);
+ const u_char *mac;
+ uint8_t stratum;
+ u_int efs_len;
+
+ if (length < NTP_TIMEMSG_MINLEN)
+ goto invalid;
+
+ stratum = GET_U_1(bp->stratum);
+ ND_PRINT(", Stratum %u (%s)",
+ stratum,
+ tok2str(ntp_stratum_values, (stratum >=2 && stratum<=15) ? "secondary reference" : "reserved", stratum));
+
+ ND_PRINT(", poll %d", GET_S_1(bp->ppoll));
+ p_poll(ndo, GET_S_1(bp->ppoll));
+
+ ND_PRINT(", precision %d", GET_S_1(bp->precision));
+
+ ND_PRINT("\n\tRoot Delay: ");
+ p_sfix(ndo, &bp->root_delay);
+
+ ND_PRINT(", Root dispersion: ");
+ p_sfix(ndo, &bp->root_dispersion);
+
+ ND_PRINT(", Reference-ID: ");