]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-slow.c
Merge branch 'master' of git+ssh://bpf.tcpdump.org/tcpdump/master/git/tcpdump
[tcpdump] / print-slow.c
index 9da02ffabdaef17da026caf9ff3016b7ab257654..b4ba2ab91783407d912c3fcceb346baee9703be3 100644 (file)
@@ -20,7 +20,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-slow.c,v 1.7 2006-08-19 06:59:17 guy Exp $";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-slow.c,v 1.8 2006-10-12 05:44:33 hannes Exp $";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -67,7 +67,7 @@ static const struct tok slow_oam_flag_values[] = {
     { 0x0020, "Remote Evaluating" },
     { 0x0040, "Remote Stable" },
     { 0, NULL}
-}; 
+};
 
 #define SLOW_OAM_CODE_INFO          0x00
 #define SLOW_OAM_CODE_EVENT_NOTIF   0x01
@@ -178,6 +178,10 @@ struct slow_oam_variableresponse_t {
     u_int8_t length;
 };
 
+struct slow_oam_loopbackctrl_t {
+    u_int8_t command;
+};
+
 static const struct tok slow_oam_loopbackctrl_cmd_values[] = {
     { 0x01, "Enable OAM Remote Loopback" },
     { 0x02, "Disable OAM Remote Loopback" },
@@ -216,7 +220,7 @@ struct lacp_tlv_actor_partner_info_t {
     u_int8_t port[2];
     u_int8_t state;
     u_int8_t pad[3];
-};          
+};
 
 static const struct tok lacp_tlv_actor_partner_info_state_values[] = {
     { 0x01, "Activity"},
@@ -233,18 +237,18 @@ static const struct tok lacp_tlv_actor_partner_info_state_values[] = {
 struct lacp_tlv_collector_info_t {
     u_int8_t max_delay[2];
     u_int8_t pad[12];
-}; 
+};
 
 struct marker_tlv_marker_info_t {
     u_int8_t req_port[2];
     u_int8_t req_sys[ETHER_ADDR_LEN];
     u_int8_t req_trans_id[4];
     u_int8_t pad[2];
-}; 
+};
 
 struct lacp_marker_tlv_terminator_t {
     u_int8_t pad[50];
-}; 
+};
 
 void slow_marker_lacp_print(register const u_char *, register u_int);
 void slow_oam_print(register const u_char *, register u_int);
@@ -303,7 +307,7 @@ slow_print(register const u_char *pptr, register u_int len) {
 
     /* unrecognized subtype */
     if (print_version == -1) {
-        print_unknown_data(pptr, "\n\t", len);
+        print_unknown_data(gndo,pptr, "\n\t", len);
         return;
     }
 
@@ -345,7 +349,7 @@ void slow_marker_lacp_print(register const u_char *tptr, register u_int tlen) {
         const struct lacp_tlv_collector_info_t *lacp_tlv_collector_info;
         const struct marker_tlv_marker_info_t *marker_tlv_marker_info;
     } tlv_ptr;
-    
+
     while(tlen>0) {
         /* did we capture enough for fully decoding the tlv header ? */
         TCHECK2(*tptr, sizeof(struct tlv_header_t));
@@ -364,7 +368,7 @@ void slow_marker_lacp_print(register const u_char *tptr, register u_int tlen) {
             tlv_header->type != LACP_TLV_TERMINATOR &&
             tlv_header->type != MARKER_TLV_TERMINATOR) {
             printf("\n\t-----trailing data-----");
-            print_unknown_data(tptr+sizeof(sizeof(struct tlv_header_t)),"\n\t  ",tlen);
+            print_unknown_data(gndo,tptr+sizeof(struct tlv_header_t),"\n\t  ",tlen);
             return;
         }
 
@@ -432,12 +436,12 @@ void slow_marker_lacp_print(register const u_char *tptr, register u_int tlen) {
 
         default:
             if (vflag <= 1)
-                print_unknown_data(tlv_tptr,"\n\t  ",tlv_tlen);
+                print_unknown_data(gndo,tlv_tptr,"\n\t  ",tlv_tlen);
             break;
         }
         /* do we want to see an additional hexdump ? */
         if (vflag > 1) {
-            print_unknown_data(tptr+sizeof(sizeof(struct tlv_header_t)),"\n\t  ",
+            print_unknown_data(gndo,tptr+sizeof(struct tlv_header_t),"\n\t  ",
                                tlv_len-sizeof(struct tlv_header_t));
         }
 
@@ -473,8 +477,9 @@ void slow_oam_print(register const u_char *tptr, register u_int tlen) {
         const struct slow_oam_link_event_t *slow_oam_link_event;
         const struct slow_oam_variablerequest_t *slow_oam_variablerequest;
         const struct slow_oam_variableresponse_t *slow_oam_variableresponse;
+        const struct slow_oam_loopbackctrl_t *slow_oam_loopbackctrl;
     } tlv;
-    
+
     ptr.slow_oam_common_header = (struct slow_oam_common_header_t *)tptr;
     tptr += sizeof(struct slow_oam_common_header_t);
     tlen -= sizeof(struct slow_oam_common_header_t);
@@ -502,11 +507,11 @@ void slow_oam_print(register const u_char *tptr, register u_int tlen) {
                     printf("\n\t    ERROR: illegal length - should be 0");
                 }
                 return;
-                
+
             case SLOW_OAM_INFO_TYPE_LOCAL: /* identical format - fall through */
             case SLOW_OAM_INFO_TYPE_REMOTE:
                 tlv.slow_oam_info = (const struct slow_oam_info_t *)tptr;
-                
+
                 if (tlv.slow_oam_info->info_length !=
                     sizeof(struct slow_oam_info_t)) {
                     printf("\n\t    ERROR: illegal length - should be %lu",
@@ -534,11 +539,11 @@ void slow_oam_print(register const u_char *tptr, register u_int tlen) {
                        EXTRACT_24BITS(&tlv.slow_oam_info->oui),
                        EXTRACT_32BITS(&tlv.slow_oam_info->vendor_private));
                 break;
-                
+
             case SLOW_OAM_INFO_TYPE_ORG_SPECIFIC:
                 hexdump = TRUE;
                 break;
-                
+
             default:
                 hexdump = TRUE;
                 break;
@@ -551,7 +556,7 @@ void slow_oam_print(register const u_char *tptr, register u_int tlen) {
 
             /* do we also want to see a hex dump ? */
             if (vflag > 1 || hexdump==TRUE) {
-                print_unknown_data(tptr,"\n\t  ",
+                print_unknown_data(gndo,tptr,"\n\t  ",
                                    ptr.slow_oam_tlv_header->length);
             }
 
@@ -576,13 +581,13 @@ void slow_oam_print(register const u_char *tptr, register u_int tlen) {
                     printf("\n\t    ERROR: illegal length - should be 0");
                 }
                 return;
-                
+
             case SLOW_OAM_LINK_EVENT_ERR_SYM_PER: /* identical format - fall through */
             case SLOW_OAM_LINK_EVENT_ERR_FRM:
             case SLOW_OAM_LINK_EVENT_ERR_FRM_PER:
             case SLOW_OAM_LINK_EVENT_ERR_FRM_SUMM:
                 tlv.slow_oam_link_event = (const struct slow_oam_link_event_t *)tptr;
-                
+
                 if (tlv.slow_oam_link_event->event_length !=
                     sizeof(struct slow_oam_link_event_t)) {
                     printf("\n\t    ERROR: illegal length - should be %lu",
@@ -602,11 +607,11 @@ void slow_oam_print(register const u_char *tptr, register u_int tlen) {
                        EXTRACT_64BITS(&tlv.slow_oam_link_event->errors_running_total),
                        EXTRACT_32BITS(&tlv.slow_oam_link_event->event_running_total));
                 break;
-                
+
             case SLOW_OAM_LINK_EVENT_ORG_SPECIFIC:
                 hexdump = TRUE;
                 break;
-                
+
             default:
                 hexdump = TRUE;
                 break;
@@ -619,7 +624,7 @@ void slow_oam_print(register const u_char *tptr, register u_int tlen) {
 
             /* do we also want to see a hex dump ? */
             if (vflag > 1 || hexdump==TRUE) {
-                print_unknown_data(tptr,"\n\t  ",
+                print_unknown_data(gndo,tptr,"\n\t  ",
                                    ptr.slow_oam_tlv_header->length);
             }
 
@@ -628,17 +633,27 @@ void slow_oam_print(register const u_char *tptr, register u_int tlen) {
         }
         break;
 
+    case SLOW_OAM_CODE_LOOPBACK_CTRL:
+        tlv.slow_oam_loopbackctrl = (const struct slow_oam_loopbackctrl_t *)tptr;
+        printf("\n\t  Command %s (%u)",
+               tok2str(slow_oam_loopbackctrl_cmd_values,
+                       "Unknown",
+                       tlv.slow_oam_loopbackctrl->command),
+               tlv.slow_oam_loopbackctrl->command);
+               tptr ++;
+               tlen --;
+        break;
+
         /*
          * FIXME those are the defined codes that lack a decoder
          * you are welcome to contribute code ;-)
          */
     case SLOW_OAM_CODE_VAR_REQUEST:
     case SLOW_OAM_CODE_VAR_RESPONSE:
-    case SLOW_OAM_CODE_LOOPBACK_CTRL:
     case SLOW_OAM_CODE_PRIVATE:
     default:
         if (vflag <= 1) {
-            print_unknown_data(tptr,"\n\t  ", tlen);
+            print_unknown_data(gndo,tptr,"\n\t  ", tlen);
         }
         break;
     }