if_debug.c revision 214333
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 214333 2010-10-25 08:30:19Z 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#undef IF_DB_PRINTF 90} 91 92DB_SHOW_COMMAND(ifnet, db_show_ifnet) 93{ 94 95 if (!have_addr) { 96 db_printf("usage: show ifnet <struct ifnet *>\n"); 97 return; 98 } 99 100 if_show_ifnet((struct ifnet *)addr); 101} 102 103DB_SHOW_ALL_COMMAND(ifnets, db_show_all_ifnets) 104{ 105 VNET_ITERATOR_DECL(vnet_iter); 106 struct ifnet *ifp; 107 u_short idx; 108 109 VNET_FOREACH(vnet_iter) { 110 CURVNET_SET_QUIET(vnet_iter); 111#ifdef VIMAGE 112 db_printf("vnet=%p\n", curvnet); 113#endif 114 for (idx = 1; idx <= V_if_index; idx++) { 115 ifp = V_ifindex_table[idx].ife_ifnet; 116 if (ifp == NULL) 117 continue; 118 db_printf( "%20s ifp=%p\n", ifp->if_xname, ifp); 119 if (db_pager_quit) 120 break; 121 } 122 CURVNET_RESTORE(); 123 } 124} 125#endif 126