12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * All rights reserved. 42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Redistribution and use in source and binary forms, with or without 62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * modification, are permitted provided that the following conditions 72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * are met: 82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * notice, this list of conditions and the following disclaimer. 102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * documentation and/or other materials provided with the distribution. 132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 3. Neither the name of the project nor the names of its contributors 142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * may be used to endorse or promote products derived from this software 152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * without specific prior written permission. 162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * SUCH DAMAGE. 282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef lint 322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char rcsid[] _U_ = 3353f17a9db278d33517d9888dd77848f554522a38JP Abgrall "@(#) $Header: /tcpdump/master/tcpdump/print-isakmp.c,v 1.61 2008-02-05 19:34:25 guy Exp $ (LBL)"; 342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define NETDISSECT_REWORKED 372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_CONFIG_H 382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "config.h" 392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4153f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* The functions from print-esp.c used in this file are only defined when both 4253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * OpenSSL and evp.h are detected. Employ the same preprocessor device here. 4353f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 4453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifndef HAVE_OPENSSL_EVP_H 4553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#undef HAVE_LIBCRYPTO 4653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 4753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <tcpdump-stdinc.h> 492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <string.h> 512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdio.h> 532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "isakmp.h" 552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "ipsec_doi.h" 562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "oakley.h" 572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "interface.h" 582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "addrtoname.h" 592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "extract.h" /* must come after interface.h */ 602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "ip.h" 622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "ip6.h" 642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef HAVE_SOCKADDR_STORAGE 672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define sockaddr_storage sockaddr 682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define DECLARE_PRINTER(func) static const u_char *ike##func##_print( \ 7153f17a9db278d33517d9888dd77848f554522a38JP Abgrall netdissect_options *ndo, u_char tpay, \ 7253f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, \ 7353f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len, \ 7453f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *end_pointer, \ 7553f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase,\ 7653f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t doi0, \ 7753f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto0, int depth) 7853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 7953f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v1_sa); 8053f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v1_p); 8153f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v1_t); 8253f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v1_ke); 8353f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v1_id); 8453f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v1_cert); 8553f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v1_cr); 8653f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v1_sig); 8753f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v1_hash); 8853f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v1_nonce); 8953f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v1_n); 9053f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v1_d); 9153f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v1_vid); 9253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 9353f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v2_sa); 9453f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v2_ke); 9553f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v2_ID); 9653f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v2_cert); 9753f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v2_cr); 9853f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v2_auth); 9953f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v2_nonce); 10053f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v2_n); 10153f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v2_d); 10253f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v2_vid); 10353f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v2_TS); 10453f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v2_cp); 10553f17a9db278d33517d9888dd77848f554522a38JP AbgrallDECLARE_PRINTER(v2_eap); 10653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 10753f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char *ikev2_e_print(netdissect_options *ndo, 10853f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct isakmp *base, 10953f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_char tpay, 11053f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, 11153f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len, 11253f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *end_pointer, 11353f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase, 11453f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t doi0, 11553f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto0, int depth); 11653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 11753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 11853f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char *ike_sub0_print(netdissect_options *ndo,u_char, const struct isakmp_gen *, 1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *, u_int32_t, u_int32_t, u_int32_t, int); 12053f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char *ikev1_sub_print(netdissect_options *ndo,u_char, const struct isakmp_gen *, 1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *, u_int32_t, u_int32_t, u_int32_t, int); 12253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 12353f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char *ikev2_sub_print(netdissect_options *ndo, 12453f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct isakmp *base, 12553f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_char np, const struct isakmp_gen *ext, 12653f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *ep, u_int32_t phase, 12753f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t doi, u_int32_t proto, 12853f17a9db278d33517d9888dd77848f554522a38JP Abgrall int depth); 12953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 13053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic char *numstr(int); 13253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 13353f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic void 13453f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev1_print(netdissect_options *ndo, 13553f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *bp, u_int length, 13653f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *bp2, struct isakmp *base); 1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define MAXINITIATORS 20 1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectint ninitiator = 0; 1402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct { 1412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project cookie_t initiator; 1422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct sockaddr_storage iaddr; 1432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct sockaddr_storage raddr; 1442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} cookiecache[MAXINITIATORS]; 1452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* protocol id */ 1472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char *protoidstr[] = { 1482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, "isakmp", "ipsec-ah", "ipsec-esp", "ipcomp", 1492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 1502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* isakmp->np */ 1522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char *npstr[] = { 15353f17a9db278d33517d9888dd77848f554522a38JP Abgrall "none", "sa", "p", "t", "ke", "id", "cert", "cr", "hash", /* 0 - 8 */ 15453f17a9db278d33517d9888dd77848f554522a38JP Abgrall "sig", "nonce", "n", "d", "vid", /* 9 - 13 */ 15553f17a9db278d33517d9888dd77848f554522a38JP Abgrall "pay14", "pay15", "pay16", "pay17", "pay18", /* 14- 18 */ 15653f17a9db278d33517d9888dd77848f554522a38JP Abgrall "pay19", "pay20", "pay21", "pay22", "pay23", /* 19- 23 */ 15753f17a9db278d33517d9888dd77848f554522a38JP Abgrall "pay24", "pay25", "pay26", "pay27", "pay28", /* 24- 28 */ 15853f17a9db278d33517d9888dd77848f554522a38JP Abgrall "pay29", "pay30", "pay31", "pay32", /* 29- 32 */ 15953f17a9db278d33517d9888dd77848f554522a38JP Abgrall "v2sa", "v2ke", "v2IDi", "v2IDr", "v2cert",/* 33- 37 */ 16053f17a9db278d33517d9888dd77848f554522a38JP Abgrall "v2cr", "v2auth","v2nonce", "v2n", "v2d", /* 38- 42 */ 16153f17a9db278d33517d9888dd77848f554522a38JP Abgrall "v2vid", "v2TSi", "v2TSr", "v2e", "v2cp", /* 43- 47 */ 16253f17a9db278d33517d9888dd77848f554522a38JP Abgrall "v2eap", /* 48 */ 16353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 1642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 1652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* isakmp->np */ 16753f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char *(*npfunc[])(netdissect_options *ndo, u_char tpay, 16853f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, 16953f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len, 17053f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *end_pointer, 17153f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase, 17253f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t doi0, 17353f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto0, int depth) = { 1742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, 17553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev1_sa_print, 17653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev1_p_print, 17753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev1_t_print, 17853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev1_ke_print, 17953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev1_id_print, 18053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev1_cert_print, 18153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev1_cr_print, 18253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev1_hash_print, 18353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev1_sig_print, 18453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev1_nonce_print, 18553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev1_n_print, 18653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev1_d_print, 18753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev1_vid_print, /* 13 */ 18853f17a9db278d33517d9888dd77848f554522a38JP Abgrall NULL, NULL, NULL, NULL, NULL, /* 14- 18 */ 18953f17a9db278d33517d9888dd77848f554522a38JP Abgrall NULL, NULL, NULL, NULL, NULL, /* 19- 23 */ 19053f17a9db278d33517d9888dd77848f554522a38JP Abgrall NULL, NULL, NULL, NULL, NULL, /* 24- 28 */ 19153f17a9db278d33517d9888dd77848f554522a38JP Abgrall NULL, NULL, NULL, NULL, /* 29- 32 */ 19253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_sa_print, /* 33 */ 19353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_ke_print, /* 34 */ 19453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_ID_print, /* 35 */ 19553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_ID_print, /* 36 */ 19653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_cert_print, /* 37 */ 19753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_cr_print, /* 38 */ 19853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_auth_print, /* 39 */ 19953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_nonce_print, /* 40 */ 20053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_n_print, /* 41 */ 20153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_d_print, /* 42 */ 20253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_vid_print, /* 43 */ 20353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_TS_print, /* 44 */ 20453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_TS_print, /* 45 */ 20553f17a9db278d33517d9888dd77848f554522a38JP Abgrall NULL, /* ikev2_e_print,*/ /* 46 - special */ 20653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_cp_print, /* 47 */ 20753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_eap_print, /* 48 */ 2082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 2092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* isakmp->etype */ 2112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char *etypestr[] = { 21253f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* IKEv1 exchange types */ 21353f17a9db278d33517d9888dd77848f554522a38JP Abgrall "none", "base", "ident", "auth", "agg", "inf", NULL, NULL, /* 0-7 */ 21453f17a9db278d33517d9888dd77848f554522a38JP Abgrall NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 8-15 */ 21553f17a9db278d33517d9888dd77848f554522a38JP Abgrall NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 16-23 */ 21653f17a9db278d33517d9888dd77848f554522a38JP Abgrall NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 24-31 */ 21753f17a9db278d33517d9888dd77848f554522a38JP Abgrall "oakley-quick", "oakley-newgroup", /* 32-33 */ 21853f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* IKEv2 exchange types */ 21953f17a9db278d33517d9888dd77848f554522a38JP Abgrall "ikev2_init", "ikev2_auth", "child_sa", "inf2" /* 34-37 */ 2202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 2212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define STR_OR_ID(x, tab) \ 2232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (((x) < sizeof(tab)/sizeof(tab[0]) && tab[(x)]) ? tab[(x)] : numstr(x)) 2242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define PROTOIDSTR(x) STR_OR_ID(x, protoidstr) 2252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define NPSTR(x) STR_OR_ID(x, npstr) 2262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define ETYPESTR(x) STR_OR_ID(x, etypestr) 2272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 22853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define CHECKLEN(p, np) \ 22953f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (ep < (u_char *)(p)) { \ 23053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(np))); \ 23153f17a9db278d33517d9888dd77848f554522a38JP Abgrall goto done; \ 23253f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 23353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 23453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 2352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define NPFUNC(x) \ 2362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (((x) < sizeof(npfunc)/sizeof(npfunc[0]) && npfunc[(x)]) \ 2372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ? npfunc[(x)] : NULL) 2382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic int 2402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectiszero(u_char *p, size_t l) 2412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 2422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while (l--) { 2432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (*p++) 2442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return 0; 2452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return 1; 2472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 2482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* find cookie from initiator cache */ 2502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic int 2512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectcookie_find(cookie_t *in) 2522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 2532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int i; 2542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < MAXINITIATORS; i++) { 2562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (memcmp(in, &cookiecache[i].initiator, sizeof(*in)) == 0) 2572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return i; 2582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return -1; 2612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 2622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* record initiator */ 2642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 2652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectcookie_record(cookie_t *in, const u_char *bp2) 2662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 2672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int i; 2682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct ip *ip; 2692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct sockaddr_in *sin; 2702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 2712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct ip6_hdr *ip6; 2722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct sockaddr_in6 *sin6; 2732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = cookie_find(in); 2762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (0 <= i) { 2772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ninitiator = (i + 1) % MAXINITIATORS; 2782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ip = (struct ip *)bp2; 2822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (IP_V(ip)) { 2832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 4: 2842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project memset(&cookiecache[ninitiator].iaddr, 0, 2852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sizeof(cookiecache[ninitiator].iaddr)); 2862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project memset(&cookiecache[ninitiator].raddr, 0, 2872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sizeof(cookiecache[ninitiator].raddr)); 2882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sin = (struct sockaddr_in *)&cookiecache[ninitiator].iaddr; 2902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_SOCKADDR_SA_LEN 2912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sin->sin_len = sizeof(struct sockaddr_in); 2922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sin->sin_family = AF_INET; 29453f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&sin->sin_addr, &ip->ip_src, sizeof(ip->ip_src)); 2952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sin = (struct sockaddr_in *)&cookiecache[ninitiator].raddr; 2962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_SOCKADDR_SA_LEN 2972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sin->sin_len = sizeof(struct sockaddr_in); 2982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sin->sin_family = AF_INET; 30053f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&sin->sin_addr, &ip->ip_dst, sizeof(ip->ip_dst)); 3012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 3022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 3032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 6: 3042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project memset(&cookiecache[ninitiator].iaddr, 0, 3052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sizeof(cookiecache[ninitiator].iaddr)); 3062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project memset(&cookiecache[ninitiator].raddr, 0, 3072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sizeof(cookiecache[ninitiator].raddr)); 3082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ip6 = (struct ip6_hdr *)bp2; 3102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sin6 = (struct sockaddr_in6 *)&cookiecache[ninitiator].iaddr; 3112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_SOCKADDR_SA_LEN 3122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sin6->sin6_len = sizeof(struct sockaddr_in6); 3132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 3142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sin6->sin6_family = AF_INET6; 31553f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&sin6->sin6_addr, &ip6->ip6_src, sizeof(ip6->ip6_src)); 3162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sin6 = (struct sockaddr_in6 *)&cookiecache[ninitiator].raddr; 3172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_SOCKADDR_SA_LEN 3182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sin6->sin6_len = sizeof(struct sockaddr_in6); 3192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 3202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sin6->sin6_family = AF_INET6; 32153f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&sin6->sin6_addr, &ip6->ip6_dst, sizeof(ip6->ip6_dst)); 3222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 3232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 3242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 3252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 3262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 32753f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&cookiecache[ninitiator].initiator, in, sizeof(*in)); 3282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ninitiator = (ninitiator + 1) % MAXINITIATORS; 3292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 3302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define cookie_isinitiator(x, y) cookie_sidecheck((x), (y), 1) 3322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define cookie_isresponder(x, y) cookie_sidecheck((x), (y), 0) 3332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic int 3342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectcookie_sidecheck(int i, const u_char *bp2, int initiator) 3352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 3362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct sockaddr_storage ss; 3372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct sockaddr *sa; 3382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct ip *ip; 3392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct sockaddr_in *sin; 3402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 3412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct ip6_hdr *ip6; 3422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct sockaddr_in6 *sin6; 3432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 3442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int salen; 3452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project memset(&ss, 0, sizeof(ss)); 3472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ip = (struct ip *)bp2; 3482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (IP_V(ip)) { 3492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 4: 3502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sin = (struct sockaddr_in *)&ss; 3512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_SOCKADDR_SA_LEN 3522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sin->sin_len = sizeof(struct sockaddr_in); 3532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 3542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sin->sin_family = AF_INET; 35553f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&sin->sin_addr, &ip->ip_src, sizeof(ip->ip_src)); 3562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 3572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 3582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 6: 3592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ip6 = (struct ip6_hdr *)bp2; 3602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sin6 = (struct sockaddr_in6 *)&ss; 3612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_SOCKADDR_SA_LEN 3622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sin6->sin6_len = sizeof(struct sockaddr_in6); 3632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 3642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sin6->sin6_family = AF_INET6; 36553f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&sin6->sin6_addr, &ip6->ip6_src, sizeof(ip6->ip6_src)); 3662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 3672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 3682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 3692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return 0; 3702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sa = (struct sockaddr *)&ss; 3732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (initiator) { 3742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (sa->sa_family != ((struct sockaddr *)&cookiecache[i].iaddr)->sa_family) 3752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return 0; 3762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_SOCKADDR_SA_LEN 3772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project salen = sa->sa_len; 3782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 3792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 3802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (sa->sa_family == AF_INET6) 3812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project salen = sizeof(struct sockaddr_in6); 3822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 3832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project salen = sizeof(struct sockaddr); 3842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 3852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project salen = sizeof(struct sockaddr); 3862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 3872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 3882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (memcmp(&ss, &cookiecache[i].iaddr, salen) == 0) 3892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return 1; 3902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 3912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (sa->sa_family != ((struct sockaddr *)&cookiecache[i].raddr)->sa_family) 3922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return 0; 3932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_SOCKADDR_SA_LEN 3942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project salen = sa->sa_len; 3952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 3962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 3972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (sa->sa_family == AF_INET6) 3982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project salen = sizeof(struct sockaddr_in6); 3992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 4002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project salen = sizeof(struct sockaddr); 4012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 4022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project salen = sizeof(struct sockaddr); 4032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 4042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 4052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (memcmp(&ss, &cookiecache[i].raddr, salen) == 0) 4062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return 1; 4072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return 0; 4092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 4102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 41153f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic void 41253f17a9db278d33517d9888dd77848f554522a38JP Abgrallhexprint(netdissect_options *ndo, caddr_t loc, size_t len) 4132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 41453f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_char *p; 4152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project size_t i; 4162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p = (u_char *)loc; 4182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < len; i++) 41953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"%02x", p[i] & 0xff)); 42053f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 42153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 42253f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic int 42353f17a9db278d33517d9888dd77848f554522a38JP Abgrallrawprint(netdissect_options *ndo, caddr_t loc, size_t len) 42453f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 42553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK2(*loc, len); 42653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 42753f17a9db278d33517d9888dd77848f554522a38JP Abgrall hexprint(ndo, loc, len); 42853f17a9db278d33517d9888dd77848f554522a38JP Abgrall return 1; 42953f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc: 43053f17a9db278d33517d9888dd77848f554522a38JP Abgrall return 0; 43153f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 43253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 43353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 43453f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 43553f17a9db278d33517d9888dd77848f554522a38JP Abgrall * returns false if we run out of data buffer 43653f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 43753f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic int ike_show_somedata(struct netdissect_options *ndo, 43853f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *cp, const u_char *ep) 43953f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 44053f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* there is too much data, just show some of it */ 44153f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *end = ep - 20; 44253f17a9db278d33517d9888dd77848f554522a38JP Abgrall int elen = 20; 44353f17a9db278d33517d9888dd77848f554522a38JP Abgrall int len = ep - cp; 44453f17a9db278d33517d9888dd77848f554522a38JP Abgrall if(len > 10) { 44553f17a9db278d33517d9888dd77848f554522a38JP Abgrall len = 10; 44653f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 44753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 44853f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* really shouldn't happen because of above */ 44953f17a9db278d33517d9888dd77848f554522a38JP Abgrall if(end < cp + len) { 45053f17a9db278d33517d9888dd77848f554522a38JP Abgrall end = cp+len; 45153f17a9db278d33517d9888dd77848f554522a38JP Abgrall elen = ep - end; 45253f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 45353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 45453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," data=(")); 45553f17a9db278d33517d9888dd77848f554522a38JP Abgrall if(!rawprint(ndo, (caddr_t)(cp), len)) goto trunc; 45653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, "...")); 45753f17a9db278d33517d9888dd77848f554522a38JP Abgrall if(elen) { 45853f17a9db278d33517d9888dd77848f554522a38JP Abgrall if(!rawprint(ndo, (caddr_t)(end), elen)) goto trunc; 45953f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 46053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,")")); 4612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return 1; 46253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 4632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 4642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return 0; 4652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 4662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct attrmap { 4682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *type; 4692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int nvalue; 4702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *value[30]; /*XXX*/ 4712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 4722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const u_char * 47453f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev1_attrmap_print(netdissect_options *ndo, 47553f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *p, const u_char *ep, 47653f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct attrmap *map, size_t nmap) 4772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 4782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int totlen; 4792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t t, v; 4802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (p[0] & 0x80) 4822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project totlen = 4; 4832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 48453f17a9db278d33517d9888dd77848f554522a38JP Abgrall totlen = 4 + EXTRACT_16BITS(&p[2]); 4852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (ep < p + totlen) { 48653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"[|attr]")); 4872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return ep + 1; 4882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 49053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"(")); 49153f17a9db278d33517d9888dd77848f554522a38JP Abgrall t = EXTRACT_16BITS(&p[0]) & 0x7fff; 4922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (map && t < nmap && map[t].type) 49353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"type=%s ", map[t].type)); 4942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 49553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"type=#%d ", t)); 4962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (p[0] & 0x80) { 49753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"value=")); 49853f17a9db278d33517d9888dd77848f554522a38JP Abgrall v = EXTRACT_16BITS(&p[2]); 4992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (map && t < nmap && v < map[t].nvalue && map[t].value[v]) 50053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"%s", map[t].value[v])); 5012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 50253f17a9db278d33517d9888dd77848f554522a38JP Abgrall rawprint(ndo, (caddr_t)&p[2], 2); 5032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 50453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"len=%d value=", EXTRACT_16BITS(&p[2]))); 50553f17a9db278d33517d9888dd77848f554522a38JP Abgrall rawprint(ndo, (caddr_t)&p[4], EXTRACT_16BITS(&p[2])); 5062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 50753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,")")); 5082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return p + totlen; 5092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 5102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const u_char * 51253f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev1_attr_print(netdissect_options *ndo, const u_char *p, const u_char *ep) 5132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 5142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int totlen; 5152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t t; 5162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (p[0] & 0x80) 5182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project totlen = 4; 5192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 52053f17a9db278d33517d9888dd77848f554522a38JP Abgrall totlen = 4 + EXTRACT_16BITS(&p[2]); 5212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (ep < p + totlen) { 52253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"[|attr]")); 5232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return ep + 1; 5242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 5252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 52653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"(")); 52753f17a9db278d33517d9888dd77848f554522a38JP Abgrall t = EXTRACT_16BITS(&p[0]) & 0x7fff; 52853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"type=#%d ", t)); 5292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (p[0] & 0x80) { 53053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"value=")); 53153f17a9db278d33517d9888dd77848f554522a38JP Abgrall t = p[2]; 53253f17a9db278d33517d9888dd77848f554522a38JP Abgrall rawprint(ndo, (caddr_t)&p[2], 2); 5332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 53453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"len=%d value=", EXTRACT_16BITS(&p[2]))); 53553f17a9db278d33517d9888dd77848f554522a38JP Abgrall rawprint(ndo, (caddr_t)&p[4], EXTRACT_16BITS(&p[2])); 5362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 53753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,")")); 5382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return p + totlen; 5392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 5402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const u_char * 54253f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev1_sa_print(netdissect_options *ndo, u_char tpay _U_, 54353f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, 5442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int item_len _U_, 5452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *ep, u_int32_t phase, u_int32_t doi0 _U_, 5462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t proto0, int depth) 5472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 54853f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct ikev1_pl_sa *p; 54953f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct ikev1_pl_sa sa; 5502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t doi, sit, ident; 5512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *cp, *np; 5522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int t; 5532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 55453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"%s:", NPSTR(ISAKMP_NPTYPE_SA))); 5552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 55653f17a9db278d33517d9888dd77848f554522a38JP Abgrall p = (struct ikev1_pl_sa *)ext; 55753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*p); 55853f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&sa, ext, sizeof(sa)); 5592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project doi = ntohl(sa.doi); 5602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sit = ntohl(sa.sit); 5612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (doi != 1) { 56253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," doi=%d", doi)); 56353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," situation=%u", (u_int32_t)ntohl(sa.sit))); 5642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (u_char *)(p + 1); 5652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 5662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 56753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," doi=ipsec")); 56853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," situation=")); 5692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project t = 0; 5702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (sit & 0x01) { 57153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"identity")); 5722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project t++; 5732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 5742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (sit & 0x02) { 57553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"%ssecrecy", t ? "+" : "")); 5762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project t++; 5772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 5782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (sit & 0x04) 57953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"%sintegrity", t ? "+" : "")); 5802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project np = (u_char *)ext + sizeof(sa); 5822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (sit != 0x01) { 58353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK2(*(ext + 1), sizeof(ident)); 58453f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&ident, ext + 1, sizeof(ident)); 58553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," ident=%u", (u_int32_t)ntohl(ident))); 5862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project np += sizeof(ident); 5872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 5882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ext = (struct isakmp_gen *)np; 59053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ext); 5912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 59253f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = ikev1_sub_print(ndo, ISAKMP_NPTYPE_P, ext, ep, phase, doi, proto0, 5932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project depth); 5942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return cp; 5962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 59753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(ISAKMP_NPTYPE_SA))); 5982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 5992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 6002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const u_char * 60253f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev1_p_print(netdissect_options *ndo, u_char tpay _U_, 60353f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, u_int item_len _U_, 6042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *ep, u_int32_t phase, u_int32_t doi0, 6052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t proto0 _U_, int depth) 6062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 60753f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct ikev1_pl_p *p; 60853f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct ikev1_pl_p prop; 6092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *cp; 6102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 61153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"%s:", NPSTR(ISAKMP_NPTYPE_P))); 6122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 61353f17a9db278d33517d9888dd77848f554522a38JP Abgrall p = (struct ikev1_pl_p *)ext; 61453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*p); 61553f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&prop, ext, sizeof(prop)); 61653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," #%d protoid=%s transform=%d", 61753f17a9db278d33517d9888dd77848f554522a38JP Abgrall prop.p_no, PROTOIDSTR(prop.prot_id), prop.num_t)); 6182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (prop.spi_size) { 61953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," spi=")); 62053f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)(p + 1), prop.spi_size)) 6212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 6222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 6232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ext = (struct isakmp_gen *)((u_char *)(p + 1) + prop.spi_size); 62553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ext); 62653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 62753f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = ikev1_sub_print(ndo, ISAKMP_NPTYPE_T, ext, ep, phase, doi0, 62853f17a9db278d33517d9888dd77848f554522a38JP Abgrall prop.prot_id, depth); 62953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 6302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return cp; 6312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 63253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(ISAKMP_NPTYPE_P))); 6332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 6342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 6352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 63653f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const char *ikev1_p_map[] = { 6372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, "ike", 6382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 6392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 64053f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const char *ikev2_t_type_map[]={ 64153f17a9db278d33517d9888dd77848f554522a38JP Abgrall NULL, "encr", "prf", "integ", "dh", "esn" 64253f17a9db278d33517d9888dd77848f554522a38JP Abgrall}; 64353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 6442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char *ah_p_map[] = { 6452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, "(reserved)", "md5", "sha", "1des", 6462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "sha2-256", "sha2-384", "sha2-512", 6472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 6482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 64953f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const char *prf_p_map[] = { 65053f17a9db278d33517d9888dd77848f554522a38JP Abgrall NULL, "hmac-md5", "hmac-sha", "hmac-tiger", 65153f17a9db278d33517d9888dd77848f554522a38JP Abgrall "aes128_xcbc" 65253f17a9db278d33517d9888dd77848f554522a38JP Abgrall}; 65353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 65453f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const char *integ_p_map[] = { 65553f17a9db278d33517d9888dd77848f554522a38JP Abgrall NULL, "hmac-md5", "hmac-sha", "dec-mac", 65653f17a9db278d33517d9888dd77848f554522a38JP Abgrall "kpdk-md5", "aes-xcbc" 65753f17a9db278d33517d9888dd77848f554522a38JP Abgrall}; 65853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 65953f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const char *esn_p_map[] = { 66053f17a9db278d33517d9888dd77848f554522a38JP Abgrall "no-esn", "esn" 66153f17a9db278d33517d9888dd77848f554522a38JP Abgrall}; 66253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 66353f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const char *dh_p_map[] = { 66453f17a9db278d33517d9888dd77848f554522a38JP Abgrall NULL, "modp768", 66553f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp1024", /* group 2 */ 66653f17a9db278d33517d9888dd77848f554522a38JP Abgrall "EC2N 2^155", /* group 3 */ 66753f17a9db278d33517d9888dd77848f554522a38JP Abgrall "EC2N 2^185", /* group 4 */ 66853f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp1536", /* group 5 */ 66953f17a9db278d33517d9888dd77848f554522a38JP Abgrall "iana-grp06", "iana-grp07", /* reserved */ 67053f17a9db278d33517d9888dd77848f554522a38JP Abgrall "iana-grp08", "iana-grp09", 67153f17a9db278d33517d9888dd77848f554522a38JP Abgrall "iana-grp10", "iana-grp11", 67253f17a9db278d33517d9888dd77848f554522a38JP Abgrall "iana-grp12", "iana-grp13", 67353f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp2048", /* group 14 */ 67453f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp3072", /* group 15 */ 67553f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp4096", /* group 16 */ 67653f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp6144", /* group 17 */ 67753f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp8192", /* group 18 */ 67853f17a9db278d33517d9888dd77848f554522a38JP Abgrall}; 67953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 6802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char *esp_p_map[] = { 6812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, "1des-iv64", "1des", "3des", "rc5", "idea", "cast", 6822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "blowfish", "3idea", "1des-iv32", "rc4", "null", "aes" 6832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 6842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char *ipcomp_p_map[] = { 6862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, "oui", "deflate", "lzs", 6872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 6882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectconst struct attrmap ipsec_t_map[] = { 6902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, 0, { NULL } }, 6912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "lifetype", 3, { NULL, "sec", "kb", }, }, 6922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "life", 0, { NULL } }, 69353f17a9db278d33517d9888dd77848f554522a38JP Abgrall { "group desc", 18, { NULL, "modp768", 69453f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp1024", /* group 2 */ 69553f17a9db278d33517d9888dd77848f554522a38JP Abgrall "EC2N 2^155", /* group 3 */ 69653f17a9db278d33517d9888dd77848f554522a38JP Abgrall "EC2N 2^185", /* group 4 */ 69753f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp1536", /* group 5 */ 69853f17a9db278d33517d9888dd77848f554522a38JP Abgrall "iana-grp06", "iana-grp07", /* reserved */ 69953f17a9db278d33517d9888dd77848f554522a38JP Abgrall "iana-grp08", "iana-grp09", 70053f17a9db278d33517d9888dd77848f554522a38JP Abgrall "iana-grp10", "iana-grp11", 70153f17a9db278d33517d9888dd77848f554522a38JP Abgrall "iana-grp12", "iana-grp13", 70253f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp2048", /* group 14 */ 70353f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp3072", /* group 15 */ 70453f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp4096", /* group 16 */ 70553f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp6144", /* group 17 */ 70653f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp8192", /* group 18 */ 70753f17a9db278d33517d9888dd77848f554522a38JP Abgrall }, }, 7082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "enc mode", 3, { NULL, "tunnel", "transport", }, }, 7092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "auth", 5, { NULL, "hmac-md5", "hmac-sha1", "1des-mac", "keyed", }, }, 7102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "keylen", 0, { NULL } }, 7112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "rounds", 0, { NULL } }, 7122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "dictsize", 0, { NULL } }, 7132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "privalg", 0, { NULL } }, 7142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 7152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 71653f17a9db278d33517d9888dd77848f554522a38JP Abgrallconst struct attrmap encr_t_map[] = { 71753f17a9db278d33517d9888dd77848f554522a38JP Abgrall { NULL, 0, { NULL } }, { NULL, 0, { NULL } }, /* 0, 1 */ 71853f17a9db278d33517d9888dd77848f554522a38JP Abgrall { NULL, 0, { NULL } }, { NULL, 0, { NULL } }, /* 2, 3 */ 71953f17a9db278d33517d9888dd77848f554522a38JP Abgrall { NULL, 0, { NULL } }, { NULL, 0, { NULL } }, /* 4, 5 */ 72053f17a9db278d33517d9888dd77848f554522a38JP Abgrall { NULL, 0, { NULL } }, { NULL, 0, { NULL } }, /* 6, 7 */ 72153f17a9db278d33517d9888dd77848f554522a38JP Abgrall { NULL, 0, { NULL } }, { NULL, 0, { NULL } }, /* 8, 9 */ 72253f17a9db278d33517d9888dd77848f554522a38JP Abgrall { NULL, 0, { NULL } }, { NULL, 0, { NULL } }, /* 10,11*/ 72353f17a9db278d33517d9888dd77848f554522a38JP Abgrall { NULL, 0, { NULL } }, { NULL, 0, { NULL } }, /* 12,13*/ 72453f17a9db278d33517d9888dd77848f554522a38JP Abgrall { "keylen", 14, { NULL }}, 72553f17a9db278d33517d9888dd77848f554522a38JP Abgrall}; 72653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 7272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectconst struct attrmap oakley_t_map[] = { 7282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, 0, { NULL } }, 7292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "enc", 8, { NULL, "1des", "idea", "blowfish", "rc5", 7302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "3des", "cast", "aes", }, }, 7312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "hash", 7, { NULL, "md5", "sha1", "tiger", 7322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "sha2-256", "sha2-384", "sha2-512", }, }, 7332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "auth", 6, { NULL, "preshared", "dss", "rsa sig", "rsa enc", 7342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "rsa enc revised", }, }, 73553f17a9db278d33517d9888dd77848f554522a38JP Abgrall { "group desc", 18, { NULL, "modp768", 73653f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp1024", /* group 2 */ 73753f17a9db278d33517d9888dd77848f554522a38JP Abgrall "EC2N 2^155", /* group 3 */ 73853f17a9db278d33517d9888dd77848f554522a38JP Abgrall "EC2N 2^185", /* group 4 */ 73953f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp1536", /* group 5 */ 74053f17a9db278d33517d9888dd77848f554522a38JP Abgrall "iana-grp06", "iana-grp07", /* reserved */ 74153f17a9db278d33517d9888dd77848f554522a38JP Abgrall "iana-grp08", "iana-grp09", 74253f17a9db278d33517d9888dd77848f554522a38JP Abgrall "iana-grp10", "iana-grp11", 74353f17a9db278d33517d9888dd77848f554522a38JP Abgrall "iana-grp12", "iana-grp13", 74453f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp2048", /* group 14 */ 74553f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp3072", /* group 15 */ 74653f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp4096", /* group 16 */ 74753f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp6144", /* group 17 */ 74853f17a9db278d33517d9888dd77848f554522a38JP Abgrall "modp8192", /* group 18 */ 74953f17a9db278d33517d9888dd77848f554522a38JP Abgrall }, }, 7502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "group type", 4, { NULL, "MODP", "ECP", "EC2N", }, }, 7512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "group prime", 0, { NULL } }, 7522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "group gen1", 0, { NULL } }, 7532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "group gen2", 0, { NULL } }, 7542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "group curve A", 0, { NULL } }, 7552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "group curve B", 0, { NULL } }, 7562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "lifetype", 3, { NULL, "sec", "kb", }, }, 7572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "lifeduration", 0, { NULL } }, 7582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "prf", 0, { NULL } }, 7592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "keylen", 0, { NULL } }, 7602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "field", 0, { NULL } }, 7612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "order", 0, { NULL } }, 7622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 7632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const u_char * 76553f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev1_t_print(netdissect_options *ndo, u_char tpay _U_, 76653f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, u_int item_len, 76753f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *ep, u_int32_t phase _U_, u_int32_t doi _U_, 76853f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto, int depth _U_) 7692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 77053f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct ikev1_pl_t *p; 77153f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct ikev1_pl_t t; 7722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *cp; 7732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *idstr; 7742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const struct attrmap *map; 7752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project size_t nmap; 7762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *ep2; 7772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 77853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"%s:", NPSTR(ISAKMP_NPTYPE_T))); 7792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 78053f17a9db278d33517d9888dd77848f554522a38JP Abgrall p = (struct ikev1_pl_t *)ext; 78153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*p); 78253f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&t, ext, sizeof(t)); 7832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (proto) { 7852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 1: 78653f17a9db278d33517d9888dd77848f554522a38JP Abgrall idstr = STR_OR_ID(t.t_id, ikev1_p_map); 7872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project map = oakley_t_map; 7882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project nmap = sizeof(oakley_t_map)/sizeof(oakley_t_map[0]); 7892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 7902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 2: 7912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project idstr = STR_OR_ID(t.t_id, ah_p_map); 7922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project map = ipsec_t_map; 7932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project nmap = sizeof(ipsec_t_map)/sizeof(ipsec_t_map[0]); 7942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 7952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 3: 7962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project idstr = STR_OR_ID(t.t_id, esp_p_map); 7972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project map = ipsec_t_map; 7982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project nmap = sizeof(ipsec_t_map)/sizeof(ipsec_t_map[0]); 7992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 8002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 4: 8012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project idstr = STR_OR_ID(t.t_id, ipcomp_p_map); 8022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project map = ipsec_t_map; 8032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project nmap = sizeof(ipsec_t_map)/sizeof(ipsec_t_map[0]); 8042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 8052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 8062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project idstr = NULL; 8072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project map = NULL; 8082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project nmap = 0; 8092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 8102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 8112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (idstr) 81353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," #%d id=%s ", t.t_no, idstr)); 8142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 81553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," #%d id=%d ", t.t_no, t.t_id)); 8162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project cp = (u_char *)(p + 1); 8172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ep2 = (u_char *)p + item_len; 8182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while (cp < ep && cp < ep2) { 8192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (map && nmap) { 82053f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = ikev1_attrmap_print(ndo, cp, (ep < ep2) ? ep : ep2, 8212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project map, nmap); 8222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else 82353f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = ikev1_attr_print(ndo, cp, (ep < ep2) ? ep : ep2); 8242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 8252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (ep < ep2) 82653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"...")); 8272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return cp; 8282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 82953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(ISAKMP_NPTYPE_T))); 8302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 8312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 8322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const u_char * 83453f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev1_ke_print(netdissect_options *ndo, u_char tpay _U_, 83553f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, u_int item_len _U_, 83653f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *ep _U_, u_int32_t phase _U_, u_int32_t doi _U_, 83753f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto _U_, int depth _U_) 8382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 8392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct isakmp_gen e; 8402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 84153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"%s:", NPSTR(ISAKMP_NPTYPE_KE))); 8422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 84353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ext); 84453f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&e, ext, sizeof(e)); 84553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," key len=%d", ntohs(e.len) - 4)); 84653f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (2 < ndo->ndo_vflag && 4 < ntohs(e.len)) { 84753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," ")); 84853f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)(ext + 1), ntohs(e.len) - 4)) 8492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 8502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 8512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (u_char *)ext + ntohs(e.len); 8522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 85353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(ISAKMP_NPTYPE_KE))); 8542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 8552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 8562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const u_char * 85853f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev1_id_print(netdissect_options *ndo, u_char tpay _U_, 85953f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, u_int item_len _U_, 86053f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *ep _U_, u_int32_t phase, u_int32_t doi _U_, 86153f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto _U_, int depth _U_) 8622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 8632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define USE_IPSECDOI_IN_PHASE1 1 86453f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct ikev1_pl_id *p; 86553f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct ikev1_pl_id id; 8662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project static const char *idtypestr[] = { 8672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "IPv4", "IPv4net", "IPv6", "IPv6net", 8682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project }; 8692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project static const char *ipsecidtypestr[] = { 8702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, "IPv4", "FQDN", "user FQDN", "IPv4net", "IPv6", 8712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "IPv6net", "IPv4range", "IPv6range", "ASN1 DN", "ASN1 GN", 8722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "keyid", 8732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project }; 8742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int len; 8752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *data; 8762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 87753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"%s:", NPSTR(ISAKMP_NPTYPE_ID))); 8782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 87953f17a9db278d33517d9888dd77848f554522a38JP Abgrall p = (struct ikev1_pl_id *)ext; 88053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*p); 88153f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&id, ext, sizeof(id)); 8822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (sizeof(*p) < item_len) { 8832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = (u_char *)(p + 1); 8842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project len = item_len - sizeof(*p); 8852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 8862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = NULL; 8872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project len = 0; 8882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 8892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#if 0 /*debug*/ 89153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [phase=%d doi=%d proto=%d]", phase, doi, proto)); 8922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 8932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (phase) { 8942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef USE_IPSECDOI_IN_PHASE1 8952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 1: 8962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 8972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 89853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," idtype=%s", STR_OR_ID(id.d.id_type, idtypestr))); 89953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," doi_data=%u", 90053f17a9db278d33517d9888dd77848f554522a38JP Abgrall (u_int32_t)(ntohl(id.d.doi_data) & 0xffffff))); 9012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef USE_IPSECDOI_IN_PHASE1 9042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 1: 9052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 9062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 2: 9072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 9082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const struct ipsecdoi_id *p; 9092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct ipsecdoi_id id; 9102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct protoent *pe; 9112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p = (struct ipsecdoi_id *)ext; 91353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*p); 91453f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&id, ext, sizeof(id)); 91553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," idtype=%s", STR_OR_ID(id.type, ipsecidtypestr))); 9162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (id.proto_id) { 9172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef WIN32 91853f17a9db278d33517d9888dd77848f554522a38JP Abgrall setprotoent(1); 9192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* WIN32 */ 9202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project pe = getprotobynumber(id.proto_id); 9212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (pe) 92253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," protoid=%s", pe->p_name)); 9232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef WIN32 92453f17a9db278d33517d9888dd77848f554522a38JP Abgrall endprotoent(); 9252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* WIN32 */ 9262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 9272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* it DOES NOT mean IPPROTO_IP! */ 92853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," protoid=%s", "0")); 9292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 93053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," port=%d", ntohs(id.port))); 9312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!len) 9322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (data == NULL) 9342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 93553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK2(*data, len); 9362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (id.type) { 9372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case IPSECDOI_ID_IPV4_ADDR: 9382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (len < 4) 93953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d [bad: < 4]", len)); 9402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 94153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d %s", len, ipaddr_string(data))); 9422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project len = 0; 9432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case IPSECDOI_ID_FQDN: 9452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case IPSECDOI_ID_USER_FQDN: 9462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 9472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int i; 94853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d ", len)); 9492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < len; i++) 9502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project safeputchar(data[i]); 9512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project len = 0; 9522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 9542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case IPSECDOI_ID_IPV4_ADDR_SUBNET: 9552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 9562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *mask; 9572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (len < 8) 95853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d [bad: < 8]", len)); 9592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else { 9602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project mask = data + sizeof(struct in_addr); 96153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d %s/%u.%u.%u.%u", len, 96253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ipaddr_string(data), 96353f17a9db278d33517d9888dd77848f554522a38JP Abgrall mask[0], mask[1], mask[2], mask[3])); 9642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 9652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project len = 0; 9662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 9682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 9692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case IPSECDOI_ID_IPV6_ADDR: 9702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (len < 16) 97153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d [bad: < 16]", len)); 9722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 97353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d %s", len, ip6addr_string(data))); 9742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project len = 0; 9752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case IPSECDOI_ID_IPV6_ADDR_SUBNET: 9772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 97853f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *mask; 9792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (len < 20) 98053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d [bad: < 20]", len)); 9812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else { 98253f17a9db278d33517d9888dd77848f554522a38JP Abgrall mask = (u_char *)(data + sizeof(struct in6_addr)); 9832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /*XXX*/ 98453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d %s/0x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", len, 98553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ip6addr_string(data), 98653f17a9db278d33517d9888dd77848f554522a38JP Abgrall mask[0], mask[1], mask[2], mask[3], 98753f17a9db278d33517d9888dd77848f554522a38JP Abgrall mask[4], mask[5], mask[6], mask[7], 98853f17a9db278d33517d9888dd77848f554522a38JP Abgrall mask[8], mask[9], mask[10], mask[11], 98953f17a9db278d33517d9888dd77848f554522a38JP Abgrall mask[12], mask[13], mask[14], mask[15])); 9902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 9912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project len = 0; 9922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 9942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /*INET6*/ 9952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case IPSECDOI_ID_IPV4_ADDR_RANGE: 9962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (len < 8) 99753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d [bad: < 8]", len)); 9982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else { 99953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d %s-%s", len, 100053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ipaddr_string(data), 100153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ipaddr_string(data + sizeof(struct in_addr)))); 10022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 10032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project len = 0; 10042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 10062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case IPSECDOI_ID_IPV6_ADDR_RANGE: 10072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (len < 32) 100853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d [bad: < 32]", len)); 10092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else { 101053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d %s-%s", len, 101153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ip6addr_string(data), 101253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ip6addr_string(data + sizeof(struct in6_addr)))); 10132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 10142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project len = 0; 10152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /*INET6*/ 10172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case IPSECDOI_ID_DER_ASN1_DN: 10182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case IPSECDOI_ID_DER_ASN1_GN: 10192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case IPSECDOI_ID_KEY_ID: 10202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 10222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 10242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 10252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (data && len) { 102653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d", len)); 102753f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (2 < ndo->ndo_vflag) { 102853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," ")); 102953f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)data, len)) 10302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 10312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 10322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 10332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (u_char *)ext + item_len; 10342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 103553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(ISAKMP_NPTYPE_ID))); 10362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 10372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 10382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const u_char * 104053f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev1_cert_print(netdissect_options *ndo, u_char tpay _U_, 104153f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, u_int item_len _U_, 104253f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *ep _U_, u_int32_t phase _U_, 104353f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t doi0 _U_, 104453f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto0 _U_, int depth _U_) 10452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 104653f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct ikev1_pl_cert *p; 104753f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct ikev1_pl_cert cert; 10482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project static const char *certstr[] = { 10492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "none", "pkcs7", "pgp", "dns", 10502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "x509sign", "x509ke", "kerberos", "crl", 10512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "arl", "spki", "x509attr", 10522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project }; 10532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 105453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"%s:", NPSTR(ISAKMP_NPTYPE_CERT))); 10552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 105653f17a9db278d33517d9888dd77848f554522a38JP Abgrall p = (struct ikev1_pl_cert *)ext; 105753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*p); 105853f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&cert, ext, sizeof(cert)); 105953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d", item_len - 4)); 106053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," type=%s", STR_OR_ID((cert.encode), certstr))); 106153f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (2 < ndo->ndo_vflag && 4 < item_len) { 106253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," ")); 106353f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)(ext + 1), item_len - 4)) 10642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 10652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 10662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (u_char *)ext + item_len; 10672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 106853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(ISAKMP_NPTYPE_CERT))); 10692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 10702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 10712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const u_char * 107353f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev1_cr_print(netdissect_options *ndo, u_char tpay _U_, 107453f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, u_int item_len _U_, 107553f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *ep _U_, u_int32_t phase _U_, u_int32_t doi0 _U_, 107653f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto0 _U_, int depth _U_) 10772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 107853f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct ikev1_pl_cert *p; 107953f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct ikev1_pl_cert cert; 10802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project static const char *certstr[] = { 10812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "none", "pkcs7", "pgp", "dns", 10822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "x509sign", "x509ke", "kerberos", "crl", 10832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "arl", "spki", "x509attr", 10842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project }; 10852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 108653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"%s:", NPSTR(ISAKMP_NPTYPE_CR))); 10872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 108853f17a9db278d33517d9888dd77848f554522a38JP Abgrall p = (struct ikev1_pl_cert *)ext; 108953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*p); 109053f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&cert, ext, sizeof(cert)); 109153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d", item_len - 4)); 109253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," type=%s", STR_OR_ID((cert.encode), certstr))); 109353f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (2 < ndo->ndo_vflag && 4 < item_len) { 109453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," ")); 109553f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)(ext + 1), item_len - 4)) 10962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 10972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 10982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (u_char *)ext + item_len; 10992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 110053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(ISAKMP_NPTYPE_CR))); 11012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 11022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 11032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const u_char * 110553f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev1_hash_print(netdissect_options *ndo, u_char tpay _U_, 110653f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, u_int item_len _U_, 110753f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *ep _U_, u_int32_t phase _U_, u_int32_t doi _U_, 110853f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto _U_, int depth _U_) 11092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 11102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct isakmp_gen e; 11112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 111253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"%s:", NPSTR(ISAKMP_NPTYPE_HASH))); 11132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 111453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ext); 111553f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&e, ext, sizeof(e)); 111653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d", ntohs(e.len) - 4)); 111753f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (2 < ndo->ndo_vflag && 4 < ntohs(e.len)) { 111853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," ")); 111953f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)(ext + 1), ntohs(e.len) - 4)) 11202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 11212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 11222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (u_char *)ext + ntohs(e.len); 11232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 112453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(ISAKMP_NPTYPE_HASH))); 11252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 11262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 11272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const u_char * 112953f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev1_sig_print(netdissect_options *ndo, u_char tpay _U_, 113053f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, u_int item_len _U_, 113153f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *ep _U_, u_int32_t phase _U_, u_int32_t doi _U_, 113253f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto _U_, int depth _U_) 11332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 11342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct isakmp_gen e; 11352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 113653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"%s:", NPSTR(ISAKMP_NPTYPE_SIG))); 11372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 113853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ext); 113953f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&e, ext, sizeof(e)); 114053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d", ntohs(e.len) - 4)); 114153f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (2 < ndo->ndo_vflag && 4 < ntohs(e.len)) { 114253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," ")); 114353f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)(ext + 1), ntohs(e.len) - 4)) 11442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 11452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 11462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (u_char *)ext + ntohs(e.len); 11472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 114853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(ISAKMP_NPTYPE_SIG))); 11492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 11502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 11512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const u_char * 115353f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev1_nonce_print(netdissect_options *ndo, u_char tpay _U_, 115453f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, 115553f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len _U_, 115653f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *ep _U_, 115753f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase _U_, u_int32_t doi _U_, 115853f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto _U_, int depth _U_) 11592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 11602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct isakmp_gen e; 11612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 116253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"%s:", NPSTR(ISAKMP_NPTYPE_NONCE))); 11632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 116453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ext); 116553f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&e, ext, sizeof(e)); 116653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," n len=%d", ntohs(e.len) - 4)); 116753f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (2 < ndo->ndo_vflag && 4 < ntohs(e.len)) { 116853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," ")); 116953f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)(ext + 1), ntohs(e.len) - 4)) 117053f17a9db278d33517d9888dd77848f554522a38JP Abgrall goto trunc; 117153f17a9db278d33517d9888dd77848f554522a38JP Abgrall } else if (1 < ndo->ndo_vflag && 4 < ntohs(e.len)) { 117253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," ")); 117353f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!ike_show_somedata(ndo, (u_char *)(caddr_t)(ext + 1), ep)) 11742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 11752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 11762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (u_char *)ext + ntohs(e.len); 11772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 117853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(ISAKMP_NPTYPE_NONCE))); 11792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 11802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 11812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const u_char * 118353f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev1_n_print(netdissect_options *ndo, u_char tpay _U_, 118453f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, u_int item_len, 118553f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *ep, u_int32_t phase, u_int32_t doi0 _U_, 118653f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto0 _U_, int depth) 11872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 118853f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct ikev1_pl_n *p, n; 11892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *cp; 11902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_char *ep2; 11912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t doi; 11922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t proto; 11932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project static const char *notify_error_str[] = { 11942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, "INVALID-PAYLOAD-TYPE", 11952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "DOI-NOT-SUPPORTED", "SITUATION-NOT-SUPPORTED", 11962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "INVALID-COOKIE", "INVALID-MAJOR-VERSION", 11972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "INVALID-MINOR-VERSION", "INVALID-EXCHANGE-TYPE", 11982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "INVALID-FLAGS", "INVALID-MESSAGE-ID", 11992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "INVALID-PROTOCOL-ID", "INVALID-SPI", 12002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "INVALID-TRANSFORM-ID", "ATTRIBUTES-NOT-SUPPORTED", 12012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "NO-PROPOSAL-CHOSEN", "BAD-PROPOSAL-SYNTAX", 12022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "PAYLOAD-MALFORMED", "INVALID-KEY-INFORMATION", 12032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "INVALID-ID-INFORMATION", "INVALID-CERT-ENCODING", 12042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "INVALID-CERTIFICATE", "CERT-TYPE-UNSUPPORTED", 12052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "INVALID-CERT-AUTHORITY", "INVALID-HASH-INFORMATION", 12062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "AUTHENTICATION-FAILED", "INVALID-SIGNATURE", 12072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "ADDRESS-NOTIFICATION", "NOTIFY-SA-LIFETIME", 12082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "CERTIFICATE-UNAVAILABLE", "UNSUPPORTED-EXCHANGE-TYPE", 12092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "UNEQUAL-PAYLOAD-LENGTHS", 12102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project }; 12112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project static const char *ipsec_notify_error_str[] = { 12122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "RESERVED", 12132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project }; 12142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project static const char *notify_status_str[] = { 12152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "CONNECTED", 12162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project }; 12172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project static const char *ipsec_notify_status_str[] = { 12182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "RESPONDER-LIFETIME", "REPLAY-STATUS", 12192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "INITIAL-CONTACT", 12202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project }; 12212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* NOTE: these macro must be called with x in proper range */ 12222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 0 - 8191 */ 12242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define NOTIFY_ERROR_STR(x) \ 12252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STR_OR_ID((x), notify_error_str) 12262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 8192 - 16383 */ 12282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPSEC_NOTIFY_ERROR_STR(x) \ 12292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STR_OR_ID((u_int)((x) - 8192), ipsec_notify_error_str) 12302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 16384 - 24575 */ 12322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define NOTIFY_STATUS_STR(x) \ 12332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STR_OR_ID((u_int)((x) - 16384), notify_status_str) 12342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 24576 - 32767 */ 12362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define IPSEC_NOTIFY_STATUS_STR(x) \ 12372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project STR_OR_ID((u_int)((x) - 24576), ipsec_notify_status_str) 12382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 123953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"%s:", NPSTR(ISAKMP_NPTYPE_N))); 12402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 124153f17a9db278d33517d9888dd77848f554522a38JP Abgrall p = (struct ikev1_pl_n *)ext; 124253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*p); 124353f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&n, ext, sizeof(n)); 12442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project doi = ntohl(n.doi); 12452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project proto = n.prot_id; 12462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (doi != 1) { 124753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," doi=%d", doi)); 124853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," proto=%d", proto)); 12492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (ntohs(n.type) < 8192) 125053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," type=%s", NOTIFY_ERROR_STR(ntohs(n.type)))); 12512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else if (ntohs(n.type) < 16384) 125253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," type=%s", numstr(ntohs(n.type)))); 12532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else if (ntohs(n.type) < 24576) 125453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," type=%s", NOTIFY_STATUS_STR(ntohs(n.type)))); 12552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 125653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," type=%s", numstr(ntohs(n.type)))); 12572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (n.spi_size) { 125853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," spi=")); 125953f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)(p + 1), n.spi_size)) 12602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 12612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (u_char *)(p + 1) + n.spi_size; 12632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 126553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," doi=ipsec")); 126653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," proto=%s", PROTOIDSTR(proto))); 12672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (ntohs(n.type) < 8192) 126853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," type=%s", NOTIFY_ERROR_STR(ntohs(n.type)))); 12692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else if (ntohs(n.type) < 16384) 127053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," type=%s", IPSEC_NOTIFY_ERROR_STR(ntohs(n.type)))); 12712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else if (ntohs(n.type) < 24576) 127253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," type=%s", NOTIFY_STATUS_STR(ntohs(n.type)))); 12732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else if (ntohs(n.type) < 32768) 127453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," type=%s", IPSEC_NOTIFY_STATUS_STR(ntohs(n.type)))); 12752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 127653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," type=%s", numstr(ntohs(n.type)))); 12772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (n.spi_size) { 127853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," spi=")); 127953f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)(p + 1), n.spi_size)) 12802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 12812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project cp = (u_char *)(p + 1) + n.spi_size; 12842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ep2 = (u_char *)p + item_len; 12852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (cp < ep) { 128753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," orig=(")); 12882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (ntohs(n.type)) { 12892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case IPSECDOI_NTYPE_RESPONDER_LIFETIME: 12902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 12912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const struct attrmap *map = oakley_t_map; 12922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project size_t nmap = sizeof(oakley_t_map)/sizeof(oakley_t_map[0]); 12932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while (cp < ep && cp < ep2) { 129453f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = ikev1_attrmap_print(ndo, cp, 12952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (ep < ep2) ? ep : ep2, map, nmap); 12962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 12982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case IPSECDOI_NTYPE_REPLAY_STATUS: 130053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"replay detection %sabled", 130153f17a9db278d33517d9888dd77848f554522a38JP Abgrall EXTRACT_32BITS(cp) ? "en" : "dis")); 13022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 13032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case ISAKMP_NTYPE_NO_PROPOSAL_CHOSEN: 130453f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (ikev1_sub_print(ndo, ISAKMP_NPTYPE_SA, 130553f17a9db278d33517d9888dd77848f554522a38JP Abgrall (struct isakmp_gen *)cp, ep, phase, doi, proto, 130653f17a9db278d33517d9888dd77848f554522a38JP Abgrall depth) == NULL) 13072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 13082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 13092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 13102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* NULL is dummy */ 131153f17a9db278d33517d9888dd77848f554522a38JP Abgrall isakmp_print(ndo, cp, 13122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project item_len - sizeof(*p) - n.spi_size, 13132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL); 13142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 131553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,")")); 13162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 13172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (u_char *)ext + item_len; 13182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 131953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(ISAKMP_NPTYPE_N))); 13202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 13212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 13222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 13232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const u_char * 132453f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev1_d_print(netdissect_options *ndo, u_char tpay _U_, 132553f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, u_int item_len _U_, 132653f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *ep _U_, u_int32_t phase _U_, u_int32_t doi0 _U_, 132753f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto0 _U_, int depth _U_) 13282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 132953f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct ikev1_pl_d *p; 133053f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct ikev1_pl_d d; 13312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_int8_t *q; 13322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t doi; 13332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t proto; 13342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int i; 13352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 133653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"%s:", NPSTR(ISAKMP_NPTYPE_D))); 13372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 133853f17a9db278d33517d9888dd77848f554522a38JP Abgrall p = (struct ikev1_pl_d *)ext; 133953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*p); 134053f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&d, ext, sizeof(d)); 13412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project doi = ntohl(d.doi); 13422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project proto = d.prot_id; 13432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (doi != 1) { 134453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," doi=%u", doi)); 134553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," proto=%u", proto)); 13462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 134753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," doi=ipsec")); 134853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," proto=%s", PROTOIDSTR(proto))); 13492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 135053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," spilen=%u", d.spi_size)); 135153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," nspi=%u", ntohs(d.num_spi))); 135253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," spi=")); 13532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project q = (u_int8_t *)(p + 1); 13542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < ntohs(d.num_spi); i++) { 13552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i != 0) 135653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,",")); 135753f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)q, d.spi_size)) 13582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 13592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project q += d.spi_size; 13602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 13612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return q; 13622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 136353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(ISAKMP_NPTYPE_D))); 13642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 13652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 13662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 13672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const u_char * 136853f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev1_vid_print(netdissect_options *ndo, u_char tpay _U_, 136953f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, 137053f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len _U_, const u_char *ep _U_, 137153f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase _U_, u_int32_t doi _U_, 137253f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto _U_, int depth _U_) 13732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 13742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct isakmp_gen e; 13752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 137653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"%s:", NPSTR(ISAKMP_NPTYPE_VID))); 13772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 137853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ext); 137953f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&e, ext, sizeof(e)); 138053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d", ntohs(e.len) - 4)); 138153f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (2 < ndo->ndo_vflag && 4 < ntohs(e.len)) { 138253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," ")); 138353f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)(ext + 1), ntohs(e.len) - 4)) 13842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 13852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 13862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (u_char *)ext + ntohs(e.len); 13872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 138853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(ISAKMP_NPTYPE_VID))); 13892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 13902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 13912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 139253f17a9db278d33517d9888dd77848f554522a38JP Abgrall/************************************************************/ 139353f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* */ 139453f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* IKE v2 - rfc4306 - dissector */ 139553f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* */ 139653f17a9db278d33517d9888dd77848f554522a38JP Abgrall/************************************************************/ 139753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 139853f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic void 139953f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_pay_print(netdissect_options *ndo, const char *payname, int critical) 140053f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 140153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"%s%s:", payname, critical&0x80 ? "[C]" : "")); 140253f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 140353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 14042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const u_char * 140553f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_gen_print(netdissect_options *ndo, u_char tpay, 140653f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext) 14072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 14082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct isakmp_gen e; 14092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 141053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ext); 141153f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&e, ext, sizeof(e)); 141253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_pay_print(ndo, NPSTR(tpay), e.critical); 14132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 141453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d", ntohs(e.len) - 4)); 141553f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (2 < ndo->ndo_vflag && 4 < ntohs(e.len)) { 141653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," ")); 141753f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)(ext + 1), ntohs(e.len) - 4)) 141853f17a9db278d33517d9888dd77848f554522a38JP Abgrall goto trunc; 14192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 142053f17a9db278d33517d9888dd77848f554522a38JP Abgrall return (u_char *)ext + ntohs(e.len); 14212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 142253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(tpay))); 14232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 14242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 14252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const u_char * 142753f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_t_print(netdissect_options *ndo, u_char tpay _U_, int pcount, 142853f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, u_int item_len, 142953f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *ep, u_int32_t phase _U_, u_int32_t doi _U_, 143053f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto _U_, int depth _U_) 14312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 143253f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct ikev2_t *p; 143353f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct ikev2_t t; 143453f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int16_t t_id; 14352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *cp; 143653f17a9db278d33517d9888dd77848f554522a38JP Abgrall const char *idstr; 143753f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct attrmap *map; 143853f17a9db278d33517d9888dd77848f554522a38JP Abgrall size_t nmap; 143953f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *ep2; 14402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 144153f17a9db278d33517d9888dd77848f554522a38JP Abgrall p = (struct ikev2_t *)ext; 144253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*p); 144353f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&t, ext, sizeof(t)); 144453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_pay_print(ndo, NPSTR(ISAKMP_NPTYPE_T), t.h.critical); 14452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 144653f17a9db278d33517d9888dd77848f554522a38JP Abgrall t_id = ntohs(t.t_id); 144753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 144853f17a9db278d33517d9888dd77848f554522a38JP Abgrall map = NULL; 144953f17a9db278d33517d9888dd77848f554522a38JP Abgrall nmap = 0; 145053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 145153f17a9db278d33517d9888dd77848f554522a38JP Abgrall switch (t.t_type) { 145253f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_T_ENCR: 145353f17a9db278d33517d9888dd77848f554522a38JP Abgrall idstr = STR_OR_ID(t_id, esp_p_map); 145453f17a9db278d33517d9888dd77848f554522a38JP Abgrall map = encr_t_map; 145553f17a9db278d33517d9888dd77848f554522a38JP Abgrall nmap = sizeof(encr_t_map)/sizeof(encr_t_map[0]); 145653f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 14572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 145853f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_T_PRF: 145953f17a9db278d33517d9888dd77848f554522a38JP Abgrall idstr = STR_OR_ID(t_id, prf_p_map); 146053f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 14612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 146253f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_T_INTEG: 146353f17a9db278d33517d9888dd77848f554522a38JP Abgrall idstr = STR_OR_ID(t_id, integ_p_map); 146453f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 14652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 146653f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_T_DH: 146753f17a9db278d33517d9888dd77848f554522a38JP Abgrall idstr = STR_OR_ID(t_id, dh_p_map); 146853f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 14692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 147053f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_T_ESN: 147153f17a9db278d33517d9888dd77848f554522a38JP Abgrall idstr = STR_OR_ID(t_id, esn_p_map); 147253f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 147353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 147453f17a9db278d33517d9888dd77848f554522a38JP Abgrall default: 147553f17a9db278d33517d9888dd77848f554522a38JP Abgrall idstr = NULL; 147653f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 147753f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 147853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 147953f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (idstr) 148053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," #%u type=%s id=%s ", pcount, 148153f17a9db278d33517d9888dd77848f554522a38JP Abgrall STR_OR_ID(t.t_type, ikev2_t_type_map), 148253f17a9db278d33517d9888dd77848f554522a38JP Abgrall idstr)); 148353f17a9db278d33517d9888dd77848f554522a38JP Abgrall else 148453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," #%u type=%s id=%u ", pcount, 148553f17a9db278d33517d9888dd77848f554522a38JP Abgrall STR_OR_ID(t.t_type, ikev2_t_type_map), 148653f17a9db278d33517d9888dd77848f554522a38JP Abgrall t.t_id)); 148753f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = (u_char *)(p + 1); 148853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ep2 = (u_char *)p + item_len; 148953f17a9db278d33517d9888dd77848f554522a38JP Abgrall while (cp < ep && cp < ep2) { 149053f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (map && nmap) { 149153f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = ikev1_attrmap_print(ndo, cp, (ep < ep2) ? ep : ep2, 149253f17a9db278d33517d9888dd77848f554522a38JP Abgrall map, nmap); 149353f17a9db278d33517d9888dd77848f554522a38JP Abgrall } else 149453f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = ikev1_attr_print(ndo, cp, (ep < ep2) ? ep : ep2); 14952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 149653f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (ep < ep2) 149753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"...")); 14982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return cp; 14992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 150053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(ISAKMP_NPTYPE_T))); 15012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 15022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 15032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 150453f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char * 150553f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_p_print(netdissect_options *ndo, u_char tpay _U_, int pcount _U_, 150653f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, u_int item_len _U_, 150753f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *ep, u_int32_t phase, u_int32_t doi0, 150853f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto0 _U_, int depth) 15092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 151053f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct ikev2_p *p; 151153f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct ikev2_p prop; 151253f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *cp; 15132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 151453f17a9db278d33517d9888dd77848f554522a38JP Abgrall p = (struct ikev2_p *)ext; 151553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*p); 151653f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&prop, ext, sizeof(prop)); 151753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_pay_print(ndo, NPSTR(ISAKMP_NPTYPE_P), prop.h.critical); 15182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 151953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," #%u protoid=%s transform=%d len=%u", 152053f17a9db278d33517d9888dd77848f554522a38JP Abgrall prop.p_no, PROTOIDSTR(prop.prot_id), 152153f17a9db278d33517d9888dd77848f554522a38JP Abgrall prop.num_t, ntohs(prop.h.len))); 152253f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (prop.spi_size) { 152353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," spi=")); 152453f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)(p + 1), prop.spi_size)) 152553f17a9db278d33517d9888dd77848f554522a38JP Abgrall goto trunc; 15262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 15272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 152853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ext = (struct isakmp_gen *)((u_char *)(p + 1) + prop.spi_size); 152953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ext); 15302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 153153f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = ikev2_sub_print(ndo, NULL, ISAKMP_NPTYPE_T, ext, ep, phase, doi0, 153253f17a9db278d33517d9888dd77848f554522a38JP Abgrall prop.prot_id, depth); 153353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 153453f17a9db278d33517d9888dd77848f554522a38JP Abgrall return cp; 153553f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc: 153653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(ISAKMP_NPTYPE_P))); 153753f17a9db278d33517d9888dd77848f554522a38JP Abgrall return NULL; 153853f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 15392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 154053f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char * 154153f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_sa_print(netdissect_options *ndo, u_char tpay, 154253f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext1, 154353f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len _U_, const u_char *ep _U_, 154453f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase _U_, u_int32_t doi _U_, 154553f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto _U_, int depth _U_) 154653f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 154753f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct isakmp_gen e; 154853f17a9db278d33517d9888dd77848f554522a38JP Abgrall int osa_length, sa_length; 15492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 155053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ext1); 155153f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&e, ext1, sizeof(e)); 155253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_pay_print(ndo, "sa", e.critical); 15532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 155453f17a9db278d33517d9888dd77848f554522a38JP Abgrall osa_length= ntohs(e.len); 155553f17a9db278d33517d9888dd77848f554522a38JP Abgrall sa_length = osa_length - 4; 155653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d", sa_length)); 15572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 155853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_sub_print(ndo, NULL, ISAKMP_NPTYPE_P, 155953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ext1+1, ep, 156053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 0, 0, 0, depth); 156153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 156253f17a9db278d33517d9888dd77848f554522a38JP Abgrall return (u_char *)ext1 + osa_length; 156353f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc: 156453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(tpay))); 156553f17a9db278d33517d9888dd77848f554522a38JP Abgrall return NULL; 156653f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 15672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 156853f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char * 156953f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_ke_print(netdissect_options *ndo, u_char tpay, 157053f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, 157153f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len _U_, const u_char *ep _U_, 157253f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase _U_, u_int32_t doi _U_, 157353f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto _U_, int depth _U_) 157453f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 157553f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct ikev2_ke ke; 157653f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct ikev2_ke *k; 157753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 157853f17a9db278d33517d9888dd77848f554522a38JP Abgrall k = (struct ikev2_ke *)ext; 157953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ext); 158053f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&ke, ext, sizeof(ke)); 158153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_pay_print(ndo, NPSTR(tpay), ke.h.critical); 158253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 158353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%u group=%s", ntohs(ke.h.len) - 8, 158453f17a9db278d33517d9888dd77848f554522a38JP Abgrall STR_OR_ID(ntohs(ke.ke_group), dh_p_map))); 158553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 158653f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (2 < ndo->ndo_vflag && 8 < ntohs(ke.h.len)) { 158753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," ")); 158853f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)(k + 1), ntohs(ke.h.len) - 8)) 158953f17a9db278d33517d9888dd77848f554522a38JP Abgrall goto trunc; 15902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 159153f17a9db278d33517d9888dd77848f554522a38JP Abgrall return (u_char *)ext + ntohs(ke.h.len); 159253f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc: 159353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(tpay))); 159453f17a9db278d33517d9888dd77848f554522a38JP Abgrall return NULL; 159553f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 15962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 159753f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char * 159853f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_ID_print(netdissect_options *ndo, u_char tpay, 159953f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, 160053f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len _U_, const u_char *ep _U_, 160153f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase _U_, u_int32_t doi _U_, 160253f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto _U_, int depth _U_) 160353f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 160453f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct ikev2_id id; 160553f17a9db278d33517d9888dd77848f554522a38JP Abgrall int id_len, idtype_len, i; 160653f17a9db278d33517d9888dd77848f554522a38JP Abgrall unsigned int dumpascii, dumphex; 160753f17a9db278d33517d9888dd77848f554522a38JP Abgrall unsigned char *typedata; 16082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 160953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ext); 161053f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&id, ext, sizeof(id)); 161153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_pay_print(ndo, NPSTR(tpay), id.h.critical); 16122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 161353f17a9db278d33517d9888dd77848f554522a38JP Abgrall id_len = ntohs(id.h.len); 16142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 161553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d", id_len - 4)); 161653f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (2 < ndo->ndo_vflag && 4 < id_len) { 161753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," ")); 161853f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)(ext + 1), id_len - 4)) 161953f17a9db278d33517d9888dd77848f554522a38JP Abgrall goto trunc; 162053f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 16212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 162253f17a9db278d33517d9888dd77848f554522a38JP Abgrall idtype_len =id_len - sizeof(struct ikev2_id); 162353f17a9db278d33517d9888dd77848f554522a38JP Abgrall dumpascii = 0; 162453f17a9db278d33517d9888dd77848f554522a38JP Abgrall dumphex = 0; 162553f17a9db278d33517d9888dd77848f554522a38JP Abgrall typedata = (unsigned char *)(ext)+sizeof(struct ikev2_id); 16262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 162753f17a9db278d33517d9888dd77848f554522a38JP Abgrall switch(id.type) { 162853f17a9db278d33517d9888dd77848f554522a38JP Abgrall case ID_IPV4_ADDR: 162953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, " ipv4:")); 163053f17a9db278d33517d9888dd77848f554522a38JP Abgrall dumphex=1; 163153f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 163253f17a9db278d33517d9888dd77848f554522a38JP Abgrall case ID_FQDN: 163353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, " fqdn:")); 163453f17a9db278d33517d9888dd77848f554522a38JP Abgrall dumpascii=1; 163553f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 163653f17a9db278d33517d9888dd77848f554522a38JP Abgrall case ID_RFC822_ADDR: 163753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, " rfc822:")); 163853f17a9db278d33517d9888dd77848f554522a38JP Abgrall dumpascii=1; 163953f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 164053f17a9db278d33517d9888dd77848f554522a38JP Abgrall case ID_IPV6_ADDR: 164153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, " ipv6:")); 164253f17a9db278d33517d9888dd77848f554522a38JP Abgrall dumphex=1; 164353f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 164453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case ID_DER_ASN1_DN: 164553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, " dn:")); 164653f17a9db278d33517d9888dd77848f554522a38JP Abgrall dumphex=1; 164753f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 164853f17a9db278d33517d9888dd77848f554522a38JP Abgrall case ID_DER_ASN1_GN: 164953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, " gn:")); 165053f17a9db278d33517d9888dd77848f554522a38JP Abgrall dumphex=1; 165153f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 165253f17a9db278d33517d9888dd77848f554522a38JP Abgrall case ID_KEY_ID: 165353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, " keyid:")); 165453f17a9db278d33517d9888dd77848f554522a38JP Abgrall dumphex=1; 165553f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 16562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 16572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 165853f17a9db278d33517d9888dd77848f554522a38JP Abgrall if(dumpascii) { 165953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK2(*typedata, idtype_len); 166053f17a9db278d33517d9888dd77848f554522a38JP Abgrall for(i=0; i<idtype_len; i++) { 166153f17a9db278d33517d9888dd77848f554522a38JP Abgrall if(ND_ISPRINT(typedata[i])) { 166253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, "%c", typedata[i])); 166353f17a9db278d33517d9888dd77848f554522a38JP Abgrall } else { 166453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, ".")); 166553f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 16662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 16672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 166853f17a9db278d33517d9888dd77848f554522a38JP Abgrall if(dumphex) { 166953f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)typedata, idtype_len)) 167053f17a9db278d33517d9888dd77848f554522a38JP Abgrall goto trunc; 167153f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 167253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 167353f17a9db278d33517d9888dd77848f554522a38JP Abgrall return (u_char *)ext + id_len; 167453f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc: 167553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(tpay))); 167653f17a9db278d33517d9888dd77848f554522a38JP Abgrall return NULL; 16772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 16782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 167953f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char * 168053f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_cert_print(netdissect_options *ndo, u_char tpay, 168153f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, 168253f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len _U_, const u_char *ep _U_, 168353f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase _U_, u_int32_t doi _U_, 168453f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto _U_, int depth _U_) 16852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 168653f17a9db278d33517d9888dd77848f554522a38JP Abgrall return ikev2_gen_print(ndo, tpay, ext); 168753f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 16882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 168953f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char * 169053f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_cr_print(netdissect_options *ndo, u_char tpay, 169153f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, 169253f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len _U_, const u_char *ep _U_, 169353f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase _U_, u_int32_t doi _U_, 169453f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto _U_, int depth _U_) 169553f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 169653f17a9db278d33517d9888dd77848f554522a38JP Abgrall return ikev2_gen_print(ndo, tpay, ext); 169753f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 169853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 169953f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char * 170053f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_auth_print(netdissect_options *ndo, u_char tpay, 170153f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, 170253f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len _U_, const u_char *ep _U_, 170353f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase _U_, u_int32_t doi _U_, 170453f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto _U_, int depth _U_) 170553f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 170653f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct ikev2_auth a; 170753f17a9db278d33517d9888dd77848f554522a38JP Abgrall const char *v2_auth[]={ "invalid", "rsasig", 170853f17a9db278d33517d9888dd77848f554522a38JP Abgrall "shared-secret", "dsssig" }; 170953f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_char *authdata = (u_char*)ext + sizeof(a); 171053f17a9db278d33517d9888dd77848f554522a38JP Abgrall unsigned int len; 171153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 171253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ext); 171353f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&a, ext, sizeof(a)); 171453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_pay_print(ndo, NPSTR(tpay), a.h.critical); 171553f17a9db278d33517d9888dd77848f554522a38JP Abgrall len = ntohs(a.h.len); 171653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 171753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d method=%s", len-4, 171853f17a9db278d33517d9888dd77848f554522a38JP Abgrall STR_OR_ID(a.auth_method, v2_auth))); 171953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 172053f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (1 < ndo->ndo_vflag && 4 < len) { 172153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," authdata=(")); 172253f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)authdata, len - sizeof(a))) 172353f17a9db278d33517d9888dd77848f554522a38JP Abgrall goto trunc; 172453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,") ")); 172553f17a9db278d33517d9888dd77848f554522a38JP Abgrall } else if(ndo->ndo_vflag && 4 < len) { 172653f17a9db278d33517d9888dd77848f554522a38JP Abgrall if(!ike_show_somedata(ndo, authdata, ep)) goto trunc; 172753f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 172853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 172953f17a9db278d33517d9888dd77848f554522a38JP Abgrall return (u_char *)ext + len; 173053f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc: 173153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(tpay))); 173253f17a9db278d33517d9888dd77848f554522a38JP Abgrall return NULL; 173353f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 173453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 173553f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char * 173653f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_nonce_print(netdissect_options *ndo, u_char tpay, 173753f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, 173853f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len _U_, const u_char *ep _U_, 173953f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase _U_, u_int32_t doi _U_, 174053f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto _U_, int depth _U_) 174153f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 174253f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct isakmp_gen e; 174353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 174453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ext); 174553f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&e, ext, sizeof(e)); 174653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_pay_print(ndo, "nonce", e.critical); 174753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 174853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d", ntohs(e.len) - 4)); 174953f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (1 < ndo->ndo_vflag && 4 < ntohs(e.len)) { 175053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," nonce=(")); 175153f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)(ext + 1), ntohs(e.len) - 4)) 175253f17a9db278d33517d9888dd77848f554522a38JP Abgrall goto trunc; 175353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,") ")); 175453f17a9db278d33517d9888dd77848f554522a38JP Abgrall } else if(ndo->ndo_vflag && 4 < ntohs(e.len)) { 175553f17a9db278d33517d9888dd77848f554522a38JP Abgrall if(!ike_show_somedata(ndo, (const u_char *)(ext+1), ep)) goto trunc; 175653f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 175753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 175853f17a9db278d33517d9888dd77848f554522a38JP Abgrall return (u_char *)ext + ntohs(e.len); 175953f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc: 176053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(tpay))); 176153f17a9db278d33517d9888dd77848f554522a38JP Abgrall return NULL; 176253f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 176353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 176453f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* notify payloads */ 176553f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char * 176653f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_n_print(netdissect_options *ndo, u_char tpay _U_, 176753f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, 176853f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len _U_, const u_char *ep _U_, 176953f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase _U_, u_int32_t doi _U_, 177053f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto _U_, int depth _U_) 177153f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 177253f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct ikev2_n *p, n; 177353f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *cp; 177453f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_char showspi, showdata, showsomedata; 177553f17a9db278d33517d9888dd77848f554522a38JP Abgrall const char *notify_name; 177653f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t type; 177753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 177853f17a9db278d33517d9888dd77848f554522a38JP Abgrall p = (struct ikev2_n *)ext; 177953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*p); 178053f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&n, ext, sizeof(n)); 178153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_pay_print(ndo, NPSTR(ISAKMP_NPTYPE_N), n.h.critical); 178253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 178353f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 1; 178453f17a9db278d33517d9888dd77848f554522a38JP Abgrall showdata = 0; 178553f17a9db278d33517d9888dd77848f554522a38JP Abgrall showsomedata=0; 178653f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name=NULL; 178753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 178853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," prot_id=%s", PROTOIDSTR(n.prot_id))); 178953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 179053f17a9db278d33517d9888dd77848f554522a38JP Abgrall type = ntohs(n.type); 179153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 179253f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* notify space is annoying sparse */ 179353f17a9db278d33517d9888dd77848f554522a38JP Abgrall switch(type) { 179453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_UNSUPPORTED_CRITICAL_PAYLOAD: 179553f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "unsupported_critical_payload"; 179653f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 0; 179753f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 179853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 179953f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_INVALID_IKE_SPI: 180053f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "invalid_ike_spi"; 180153f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 1; 180253f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 180353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 180453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_INVALID_MAJOR_VERSION: 180553f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "invalid_major_version"; 180653f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 0; 180753f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 180853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 180953f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_INVALID_SYNTAX: 181053f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "invalid_syntax"; 181153f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 1; 181253f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 181353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 181453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_INVALID_MESSAGE_ID: 181553f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "invalid_message_id"; 181653f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 1; 181753f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 181853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 181953f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_INVALID_SPI: 182053f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "invalid_spi"; 182153f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 1; 182253f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 182353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 182453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_NO_PROPOSAL_CHOSEN: 182553f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "no_protocol_chosen"; 182653f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 1; 182753f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 182853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 182953f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_INVALID_KE_PAYLOAD: 183053f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "invalid_ke_payload"; 183153f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 1; 183253f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 183353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 183453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_AUTHENTICATION_FAILED: 183553f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "authentication_failed"; 183653f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 1; 183753f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 183853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 183953f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_SINGLE_PAIR_REQUIRED: 184053f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "single_pair_required"; 184153f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 1; 184253f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 184353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 184453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_NO_ADDITIONAL_SAS: 184553f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "no_additional_sas"; 184653f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 0; 184753f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 184853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 184953f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_INTERNAL_ADDRESS_FAILURE: 185053f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "internal_address_failure"; 185153f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 0; 185253f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 185353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 185453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_FAILED_CP_REQUIRED: 185553f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "failed:cp_required"; 185653f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 0; 185753f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 185853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 185953f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_INVALID_SELECTORS: 186053f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "invalid_selectors"; 186153f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 0; 186253f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 186353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 186453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_INITIAL_CONTACT: 186553f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "initial_contact"; 186653f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 0; 186753f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 186853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 186953f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_SET_WINDOW_SIZE: 187053f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "set_window_size"; 187153f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 0; 187253f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 187353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 187453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_ADDITIONAL_TS_POSSIBLE: 187553f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "additional_ts_possible"; 187653f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 0; 187753f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 187853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 187953f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_IPCOMP_SUPPORTED: 188053f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "ipcomp_supported"; 188153f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 0; 188253f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 188353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 188453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_NAT_DETECTION_SOURCE_IP: 188553f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "nat_detection_source_ip"; 188653f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 1; 188753f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 188853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 188953f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_NAT_DETECTION_DESTINATION_IP: 189053f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "nat_detection_destination_ip"; 189153f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 1; 189253f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 189353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 189453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_COOKIE: 189553f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "cookie"; 189653f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 1; 189753f17a9db278d33517d9888dd77848f554522a38JP Abgrall showsomedata= 1; 189853f17a9db278d33517d9888dd77848f554522a38JP Abgrall showdata= 0; 189953f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 190053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 190153f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_USE_TRANSPORT_MODE: 190253f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "use_transport_mode"; 190353f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 0; 190453f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 190553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 190653f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_HTTP_CERT_LOOKUP_SUPPORTED: 190753f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "http_cert_lookup_supported"; 190853f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 0; 190953f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 191053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 191153f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_REKEY_SA: 191253f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "rekey_sa"; 191353f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 1; 191453f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 191553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 191653f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_ESP_TFC_PADDING_NOT_SUPPORTED: 191753f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "tfc_padding_not_supported"; 191853f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 0; 191953f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 192053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 192153f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IV2_NOTIFY_NON_FIRST_FRAGMENTS_ALSO: 192253f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name = "non_first_fragment_also"; 192353f17a9db278d33517d9888dd77848f554522a38JP Abgrall showspi = 0; 192453f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 192553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 192653f17a9db278d33517d9888dd77848f554522a38JP Abgrall default: 192753f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (type < 8192) { 192853f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name="error"; 192953f17a9db278d33517d9888dd77848f554522a38JP Abgrall } else if(type < 16384) { 193053f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name="private-error"; 193153f17a9db278d33517d9888dd77848f554522a38JP Abgrall } else if(type < 40960) { 193253f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name="status"; 193353f17a9db278d33517d9888dd77848f554522a38JP Abgrall } else { 193453f17a9db278d33517d9888dd77848f554522a38JP Abgrall notify_name="private-status"; 193553f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 193653f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 193753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 193853f17a9db278d33517d9888dd77848f554522a38JP Abgrall if(notify_name) { 193953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," type=%u(%s)", type, notify_name)); 194053f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 194153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 194253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 194353f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (showspi && n.spi_size) { 194453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," spi=")); 194553f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)(p + 1), n.spi_size)) 194653f17a9db278d33517d9888dd77848f554522a38JP Abgrall goto trunc; 194753f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 194853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 194953f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = (u_char *)(p + 1) + n.spi_size; 195053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 195153f17a9db278d33517d9888dd77848f554522a38JP Abgrall if(3 < ndo->ndo_vflag) { 195253f17a9db278d33517d9888dd77848f554522a38JP Abgrall showdata = 1; 195353f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 195453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 195553f17a9db278d33517d9888dd77848f554522a38JP Abgrall if ((showdata || (showsomedata && ep-cp < 30)) && cp < ep) { 195653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," data=(")); 195753f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)(cp), ep - cp)) 195853f17a9db278d33517d9888dd77848f554522a38JP Abgrall goto trunc; 195953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 196053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,")")); 196153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 196253f17a9db278d33517d9888dd77848f554522a38JP Abgrall } else if(showsomedata && cp < ep) { 196353f17a9db278d33517d9888dd77848f554522a38JP Abgrall if(!ike_show_somedata(ndo, cp, ep)) goto trunc; 196453f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 196553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 196653f17a9db278d33517d9888dd77848f554522a38JP Abgrall return (u_char *)ext + item_len; 196753f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc: 196853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(ISAKMP_NPTYPE_N))); 196953f17a9db278d33517d9888dd77848f554522a38JP Abgrall return NULL; 197053f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 197153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 197253f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char * 197353f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_d_print(netdissect_options *ndo, u_char tpay, 197453f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, 197553f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len _U_, const u_char *ep _U_, 197653f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase _U_, u_int32_t doi _U_, 197753f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto _U_, int depth _U_) 197853f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 197953f17a9db278d33517d9888dd77848f554522a38JP Abgrall return ikev2_gen_print(ndo, tpay, ext); 198053f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 198153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 198253f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char * 198353f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_vid_print(netdissect_options *ndo, u_char tpay, 198453f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, 198553f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len _U_, const u_char *ep _U_, 198653f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase _U_, u_int32_t doi _U_, 198753f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto _U_, int depth _U_) 198853f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 198953f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct isakmp_gen e; 199053f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *vid; 199153f17a9db278d33517d9888dd77848f554522a38JP Abgrall int i, len; 199253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 199353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ext); 199453f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&e, ext, sizeof(e)); 199553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_pay_print(ndo, NPSTR(tpay), e.critical); 199653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d vid=", ntohs(e.len) - 4)); 199753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 199853f17a9db278d33517d9888dd77848f554522a38JP Abgrall vid = (const u_char *)(ext+1); 199953f17a9db278d33517d9888dd77848f554522a38JP Abgrall len = ntohs(e.len) - 4; 200053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK2(*vid, len); 200153f17a9db278d33517d9888dd77848f554522a38JP Abgrall for(i=0; i<len; i++) { 200253f17a9db278d33517d9888dd77848f554522a38JP Abgrall if(ND_ISPRINT(vid[i])) ND_PRINT((ndo, "%c", vid[i])); 200353f17a9db278d33517d9888dd77848f554522a38JP Abgrall else ND_PRINT((ndo, ".")); 200453f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 200553f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (2 < ndo->ndo_vflag && 4 < len) { 200653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," ")); 200753f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)(ext + 1), ntohs(e.len) - 4)) 200853f17a9db278d33517d9888dd77848f554522a38JP Abgrall goto trunc; 200953f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 201053f17a9db278d33517d9888dd77848f554522a38JP Abgrall return (u_char *)ext + ntohs(e.len); 201153f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc: 201253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(tpay))); 201353f17a9db278d33517d9888dd77848f554522a38JP Abgrall return NULL; 201453f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 201553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 201653f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char * 201753f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_TS_print(netdissect_options *ndo, u_char tpay, 201853f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, 201953f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len _U_, const u_char *ep _U_, 202053f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase _U_, u_int32_t doi _U_, 202153f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto _U_, int depth _U_) 202253f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 202353f17a9db278d33517d9888dd77848f554522a38JP Abgrall return ikev2_gen_print(ndo, tpay, ext); 202453f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 202553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 202653f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char * 202753f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_e_print(netdissect_options *ndo, 202853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifndef HAVE_LIBCRYPTO 202953f17a9db278d33517d9888dd77848f554522a38JP Abgrall _U_ 203053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 203153f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct isakmp *base, 203253f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_char tpay, 203353f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, 203453f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len _U_, const u_char *ep _U_, 203553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifndef HAVE_LIBCRYPTO 203653f17a9db278d33517d9888dd77848f554522a38JP Abgrall _U_ 203753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 203853f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase, 203953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifndef HAVE_LIBCRYPTO 204053f17a9db278d33517d9888dd77848f554522a38JP Abgrall _U_ 204153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 204253f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t doi, 204353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifndef HAVE_LIBCRYPTO 204453f17a9db278d33517d9888dd77848f554522a38JP Abgrall _U_ 204553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 204653f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto, 204753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifndef HAVE_LIBCRYPTO 204853f17a9db278d33517d9888dd77848f554522a38JP Abgrall _U_ 204953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 205053f17a9db278d33517d9888dd77848f554522a38JP Abgrall int depth) 205153f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 205253f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct isakmp_gen e; 205353f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_char *dat; 205453f17a9db278d33517d9888dd77848f554522a38JP Abgrall volatile int dlen; 205553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 205653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ext); 205753f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&e, ext, sizeof(e)); 205853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_pay_print(ndo, NPSTR(tpay), e.critical); 205953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 206053f17a9db278d33517d9888dd77848f554522a38JP Abgrall dlen = ntohs(e.len)-4; 206153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 206253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," len=%d", dlen)); 206353f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (2 < ndo->ndo_vflag && 4 < dlen) { 206453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," ")); 206553f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!rawprint(ndo, (caddr_t)(ext + 1), dlen)) 206653f17a9db278d33517d9888dd77848f554522a38JP Abgrall goto trunc; 206753f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 206853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 206953f17a9db278d33517d9888dd77848f554522a38JP Abgrall dat = (u_char *)(ext+1); 207053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK2(*dat, dlen); 207153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 207253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifdef HAVE_LIBCRYPTO 207353f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* try to decypt it! */ 207453f17a9db278d33517d9888dd77848f554522a38JP Abgrall if(esp_print_decrypt_buffer_by_ikev2(ndo, 207553f17a9db278d33517d9888dd77848f554522a38JP Abgrall base->flags & ISAKMP_FLAG_I, 207653f17a9db278d33517d9888dd77848f554522a38JP Abgrall base->i_ck, base->r_ck, 207753f17a9db278d33517d9888dd77848f554522a38JP Abgrall dat, dat+dlen)) { 207853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 207953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ext = (const struct isakmp_gen *)ndo->ndo_packetp; 208053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 208153f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* got it decrypted, print stuff inside. */ 208253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_sub_print(ndo, base, e.np, ext, ndo->ndo_snapend, 208353f17a9db278d33517d9888dd77848f554522a38JP Abgrall phase, doi, proto, depth+1); 208453f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 208553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 208653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 208753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 208853f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* always return NULL, because E must be at end, and NP refers 208953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * to what was inside. 209053f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 209153f17a9db278d33517d9888dd77848f554522a38JP Abgrall return NULL; 209253f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc: 209353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(tpay))); 209453f17a9db278d33517d9888dd77848f554522a38JP Abgrall return NULL; 209553f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 209653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 209753f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char * 209853f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_cp_print(netdissect_options *ndo, u_char tpay, 209953f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, 210053f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len _U_, const u_char *ep _U_, 210153f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase _U_, u_int32_t doi _U_, 210253f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto _U_, int depth _U_) 210353f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 210453f17a9db278d33517d9888dd77848f554522a38JP Abgrall return ikev2_gen_print(ndo, tpay, ext); 210553f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 210653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 210753f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char * 210853f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_eap_print(netdissect_options *ndo, u_char tpay, 210953f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, 211053f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len _U_, const u_char *ep _U_, 211153f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase _U_, u_int32_t doi _U_, 211253f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t proto _U_, int depth _U_) 211353f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 211453f17a9db278d33517d9888dd77848f554522a38JP Abgrall return ikev2_gen_print(ndo, tpay, ext); 211553f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 211653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 211753f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char * 211853f17a9db278d33517d9888dd77848f554522a38JP Abgrallike_sub0_print(netdissect_options *ndo, 211953f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_char np, const struct isakmp_gen *ext, const u_char *ep, 212053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 212153f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase, u_int32_t doi, u_int32_t proto, int depth) 212253f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 212353f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *cp; 212453f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct isakmp_gen e; 212553f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len; 212653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 212753f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = (u_char *)ext; 212853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ext); 212953f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&e, ext, sizeof(e)); 213053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 213153f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* 213253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Since we can't have a payload length of less than 4 bytes, 213353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * we need to bail out here if the generic header is nonsensical 213453f17a9db278d33517d9888dd77848f554522a38JP Abgrall * or truncated, otherwise we could loop forever processing 213553f17a9db278d33517d9888dd77848f554522a38JP Abgrall * zero-length items or otherwise misdissect the packet. 213653f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 213753f17a9db278d33517d9888dd77848f554522a38JP Abgrall item_len = ntohs(e.len); 213853f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (item_len <= 4) 213953f17a9db278d33517d9888dd77848f554522a38JP Abgrall return NULL; 214053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 214153f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (NPFUNC(np)) { 214253f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* 214353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * XXX - what if item_len is too short, or too long, 214453f17a9db278d33517d9888dd77848f554522a38JP Abgrall * for this payload type? 214553f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 214653f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = (*npfunc[np])(ndo, np, ext, item_len, ep, phase, doi, proto, depth); 214753f17a9db278d33517d9888dd77848f554522a38JP Abgrall } else { 214853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"%s", NPSTR(np))); 214953f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp += item_len; 215053f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 215153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 215253f17a9db278d33517d9888dd77848f554522a38JP Abgrall return cp; 215353f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc: 215453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|isakmp]")); 215553f17a9db278d33517d9888dd77848f554522a38JP Abgrall return NULL; 215653f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 215753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 215853f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char * 215953f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev1_sub_print(netdissect_options *ndo, 216053f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_char np, const struct isakmp_gen *ext, const u_char *ep, 216153f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase, u_int32_t doi, u_int32_t proto, int depth) 216253f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 216353f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *cp; 216453f17a9db278d33517d9888dd77848f554522a38JP Abgrall int i; 216553f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct isakmp_gen e; 216653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 216753f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = (const u_char *)ext; 216853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 216953f17a9db278d33517d9888dd77848f554522a38JP Abgrall while (np) { 217053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ext); 217153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 217253f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&e, ext, sizeof(e)); 217353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 217453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK2(*ext, ntohs(e.len)); 217553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 217653f17a9db278d33517d9888dd77848f554522a38JP Abgrall depth++; 217753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"\n")); 217853f17a9db278d33517d9888dd77848f554522a38JP Abgrall for (i = 0; i < depth; i++) 217953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," ")); 218053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"(")); 218153f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = ike_sub0_print(ndo, np, ext, ep, phase, doi, proto, depth); 218253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,")")); 218353f17a9db278d33517d9888dd77848f554522a38JP Abgrall depth--; 218453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 218553f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (cp == NULL) { 218653f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* Zero-length subitem */ 218753f17a9db278d33517d9888dd77848f554522a38JP Abgrall return NULL; 218853f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 218953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 219053f17a9db278d33517d9888dd77848f554522a38JP Abgrall np = e.np; 219153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ext = (struct isakmp_gen *)cp; 219253f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 219353f17a9db278d33517d9888dd77848f554522a38JP Abgrall return cp; 219453f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc: 219553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(np))); 219653f17a9db278d33517d9888dd77848f554522a38JP Abgrall return NULL; 219753f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 219853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 219953f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic char * 220053f17a9db278d33517d9888dd77848f554522a38JP Abgrallnumstr(int x) 220153f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 220253f17a9db278d33517d9888dd77848f554522a38JP Abgrall static char buf[20]; 220353f17a9db278d33517d9888dd77848f554522a38JP Abgrall snprintf(buf, sizeof(buf), "#%d", x); 220453f17a9db278d33517d9888dd77848f554522a38JP Abgrall return buf; 220553f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 220653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 220753f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic void 220853f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev1_print(netdissect_options *ndo, 220953f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *bp, u_int length, 221053f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *bp2, struct isakmp *base) 221153f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 221253f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp *p; 221353f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *ep; 221453f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_char np; 221553f17a9db278d33517d9888dd77848f554522a38JP Abgrall int i; 221653f17a9db278d33517d9888dd77848f554522a38JP Abgrall int phase; 221753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 221853f17a9db278d33517d9888dd77848f554522a38JP Abgrall p = (const struct isakmp *)bp; 221953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ep = ndo->ndo_snapend; 222053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 222153f17a9db278d33517d9888dd77848f554522a38JP Abgrall phase = (EXTRACT_32BITS(base->msgid) == 0) ? 1 : 2; 222253f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (phase == 1) 222353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," phase %d", phase)); 222453f17a9db278d33517d9888dd77848f554522a38JP Abgrall else 222553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," phase %d/others", phase)); 222653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 222753f17a9db278d33517d9888dd77848f554522a38JP Abgrall i = cookie_find(&base->i_ck); 222853f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (i < 0) { 222953f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (iszero((u_char *)&base->r_ck, sizeof(base->r_ck))) { 223053f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* the first packet */ 223153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," I")); 223253f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (bp2) 223353f17a9db278d33517d9888dd77848f554522a38JP Abgrall cookie_record(&base->i_ck, bp2); 223453f17a9db278d33517d9888dd77848f554522a38JP Abgrall } else 223553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," ?")); 223653f17a9db278d33517d9888dd77848f554522a38JP Abgrall } else { 223753f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (bp2 && cookie_isinitiator(i, bp2)) 223853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," I")); 223953f17a9db278d33517d9888dd77848f554522a38JP Abgrall else if (bp2 && cookie_isresponder(i, bp2)) 224053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," R")); 224153f17a9db278d33517d9888dd77848f554522a38JP Abgrall else 224253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," ?")); 224353f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 224453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 224553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," %s", ETYPESTR(base->etype))); 224653f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (base->flags) { 224753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"[%s%s]", base->flags & ISAKMP_FLAG_E ? "E" : "", 224853f17a9db278d33517d9888dd77848f554522a38JP Abgrall base->flags & ISAKMP_FLAG_C ? "C" : "")); 224953f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 225053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 225153f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (ndo->ndo_vflag) { 225253f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext; 225353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 225453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,":")); 225553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 225653f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* regardless of phase... */ 225753f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (base->flags & ISAKMP_FLAG_E) { 225853f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* 225953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * encrypted, nothing we can do right now. 226053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * we hope to decrypt the packet in the future... 226153f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 226253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [encrypted %s]", NPSTR(base->np))); 226353f17a9db278d33517d9888dd77848f554522a38JP Abgrall goto done; 226453f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 226553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 226653f17a9db278d33517d9888dd77848f554522a38JP Abgrall CHECKLEN(p + 1, base->np); 226753f17a9db278d33517d9888dd77848f554522a38JP Abgrall np = base->np; 226853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ext = (struct isakmp_gen *)(p + 1); 226953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev1_sub_print(ndo, np, ext, ep, phase, 0, 0, 0); 227053f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 227153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 227253f17a9db278d33517d9888dd77848f554522a38JP Abgralldone: 227353f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (ndo->ndo_vflag) { 227453f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (ntohl(base->len) != length) { 227553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," (len mismatch: isakmp %u/ip %u)", 227653f17a9db278d33517d9888dd77848f554522a38JP Abgrall (u_int32_t)ntohl(base->len), length)); 227753f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 227853f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 227953f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 228053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 228153f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char * 228253f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_sub0_print(netdissect_options *ndo, struct isakmp *base, 228353f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_char np, int pcount, 228453f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext, const u_char *ep, 228553f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase, u_int32_t doi, u_int32_t proto, int depth) 228653f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 228753f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *cp; 228853f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct isakmp_gen e; 228953f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int item_len; 229053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 229153f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = (u_char *)ext; 229253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ext); 229353f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&e, ext, sizeof(e)); 229453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 229553f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* 229653f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Since we can't have a payload length of less than 4 bytes, 229753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * we need to bail out here if the generic header is nonsensical 229853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * or truncated, otherwise we could loop forever processing 229953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * zero-length items or otherwise misdissect the packet. 230053f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 230153f17a9db278d33517d9888dd77848f554522a38JP Abgrall item_len = ntohs(e.len); 230253f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (item_len <= 4) 230353f17a9db278d33517d9888dd77848f554522a38JP Abgrall return NULL; 230453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 230553f17a9db278d33517d9888dd77848f554522a38JP Abgrall if(np == ISAKMP_NPTYPE_P) { 230653f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = ikev2_p_print(ndo, np, pcount, ext, item_len, 230753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ep, phase, doi, proto, depth); 230853f17a9db278d33517d9888dd77848f554522a38JP Abgrall } else if(np == ISAKMP_NPTYPE_T) { 230953f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = ikev2_t_print(ndo, np, pcount, ext, item_len, 231053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ep, phase, doi, proto, depth); 231153f17a9db278d33517d9888dd77848f554522a38JP Abgrall } else if(np == ISAKMP_NPTYPE_v2E) { 231253f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = ikev2_e_print(ndo, base, np, ext, item_len, 231353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ep, phase, doi, proto, depth); 231453f17a9db278d33517d9888dd77848f554522a38JP Abgrall } else if (NPFUNC(np)) { 231553f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* 231653f17a9db278d33517d9888dd77848f554522a38JP Abgrall * XXX - what if item_len is too short, or too long, 231753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * for this payload type? 231853f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 231953f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = (*npfunc[np])(ndo, np, /*pcount,*/ ext, item_len, 232053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ep, phase, doi, proto, depth); 232153f17a9db278d33517d9888dd77848f554522a38JP Abgrall } else { 232253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"%s", NPSTR(np))); 232353f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp += item_len; 232453f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 232553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 232653f17a9db278d33517d9888dd77848f554522a38JP Abgrall return cp; 232753f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc: 232853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|isakmp]")); 232953f17a9db278d33517d9888dd77848f554522a38JP Abgrall return NULL; 233053f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 233153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 233253f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char * 233353f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_sub_print(netdissect_options *ndo, 233453f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct isakmp *base, 233553f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_char np, const struct isakmp_gen *ext, const u_char *ep, 233653f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t phase, u_int32_t doi, u_int32_t proto, int depth) 233753f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 233853f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *cp; 233953f17a9db278d33517d9888dd77848f554522a38JP Abgrall int i; 234053f17a9db278d33517d9888dd77848f554522a38JP Abgrall int pcount; 234153f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct isakmp_gen e; 234253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 234353f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = (const u_char *)ext; 234453f17a9db278d33517d9888dd77848f554522a38JP Abgrall pcount = 0; 234553f17a9db278d33517d9888dd77848f554522a38JP Abgrall while (np) { 234653f17a9db278d33517d9888dd77848f554522a38JP Abgrall pcount++; 234753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ext); 234853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 234953f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&e, ext, sizeof(e)); 235053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 235153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK2(*ext, ntohs(e.len)); 235253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 235353f17a9db278d33517d9888dd77848f554522a38JP Abgrall depth++; 235453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"\n")); 235553f17a9db278d33517d9888dd77848f554522a38JP Abgrall for (i = 0; i < depth; i++) 235653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," ")); 235753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"(")); 235853f17a9db278d33517d9888dd77848f554522a38JP Abgrall cp = ikev2_sub0_print(ndo, base, np, pcount, 235953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ext, ep, phase, doi, proto, depth); 236053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,")")); 236153f17a9db278d33517d9888dd77848f554522a38JP Abgrall depth--; 236253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 236353f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (cp == NULL) { 236453f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* Zero-length subitem */ 236553f17a9db278d33517d9888dd77848f554522a38JP Abgrall return NULL; 236653f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 236753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 236853f17a9db278d33517d9888dd77848f554522a38JP Abgrall np = e.np; 236953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ext = (struct isakmp_gen *)cp; 237053f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 237153f17a9db278d33517d9888dd77848f554522a38JP Abgrall return cp; 237253f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc: 237353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," [|%s]", NPSTR(np))); 237453f17a9db278d33517d9888dd77848f554522a38JP Abgrall return NULL; 237553f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 237653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 237753f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic void 237853f17a9db278d33517d9888dd77848f554522a38JP Abgrallikev2_print(netdissect_options *ndo, 237953f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *bp, u_int length, 238053f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *bp2 _U_, struct isakmp *base) 238153f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 238253f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp *p; 238353f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *ep; 238453f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_char np; 238553f17a9db278d33517d9888dd77848f554522a38JP Abgrall int phase; 238653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 238753f17a9db278d33517d9888dd77848f554522a38JP Abgrall p = (const struct isakmp *)bp; 238853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ep = ndo->ndo_snapend; 238953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 239053f17a9db278d33517d9888dd77848f554522a38JP Abgrall phase = (EXTRACT_32BITS(base->msgid) == 0) ? 1 : 2; 239153f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (phase == 1) 239253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, " parent_sa")); 239353f17a9db278d33517d9888dd77848f554522a38JP Abgrall else 239453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, " child_sa ")); 239553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 239653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, " %s", ETYPESTR(base->etype))); 239753f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (base->flags) { 239853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, "[%s%s%s]", 239953f17a9db278d33517d9888dd77848f554522a38JP Abgrall base->flags & ISAKMP_FLAG_I ? "I" : "", 240053f17a9db278d33517d9888dd77848f554522a38JP Abgrall base->flags & ISAKMP_FLAG_V ? "V" : "", 240153f17a9db278d33517d9888dd77848f554522a38JP Abgrall base->flags & ISAKMP_FLAG_R ? "R" : "")); 240253f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 240353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 240453f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (ndo->ndo_vflag) { 240553f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp_gen *ext; 240653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 240753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, ":")); 240853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 240953f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* regardless of phase... */ 241053f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (base->flags & ISAKMP_FLAG_E) { 241153f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* 241253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * encrypted, nothing we can do right now. 241353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * we hope to decrypt the packet in the future... 241453f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 241553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, " [encrypted %s]", NPSTR(base->np))); 241653f17a9db278d33517d9888dd77848f554522a38JP Abgrall goto done; 241753f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 241853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 241953f17a9db278d33517d9888dd77848f554522a38JP Abgrall CHECKLEN(p + 1, base->np) 242053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 242153f17a9db278d33517d9888dd77848f554522a38JP Abgrall np = base->np; 242253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ext = (struct isakmp_gen *)(p + 1); 242353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_sub_print(ndo, base, np, ext, ep, phase, 0, 0, 0); 242453f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 242553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 242653f17a9db278d33517d9888dd77848f554522a38JP Abgralldone: 242753f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (ndo->ndo_vflag) { 242853f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (ntohl(base->len) != length) { 242953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, " (len mismatch: isakmp %u/ip %u)", 243053f17a9db278d33517d9888dd77848f554522a38JP Abgrall (u_int32_t)ntohl(base->len), length)); 243153f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 243253f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 243353f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 243453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 243553f17a9db278d33517d9888dd77848f554522a38JP Abgrallvoid 243653f17a9db278d33517d9888dd77848f554522a38JP Abgrallisakmp_print(netdissect_options *ndo, 243753f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *bp, u_int length, 243853f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *bp2) 243953f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 244053f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct isakmp *p; 244153f17a9db278d33517d9888dd77848f554522a38JP Abgrall struct isakmp base; 244253f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *ep; 244353f17a9db278d33517d9888dd77848f554522a38JP Abgrall int major, minor; 244453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 244553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifdef HAVE_LIBCRYPTO 244653f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* initialize SAs */ 244753f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (ndo->ndo_sa_list_head == NULL) { 244853f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (ndo->ndo_espsecret) 244953f17a9db278d33517d9888dd77848f554522a38JP Abgrall esp_print_decodesecret(ndo); 245053f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 245153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 245253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 245353f17a9db278d33517d9888dd77848f554522a38JP Abgrall p = (const struct isakmp *)bp; 245453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ep = ndo->ndo_snapend; 245553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 245653f17a9db278d33517d9888dd77848f554522a38JP Abgrall if ((struct isakmp *)ep < p + 1) { 245753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"[|isakmp]")); 245853f17a9db278d33517d9888dd77848f554522a38JP Abgrall return; 245953f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 246053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 246153f17a9db278d33517d9888dd77848f554522a38JP Abgrall UNALIGNED_MEMCPY(&base, p, sizeof(base)); 246253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 246353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"isakmp")); 246453f17a9db278d33517d9888dd77848f554522a38JP Abgrall major = (base.vers & ISAKMP_VERS_MAJOR) 246553f17a9db278d33517d9888dd77848f554522a38JP Abgrall >> ISAKMP_VERS_MAJOR_SHIFT; 246653f17a9db278d33517d9888dd77848f554522a38JP Abgrall minor = (base.vers & ISAKMP_VERS_MINOR) 246753f17a9db278d33517d9888dd77848f554522a38JP Abgrall >> ISAKMP_VERS_MINOR_SHIFT; 246853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 246953f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (ndo->ndo_vflag) { 247053f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," %d.%d", major, minor)); 247153f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 247253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 247353f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (ndo->ndo_vflag) { 247453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," msgid ")); 247553f17a9db278d33517d9888dd77848f554522a38JP Abgrall hexprint(ndo, (caddr_t)&base.msgid, sizeof(base.msgid)); 247653f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 247753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 247853f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (1 < ndo->ndo_vflag) { 247953f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo," cookie ")); 248053f17a9db278d33517d9888dd77848f554522a38JP Abgrall hexprint(ndo, (caddr_t)&base.i_ck, sizeof(base.i_ck)); 248153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"->")); 248253f17a9db278d33517d9888dd77848f554522a38JP Abgrall hexprint(ndo, (caddr_t)&base.r_ck, sizeof(base.r_ck)); 248353f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 248453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,":")); 248553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 248653f17a9db278d33517d9888dd77848f554522a38JP Abgrall switch(major) { 248753f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IKEv1_MAJOR_VERSION: 248853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev1_print(ndo, bp, length, bp2, &base); 248953f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 249053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 249153f17a9db278d33517d9888dd77848f554522a38JP Abgrall case IKEv2_MAJOR_VERSION: 249253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ikev2_print(ndo, bp, length, bp2, &base); 249353f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 249453f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 249553f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 249653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 249753f17a9db278d33517d9888dd77848f554522a38JP Abgrallvoid 249853f17a9db278d33517d9888dd77848f554522a38JP Abgrallisakmp_rfc3948_print(netdissect_options *ndo, 249953f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *bp, u_int length, 250053f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *bp2) 250153f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 250253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 250353f17a9db278d33517d9888dd77848f554522a38JP Abgrall if(length == 1 && bp[0]==0xff) { 250453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, "isakmp-nat-keep-alive")); 250553f17a9db278d33517d9888dd77848f554522a38JP Abgrall return; 250653f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 25072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if(length < 4) { 25092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 25102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 251153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 25122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 25132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * see if this is an IKE packet 25142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 25152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if(bp[0]==0 && bp[1]==0 && bp[2]==0 && bp[3]==0) { 25162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ND_PRINT((ndo, "NONESP-encap: ")); 25172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project isakmp_print(ndo, bp+4, length-4, bp2); 25182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 25192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 25202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* must be an ESP packet */ 25222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 25232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int nh, enh, padlen; 25242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int advance; 25252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ND_PRINT((ndo, "UDP-encap: ")); 25272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project advance = esp_print(ndo, bp, length, bp2, &enh, &padlen); 25292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if(advance <= 0) 25302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 25312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bp += advance; 25332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project length -= advance + padlen; 25342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project nh = enh & 0xff; 25352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ip_print_inner(ndo, bp, length, nh, bp2); 25372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 25382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 25392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 254153f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo,"[|isakmp]")); 25422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 25432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 25442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 25452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 25462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Local Variables: 25472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * c-style: whitesmith 25482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * c-basic-offset: 8 25492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * End: 25502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 255153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 255253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 255353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 255453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 2555