* RFC 5905 - NTPv4
*/
-#ifdef HAVE_CONFIG_H
#include <config.h>
-#endif
#include "netdissect-stdinc.h"
+#include "netdissect-ctype.h"
#define ND_LONGJMP_FROM_TCHECK
#include "netdissect.h"
* | |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | |
- * | Originate Timestamp (64) |
+ * | Origin Timestamp (64) |
* | |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | |
switch (stratum) {
case UNSPECIFIED:
- ND_PRINT("(unspec)");
- ND_TCHECK_4(bp->refid);
+ /* NTPv4 (RFC 5905, section 7.4) formalizes that refid _may_
+ * contain a printable, four-character, left justified, zero
+ * filled ASCII string ("kiss code") for status reporting
+ * and debugging. Some kiss codes are defined in the RFC as
+ * initial set for a new IANA registry, but the list may be
+ * modified or extended in the future, and unregistered kiss
+ * codes are possible (and are being seen in the field).
+ */
+ if (!ND_ASCII_ISPRINT(GET_U_1(bp->refid))) {
+ ND_PRINT("(unspec)");
+ ND_TCHECK_4(bp->refid);
+ } else {
+ nd_printjn(ndo, (const u_char *)&(bp->refid), 4);
+ }
break;
case PRIM_REF:
ND_PRINT("\n\t Reference Timestamp: ");
p_ntp_time(ndo, &(bp->ref_timestamp));
- ND_PRINT("\n\t Originator Timestamp: ");
+ ND_PRINT("\n\t Origin Timestamp: ");
p_ntp_time(ndo, &(bp->org_timestamp));
ND_PRINT("\n\t Receive Timestamp: ");