]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-juniper.c
CARP: NDOize
[tcpdump] / print-juniper.c
index a4f70ada1818152082ce786a9169d276b3635700..556df93ad1dae52741c71d25e6ce26fb75c7d346 100644 (file)
@@ -1,4 +1,6 @@
-/* 
+/*     NetBSD: print-juniper.c,v 1.2 2007/07/24 11:53:45 drochner Exp        */
+
+/*
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that: (1) source code
  * distributions retain the above copyright notice and this paragraph
@@ -14,8 +16,8 @@
  */
 
 #ifndef lint
-static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-juniper.c,v 1.33 2006-06-14 21:40:00 hannes Exp $ (LBL)";
+#else
+__RCSID("NetBSD: print-juniper.c,v 1.3 2007/07/25 06:31:32 dogcow Exp ");
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -61,7 +63,7 @@ static const char rcsid[] _U_ =
 #define JUNIPER_IPSEC_O_AH_AUTHENTICATION_TYPE 4
 #define JUNIPER_IPSEC_O_ESP_ENCRYPTION_TYPE 5
 
-static struct tok juniper_ipsec_type_values[] = {
+static const struct tok juniper_ipsec_type_values[] = {
     { JUNIPER_IPSEC_O_ESP_ENCRYPT_ESP_AUTHEN_TYPE, "ESP ENCR-AUTH" },
     { JUNIPER_IPSEC_O_ESP_ENCRYPT_AH_AUTHEN_TYPE, "ESP ENCR-AH AUTH" },
     { JUNIPER_IPSEC_O_ESP_AUTHENTICATION_TYPE, "ESP AUTH" },
@@ -70,7 +72,7 @@ static struct tok juniper_ipsec_type_values[] = {
     { 0, NULL}
 };
 
-static struct tok juniper_direction_values[] = {
+static const struct tok juniper_direction_values[] = {
     { JUNIPER_BPF_IN,  "In"},
     { JUNIPER_BPF_OUT, "Out"},
     { 0, NULL}
@@ -83,15 +85,15 @@ enum {
     JUNIPER_EXT_TLV_IFD_MEDIATYPE = 3,
     JUNIPER_EXT_TLV_IFL_IDX = 4,
     JUNIPER_EXT_TLV_IFL_UNIT = 5,
-    JUNIPER_EXT_TLV_IFL_ENCAPS = 6, 
-    JUNIPER_EXT_TLV_TTP_IFD_MEDIATYPE = 7,  
+    JUNIPER_EXT_TLV_IFL_ENCAPS = 6,
+    JUNIPER_EXT_TLV_TTP_IFD_MEDIATYPE = 7,
     JUNIPER_EXT_TLV_TTP_IFL_ENCAPS = 8
 };
 
 /* 1 byte type and 1-byte length */
 #define JUNIPER_EXT_TLV_OVERHEAD 2
 
-struct tok jnx_ext_tlv_values[] = {
+static const struct tok jnx_ext_tlv_values[] = {
     { JUNIPER_EXT_TLV_IFD_IDX, "Device Interface Index" },
     { JUNIPER_EXT_TLV_IFD_NAME,"Device Interface Name" },
     { JUNIPER_EXT_TLV_IFD_MEDIATYPE, "Device Media Type" },
@@ -103,7 +105,7 @@ struct tok jnx_ext_tlv_values[] = {
     { 0, NULL }
 };
 
-struct tok jnx_flag_values[] = {
+static const struct tok jnx_flag_values[] = {
     { JUNIPER_BPF_EXT, "Ext" },
     { JUNIPER_BPF_FILTER, "Filter" },
     { JUNIPER_BPF_IIF, "IIF" },
@@ -173,7 +175,7 @@ struct tok jnx_flag_values[] = {
 #define JUNIPER_IFML_DFC                59
 #define JUNIPER_IFML_PICPEER            60
 
-struct tok juniper_ifmt_values[] = {
+static const struct tok juniper_ifmt_values[] = {
     { JUNIPER_IFML_ETHER, "Ethernet" },
     { JUNIPER_IFML_FDDI, "FDDI" },
     { JUNIPER_IFML_TOKENRING, "Token-Ring" },
@@ -296,7 +298,7 @@ struct tok juniper_ifmt_values[] = {
 #define JUNIPER_IFLE_DFC                    66
 #define JUNIPER_IFLE_PICPEER                67
 
-struct tok juniper_ifle_values[] = {
+static const struct tok juniper_ifle_values[] = {
     { JUNIPER_IFLE_AGGREGATOR, "Aggregator" },
     { JUNIPER_IFLE_ATM_CCC, "CCC over ATM" },
     { JUNIPER_IFLE_ATM_CELLRELAY_CCC, "ATM CCC Cell Relay" },
@@ -367,7 +369,7 @@ struct juniper_cookie_table_t {
     const char *s;             /* pic name */
 };
 
-static struct juniper_cookie_table_t juniper_cookie_table[] = {
+static const struct juniper_cookie_table_t juniper_cookie_table[] = {
 #ifdef DLT_JUNIPER_ATM1
     { DLT_JUNIPER_ATM1,  4, "ATM1"},
 #endif
@@ -435,7 +437,7 @@ struct juniper_l2info_t {
 
 #define MFR_BE_MASK 0xc0
 
-static struct tok juniper_protocol_values[] = {
+static const struct tok juniper_protocol_values[] = {
     { JUNIPER_PROTO_NULL, "Null" },
     { JUNIPER_PROTO_IPV4, "IPv4" },
     { JUNIPER_PROTO_IPV6, "IPv6" },
@@ -482,7 +484,7 @@ juniper_ggsn_print(const struct pcap_pkthdr *h, register const u_char *p)
             break;
 #ifdef INET6
         case JUNIPER_PROTO_IPV6:
-            ip6_print(p, l2info.length);
+            ip6_print(gndo, p, l2info.length);
             break;
 #endif /* INET6 */
         default:
@@ -540,19 +542,19 @@ juniper_es_print(const struct pcap_pkthdr *h, register const u_char *p)
 
         if (eflag) {
             if (!es_type_bundle) {
-                printf("ES SA, index %u, ttl %u type %s (%u), spi %u, Tunnel %s > %s, length %u\n", 
+                printf("ES SA, index %u, ttl %u type %s (%u), spi %u, Tunnel %s > %s, length %u\n",
                        EXTRACT_16BITS(&ih->sa_index),
-                       ih->ttl, 
+                       ih->ttl,
                        tok2str(juniper_ipsec_type_values,"Unknown",ih->type),
                        ih->type,
                        EXTRACT_32BITS(&ih->spi),
-                       ipaddr_string(EXTRACT_32BITS(&ih->src_ip)),
-                       ipaddr_string(EXTRACT_32BITS(&ih->dst_ip)),
+                       ipaddr_string(&ih->src_ip),
+                       ipaddr_string(&ih->dst_ip),
                        l2info.length);
             } else {
-                printf("ES SA, index %u, ttl %u type %s (%u), length %u\n", 
+                printf("ES SA, index %u, ttl %u type %s (%u), length %u\n",
                        EXTRACT_16BITS(&ih->sa_index),
-                       ih->ttl, 
+                       ih->ttl,
                        tok2str(juniper_ipsec_type_values,"Unknown",ih->type),
                        ih->type,
                        l2info.length);
@@ -643,7 +645,7 @@ juniper_pppoe_print(const struct pcap_pkthdr *h, register const u_char *p)
 
         p+=l2info.header_len;
         /* this DLT contains nothing but raw ethernet frames */
-        ether_print(p, l2info.length, l2info.caplen);
+        ether_print(gndo, p, l2info.length, l2info.caplen, NULL, NULL);
         return l2info.header_len;
 }
 #endif
@@ -660,7 +662,7 @@ juniper_ether_print(const struct pcap_pkthdr *h, register const u_char *p)
 
         p+=l2info.header_len;
         /* this DLT contains nothing but raw Ethernet frames */
-        ether_print(p, l2info.length, l2info.caplen);
+        ether_print(gndo, p, l2info.length, l2info.caplen, NULL, NULL);
         return l2info.header_len;
 }
 #endif
@@ -732,14 +734,13 @@ juniper_pppoe_atm_print(const struct pcap_pkthdr *h, register const u_char *p)
         extracted_ethertype = EXTRACT_16BITS(p);
         /* this DLT contains nothing but raw PPPoE frames,
          * prepended with a type field*/
-        if (ether_encap_print(extracted_ethertype,
+        if (ethertype_print(gndo, extracted_ethertype,
                               p+ETHERTYPE_LEN,
                               l2info.length-ETHERTYPE_LEN,
-                              l2info.caplen-ETHERTYPE_LEN,
-                              &extracted_ethertype) == 0)
+                              l2info.caplen-ETHERTYPE_LEN) == 0)
             /* ether_type not known, probably it wasn't one */
             printf("unknown ethertype 0x%04x", extracted_ethertype);
-        
+
         return l2info.header_len;
 }
 #endif
@@ -776,7 +777,7 @@ juniper_mlppp_print(const struct pcap_pkthdr *h, register const u_char *p)
             return l2info.header_len;
 #ifdef INET6
         case JUNIPER_LSQ_L3_PROTO_IPV6:
-            ip6_print(p,l2info.length);
+            ip6_print(gndo, p,l2info.length);
             return l2info.header_len;
 #endif
         case JUNIPER_LSQ_L3_PROTO_MPLS:
@@ -814,7 +815,7 @@ juniper_mfr_print(const struct pcap_pkthdr *h, register const u_char *p)
         l2info.pictype = DLT_JUNIPER_MFR;
         if(juniper_parse_header(p, h, &l2info) == 0)
             return l2info.header_len;
-        
+
         p+=l2info.header_len;
 
         /* child-link ? */
@@ -831,7 +832,7 @@ juniper_mfr_print(const struct pcap_pkthdr *h, register const u_char *p)
                 return l2info.header_len;
 #ifdef INET6
             case JUNIPER_LSQ_L3_PROTO_IPV6:
-                ip6_print(p,l2info.length);
+                ip6_print(gndo, p,l2info.length);
                 return l2info.header_len;
 #endif
             case JUNIPER_LSQ_L3_PROTO_MPLS:
@@ -856,7 +857,7 @@ juniper_mfr_print(const struct pcap_pkthdr *h, register const u_char *p)
         case (LLC_UI<<8 | NLPID_IP):
         case (LLC_UI<<8 | NLPID_IP6):
             /* pass IP{4,6} to the OSI layer for proper link-layer printing */
-            isoclns_print(p-1, l2info.length+1, l2info.caplen+1); 
+            isoclns_print(p-1, l2info.length+1, l2info.caplen+1);
             break;
         default:
             printf("unknown protocol 0x%04x, length %u",l2info.proto, l2info.length);
@@ -984,7 +985,7 @@ juniper_atm2_print(const struct pcap_pkthdr *h, register const u_char *p)
 
         if (l2info.direction != JUNIPER_BPF_PKT_IN && /* ether-over-1483 encaps ? */
             (EXTRACT_32BITS(l2info.cookie) & ATM2_GAP_COUNT_MASK)) {
-            ether_print(p, l2info.length, l2info.caplen);
+            ether_print(gndo, p, l2info.length, l2info.caplen, NULL, NULL);
             return l2info.header_len;
         }
 
@@ -1070,7 +1071,7 @@ ip_heuristic_guess(register const u_char *p, u_int length) {
     case 0x6d:
     case 0x6e:
     case 0x6f:
-        ip6_print(p, length);
+        ip6_print(gndo, p, length);
         break;
 #endif
     default:
@@ -1130,7 +1131,7 @@ juniper_read_tlv_value(const u_char *p, u_int tlv_type, u_int tlv_len) {
 static int
 juniper_parse_header (const u_char *p, const struct pcap_pkthdr *h, struct juniper_l2info_t *l2info) {
 
-    struct juniper_cookie_table_t *lp = juniper_cookie_table;
+    const struct juniper_cookie_table_t *lp = juniper_cookie_table;
     u_int idx, jnx_ext_len, jnx_header_len = 0;
     u_int8_t tlv_type,tlv_len;
     u_int32_t control_word;
@@ -1148,11 +1149,11 @@ juniper_parse_header (const u_char *p, const struct pcap_pkthdr *h, struct junip
     TCHECK2(p[0],4);
     l2info->flags = p[3];
     l2info->direction = p[3]&JUNIPER_BPF_PKT_IN;
-    
+
     if (EXTRACT_24BITS(p) != JUNIPER_MGC_NUMBER) { /* magic number found ? */
         printf("no magic-number found!");
         return 0;
-    } 
+    }
 
     if (eflag) /* print direction */
         printf("%3s ",tok2str(juniper_direction_values,"---",l2info->direction));
@@ -1174,32 +1175,32 @@ juniper_parse_header (const u_char *p, const struct pcap_pkthdr *h, struct junip
         jnx_ext_len = EXTRACT_16BITS(tptr);
         jnx_header_len += 2;
         tptr +=2;
-        
+
         /* nail up the total length -
          * just in case something goes wrong
          * with TLV parsing */
         jnx_header_len += jnx_ext_len;
-        
+
         if (vflag>1)
             printf(", PCAP Extension(s) total length %u",
                    jnx_ext_len);
-        
+
         TCHECK2(tptr[0], jnx_ext_len);
         while (jnx_ext_len > JUNIPER_EXT_TLV_OVERHEAD) {
             tlv_type = *(tptr++);
             tlv_len = *(tptr++);
             tlv_value = 0;
-            
+
             /* sanity check */
             if (tlv_type == 0 || tlv_len == 0)
                 break;
-            
+
             if (vflag>1)
                 printf("\n\t  %s Extension TLV #%u, length %u, value ",
                        tok2str(jnx_ext_tlv_values,"Unknown",tlv_type),
                        tlv_type,
                        tlv_len);
-            
+
             tlv_value = juniper_read_tlv_value(tptr, tlv_type, tlv_len);
             switch (tlv_type) {
             case JUNIPER_EXT_TLV_IFD_NAME:
@@ -1233,16 +1234,16 @@ juniper_parse_header (const u_char *p, const struct pcap_pkthdr *h, struct junip
                 }
                 break;
             }
-            
+
             tptr+=tlv_len;
             jnx_ext_len -= tlv_len+JUNIPER_EXT_TLV_OVERHEAD;
         }
-        
+
         if (vflag>1)
             printf("\n\t-----original packet-----\n\t");
-    } 
-    
-    if ((l2info->flags & JUNIPER_BPF_NO_L2 ) == JUNIPER_BPF_NO_L2 ) {            
+    }
+
+    if ((l2info->flags & JUNIPER_BPF_NO_L2 ) == JUNIPER_BPF_NO_L2 ) {
         if (eflag)
             printf("no-L2-hdr, ");
 
@@ -1256,7 +1257,7 @@ juniper_parse_header (const u_char *p, const struct pcap_pkthdr *h, struct junip
 
         l2info->header_len=jnx_header_len+4;
         return 0; /* stop parsing the output further */
-        
+
     }
     l2info->header_len = jnx_header_len;
     p+=l2info->header_len;
@@ -1278,7 +1279,7 @@ juniper_parse_header (const u_char *p, const struct pcap_pkthdr *h, struct junip
                 l2info->cookie_type = AS_COOKIE_ID;
                 l2info->cookie_len = 8;
                 break;
-            
+
             default:
                 l2info->bundle = l2info->cookie[0];
                 break;
@@ -1313,9 +1314,9 @@ juniper_parse_header (const u_char *p, const struct pcap_pkthdr *h, struct junip
             }
 
             if (eflag) printf(": "); /* print demarc b/w L2/L3*/
-            
 
-            l2info->proto = EXTRACT_16BITS(p+l2info->cookie_len); 
+
+            l2info->proto = EXTRACT_16BITS(p+l2info->cookie_len);
             break;
         }
         ++lp;
@@ -1332,7 +1333,7 @@ juniper_parse_header (const u_char *p, const struct pcap_pkthdr *h, struct junip
             break;
         case AS_COOKIE_ID:
             l2info->bundle = (EXTRACT_16BITS(&l2info->cookie[6])>>3)&0xfff;
-            l2info->proto = (l2info->cookie[5])&JUNIPER_LSQ_L3_PROTO_MASK;            
+            l2info->proto = (l2info->cookie[5])&JUNIPER_LSQ_L3_PROTO_MASK;
             break;
         default:
             l2info->bundle = l2info->cookie[0];
@@ -1345,7 +1346,7 @@ juniper_parse_header (const u_char *p, const struct pcap_pkthdr *h, struct junip
         switch (l2info->cookie_type) {
         case LS_COOKIE_ID:
             l2info->bundle = l2info->cookie[1];
-            l2info->proto = EXTRACT_16BITS(p);        
+            l2info->proto = EXTRACT_16BITS(p);
             l2info->header_len += 2;
             l2info->length -= 2;
             l2info->caplen -= 2;
@@ -1368,7 +1369,7 @@ juniper_parse_header (const u_char *p, const struct pcap_pkthdr *h, struct junip
         switch (l2info->cookie_type) {
         case LS_COOKIE_ID:
             l2info->bundle = l2info->cookie[1];
-            l2info->proto = EXTRACT_16BITS(p);        
+            l2info->proto = EXTRACT_16BITS(p);
             l2info->header_len += 2;
             l2info->length -= 2;
             l2info->caplen -= 2;
@@ -1399,7 +1400,7 @@ juniper_parse_header (const u_char *p, const struct pcap_pkthdr *h, struct junip
             default:
                 break;
             }
-            
+
             if (eflag)
                 printf("control-word 0x%08x ", control_word);
         }
@@ -1434,7 +1435,7 @@ juniper_parse_header (const u_char *p, const struct pcap_pkthdr *h, struct junip
         printf("Unknown Juniper DLT_ type %u: ", l2info->pictype);
         break;
     }
-    
+
     if (eflag > 1)
         printf("hlen %u, proto 0x%04x, ",l2info->header_len,l2info->proto);