1c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh/*	$NetBSD: key_debug.c,v 1.7.6.1 2007/08/01 11:52:18 vanhu Exp $	*/
20a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
30a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/*	$KAME: key_debug.c,v 1.29 2001/08/16 14:25:41 itojun Exp $	*/
40a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
50a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/*
60a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
70a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * All rights reserved.
80a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *
90a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * Redistribution and use in source and binary forms, with or without
100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * modification, are permitted provided that the following conditions
110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * are met:
120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 1. Redistributions of source code must retain the above copyright
130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *    notice, this list of conditions and the following disclaimer.
140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 2. Redistributions in binary form must reproduce the above copyright
150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *    notice, this list of conditions and the following disclaimer in the
160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *    documentation and/or other materials provided with the distribution.
170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 3. Neither the name of the project nor the names of its contributors
180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *    may be used to endorse or promote products derived from this software
190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *    without specific prior written permission.
200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang *
210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * SUCH DAMAGE.
320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang */
330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef HAVE_CONFIG_H
350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "config.h"
360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef _KERNEL
390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#if defined(__FreeBSD__) && __FreeBSD__ >= 3
400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "opt_inet.h"
410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "opt_inet6.h"
420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "opt_ipsec.h"
430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef __NetBSD__
450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "opt_inet.h"
460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#if HAVE_STDINT_H
500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <stdint.h>
510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <sys/types.h>
540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <sys/param.h>
550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef _KERNEL
560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <sys/systm.h>
570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <sys/mbuf.h>
580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <sys/queue.h>
590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <sys/socket.h>
610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <netinet/in.h>
630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include PATH_IPSEC_H
640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifndef _KERNEL
660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <ctype.h>
670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <stdio.h>
680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <stdlib.h>
690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif /* !_KERNEL */
700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "config.h"
720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "libpfkey.h"
730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void kdebug_sadb_prop __P((struct sadb_ext *));
750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void kdebug_sadb_identity __P((struct sadb_ext *));
760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void kdebug_sadb_supported __P((struct sadb_ext *));
770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void kdebug_sadb_lifetime __P((struct sadb_ext *));
780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void kdebug_sadb_sa __P((struct sadb_ext *));
790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void kdebug_sadb_address __P((struct sadb_ext *));
800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void kdebug_sadb_key __P((struct sadb_ext *));
810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void kdebug_sadb_x_sa2 __P((struct sadb_ext *));
820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void kdebug_sadb_x_policy __P((struct sadb_ext *ext));
830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void kdebug_sockaddr __P((struct sockaddr *addr));
840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef SADB_X_EXT_NAT_T_TYPE
860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void kdebug_sadb_x_nat_t_type __P((struct sadb_ext *ext));
870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void kdebug_sadb_x_nat_t_port __P((struct sadb_ext *ext));
880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef SADB_X_EXT_PACKET
910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void kdebug_sadb_x_packet __P((struct sadb_ext *));
920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef _KERNEL
950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void kdebug_secreplay __P((struct secreplay *));
960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifndef _KERNEL
990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define panic(param)	{ printf(param); exit(1); }
1000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
1010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "libpfkey.h"
1030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* NOTE: host byte order */
1040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* %%%: about struct sadb_msg */
1060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid
1070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_sadb(base)
1080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_msg *base;
1090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
1100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_ext *ext;
1110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	int tlen, extlen;
1120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check */
1140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (base == NULL)
1150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		panic("kdebug_sadb: NULL pointer was passed.\n");
1160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("sadb_msg{ version=%u type=%u errno=%u satype=%u\n",
1180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    base->sadb_msg_version, base->sadb_msg_type,
1190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    base->sadb_msg_errno, base->sadb_msg_satype);
1200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("  len=%u reserved=%u seq=%u pid=%u\n",
1210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    base->sadb_msg_len, base->sadb_msg_reserved,
1220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    base->sadb_msg_seq, base->sadb_msg_pid);
1230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	tlen = PFKEY_UNUNIT64(base->sadb_msg_len) - sizeof(struct sadb_msg);
1250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	ext = (void *)((caddr_t)(void *)base + sizeof(struct sadb_msg));
1260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	while (tlen > 0) {
1280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("sadb_ext{ len=%u type=%u }\n",
1290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		    ext->sadb_ext_len, ext->sadb_ext_type);
1300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		if (ext->sadb_ext_len == 0) {
1320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			printf("kdebug_sadb: invalid ext_len=0 was passed.\n");
1330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			return;
1340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		}
1350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		if (ext->sadb_ext_len > tlen) {
1360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			printf("kdebug_sadb: ext_len exceeds end of buffer.\n");
1370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			return;
1380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		}
1390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
1400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		switch (ext->sadb_ext_type) {
1410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_EXT_SA:
1420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			kdebug_sadb_sa(ext);
1430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			break;
1440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_EXT_LIFETIME_CURRENT:
1450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_EXT_LIFETIME_HARD:
1460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_EXT_LIFETIME_SOFT:
1470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			kdebug_sadb_lifetime(ext);
1480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			break;
1490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_EXT_ADDRESS_SRC:
1500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_EXT_ADDRESS_DST:
1510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_EXT_ADDRESS_PROXY:
1520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			kdebug_sadb_address(ext);
1530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			break;
1540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_EXT_KEY_AUTH:
1550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_EXT_KEY_ENCRYPT:
1560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			kdebug_sadb_key(ext);
1570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			break;
1580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_EXT_IDENTITY_SRC:
1590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_EXT_IDENTITY_DST:
1600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			kdebug_sadb_identity(ext);
1610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			break;
1620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_EXT_SENSITIVITY:
1630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			break;
1640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_EXT_PROPOSAL:
1650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			kdebug_sadb_prop(ext);
1660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			break;
1670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_EXT_SUPPORTED_AUTH:
1680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_EXT_SUPPORTED_ENCRYPT:
1690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			kdebug_sadb_supported(ext);
1700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			break;
1710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_EXT_SPIRANGE:
1720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_X_EXT_KMPRIVATE:
1730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			break;
1740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_X_EXT_POLICY:
1750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			kdebug_sadb_x_policy(ext);
1760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			break;
1770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_X_EXT_SA2:
1780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			kdebug_sadb_x_sa2(ext);
1790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			break;
1800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef SADB_X_EXT_NAT_T_TYPE
1810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_X_EXT_NAT_T_TYPE:
1820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			kdebug_sadb_x_nat_t_type(ext);
1830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			break;
1840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_X_EXT_NAT_T_SPORT:
1850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_X_EXT_NAT_T_DPORT:
1860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			kdebug_sadb_x_nat_t_port(ext);
1870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			break;
1880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_X_EXT_NAT_T_OA:
1890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			kdebug_sadb_address(ext);
1900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			break;
1910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
1920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef SADB_X_EXT_PACKET
1930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		case SADB_X_EXT_PACKET:
1940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			kdebug_sadb_x_packet(ext);
1950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			break;
1960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
1970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		default:
1980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			printf("kdebug_sadb: invalid ext_type %u was passed.\n",
1990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			    ext->sadb_ext_type);
2000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			return;
2010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		}
2020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
2030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		extlen = PFKEY_UNUNIT64(ext->sadb_ext_len);
2040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		tlen -= extlen;
2050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		ext = (void *)((caddr_t)(void *)ext + extlen);
2060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
2070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
2080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
2090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
2100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
2110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void
2120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_sadb_prop(ext)
2130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_ext *ext;
2140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
2150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_prop *prop = (void *)ext;
2160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_comb *comb;
2170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	int len;
2180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
2190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check */
2200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (ext == NULL)
2210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		panic("kdebug_sadb_prop: NULL pointer was passed.\n");
2220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
2230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	len = (PFKEY_UNUNIT64(prop->sadb_prop_len) - sizeof(*prop))
2240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		/ sizeof(*comb);
2250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	comb = (void *)(prop + 1);
2260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("sadb_prop{ replay=%u\n", prop->sadb_prop_replay);
2270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
2280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	while (len--) {
2290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("sadb_comb{ auth=%u encrypt=%u "
2300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			"flags=0x%04x reserved=0x%08x\n",
2310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			comb->sadb_comb_auth, comb->sadb_comb_encrypt,
2320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			comb->sadb_comb_flags, comb->sadb_comb_reserved);
2330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
2340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("  auth_minbits=%u auth_maxbits=%u "
2350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			"encrypt_minbits=%u encrypt_maxbits=%u\n",
2360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			comb->sadb_comb_auth_minbits,
2370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			comb->sadb_comb_auth_maxbits,
2380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			comb->sadb_comb_encrypt_minbits,
2390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			comb->sadb_comb_encrypt_maxbits);
2400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
2410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("  soft_alloc=%u hard_alloc=%u "
2420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			"soft_bytes=%lu hard_bytes=%lu\n",
2430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			comb->sadb_comb_soft_allocations,
2440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			comb->sadb_comb_hard_allocations,
2450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			(unsigned long)comb->sadb_comb_soft_bytes,
2460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			(unsigned long)comb->sadb_comb_hard_bytes);
2470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
2480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("  soft_alloc=%lu hard_alloc=%lu "
2490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			"soft_bytes=%lu hard_bytes=%lu }\n",
2500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			(unsigned long)comb->sadb_comb_soft_addtime,
2510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			(unsigned long)comb->sadb_comb_hard_addtime,
2520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			(unsigned long)comb->sadb_comb_soft_usetime,
2530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			(unsigned long)comb->sadb_comb_hard_usetime);
2540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		comb++;
2550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
2560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("}\n");
2570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
2580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
2590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
2600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
2610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void
2620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_sadb_identity(ext)
2630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_ext *ext;
2640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
2650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_ident *id = (void *)ext;
2660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	int len;
2670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
2680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check */
2690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (ext == NULL)
2700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		panic("kdebug_sadb_identity: NULL pointer was passed.\n");
2710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
2720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	len = PFKEY_UNUNIT64(id->sadb_ident_len) - sizeof(*id);
2730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("sadb_ident_%s{",
2740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    id->sadb_ident_exttype == SADB_EXT_IDENTITY_SRC ? "src" : "dst");
2750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	switch (id->sadb_ident_type) {
2760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	default:
2770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf(" type=%d id=%lu",
2780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			id->sadb_ident_type, (u_long)id->sadb_ident_id);
2790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		if (len) {
2800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef _KERNEL
2810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			ipsec_hexdump((caddr_t)(id + 1), len); /*XXX cast ?*/
2820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else
2830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			char *p, *ep;
2840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			printf("\n  str=\"");
2850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			p = (void *)(id + 1);
2860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			ep = p + len;
2870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			for (/*nothing*/; *p && p < ep; p++) {
2880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				if (isprint((int)*p))
2890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang					printf("%c", *p & 0xff);
2900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				else
2910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang					printf("\\%03o", *p & 0xff);
2920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			}
2930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
2940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			printf("\"");
2950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		}
2960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		break;
2970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
2980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
2990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf(" }\n");
3000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
3020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
3030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void
3050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_sadb_supported(ext)
3060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_ext *ext;
3070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
3080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_supported *sup = (void *)ext;
3090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_alg *alg;
3100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	int len;
3110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check */
3130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (ext == NULL)
3140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		panic("kdebug_sadb_supported: NULL pointer was passed.\n");
3150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	len = (PFKEY_UNUNIT64(sup->sadb_supported_len) - sizeof(*sup))
3170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		/ sizeof(*alg);
3180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	alg = (void *)(sup + 1);
3190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("sadb_sup{\n");
3200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	while (len--) {
3210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("  { id=%d ivlen=%d min=%d max=%d }\n",
3220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			alg->sadb_alg_id, alg->sadb_alg_ivlen,
3230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			alg->sadb_alg_minbits, alg->sadb_alg_maxbits);
3240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		alg++;
3250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
3260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("}\n");
3270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
3290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
3300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void
3320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_sadb_lifetime(ext)
3330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_ext *ext;
3340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
3350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_lifetime *lft = (void *)ext;
3360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check */
3380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (ext == NULL)
3390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("kdebug_sadb_lifetime: NULL pointer was passed.\n");
3400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("sadb_lifetime{ alloc=%u, bytes=%u\n",
3420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		lft->sadb_lifetime_allocations,
3430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		(u_int32_t)lft->sadb_lifetime_bytes);
3440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("  addtime=%u, usetime=%u }\n",
3450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		(u_int32_t)lft->sadb_lifetime_addtime,
3460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		(u_int32_t)lft->sadb_lifetime_usetime);
3470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
3490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
3500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void
3520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_sadb_sa(ext)
3530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_ext *ext;
3540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
3550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_sa *sa = (void *)ext;
3560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check */
3580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (ext == NULL)
3590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		panic("kdebug_sadb_sa: NULL pointer was passed.\n");
3600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("sadb_sa{ spi=%u replay=%u state=%u\n",
3620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    (u_int32_t)ntohl(sa->sadb_sa_spi), sa->sadb_sa_replay,
3630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    sa->sadb_sa_state);
3640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("  auth=%u encrypt=%u flags=0x%08x }\n",
3650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    sa->sadb_sa_auth, sa->sadb_sa_encrypt, sa->sadb_sa_flags);
3660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
3680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
3690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void
3710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_sadb_address(ext)
3720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_ext *ext;
3730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
3740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_address *addr = (void *)ext;
3750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check */
3770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (ext == NULL)
3780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		panic("kdebug_sadb_address: NULL pointer was passed.\n");
3790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("sadb_address{ proto=%u prefixlen=%u reserved=0x%02x%02x }\n",
3810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    addr->sadb_address_proto, addr->sadb_address_prefixlen,
3820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    ((u_char *)(void *)&addr->sadb_address_reserved)[0],
3830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    ((u_char *)(void *)&addr->sadb_address_reserved)[1]);
3840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	kdebug_sockaddr((void *)((caddr_t)(void *)ext + sizeof(*addr)));
3860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
3880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
3890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void
3910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_sadb_key(ext)
3920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_ext *ext;
3930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
3940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_key *key = (void *)ext;
3950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
3960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check */
3970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (ext == NULL)
3980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		panic("kdebug_sadb_key: NULL pointer was passed.\n");
3990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("sadb_key{ bits=%u reserved=%u\n",
4010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    key->sadb_key_bits, key->sadb_key_reserved);
4020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("  key=");
4030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check 2 */
4050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (((uint32_t)key->sadb_key_bits >> 3) >
4060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		(PFKEY_UNUNIT64(key->sadb_key_len) - sizeof(struct sadb_key))) {
4070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("kdebug_sadb_key: key length mismatch, bit:%d len:%ld.\n",
4080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			(uint32_t)key->sadb_key_bits >> 3,
4090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			(long)PFKEY_UNUNIT64(key->sadb_key_len) - sizeof(struct sadb_key));
4100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
4110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	ipsec_hexdump(key + sizeof(struct sadb_key),
4130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	              (int)((uint32_t)key->sadb_key_bits >> 3));
4140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf(" }\n");
4150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
4160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
4170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void
4190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_sadb_x_sa2(ext)
4200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_ext *ext;
4210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
4220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_x_sa2 *sa2 = (void *)ext;
4230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check */
4250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (ext == NULL)
4260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		panic("kdebug_sadb_x_sa2: NULL pointer was passed.\n");
4270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("sadb_x_sa2{ mode=%u reqid=%u\n",
4290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    sa2->sadb_x_sa2_mode, sa2->sadb_x_sa2_reqid);
4300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("  reserved1=%u reserved2=%u sequence=%u }\n",
4310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    sa2->sadb_x_sa2_reserved1, sa2->sadb_x_sa2_reserved2,
4320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    sa2->sadb_x_sa2_sequence);
4330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
4350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
4360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid
4380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_sadb_x_policy(ext)
4390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_ext *ext;
4400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
4410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_x_policy *xpl = (void *)ext;
4420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sockaddr *addr;
4430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check */
4450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (ext == NULL)
4460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		panic("kdebug_sadb_x_policy: NULL pointer was passed.\n");
4470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef HAVE_PFKEY_POLICY_PRIORITY
4490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("sadb_x_policy{ type=%u dir=%u id=%x priority=%u }\n",
4500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else
4510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("sadb_x_policy{ type=%u dir=%u id=%x }\n",
4520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
4530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		xpl->sadb_x_policy_type, xpl->sadb_x_policy_dir,
4540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef HAVE_PFKEY_POLICY_PRIORITY
4550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		xpl->sadb_x_policy_id, xpl->sadb_x_policy_priority);
4560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else
4570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		xpl->sadb_x_policy_id);
4580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
4590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (xpl->sadb_x_policy_type == IPSEC_POLICY_IPSEC) {
4610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		int tlen;
4620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		struct sadb_x_ipsecrequest *xisr;
4630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		tlen = PFKEY_UNUNIT64(xpl->sadb_x_policy_len) - sizeof(*xpl);
4650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		xisr = (void *)(xpl + 1);
4660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		while (tlen > 0) {
4680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			printf(" { len=%u proto=%u mode=%u level=%u reqid=%u\n",
4690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				xisr->sadb_x_ipsecrequest_len,
4700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				xisr->sadb_x_ipsecrequest_proto,
4710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				xisr->sadb_x_ipsecrequest_mode,
4720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				xisr->sadb_x_ipsecrequest_level,
4730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				xisr->sadb_x_ipsecrequest_reqid);
4740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			if (xisr->sadb_x_ipsecrequest_len > sizeof(*xisr)) {
4760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				addr = (void *)(xisr + 1);
4770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				kdebug_sockaddr(addr);
4780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				addr = (void *)((caddr_t)(void *)addr
4790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang							+ sysdep_sa_len(addr));
4800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				kdebug_sockaddr(addr);
4810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			}
4820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			printf(" }\n");
4840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			/* prevent infinite loop */
4860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			if (xisr->sadb_x_ipsecrequest_len == 0) {
4870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				printf("kdebug_sadb_x_policy: wrong policy struct.\n");
4880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				return;
4890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			}
4900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			/* prevent overflow */
4910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			if (xisr->sadb_x_ipsecrequest_len > tlen) {
4920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				printf("invalid ipsec policy length\n");
4930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				return;
4940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			}
4950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			tlen -= xisr->sadb_x_ipsecrequest_len;
4970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
4980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			xisr = (void *)((caddr_t)(void *)xisr
4990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			                + xisr->sadb_x_ipsecrequest_len);
5000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		}
5010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		if (tlen != 0)
5030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			panic("kdebug_sadb_x_policy: wrong policy struct.\n");
5040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
5050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
5070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
5080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef SADB_X_EXT_NAT_T_TYPE
5100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void
5110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_sadb_x_nat_t_type(struct sadb_ext *ext)
5120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
5130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_x_nat_t_type *ntt = (void *)ext;
5140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check */
5160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (ext == NULL)
5170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		panic("kdebug_sadb_x_nat_t_type: NULL pointer was passed.\n");
5180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("sadb_x_nat_t_type{ type=%u }\n", ntt->sadb_x_nat_t_type_type);
5200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
5220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
5230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void
5250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_sadb_x_nat_t_port(struct sadb_ext *ext)
5260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
5270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_x_nat_t_port *ntp = (void *)ext;
5280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check */
5300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (ext == NULL)
5310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		panic("kdebug_sadb_x_nat_t_port: NULL pointer was passed.\n");
5320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("sadb_x_nat_t_port{ port=%u }\n", ntohs(ntp->sadb_x_nat_t_port_port));
5340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
5360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
5370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
5380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef SADB_X_EXT_PACKET
5400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void
5410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_sadb_x_packet(ext)
5420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_ext *ext;
5430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
5440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sadb_x_packet *pkt = (struct sadb_x_packet *)ext;
5450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check */
5470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (ext == NULL)
5480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		panic("kdebug_sadb_x_packet: NULL pointer was passed.\n");
5490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("sadb_x_packet{ copylen=%u\n", pkt->sadb_x_packet_copylen);
5510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("  packet=");
5520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	ipsec_hexdump((caddr_t)pkt + sizeof(struct sadb_x_packet),
5530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		      pkt->sadb_x_packet_copylen);
5540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf(" }\n");
5550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
5560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
5570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
5580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef _KERNEL
5610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* %%%: about SPD and SAD */
5620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid
5630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_secpolicy(sp)
5640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct secpolicy *sp;
5650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
5660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check */
5670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (sp == NULL)
5680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		panic("kdebug_secpolicy: NULL pointer was passed.\n");
5690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("secpolicy{ refcnt=%u state=%u policy=%u\n",
5710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		sp->refcnt, sp->state, sp->policy);
5720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	kdebug_secpolicyindex(&sp->spidx);
5740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	switch (sp->policy) {
5760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	case IPSEC_POLICY_DISCARD:
5770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("  type=discard }\n");
5780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		break;
5790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	case IPSEC_POLICY_NONE:
5800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("  type=none }\n");
5810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		break;
5820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	case IPSEC_POLICY_IPSEC:
5830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    {
5840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		struct ipsecrequest *isr;
5850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		for (isr = sp->req; isr != NULL; isr = isr->next) {
5860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			printf("  level=%u\n", isr->level);
5880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			kdebug_secasindex(&isr->saidx);
5890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
5900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			if (isr->sav != NULL)
5910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				kdebug_secasv(isr->sav);
5920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		}
5930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("  }\n");
5940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    }
5950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		break;
5960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	case IPSEC_POLICY_BYPASS:
5970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("  type=bypass }\n");
5980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		break;
5990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	case IPSEC_POLICY_ENTRUST:
6000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("  type=entrust }\n");
6010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		break;
6020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	default:
6030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("kdebug_secpolicy: Invalid policy found. %d\n",
6040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			sp->policy);
6050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		break;
6060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
6070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
6090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
6100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid
6120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_secpolicyindex(spidx)
6130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct secpolicyindex *spidx;
6140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
6150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check */
6160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (spidx == NULL)
6170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		panic("kdebug_secpolicyindex: NULL pointer was passed.\n");
6180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("secpolicyindex{ dir=%u prefs=%u prefd=%u ul_proto=%u\n",
6200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		spidx->dir, spidx->prefs, spidx->prefd, spidx->ul_proto);
6210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	ipsec_hexdump((caddr_t)&spidx->src,
6230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		sysdep_sa_len((struct sockaddr *)&spidx->src));
6240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("\n");
6250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	ipsec_hexdump((caddr_t)&spidx->dst,
6260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		sysdep_sa_len((struct sockaddr *)&spidx->dst));
6270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("}\n");
6280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
6300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
6310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid
6330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_secasindex(saidx)
6340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct secasindex *saidx;
6350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
6360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check */
6370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (saidx == NULL)
6380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		panic("kdebug_secpolicyindex: NULL pointer was passed.\n");
6390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("secasindex{ mode=%u proto=%u\n",
6410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		saidx->mode, saidx->proto);
6420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	ipsec_hexdump((caddr_t)&saidx->src,
6440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		sysdep_sa_len((struct sockaddr *)&saidx->src));
6450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("\n");
6460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	ipsec_hexdump((caddr_t)&saidx->dst,
6470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		sysdep_sa_len((struct sockaddr *)&saidx->dst));
6480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("\n");
6490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
6510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
6520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid
6540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_secasv(sav)
6550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct secasvar *sav;
6560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
6570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check */
6580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (sav == NULL)
6590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		panic("kdebug_secasv: NULL pointer was passed.\n");
6600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("secas{");
6620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	kdebug_secasindex(&sav->sah->saidx);
6630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("  refcnt=%u state=%u auth=%u enc=%u\n",
6650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    sav->refcnt, sav->state, sav->alg_auth, sav->alg_enc);
6660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("  spi=%u flags=%u\n",
6670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    (u_int32_t)ntohl(sav->spi), sav->flags);
6680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (sav->key_auth != NULL)
6700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		kdebug_sadb_key((struct sadb_ext *)sav->key_auth);
6710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (sav->key_enc != NULL)
6720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		kdebug_sadb_key((struct sadb_ext *)sav->key_enc);
6730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (sav->iv != NULL) {
6740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("  iv=");
6750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		ipsec_hexdump(sav->iv, sav->ivlen ? sav->ivlen : 8);
6760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("\n");
6770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
6780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (sav->replay != NULL)
6800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		kdebug_secreplay(sav->replay);
6810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (sav->lft_c != NULL)
6820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		kdebug_sadb_lifetime((struct sadb_ext *)sav->lft_c);
6830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (sav->lft_h != NULL)
6840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		kdebug_sadb_lifetime((struct sadb_ext *)sav->lft_h);
6850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (sav->lft_s != NULL)
6860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		kdebug_sadb_lifetime((struct sadb_ext *)sav->lft_s);
6870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#if notyet
6890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* XXX: misc[123] ? */
6900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
6910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
6930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
6940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
6950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void
6960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_secreplay(rpl)
6970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct secreplay *rpl;
6980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
6990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	int len, l;
7000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check */
7020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (rpl == NULL)
7030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		panic("kdebug_secreplay: NULL pointer was passed.\n");
7040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf(" secreplay{ count=%u wsize=%u seq=%u lastseq=%u",
7060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	    rpl->count, rpl->wsize, rpl->seq, rpl->lastseq);
7070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (rpl->bitmap == NULL) {
7090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf(" }\n");
7100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		return;
7110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
7120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("\n   bitmap { ");
7140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	for (len = 0; len < rpl->wsize; len++) {
7160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		for (l = 7; l >= 0; l--)
7170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			printf("%u", (((rpl->bitmap)[len] >> l) & 1) ? 1 : 0);
7180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
7190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf(" }\n");
7200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
7220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
7230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid
7250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_mbufhdr(m)
7260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct mbuf *m;
7270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
7280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check */
7290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (m == NULL)
7300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		return;
7310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("mbuf(%p){ m_next:%p m_nextpkt:%p m_data:%p "
7330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	       "m_len:%d m_type:0x%02x m_flags:0x%02x }\n",
7340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		m, m->m_next, m->m_nextpkt, m->m_data,
7350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		m->m_len, m->m_type, m->m_flags);
7360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (m->m_flags & M_PKTHDR) {
7380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("  m_pkthdr{ len:%d rcvif:%p }\n",
7390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		    m->m_pkthdr.len, m->m_pkthdr.rcvif);
7400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
7410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef __FreeBSD__
7430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (m->m_flags & M_EXT) {
7440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("  m_ext{ ext_buf:%p ext_free:%p "
7450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		       "ext_size:%u ext_ref:%p }\n",
7460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			m->m_ext.ext_buf, m->m_ext.ext_free,
7470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			m->m_ext.ext_size, m->m_ext.ext_ref);
7480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
7490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
7500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
7520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
7530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid
7550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_mbuf(m0)
7560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct mbuf *m0;
7570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
7580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct mbuf *m = m0;
7590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	int i, j;
7600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	for (j = 0; m; m = m->m_next) {
7620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		kdebug_mbufhdr(m);
7630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("  m_data:\n");
7640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		for (i = 0; i < m->m_len; i++) {
7650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			if (i && i % 32 == 0)
7660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				printf("\n");
7670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			if (i % 4 == 0)
7680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang				printf(" ");
7690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			printf("%02x", mtod(m, u_char *)[i]);
7700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang			j++;
7710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		}
7720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("\n");
7730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
7740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
7760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
7770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif /* _KERNEL */
7780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic void
7800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangkdebug_sockaddr(addr)
7810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sockaddr *addr;
7820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
7830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sockaddr_in *sin4;
7840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef INET6
7850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	struct sockaddr_in6 *sin6;
7860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
7870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* sanity check */
7890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (addr == NULL)
7900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		panic("kdebug_sockaddr: NULL pointer was passed.\n");
7910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	/* NOTE: We deal with port number as host byte order. */
7930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("sockaddr{ len=%u family=%u", sysdep_sa_len(addr), addr->sa_family);
7940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
7950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	switch (addr->sa_family) {
7960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	case AF_INET:
7970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		sin4 = (void *)addr;
7980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf(" port=%u\n", ntohs(sin4->sin_port));
7990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		ipsec_hexdump(&sin4->sin_addr, sizeof(sin4->sin_addr));
8000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		break;
8010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef INET6
8020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	case AF_INET6:
8030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		sin6 = (void *)addr;
8040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf(" port=%u\n", ntohs(sin6->sin6_port));
8050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("  flowinfo=0x%08x, scope_id=0x%08x\n",
8060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		    sin6->sin6_flowinfo, sin6->sin6_scope_id);
8070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		ipsec_hexdump(&sin6->sin6_addr, sizeof(sin6->sin6_addr));
8080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		break;
8090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
8100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
8110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
8120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	printf("  }\n");
8130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
8140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
8150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
8160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
8170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid
8180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangipsec_bindump(buf, len)
8190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	caddr_t buf;
8200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	int len;
8210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
8220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	int i;
8230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
8240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	for (i = 0; i < len; i++)
8250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("%c", (unsigned char)buf[i]);
8260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
8270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
8280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
8290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
8300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
8310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid
8320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangipsec_hexdump(buf, len)
8330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	const void *buf;
8340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	int len;
8350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{
8360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	int i;
8370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
8380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	for (i = 0; i < len; i++) {
8390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		if (i != 0 && i % 32 == 0) printf("\n");
8400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		if (i % 4 == 0) printf(" ");
8410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang		printf("%02x", ((const unsigned char *)buf)[i]);
8420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	}
8430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#if 0
8440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	if (i % 32 != 0) printf("\n");
8450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif
8460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang
8470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang	return;
8480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}
849