]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-ntp.c
Address Michael's comments.
[tcpdump] / print-ntp.c
index 4960dc829c50b02eb2a0d95fc9d47e8b6a32f353..d56f02a2624f9482d43d401185f27e6b6be6f231 100644 (file)
@@ -25,7 +25,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-ntp.c,v 1.42 2005-05-06 07:56:53 guy Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-ntp.c,v 1.43 2007-11-30 13:45:10 hannes Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -72,6 +72,12 @@ static struct tok ntp_leapind_values[] = {
     { 0, NULL }
 };
 
+static struct tok ntp_stratum_values[] = {
+       { UNSPECIFIED,  "unspecified" },
+       { PRIM_REF,     "primary reference" },
+       { 0, NULL }
+};
+
 /*
  * Print ntp requests
  */
@@ -106,7 +112,9 @@ ntp_print(register const u_char *cp, u_int length)
                 leapind);
 
        TCHECK(bp->stratum);
-       printf(", Stratum %u", 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 %us", bp->ppoll);
@@ -174,8 +182,19 @@ ntp_print(register const u_char *cp, u_int length)
        fputs("\n\t    Originator - Transmit Timestamp: ", stdout);
        p_ntp_delta(&(bp->org_timestamp), &(bp->xmt_timestamp));
 
-        /* FIXME key-id, authentication */
-
+       if ( (sizeof(struct ntpdata) - length) == 16) {         /* Optional: key-id */
+               TCHECK(bp->key_id);
+               printf("\n\tKey id: %u", bp->key_id);
+       } else if ( (sizeof(struct ntpdata) - length) == 0) {   /* Optional: key-id + authentication */
+               TCHECK(bp->key_id);
+               printf("\n\tKey id: %u", bp->key_id);
+               TCHECK2(bp->message_digest, sizeof (bp->message_digest));
+                printf("\n\tAuthentication: %08x%08x%08x%08x",
+                              EXTRACT_32BITS(bp->message_digest),
+                              EXTRACT_32BITS(bp->message_digest + 4),
+                              EXTRACT_32BITS(bp->message_digest + 8),
+                              EXTRACT_32BITS(bp->message_digest + 12));
+        }
        return;
 
 trunc: