10ef7c8a2SBjoern A. Zeeb /*- 2*fe267a55SPedro F. Giffuni * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3*fe267a55SPedro F. Giffuni * 40ef7c8a2SBjoern A. Zeeb * Copyright (c) 2010 Bjoern A. Zeeb <bz@FreeBSD.org> 50ef7c8a2SBjoern A. Zeeb * All rights reserved. 60ef7c8a2SBjoern A. Zeeb * 70ef7c8a2SBjoern A. Zeeb * Redistribution and use in source and binary forms, with or without 80ef7c8a2SBjoern A. Zeeb * modification, are permitted provided that the following conditions 90ef7c8a2SBjoern A. Zeeb * are met: 100ef7c8a2SBjoern A. Zeeb * 1. Redistributions of source code must retain the above copyright 110ef7c8a2SBjoern A. Zeeb * notice, this list of conditions and the following disclaimer. 120ef7c8a2SBjoern A. Zeeb * 2. Redistributions in binary form must reproduce the above copyright 130ef7c8a2SBjoern A. Zeeb * notice, this list of conditions and the following disclaimer in the 140ef7c8a2SBjoern A. Zeeb * documentation and/or other materials provided with the distribution. 150ef7c8a2SBjoern A. Zeeb * 160ef7c8a2SBjoern A. Zeeb * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 170ef7c8a2SBjoern A. Zeeb * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 180ef7c8a2SBjoern A. Zeeb * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 190ef7c8a2SBjoern A. Zeeb * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 200ef7c8a2SBjoern A. Zeeb * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 210ef7c8a2SBjoern A. Zeeb * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 220ef7c8a2SBjoern A. Zeeb * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 230ef7c8a2SBjoern A. Zeeb * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 240ef7c8a2SBjoern A. Zeeb * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 250ef7c8a2SBjoern A. Zeeb * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 260ef7c8a2SBjoern A. Zeeb * SUCH DAMAGE. 270ef7c8a2SBjoern A. Zeeb */ 280ef7c8a2SBjoern A. Zeeb 290ef7c8a2SBjoern A. Zeeb #include <sys/cdefs.h> 300ef7c8a2SBjoern A. Zeeb __FBSDID("$FreeBSD$"); 310ef7c8a2SBjoern A. Zeeb 320ef7c8a2SBjoern A. Zeeb #include "opt_ddb.h" 330ef7c8a2SBjoern A. Zeeb 340ef7c8a2SBjoern A. Zeeb #include <sys/param.h> 350ef7c8a2SBjoern A. Zeeb #include <sys/systm.h> 360ef7c8a2SBjoern A. Zeeb #include <sys/socket.h> 370ef7c8a2SBjoern A. Zeeb 380ef7c8a2SBjoern A. Zeeb #ifdef DDB 390ef7c8a2SBjoern A. Zeeb #include <ddb/ddb.h> 400ef7c8a2SBjoern A. Zeeb #endif 410ef7c8a2SBjoern A. Zeeb 420ef7c8a2SBjoern A. Zeeb #include <net/if.h> 430ef7c8a2SBjoern A. Zeeb #include <net/if_var.h> 440ef7c8a2SBjoern A. Zeeb 450ef7c8a2SBjoern A. Zeeb #include <netinet/in.h> 460ef7c8a2SBjoern A. Zeeb #include <netinet/in_var.h> 470ef7c8a2SBjoern A. Zeeb 480ef7c8a2SBjoern A. Zeeb #ifdef DDB 490ef7c8a2SBjoern A. Zeeb static void 500ef7c8a2SBjoern A. Zeeb in_show_sockaddr_in(struct sockaddr_in *sin) 510ef7c8a2SBjoern A. Zeeb { 520ef7c8a2SBjoern A. Zeeb 530ef7c8a2SBjoern A. Zeeb #define SIN_DB_RPINTF(f, e) db_printf("\t %s = " f "\n", #e, sin->e); 540ef7c8a2SBjoern A. Zeeb db_printf("\tsockaddr_in = %p\n", sin); 550ef7c8a2SBjoern A. Zeeb SIN_DB_RPINTF("%u", sin_len); 560ef7c8a2SBjoern A. Zeeb SIN_DB_RPINTF("%u", sin_family); 570ef7c8a2SBjoern A. Zeeb SIN_DB_RPINTF("%u", sin_port); 580ef7c8a2SBjoern A. Zeeb SIN_DB_RPINTF("0x%08x", sin_addr.s_addr); 590ef7c8a2SBjoern A. Zeeb db_printf("\t %s = %02x%02x%02x%02x%02x%02x%02x%02x\n", 600ef7c8a2SBjoern A. Zeeb "sin_zero[8]", 610ef7c8a2SBjoern A. Zeeb sin->sin_zero[0], sin->sin_zero[1], 620ef7c8a2SBjoern A. Zeeb sin->sin_zero[2], sin->sin_zero[3], 630ef7c8a2SBjoern A. Zeeb sin->sin_zero[4], sin->sin_zero[5], 640ef7c8a2SBjoern A. Zeeb sin->sin_zero[6], sin->sin_zero[7]); 650ef7c8a2SBjoern A. Zeeb #undef SIN_DB_RPINTF 660ef7c8a2SBjoern A. Zeeb } 670ef7c8a2SBjoern A. Zeeb 680ef7c8a2SBjoern A. Zeeb DB_SHOW_COMMAND(sin, db_show_sin) 690ef7c8a2SBjoern A. Zeeb { 700ef7c8a2SBjoern A. Zeeb struct sockaddr_in *sin; 710ef7c8a2SBjoern A. Zeeb 720ef7c8a2SBjoern A. Zeeb sin = (struct sockaddr_in *)addr; 730ef7c8a2SBjoern A. Zeeb if (sin == NULL) { 740ef7c8a2SBjoern A. Zeeb /* usage: No need to confess if you didn't sin. */ 750ef7c8a2SBjoern A. Zeeb db_printf("usage: show sin <struct sockaddr_in *>\n"); 760ef7c8a2SBjoern A. Zeeb return; 770ef7c8a2SBjoern A. Zeeb } 780ef7c8a2SBjoern A. Zeeb 790ef7c8a2SBjoern A. Zeeb in_show_sockaddr_in(sin); 800ef7c8a2SBjoern A. Zeeb } 810ef7c8a2SBjoern A. Zeeb 820ef7c8a2SBjoern A. Zeeb static void 830ef7c8a2SBjoern A. Zeeb in_show_in_ifaddr(struct in_ifaddr *ia) 840ef7c8a2SBjoern A. Zeeb { 850ef7c8a2SBjoern A. Zeeb 860ef7c8a2SBjoern A. Zeeb #define IA_DB_RPINTF(f, e) db_printf("\t %s = " f "\n", #e, ia->e); 870ef7c8a2SBjoern A. Zeeb #define IA_DB_RPINTF_PTR(f, e) db_printf("\t %s = " f "\n", #e, &ia->e); 880ef7c8a2SBjoern A. Zeeb #define IA_DB_RPINTF_DPTR(f, e) db_printf("\t *%s = " f "\n", #e, *ia->e); 890ef7c8a2SBjoern A. Zeeb db_printf("\tin_ifaddr = %p\n", ia); 900ef7c8a2SBjoern A. Zeeb IA_DB_RPINTF_PTR("%p", ia_ifa); 910ef7c8a2SBjoern A. Zeeb IA_DB_RPINTF("0x%08lx", ia_subnet); 920ef7c8a2SBjoern A. Zeeb IA_DB_RPINTF("0x%08lx", ia_subnetmask); 930ef7c8a2SBjoern A. Zeeb IA_DB_RPINTF("%p", ia_hash.le_next); 940ef7c8a2SBjoern A. Zeeb IA_DB_RPINTF("%p", ia_hash.le_prev); 950ef7c8a2SBjoern A. Zeeb IA_DB_RPINTF_DPTR("%p", ia_hash.le_prev); 960ef7c8a2SBjoern A. Zeeb IA_DB_RPINTF("%p", ia_link.tqe_next); 970ef7c8a2SBjoern A. Zeeb IA_DB_RPINTF("%p", ia_link.tqe_prev); 980ef7c8a2SBjoern A. Zeeb IA_DB_RPINTF_DPTR("%p", ia_link.tqe_prev); 990ef7c8a2SBjoern A. Zeeb IA_DB_RPINTF_PTR("%p", ia_addr); 1000ef7c8a2SBjoern A. Zeeb IA_DB_RPINTF_PTR("%p", ia_dstaddr); 1010ef7c8a2SBjoern A. Zeeb IA_DB_RPINTF_PTR("%p", ia_sockmask); 1020ef7c8a2SBjoern A. Zeeb #undef IA_DB_RPINTF_DPTR 1030ef7c8a2SBjoern A. Zeeb #undef IA_DB_RPINTF_PTR 1040ef7c8a2SBjoern A. Zeeb #undef IA_DB_RPINTF 1050ef7c8a2SBjoern A. Zeeb } 1060ef7c8a2SBjoern A. Zeeb 1070ef7c8a2SBjoern A. Zeeb DB_SHOW_COMMAND(in_ifaddr, db_show_in_ifaddr) 1080ef7c8a2SBjoern A. Zeeb { 1090ef7c8a2SBjoern A. Zeeb struct in_ifaddr *ia; 1100ef7c8a2SBjoern A. Zeeb 1110ef7c8a2SBjoern A. Zeeb ia = (struct in_ifaddr *)addr; 1120ef7c8a2SBjoern A. Zeeb if (ia == NULL) { 1130ef7c8a2SBjoern A. Zeeb db_printf("usage: show in_ifaddr <struct in_ifaddr *>\n"); 1140ef7c8a2SBjoern A. Zeeb return; 1150ef7c8a2SBjoern A. Zeeb } 1160ef7c8a2SBjoern A. Zeeb 1170ef7c8a2SBjoern A. Zeeb in_show_in_ifaddr(ia); 1180ef7c8a2SBjoern A. Zeeb } 1190ef7c8a2SBjoern A. Zeeb #endif 120