X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/513f782ae18791f0c925b9235da749b38159b607..f34af1aa63da301ae7ee91e2300dff31702001f0:/print-juniper.c diff --git a/print-juniper.c b/print-juniper.c index 507e9e93..db7f2e15 100644 --- a/print-juniper.c +++ b/print-juniper.c @@ -23,7 +23,7 @@ __RCSID("NetBSD: print-juniper.c,v 1.3 2007/07/25 06:31:32 dogcow Exp "); #endif #ifdef HAVE_CONFIG_H -#include "config.h" +#include #endif #include "netdissect-stdinc.h" @@ -39,6 +39,17 @@ __RCSID("NetBSD: print-juniper.c,v 1.3 2007/07/25 06:31:32 dogcow Exp "); #include "ethertype.h" #include "atm.h" +/* + * If none of the Juniper DLT_s are defined, there's nothing to do. + */ +#if defined(DLT_JUNIPER_GGSN) || defined(DLT_JUNIPER_ES) || \ + defined(DLT_JUNIPER_MONITOR) || defined(DLT_JUNIPER_SERVICES) || \ + defined(DLT_JUNIPER_PPPOE) || defined(DLT_JUNIPER_ETHER) || \ + defined(DLT_JUNIPER_PPP) || defined(DLT_JUNIPER_FRELAY) || \ + defined(DLT_JUNIPER_CHDLC) || defined(DLT_JUNIPER_PPPOE_ATM) || \ + defined(DLT_JUNIPER_MLPPP) || defined(DLT_JUNIPER_MFR) || \ + defined(DLT_JUNIPER_MLFR) || defined(DLT_JUNIPER_ATM1) || \ + defined(DLT_JUNIPER_ATM2) #define JUNIPER_BPF_OUT 0 /* Outgoing packet */ #define JUNIPER_BPF_IN 1 /* Incoming packet */ #define JUNIPER_BPF_PKT_IN 0x1 /* Incoming packet */ @@ -64,6 +75,7 @@ __RCSID("NetBSD: print-juniper.c,v 1.3 2007/07/25 06:31:32 dogcow Exp "); #define JUNIPER_IPSEC_O_AH_AUTHENTICATION_TYPE 4 #define JUNIPER_IPSEC_O_ESP_ENCRYPTION_TYPE 5 +#ifdef DLT_JUNIPER_ES 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" }, @@ -72,6 +84,7 @@ static const struct tok juniper_ipsec_type_values[] = { { JUNIPER_IPSEC_O_ESP_ENCRYPTION_TYPE, "ESP ENCR" }, { 0, NULL} }; +#endif static const struct tok juniper_direction_values[] = { { JUNIPER_BPF_IN, "In"}, @@ -438,15 +451,19 @@ struct juniper_l2info_t { #define MFR_BE_MASK 0xc0 +#ifdef DLT_JUNIPER_GGSN static const struct tok juniper_protocol_values[] = { { JUNIPER_PROTO_NULL, "Null" }, { JUNIPER_PROTO_IPV4, "IPv4" }, { JUNIPER_PROTO_IPV6, "IPv6" }, { 0, NULL} }; +#endif static int ip_heuristic_guess(netdissect_options *, const u_char *, u_int); +#ifdef DLT_JUNIPER_ATM2 static int juniper_ppp_heuristic_guess(netdissect_options *, const u_char *, u_int); +#endif static int juniper_parse_header(netdissect_options *, const u_char *, const struct pcap_pkthdr *, struct juniper_l2info_t *); #ifdef DLT_JUNIPER_GGSN @@ -466,6 +483,7 @@ juniper_ggsn_if_print(netdissect_options *ndo, const struct juniper_ggsn_header *gh; uint8_t proto; + ndo->ndo_protocol = "juniper_ggsn"; l2info.pictype = DLT_JUNIPER_GGSN; if (juniper_parse_header(ndo, p, h, &l2info) == 0) return l2info.header_len; @@ -497,8 +515,8 @@ juniper_ggsn_if_print(netdissect_options *ndo, return l2info.header_len; trunc: - ND_PRINT("[|juniper_services]"); - return l2info.header_len; + nd_print_trunc(ndo); + return l2info.header_len; } #endif @@ -519,6 +537,7 @@ juniper_es_if_print(netdissect_options *ndo, u_int rewrite_len,es_type_bundle; const struct juniper_ipsec_header *ih; + ndo->ndo_protocol = "juniper_es"; l2info.pictype = DLT_JUNIPER_ES; if (juniper_parse_header(ndo, p, h, &l2info) == 0) return l2info.header_len; @@ -557,8 +576,8 @@ juniper_es_if_print(netdissect_options *ndo, tok2str(juniper_ipsec_type_values,"Unknown",EXTRACT_U_1(ih->type)), EXTRACT_U_1(ih->type), EXTRACT_BE_U_4(ih->spi), - ipaddr_string(ndo, &ih->src_ip), - ipaddr_string(ndo, &ih->dst_ip), + ipaddr_string(ndo, ih->src_ip), + ipaddr_string(ndo, ih->dst_ip), l2info.length); } else { ND_PRINT("ES SA, index %u, ttl %u type %s (%u), length %u\n", @@ -574,8 +593,8 @@ juniper_es_if_print(netdissect_options *ndo, return l2info.header_len; trunc: - ND_PRINT("[|juniper_services]"); - return l2info.header_len; + nd_print_trunc(ndo); + return l2info.header_len; } #endif @@ -593,6 +612,7 @@ juniper_monitor_if_print(netdissect_options *ndo, }; const struct juniper_monitor_header *mh; + ndo->ndo_protocol = "juniper_monitor"; l2info.pictype = DLT_JUNIPER_MONITOR; if (juniper_parse_header(ndo, p, h, &l2info) == 0) return l2info.header_len; @@ -613,8 +633,8 @@ juniper_monitor_if_print(netdissect_options *ndo, return l2info.header_len; trunc: - ND_PRINT("[|juniper_services]"); - return l2info.header_len; + nd_print_trunc(ndo); + return l2info.header_len; } #endif @@ -633,6 +653,7 @@ juniper_services_if_print(netdissect_options *ndo, }; const struct juniper_services_header *sh; + ndo->ndo_protocol = "juniper_services"; l2info.pictype = DLT_JUNIPER_SERVICES; if (juniper_parse_header(ndo, p, h, &l2info) == 0) return l2info.header_len; @@ -654,8 +675,8 @@ juniper_services_if_print(netdissect_options *ndo, return l2info.header_len; trunc: - ND_PRINT("[|juniper_services]"); - return l2info.header_len; + nd_print_trunc(ndo); + return l2info.header_len; } #endif @@ -666,6 +687,7 @@ juniper_pppoe_if_print(netdissect_options *ndo, { struct juniper_l2info_t l2info; + ndo->ndo_protocol = "juniper_pppoe"; l2info.pictype = DLT_JUNIPER_PPPOE; if (juniper_parse_header(ndo, p, h, &l2info) == 0) return l2info.header_len; @@ -684,6 +706,7 @@ juniper_ether_if_print(netdissect_options *ndo, { struct juniper_l2info_t l2info; + ndo->ndo_protocol = "juniper_ether"; l2info.pictype = DLT_JUNIPER_ETHER; if (juniper_parse_header(ndo, p, h, &l2info) == 0) return l2info.header_len; @@ -702,6 +725,7 @@ juniper_ppp_if_print(netdissect_options *ndo, { struct juniper_l2info_t l2info; + ndo->ndo_protocol = "juniper_ppp"; l2info.pictype = DLT_JUNIPER_PPP; if (juniper_parse_header(ndo, p, h, &l2info) == 0) return l2info.header_len; @@ -720,6 +744,7 @@ juniper_frelay_if_print(netdissect_options *ndo, { struct juniper_l2info_t l2info; + ndo->ndo_protocol = "juniper_frelay"; l2info.pictype = DLT_JUNIPER_FRELAY; if (juniper_parse_header(ndo, p, h, &l2info) == 0) return l2info.header_len; @@ -738,6 +763,7 @@ juniper_chdlc_if_print(netdissect_options *ndo, { struct juniper_l2info_t l2info; + ndo->ndo_protocol = "juniper_chdlc"; l2info.pictype = DLT_JUNIPER_CHDLC; if (juniper_parse_header(ndo, p, h, &l2info) == 0) return l2info.header_len; @@ -755,8 +781,9 @@ juniper_pppoe_atm_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p) { struct juniper_l2info_t l2info; - uint16_t extracted_ethertype; + uint16_t extracted_ethertype; + ndo->ndo_protocol = "juniper_pppoe_atm"; l2info.pictype = DLT_JUNIPER_PPPOE_ATM; if (juniper_parse_header(ndo, p, h, &l2info) == 0) return l2info.header_len; @@ -778,8 +805,8 @@ juniper_pppoe_atm_if_print(netdissect_options *ndo, return l2info.header_len; trunc: - ND_PRINT("[|juniper_pppoe_atm]"); - return l2info.header_len; + nd_print_trunc(ndo); + return l2info.header_len; } #endif @@ -790,6 +817,7 @@ juniper_mlppp_if_print(netdissect_options *ndo, { struct juniper_l2info_t l2info; + ndo->ndo_protocol = "juniper_mlppp"; l2info.pictype = DLT_JUNIPER_MLPPP; if (juniper_parse_header(ndo, p, h, &l2info) == 0) return l2info.header_len; @@ -850,6 +878,7 @@ juniper_mfr_if_print(netdissect_options *ndo, { struct juniper_l2info_t l2info; + ndo->ndo_protocol = "juniper_mfr"; memset(&l2info, 0, sizeof(l2info)); l2info.pictype = DLT_JUNIPER_MFR; if (juniper_parse_header(ndo, p, h, &l2info) == 0) @@ -912,6 +941,7 @@ juniper_mlfr_if_print(netdissect_options *ndo, { struct juniper_l2info_t l2info; + ndo->ndo_protocol = "juniper_mlfr"; l2info.pictype = DLT_JUNIPER_MLFR; if (juniper_parse_header(ndo, p, h, &l2info) == 0) return l2info.header_len; @@ -957,6 +987,7 @@ juniper_atm1_if_print(netdissect_options *ndo, struct juniper_l2info_t l2info; + ndo->ndo_protocol = "juniper_atm1"; l2info.pictype = DLT_JUNIPER_ATM1; if (juniper_parse_header(ndo, p, h, &l2info) == 0) return l2info.header_len; @@ -986,11 +1017,11 @@ juniper_atm1_if_print(netdissect_options *ndo, if (ip_heuristic_guess(ndo, p, l2info.length) != 0) /* last try - vcmux encaps ? */ return l2info.header_len; - return l2info.header_len; + return l2info.header_len; trunc: - ND_PRINT("[|juniper_atm1]"); - return l2info.header_len; + nd_print_trunc(ndo); + return l2info.header_len; } #endif @@ -1011,6 +1042,7 @@ juniper_atm2_if_print(netdissect_options *ndo, struct juniper_l2info_t l2info; + ndo->ndo_protocol = "juniper_atm2"; l2info.pictype = DLT_JUNIPER_ATM2; if (juniper_parse_header(ndo, p, h, &l2info) == 0) return l2info.header_len; @@ -1049,14 +1081,12 @@ juniper_atm2_if_print(netdissect_options *ndo, if (ip_heuristic_guess(ndo, p, l2info.length) != 0) /* last try - vcmux encaps ? */ return l2info.header_len; - return l2info.header_len; + return l2info.header_len; trunc: - ND_PRINT("[|juniper_atm2]"); - return l2info.header_len; + nd_print_trunc(ndo); + return l2info.header_len; } -#endif - /* try to guess, based on all PPP protos that are supported in * a juniper router if the payload data is encapsulated using PPP */ @@ -1087,6 +1117,7 @@ juniper_ppp_heuristic_guess(netdissect_options *ndo, } return 1; /* we printed a ppp packet */ } +#endif static int ip_heuristic_guess(netdissect_options *ndo, @@ -1104,8 +1135,8 @@ ip_heuristic_guess(netdissect_options *ndo, case 0x4d: case 0x4e: case 0x4f: - ip_print(ndo, p, length); - break; + ip_print(ndo, p, length); + break; case 0x60: case 0x61: case 0x62: @@ -1185,7 +1216,9 @@ juniper_parse_header(netdissect_options *ndo, const struct juniper_cookie_table_t *lp = juniper_cookie_table; u_int idx, jnx_ext_len, jnx_header_len = 0; uint8_t tlv_type,tlv_len; +#ifdef DLT_JUNIPER_ATM2 uint32_t control_word; +#endif int tlv_value; const u_char *tptr; @@ -1499,15 +1532,15 @@ juniper_parse_header(netdissect_options *ndo, ND_PRINT("hlen %u, proto 0x%04x, ", l2info->header_len, l2info->proto); return 1; /* everything went ok so far. continue parsing */ - trunc: - ND_PRINT("[|juniper_hdr], length %u", h->len); +trunc: + nd_print_trunc(ndo); return 0; } - - -/* - * Local Variables: - * c-style: whitesmith - * c-basic-offset: 4 - * End: - */ +#endif /* defined(DLT_JUNIPER_GGSN) || defined(DLT_JUNIPER_ES) || \ + defined(DLT_JUNIPER_MONITOR) || defined(DLT_JUNIPER_SERVICES) || \ + defined(DLT_JUNIPER_PPPOE) || defined(DLT_JUNIPER_ETHER) || \ + defined(DLT_JUNIPER_PPP) || defined(DLT_JUNIPER_FRELAY) || \ + defined(DLT_JUNIPER_CHDLC) || defined(DLT_JUNIPER_PPPOE_ATM) || \ + defined(DLT_JUNIPER_MLPPP) || defined(DLT_JUNIPER_MFR) || \ + defined(DLT_JUNIPER_MLFR) || defined(DLT_JUNIPER_ATM1) || \ + defined(DLT_JUNIPER_ATM2) */