1214303Sbz/*- 2214303Sbz * Copyright (c) 2010 Bjoern A. Zeeb <bz@FreeBSD.org> 3214303Sbz * All rights reserved. 4214303Sbz * 5214303Sbz * Redistribution and use in source and binary forms, with or without 6214303Sbz * modification, are permitted provided that the following conditions 7214303Sbz * are met: 8214303Sbz * 1. Redistributions of source code must retain the above copyright 9214303Sbz * notice, this list of conditions and the following disclaimer. 10214303Sbz * 2. Redistributions in binary form must reproduce the above copyright 11214303Sbz * notice, this list of conditions and the following disclaimer in the 12214303Sbz * documentation and/or other materials provided with the distribution. 13214303Sbz * 14214303Sbz * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15214303Sbz * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16214303Sbz * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17214303Sbz * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18214303Sbz * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19214303Sbz * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20214303Sbz * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21214303Sbz * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22214303Sbz * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23214303Sbz * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24214303Sbz * SUCH DAMAGE. 25214303Sbz */ 26214303Sbz 27214303Sbz#include <sys/cdefs.h> 28214303Sbz__FBSDID("$FreeBSD: releng/10.2/sys/netinet/in_debug.c 226401 2011-10-15 16:28:06Z glebius $"); 29214303Sbz 30214303Sbz#include "opt_ddb.h" 31214303Sbz 32214303Sbz#include <sys/param.h> 33214303Sbz#include <sys/systm.h> 34214303Sbz#include <sys/socket.h> 35214303Sbz 36214303Sbz#ifdef DDB 37214303Sbz#include <ddb/ddb.h> 38214303Sbz#endif 39214303Sbz 40214303Sbz#include <net/if.h> 41214303Sbz#include <net/if_var.h> 42214303Sbz 43214303Sbz#include <netinet/in.h> 44214303Sbz#include <netinet/in_var.h> 45214303Sbz 46214303Sbz#ifdef DDB 47214303Sbzstatic void 48214303Sbzin_show_sockaddr_in(struct sockaddr_in *sin) 49214303Sbz{ 50214303Sbz 51214303Sbz#define SIN_DB_RPINTF(f, e) db_printf("\t %s = " f "\n", #e, sin->e); 52214303Sbz db_printf("\tsockaddr_in = %p\n", sin); 53214303Sbz SIN_DB_RPINTF("%u", sin_len); 54214303Sbz SIN_DB_RPINTF("%u", sin_family); 55214303Sbz SIN_DB_RPINTF("%u", sin_port); 56214303Sbz SIN_DB_RPINTF("0x%08x", sin_addr.s_addr); 57214303Sbz db_printf("\t %s = %02x%02x%02x%02x%02x%02x%02x%02x\n", 58214303Sbz "sin_zero[8]", 59214303Sbz sin->sin_zero[0], sin->sin_zero[1], 60214303Sbz sin->sin_zero[2], sin->sin_zero[3], 61214303Sbz sin->sin_zero[4], sin->sin_zero[5], 62214303Sbz sin->sin_zero[6], sin->sin_zero[7]); 63214303Sbz#undef SIN_DB_RPINTF 64214303Sbz} 65214303Sbz 66214303SbzDB_SHOW_COMMAND(sin, db_show_sin) 67214303Sbz{ 68214303Sbz struct sockaddr_in *sin; 69214303Sbz 70214303Sbz sin = (struct sockaddr_in *)addr; 71214303Sbz if (sin == NULL) { 72214303Sbz /* usage: No need to confess if you didn't sin. */ 73214303Sbz db_printf("usage: show sin <struct sockaddr_in *>\n"); 74214303Sbz return; 75214303Sbz } 76214303Sbz 77214303Sbz in_show_sockaddr_in(sin); 78214303Sbz} 79214303Sbz 80214303Sbzstatic void 81214303Sbzin_show_in_ifaddr(struct in_ifaddr *ia) 82214303Sbz{ 83214303Sbz 84214303Sbz#define IA_DB_RPINTF(f, e) db_printf("\t %s = " f "\n", #e, ia->e); 85214303Sbz#define IA_DB_RPINTF_PTR(f, e) db_printf("\t %s = " f "\n", #e, &ia->e); 86214303Sbz#define IA_DB_RPINTF_DPTR(f, e) db_printf("\t *%s = " f "\n", #e, *ia->e); 87214303Sbz db_printf("\tin_ifaddr = %p\n", ia); 88214303Sbz IA_DB_RPINTF_PTR("%p", ia_ifa); 89214303Sbz IA_DB_RPINTF("0x%08lx", ia_subnet); 90214303Sbz IA_DB_RPINTF("0x%08lx", ia_subnetmask); 91214303Sbz IA_DB_RPINTF("%p", ia_hash.le_next); 92214303Sbz IA_DB_RPINTF("%p", ia_hash.le_prev); 93214303Sbz IA_DB_RPINTF_DPTR("%p", ia_hash.le_prev); 94214303Sbz IA_DB_RPINTF("%p", ia_link.tqe_next); 95214303Sbz IA_DB_RPINTF("%p", ia_link.tqe_prev); 96214303Sbz IA_DB_RPINTF_DPTR("%p", ia_link.tqe_prev); 97214303Sbz IA_DB_RPINTF_PTR("%p", ia_addr); 98214303Sbz IA_DB_RPINTF_PTR("%p", ia_dstaddr); 99214303Sbz IA_DB_RPINTF_PTR("%p", ia_sockmask); 100214303Sbz#undef IA_DB_RPINTF_DPTR 101214303Sbz#undef IA_DB_RPINTF_PTR 102214303Sbz#undef IA_DB_RPINTF 103214303Sbz} 104214303Sbz 105214303SbzDB_SHOW_COMMAND(in_ifaddr, db_show_in_ifaddr) 106214303Sbz{ 107214303Sbz struct in_ifaddr *ia; 108214303Sbz 109214303Sbz ia = (struct in_ifaddr *)addr; 110214303Sbz if (ia == NULL) { 111214303Sbz db_printf("usage: show in_ifaddr <struct in_ifaddr *>\n"); 112214303Sbz return; 113214303Sbz } 114214303Sbz 115214303Sbz in_show_in_ifaddr(ia); 116214303Sbz} 117214303Sbz#endif 118