if_debug.c revision 223735
1/*- 2 * Copyright (c) 2010 Bjoern A. Zeeb <bz@FreeBSD.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> 28__FBSDID("$FreeBSD: head/sys/net/if_debug.c 223735 2011-07-03 12:22:02Z bz $"); 29 30#include "opt_ddb.h" 31 32#include <sys/param.h> 33#include <sys/socket.h> 34#include <sys/types.h> 35 36#ifdef DDB 37#include <ddb/ddb.h> 38#endif 39 40#include <net/if.h> 41#include <net/if_types.h> 42#include <net/if_var.h> 43#include <net/vnet.h> 44 45#ifdef DDB 46struct ifindex_entry { 47 struct ifnet *ife_ifnet; 48}; 49VNET_DECLARE(struct ifindex_entry *, ifindex_table); 50#define V_ifindex_table VNET(ifindex_table) 51 52static void 53if_show_ifnet(struct ifnet *ifp) 54{ 55 56 if (ifp == NULL) 57 return; 58 db_printf("%s:\n", ifp->if_xname); 59#define IF_DB_PRINTF(f, e) db_printf(" %s = " f "\n", #e, ifp->e); 60 IF_DB_PRINTF("%s", if_dname); 61 IF_DB_PRINTF("%d", if_dunit); 62 IF_DB_PRINTF("%s", if_description); 63 IF_DB_PRINTF("%u", if_index); 64 IF_DB_PRINTF("%u", if_refcount); 65 IF_DB_PRINTF("%d", if_index_reserved); 66 IF_DB_PRINTF("%p", if_softc); 67 IF_DB_PRINTF("%p", if_l2com); 68 IF_DB_PRINTF("%p", if_vnet); 69 IF_DB_PRINTF("%p", if_home_vnet); 70 IF_DB_PRINTF("%p", if_addr); 71 IF_DB_PRINTF("%p", if_llsoftc); 72 IF_DB_PRINTF("%p", if_label); 73 IF_DB_PRINTF("%u", if_pcount); 74 IF_DB_PRINTF("0x%08x", if_flags); 75 IF_DB_PRINTF("0x%08x", if_drv_flags); 76 IF_DB_PRINTF("0x%08x", if_capabilities); 77 IF_DB_PRINTF("0x%08x", if_capenable); 78 IF_DB_PRINTF("%p", if_snd.ifq_head); 79 IF_DB_PRINTF("%p", if_snd.ifq_tail); 80 IF_DB_PRINTF("%d", if_snd.ifq_len); 81 IF_DB_PRINTF("%d", if_snd.ifq_maxlen); 82 IF_DB_PRINTF("%d", if_snd.ifq_drops); 83 IF_DB_PRINTF("%p", if_snd.ifq_drv_head); 84 IF_DB_PRINTF("%p", if_snd.ifq_drv_tail); 85 IF_DB_PRINTF("%d", if_snd.ifq_drv_len); 86 IF_DB_PRINTF("%d", if_snd.ifq_drv_maxlen); 87 IF_DB_PRINTF("%d", if_snd.altq_type); 88 IF_DB_PRINTF("%x", if_snd.altq_flags); 89 IF_DB_PRINTF("%u", if_fib); 90#undef IF_DB_PRINTF 91} 92 93DB_SHOW_COMMAND(ifnet, db_show_ifnet) 94{ 95 96 if (!have_addr) { 97 db_printf("usage: show ifnet <struct ifnet *>\n"); 98 return; 99 } 100 101 if_show_ifnet((struct ifnet *)addr); 102} 103 104DB_SHOW_ALL_COMMAND(ifnets, db_show_all_ifnets) 105{ 106 VNET_ITERATOR_DECL(vnet_iter); 107 struct ifnet *ifp; 108 u_short idx; 109 110 VNET_FOREACH(vnet_iter) { 111 CURVNET_SET_QUIET(vnet_iter); 112#ifdef VIMAGE 113 db_printf("vnet=%p\n", curvnet); 114#endif 115 for (idx = 1; idx <= V_if_index; idx++) { 116 ifp = V_ifindex_table[idx].ife_ifnet; 117 if (ifp == NULL) 118 continue; 119 db_printf( "%20s ifp=%p\n", ifp->if_xname, ifp); 120 if (db_pager_quit) 121 break; 122 } 123 CURVNET_RESTORE(); 124 } 125} 126#endif 127