]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-ntp.c
Add changes in 4.2.1.
[tcpdump] / print-ntp.c
index f9b65b2596abdfdab4156714c0742bd3cd65d5df..d56f02a2624f9482d43d401185f27e6b6be6f231 100644 (file)
@@ -25,7 +25,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-ntp.c,v 1.41 2004-01-28 14:54:50 hannes 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);
@@ -133,7 +141,8 @@ ntp_print(register const u_char *cp, u_int length)
                break;
 
        case PRIM_REF:
-               fn_printn((u_char *)&(bp->refid), 4, NULL);
+               if (fn_printn((u_char *)&(bp->refid), 4, snapend))
+                       goto trunc;
                break;
 
        case INFO_QUERY:
@@ -173,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: