1c3b162d5SRobert Watson /*- 28a36da99SPedro F. Giffuni * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 38a36da99SPedro F. Giffuni * 4c3b162d5SRobert Watson * Copyright (c) 2007 Robert N. M. Watson 5c3b162d5SRobert Watson * All rights reserved. 6c3b162d5SRobert Watson * 7c3b162d5SRobert Watson * Redistribution and use in source and binary forms, with or without 8c3b162d5SRobert Watson * modification, are permitted provided that the following conditions 9c3b162d5SRobert Watson * are met: 10c3b162d5SRobert Watson * 1. Redistributions of source code must retain the above copyright 11c3b162d5SRobert Watson * notice, this list of conditions and the following disclaimer. 12c3b162d5SRobert Watson * 2. Redistributions in binary form must reproduce the above copyright 13c3b162d5SRobert Watson * notice, this list of conditions and the following disclaimer in the 14c3b162d5SRobert Watson * documentation and/or other materials provided with the distribution. 15c3b162d5SRobert Watson * 16c3b162d5SRobert Watson * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17c3b162d5SRobert Watson * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18c3b162d5SRobert Watson * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19c3b162d5SRobert Watson * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20c3b162d5SRobert Watson * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21c3b162d5SRobert Watson * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22c3b162d5SRobert Watson * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23c3b162d5SRobert Watson * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24c3b162d5SRobert Watson * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25c3b162d5SRobert Watson * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26c3b162d5SRobert Watson * SUCH DAMAGE. 27c3b162d5SRobert Watson */ 28c3b162d5SRobert Watson 29c3b162d5SRobert Watson /* 30c3b162d5SRobert Watson * Debugger routines relating to sockets, protocols, etc, for use in DDB. 31c3b162d5SRobert Watson */ 32c3b162d5SRobert Watson 33c3b162d5SRobert Watson #include <sys/cdefs.h> 34c3b162d5SRobert Watson __FBSDID("$FreeBSD$"); 35c3b162d5SRobert Watson 36c3b162d5SRobert Watson #include "opt_ddb.h" 37c3b162d5SRobert Watson 38c3b162d5SRobert Watson #include <sys/param.h> 39c3b162d5SRobert Watson #include <sys/domain.h> 40c3b162d5SRobert Watson #include <sys/kernel.h> 41c3b162d5SRobert Watson #include <sys/protosw.h> 42c3b162d5SRobert Watson #include <sys/socket.h> 43c3b162d5SRobert Watson #include <sys/socketvar.h> 44c3b162d5SRobert Watson 45c3b162d5SRobert Watson #ifdef DDB 46c3b162d5SRobert Watson #include <ddb/ddb.h> 47c3b162d5SRobert Watson 48c3b162d5SRobert Watson static void 49c3b162d5SRobert Watson db_print_sotype(short so_type) 50c3b162d5SRobert Watson { 51c3b162d5SRobert Watson 52c3b162d5SRobert Watson switch (so_type) { 53c3b162d5SRobert Watson case SOCK_STREAM: 54c3b162d5SRobert Watson db_printf("SOCK_STREAM"); 55c3b162d5SRobert Watson break; 56c3b162d5SRobert Watson 57c3b162d5SRobert Watson case SOCK_DGRAM: 58c3b162d5SRobert Watson db_printf("SOCK_DGRAM"); 59c3b162d5SRobert Watson break; 60c3b162d5SRobert Watson 61c3b162d5SRobert Watson case SOCK_RAW: 62c3b162d5SRobert Watson db_printf("SOCK_RAW"); 63c3b162d5SRobert Watson break; 64c3b162d5SRobert Watson 65c3b162d5SRobert Watson case SOCK_RDM: 66c3b162d5SRobert Watson db_printf("SOCK_RDM"); 67c3b162d5SRobert Watson break; 68c3b162d5SRobert Watson 69c3b162d5SRobert Watson case SOCK_SEQPACKET: 70c3b162d5SRobert Watson db_printf("SOCK_SEQPACKET"); 71c3b162d5SRobert Watson break; 72c3b162d5SRobert Watson 73c3b162d5SRobert Watson default: 74c3b162d5SRobert Watson db_printf("unknown"); 75c3b162d5SRobert Watson break; 76c3b162d5SRobert Watson } 77c3b162d5SRobert Watson } 78c3b162d5SRobert Watson 79c3b162d5SRobert Watson static void 80*1a43cff9SSean Bruno db_print_sooptions(int so_options) 81c3b162d5SRobert Watson { 82c3b162d5SRobert Watson int comma; 83c3b162d5SRobert Watson 84c3b162d5SRobert Watson comma = 0; 85c3b162d5SRobert Watson if (so_options & SO_DEBUG) { 86c3b162d5SRobert Watson db_printf("%sSO_DEBUG", comma ? ", " : ""); 87c3b162d5SRobert Watson comma = 1; 88c3b162d5SRobert Watson } 89c3b162d5SRobert Watson if (so_options & SO_ACCEPTCONN) { 90c3b162d5SRobert Watson db_printf("%sSO_ACCEPTCONN", comma ? ", " : ""); 91c3b162d5SRobert Watson comma = 1; 92c3b162d5SRobert Watson } 93c3b162d5SRobert Watson if (so_options & SO_REUSEADDR) { 94c3b162d5SRobert Watson db_printf("%sSO_REUSEADDR", comma ? ", " : ""); 95c3b162d5SRobert Watson comma = 1; 96c3b162d5SRobert Watson } 97c3b162d5SRobert Watson if (so_options & SO_KEEPALIVE) { 98c3b162d5SRobert Watson db_printf("%sSO_KEEPALIVE", comma ? ", " : ""); 99c3b162d5SRobert Watson comma = 1; 100c3b162d5SRobert Watson } 101c3b162d5SRobert Watson if (so_options & SO_DONTROUTE) { 102c3b162d5SRobert Watson db_printf("%sSO_DONTROUTE", comma ? ", " : ""); 103c3b162d5SRobert Watson comma = 1; 104c3b162d5SRobert Watson } 105c3b162d5SRobert Watson if (so_options & SO_BROADCAST) { 106c3b162d5SRobert Watson db_printf("%sSO_BROADCAST", comma ? ", " : ""); 107c3b162d5SRobert Watson comma = 1; 108c3b162d5SRobert Watson } 109c3b162d5SRobert Watson if (so_options & SO_USELOOPBACK) { 110c3b162d5SRobert Watson db_printf("%sSO_USELOOPBACK", comma ? ", " : ""); 111c3b162d5SRobert Watson comma = 1; 112c3b162d5SRobert Watson } 113c3b162d5SRobert Watson if (so_options & SO_LINGER) { 114c3b162d5SRobert Watson db_printf("%sSO_LINGER", comma ? ", " : ""); 115c3b162d5SRobert Watson comma = 1; 116c3b162d5SRobert Watson } 117c3b162d5SRobert Watson if (so_options & SO_OOBINLINE) { 118c3b162d5SRobert Watson db_printf("%sSO_OOBINLINE", comma ? ", " : ""); 119c3b162d5SRobert Watson comma = 1; 120c3b162d5SRobert Watson } 121c3b162d5SRobert Watson if (so_options & SO_REUSEPORT) { 122c3b162d5SRobert Watson db_printf("%sSO_REUSEPORT", comma ? ", " : ""); 123c3b162d5SRobert Watson comma = 1; 124c3b162d5SRobert Watson } 125*1a43cff9SSean Bruno if (so_options & SO_REUSEPORT_LB) { 126*1a43cff9SSean Bruno db_printf("%sSO_REUSEPORT_LB", comma ? ", " : ""); 127*1a43cff9SSean Bruno comma = 1; 128*1a43cff9SSean Bruno } 129c3b162d5SRobert Watson if (so_options & SO_TIMESTAMP) { 130c3b162d5SRobert Watson db_printf("%sSO_TIMESTAMP", comma ? ", " : ""); 131c3b162d5SRobert Watson comma = 1; 132c3b162d5SRobert Watson } 133c3b162d5SRobert Watson if (so_options & SO_NOSIGPIPE) { 134c3b162d5SRobert Watson db_printf("%sSO_NOSIGPIPE", comma ? ", " : ""); 135c3b162d5SRobert Watson comma = 1; 136c3b162d5SRobert Watson } 137c3b162d5SRobert Watson if (so_options & SO_ACCEPTFILTER) { 138c3b162d5SRobert Watson db_printf("%sSO_ACCEPTFILTER", comma ? ", " : ""); 139c3b162d5SRobert Watson comma = 1; 140c3b162d5SRobert Watson } 141c3b162d5SRobert Watson if (so_options & SO_BINTIME) { 142c3b162d5SRobert Watson db_printf("%sSO_BINTIME", comma ? ", " : ""); 143c3b162d5SRobert Watson comma = 1; 144c3b162d5SRobert Watson } 145ce332f1eSPawel Jakub Dawidek if (so_options & SO_NO_OFFLOAD) { 146ce332f1eSPawel Jakub Dawidek db_printf("%sSO_NO_OFFLOAD", comma ? ", " : ""); 147ce332f1eSPawel Jakub Dawidek comma = 1; 148ce332f1eSPawel Jakub Dawidek } 149ce332f1eSPawel Jakub Dawidek if (so_options & SO_NO_DDP) { 150ce332f1eSPawel Jakub Dawidek db_printf("%sSO_NO_DDP", comma ? ", " : ""); 151ce332f1eSPawel Jakub Dawidek comma = 1; 152ce332f1eSPawel Jakub Dawidek } 153c3b162d5SRobert Watson } 154c3b162d5SRobert Watson 155c3b162d5SRobert Watson static void 156c3b162d5SRobert Watson db_print_sostate(short so_state) 157c3b162d5SRobert Watson { 158c3b162d5SRobert Watson int comma; 159c3b162d5SRobert Watson 160c3b162d5SRobert Watson comma = 0; 161c3b162d5SRobert Watson if (so_state & SS_NOFDREF) { 16237e399b2SMartin Blapp db_printf("%sSS_NOFDREF", comma ? ", " : ""); 163c3b162d5SRobert Watson comma = 1; 164c3b162d5SRobert Watson } 165c3b162d5SRobert Watson if (so_state & SS_ISCONNECTED) { 166c3b162d5SRobert Watson db_printf("%sSS_ISCONNECTED", comma ? ", " : ""); 167c3b162d5SRobert Watson comma = 1; 168c3b162d5SRobert Watson } 169c3b162d5SRobert Watson if (so_state & SS_ISCONNECTING) { 170c3b162d5SRobert Watson db_printf("%sSS_ISCONNECTING", comma ? ", " : ""); 171c3b162d5SRobert Watson comma = 1; 172c3b162d5SRobert Watson } 173c3b162d5SRobert Watson if (so_state & SS_ISDISCONNECTING) { 174c3b162d5SRobert Watson db_printf("%sSS_ISDISCONNECTING", comma ? ", " : ""); 175c3b162d5SRobert Watson comma = 1; 176c3b162d5SRobert Watson } 177c3b162d5SRobert Watson if (so_state & SS_NBIO) { 178c3b162d5SRobert Watson db_printf("%sSS_NBIO", comma ? ", " : ""); 179c3b162d5SRobert Watson comma = 1; 180c3b162d5SRobert Watson } 181c3b162d5SRobert Watson if (so_state & SS_ASYNC) { 182c3b162d5SRobert Watson db_printf("%sSS_ASYNC", comma ? ", " : ""); 183c3b162d5SRobert Watson comma = 1; 184c3b162d5SRobert Watson } 185c3b162d5SRobert Watson if (so_state & SS_ISCONFIRMING) { 186c3b162d5SRobert Watson db_printf("%sSS_ISCONFIRMING", comma ? ", " : ""); 187c3b162d5SRobert Watson comma = 1; 188c3b162d5SRobert Watson } 189c3b162d5SRobert Watson if (so_state & SS_PROTOREF) { 190c3b162d5SRobert Watson db_printf("%sSS_PROTOREF", comma ? ", " : ""); 191c3b162d5SRobert Watson comma = 1; 192c3b162d5SRobert Watson } 193c3b162d5SRobert Watson } 194c3b162d5SRobert Watson 195c3b162d5SRobert Watson static void 196c3b162d5SRobert Watson db_print_soqstate(int so_qstate) 197c3b162d5SRobert Watson { 198c3b162d5SRobert Watson int comma; 199c3b162d5SRobert Watson 200c3b162d5SRobert Watson comma = 0; 201c3b162d5SRobert Watson if (so_qstate & SQ_INCOMP) { 202c3b162d5SRobert Watson db_printf("%sSQ_INCOMP", comma ? ", " : ""); 203c3b162d5SRobert Watson comma = 1; 204c3b162d5SRobert Watson } 205c3b162d5SRobert Watson if (so_qstate & SQ_COMP) { 206c3b162d5SRobert Watson db_printf("%sSQ_COMP", comma ? ", " : ""); 207c3b162d5SRobert Watson comma = 1; 208c3b162d5SRobert Watson } 209c3b162d5SRobert Watson } 210c3b162d5SRobert Watson 211c3b162d5SRobert Watson static void 212c3b162d5SRobert Watson db_print_sbstate(short sb_state) 213c3b162d5SRobert Watson { 214c3b162d5SRobert Watson int comma; 215c3b162d5SRobert Watson 216c3b162d5SRobert Watson comma = 0; 217c3b162d5SRobert Watson if (sb_state & SBS_CANTSENDMORE) { 21894df6fadSSergey Kandaurov db_printf("%sSBS_CANTSENDMORE", comma ? ", " : ""); 219c3b162d5SRobert Watson comma = 1; 220c3b162d5SRobert Watson } 221c3b162d5SRobert Watson if (sb_state & SBS_CANTRCVMORE) { 22294df6fadSSergey Kandaurov db_printf("%sSBS_CANTRCVMORE", comma ? ", " : ""); 223c3b162d5SRobert Watson comma = 1; 224c3b162d5SRobert Watson } 225c3b162d5SRobert Watson if (sb_state & SBS_RCVATMARK) { 22694df6fadSSergey Kandaurov db_printf("%sSBS_RCVATMARK", comma ? ", " : ""); 227c3b162d5SRobert Watson comma = 1; 228c3b162d5SRobert Watson } 229c3b162d5SRobert Watson } 230c3b162d5SRobert Watson 231c3b162d5SRobert Watson static void 232c3b162d5SRobert Watson db_print_indent(int indent) 233c3b162d5SRobert Watson { 234c3b162d5SRobert Watson int i; 235c3b162d5SRobert Watson 236c3b162d5SRobert Watson for (i = 0; i < indent; i++) 237c3b162d5SRobert Watson db_printf(" "); 238c3b162d5SRobert Watson } 239c3b162d5SRobert Watson 240c3b162d5SRobert Watson static void 241f44e6e2eSJulian Elischer db_print_domain(struct domain *d, const char *domain_name, int indent) 242c3b162d5SRobert Watson { 243c3b162d5SRobert Watson 244c3b162d5SRobert Watson db_print_indent(indent); 245f44e6e2eSJulian Elischer db_printf("%s at %p\n", domain_name, d); 246c3b162d5SRobert Watson 247c3b162d5SRobert Watson indent += 2; 248c3b162d5SRobert Watson 249c3b162d5SRobert Watson db_print_indent(indent); 250c3b162d5SRobert Watson db_printf("dom_family: %d ", d->dom_family); 251c3b162d5SRobert Watson db_printf("dom_name: %s\n", d->dom_name); 252c3b162d5SRobert Watson 253c3b162d5SRobert Watson db_print_indent(indent); 254c3b162d5SRobert Watson db_printf("dom_init: %p ", d->dom_init); 255c3b162d5SRobert Watson db_printf("dom_externalize: %p ", d->dom_externalize); 256c3b162d5SRobert Watson db_printf("dom_dispose: %p\n", d->dom_dispose); 257c3b162d5SRobert Watson 258c3b162d5SRobert Watson db_print_indent(indent); 259c3b162d5SRobert Watson db_printf("dom_protosw: %p ", d->dom_protosw); 260c3b162d5SRobert Watson db_printf("dom_next: %p\n", d->dom_next); 261c3b162d5SRobert Watson 262c3b162d5SRobert Watson db_print_indent(indent); 263c3b162d5SRobert Watson db_printf("dom_rtattach: %p ", d->dom_rtattach); 264c3b162d5SRobert Watson 265c3b162d5SRobert Watson db_print_indent(indent); 266c3b162d5SRobert Watson db_printf("dom_ifattach: %p ", d->dom_ifattach); 267c3b162d5SRobert Watson db_printf("dom_ifdetach: %p\n", d->dom_ifdetach); 268c3b162d5SRobert Watson } 269c3b162d5SRobert Watson 270c3b162d5SRobert Watson static void 271c3b162d5SRobert Watson db_print_prflags(short pr_flags) 272c3b162d5SRobert Watson { 273c3b162d5SRobert Watson int comma; 274c3b162d5SRobert Watson 275c3b162d5SRobert Watson comma = 0; 276c3b162d5SRobert Watson if (pr_flags & PR_ATOMIC) { 277c3b162d5SRobert Watson db_printf("%sPR_ATOMIC", comma ? ", " : ""); 278c3b162d5SRobert Watson comma = 1; 279c3b162d5SRobert Watson } 280c3b162d5SRobert Watson if (pr_flags & PR_ADDR) { 281c3b162d5SRobert Watson db_printf("%sPR_ADDR", comma ? ", " : ""); 282c3b162d5SRobert Watson comma = 1; 283c3b162d5SRobert Watson } 284c3b162d5SRobert Watson if (pr_flags & PR_CONNREQUIRED) { 285c3b162d5SRobert Watson db_printf("%sPR_CONNREQUIRED", comma ? ", " : ""); 286c3b162d5SRobert Watson comma = 1; 287c3b162d5SRobert Watson } 288c3b162d5SRobert Watson if (pr_flags & PR_WANTRCVD) { 289c3b162d5SRobert Watson db_printf("%sPR_WANTRCVD", comma ? ", " : ""); 290c3b162d5SRobert Watson comma = 1; 291c3b162d5SRobert Watson } 292c3b162d5SRobert Watson if (pr_flags & PR_RIGHTS) { 293c3b162d5SRobert Watson db_printf("%sPR_RIGHTS", comma ? ", " : ""); 294c3b162d5SRobert Watson comma = 1; 295c3b162d5SRobert Watson } 296c3b162d5SRobert Watson if (pr_flags & PR_IMPLOPCL) { 297c3b162d5SRobert Watson db_printf("%sPR_IMPLOPCL", comma ? ", " : ""); 298c3b162d5SRobert Watson comma = 1; 299c3b162d5SRobert Watson } 300c3b162d5SRobert Watson if (pr_flags & PR_LASTHDR) { 301c3b162d5SRobert Watson db_printf("%sPR_LASTHDR", comma ? ", " : ""); 302c3b162d5SRobert Watson comma = 1; 303c3b162d5SRobert Watson } 304c3b162d5SRobert Watson } 305c3b162d5SRobert Watson 306c3b162d5SRobert Watson static void 307c3b162d5SRobert Watson db_print_protosw(struct protosw *pr, const char *prname, int indent) 308c3b162d5SRobert Watson { 309c3b162d5SRobert Watson 310c3b162d5SRobert Watson db_print_indent(indent); 311c3b162d5SRobert Watson db_printf("%s at %p\n", prname, pr); 312c3b162d5SRobert Watson 313c3b162d5SRobert Watson indent += 2; 314c3b162d5SRobert Watson 315c3b162d5SRobert Watson db_print_indent(indent); 316c3b162d5SRobert Watson db_printf("pr_type: %d ", pr->pr_type); 317c3b162d5SRobert Watson db_printf("pr_domain: %p\n", pr->pr_domain); 318c3b162d5SRobert Watson if (pr->pr_domain != NULL) 319c3b162d5SRobert Watson db_print_domain(pr->pr_domain, "pr_domain", indent); 320c3b162d5SRobert Watson 321c3b162d5SRobert Watson db_print_indent(indent); 322c3b162d5SRobert Watson db_printf("pr_protocol: %d\n", pr->pr_protocol); 323c3b162d5SRobert Watson 324c3b162d5SRobert Watson db_print_indent(indent); 325c3b162d5SRobert Watson db_printf("pr_flags: %d (", pr->pr_flags); 326c3b162d5SRobert Watson db_print_prflags(pr->pr_flags); 327c3b162d5SRobert Watson db_printf(")\n"); 328c3b162d5SRobert Watson 329c3b162d5SRobert Watson db_print_indent(indent); 330c3b162d5SRobert Watson db_printf("pr_input: %p ", pr->pr_input); 331c3b162d5SRobert Watson db_printf("pr_output: %p ", pr->pr_output); 332c3b162d5SRobert Watson db_printf("pr_ctlinput: %p\n", pr->pr_ctlinput); 333c3b162d5SRobert Watson 334c3b162d5SRobert Watson db_print_indent(indent); 335c3b162d5SRobert Watson db_printf("pr_ctloutput: %p ", pr->pr_ctloutput); 336c3b162d5SRobert Watson db_printf("pr_init: %p\n", pr->pr_init); 337c3b162d5SRobert Watson 338c3b162d5SRobert Watson db_print_indent(indent); 339c3b162d5SRobert Watson db_printf("pr_fasttimo: %p ", pr->pr_fasttimo); 340c3b162d5SRobert Watson db_printf("pr_slowtimo: %p ", pr->pr_slowtimo); 341c3b162d5SRobert Watson db_printf("pr_drain: %p\n", pr->pr_drain); 342c3b162d5SRobert Watson } 343c3b162d5SRobert Watson 344c3b162d5SRobert Watson static void 345c3b162d5SRobert Watson db_print_sbflags(short sb_flags) 346c3b162d5SRobert Watson { 347c3b162d5SRobert Watson int comma; 348c3b162d5SRobert Watson 349c3b162d5SRobert Watson comma = 0; 350c3b162d5SRobert Watson if (sb_flags & SB_WAIT) { 351c3b162d5SRobert Watson db_printf("%sSB_WAIT", comma ? ", " : ""); 352c3b162d5SRobert Watson comma = 1; 353c3b162d5SRobert Watson } 354c3b162d5SRobert Watson if (sb_flags & SB_SEL) { 355c3b162d5SRobert Watson db_printf("%sSB_SEL", comma ? ", " : ""); 356c3b162d5SRobert Watson comma = 1; 357c3b162d5SRobert Watson } 358c3b162d5SRobert Watson if (sb_flags & SB_ASYNC) { 359c3b162d5SRobert Watson db_printf("%sSB_ASYNC", comma ? ", " : ""); 360c3b162d5SRobert Watson comma = 1; 361c3b162d5SRobert Watson } 362c3b162d5SRobert Watson if (sb_flags & SB_UPCALL) { 363c3b162d5SRobert Watson db_printf("%sSB_UPCALL", comma ? ", " : ""); 364c3b162d5SRobert Watson comma = 1; 365c3b162d5SRobert Watson } 366c3b162d5SRobert Watson if (sb_flags & SB_NOINTR) { 367c3b162d5SRobert Watson db_printf("%sSB_NOINTR", comma ? ", " : ""); 368c3b162d5SRobert Watson comma = 1; 369c3b162d5SRobert Watson } 370c3b162d5SRobert Watson if (sb_flags & SB_AIO) { 371c3b162d5SRobert Watson db_printf("%sSB_AIO", comma ? ", " : ""); 372c3b162d5SRobert Watson comma = 1; 373c3b162d5SRobert Watson } 374c3b162d5SRobert Watson if (sb_flags & SB_KNOTE) { 375c3b162d5SRobert Watson db_printf("%sSB_KNOTE", comma ? ", " : ""); 376c3b162d5SRobert Watson comma = 1; 377c3b162d5SRobert Watson } 378c3b162d5SRobert Watson if (sb_flags & SB_AUTOSIZE) { 379c3b162d5SRobert Watson db_printf("%sSB_AUTOSIZE", comma ? ", " : ""); 380c3b162d5SRobert Watson comma = 1; 381c3b162d5SRobert Watson } 382c3b162d5SRobert Watson } 383c3b162d5SRobert Watson 384c3b162d5SRobert Watson static void 385c3b162d5SRobert Watson db_print_sockbuf(struct sockbuf *sb, const char *sockbufname, int indent) 386c3b162d5SRobert Watson { 387c3b162d5SRobert Watson 388c3b162d5SRobert Watson db_print_indent(indent); 389c3b162d5SRobert Watson db_printf("%s at %p\n", sockbufname, sb); 390c3b162d5SRobert Watson 391c3b162d5SRobert Watson indent += 2; 392c3b162d5SRobert Watson 393c3b162d5SRobert Watson db_print_indent(indent); 394c3b162d5SRobert Watson db_printf("sb_state: 0x%x (", sb->sb_state); 395c3b162d5SRobert Watson db_print_sbstate(sb->sb_state); 396c3b162d5SRobert Watson db_printf(")\n"); 397c3b162d5SRobert Watson 398c3b162d5SRobert Watson db_print_indent(indent); 399c3b162d5SRobert Watson db_printf("sb_mb: %p ", sb->sb_mb); 400c3b162d5SRobert Watson db_printf("sb_mbtail: %p ", sb->sb_mbtail); 401c3b162d5SRobert Watson db_printf("sb_lastrecord: %p\n", sb->sb_lastrecord); 402c3b162d5SRobert Watson 403c3b162d5SRobert Watson db_print_indent(indent); 404a82be55dSBjoern A. Zeeb db_printf("sb_sndptr: %p ", sb->sb_sndptr); 405a82be55dSBjoern A. Zeeb db_printf("sb_sndptroff: %u\n", sb->sb_sndptroff); 406c3b162d5SRobert Watson 407c3b162d5SRobert Watson db_print_indent(indent); 4080f9d0a73SGleb Smirnoff db_printf("sb_acc: %u ", sb->sb_acc); 4090f9d0a73SGleb Smirnoff db_printf("sb_ccc: %u ", sb->sb_ccc); 410a82be55dSBjoern A. Zeeb db_printf("sb_hiwat: %u ", sb->sb_hiwat); 411a82be55dSBjoern A. Zeeb db_printf("sb_mbcnt: %u ", sb->sb_mbcnt); 412a82be55dSBjoern A. Zeeb db_printf("sb_mbmax: %u\n", sb->sb_mbmax); 413a82be55dSBjoern A. Zeeb 414a82be55dSBjoern A. Zeeb db_print_indent(indent); 415c74ae2caSRyan Libby db_printf("sb_mcnt: %u ", sb->sb_mcnt); 416c74ae2caSRyan Libby db_printf("sb_ccnt: %u ", sb->sb_ccnt); 417a82be55dSBjoern A. Zeeb db_printf("sb_ctl: %u ", sb->sb_ctl); 418c3b162d5SRobert Watson db_printf("sb_lowat: %d ", sb->sb_lowat); 4197729cbf1SDavide Italiano db_printf("sb_timeo: %jd\n", sb->sb_timeo); 420c3b162d5SRobert Watson 421c3b162d5SRobert Watson db_print_indent(indent); 422c3b162d5SRobert Watson db_printf("sb_flags: 0x%x (", sb->sb_flags); 423c3b162d5SRobert Watson db_print_sbflags(sb->sb_flags); 424c3b162d5SRobert Watson db_printf(")\n"); 425f3215338SJohn Baldwin 426f3215338SJohn Baldwin db_print_indent(indent); 427f3215338SJohn Baldwin db_printf("sb_aiojobq first: %p\n", TAILQ_FIRST(&sb->sb_aiojobq)); 428c3b162d5SRobert Watson } 429c3b162d5SRobert Watson 430c3b162d5SRobert Watson static void 431c3b162d5SRobert Watson db_print_socket(struct socket *so, const char *socketname, int indent) 432c3b162d5SRobert Watson { 433c3b162d5SRobert Watson 434c3b162d5SRobert Watson db_print_indent(indent); 435c3b162d5SRobert Watson db_printf("%s at %p\n", socketname, so); 436c3b162d5SRobert Watson 437c3b162d5SRobert Watson indent += 2; 438c3b162d5SRobert Watson 439c3b162d5SRobert Watson db_print_indent(indent); 440c3b162d5SRobert Watson db_printf("so_count: %d ", so->so_count); 441c3b162d5SRobert Watson db_printf("so_type: %d (", so->so_type); 442c3b162d5SRobert Watson db_print_sotype(so->so_type); 443c3b162d5SRobert Watson db_printf(")\n"); 444c3b162d5SRobert Watson 445c3b162d5SRobert Watson db_print_indent(indent); 446c3b162d5SRobert Watson db_printf("so_options: 0x%x (", so->so_options); 447c3b162d5SRobert Watson db_print_sooptions(so->so_options); 448c3b162d5SRobert Watson db_printf(")\n"); 449c3b162d5SRobert Watson 450c3b162d5SRobert Watson db_print_indent(indent); 451c3b162d5SRobert Watson db_printf("so_linger: %d ", so->so_linger); 452c3b162d5SRobert Watson db_printf("so_state: 0x%x (", so->so_state); 453c3b162d5SRobert Watson db_print_sostate(so->so_state); 454c3b162d5SRobert Watson db_printf(")\n"); 455c3b162d5SRobert Watson 456c3b162d5SRobert Watson db_print_indent(indent); 457c3b162d5SRobert Watson db_printf("so_pcb: %p ", so->so_pcb); 458c3b162d5SRobert Watson db_printf("so_proto: %p\n", so->so_proto); 459c3b162d5SRobert Watson 460c3b162d5SRobert Watson if (so->so_proto != NULL) 461c3b162d5SRobert Watson db_print_protosw(so->so_proto, "so_proto", indent); 462c3b162d5SRobert Watson 463c3b162d5SRobert Watson db_print_indent(indent); 464779f106aSGleb Smirnoff if (so->so_options & SO_ACCEPTCONN) { 465779f106aSGleb Smirnoff db_printf("sol_incomp first: %p ", 466779f106aSGleb Smirnoff TAILQ_FIRST(&so->sol_incomp)); 467779f106aSGleb Smirnoff db_printf("sol_comp first: %p\n", TAILQ_FIRST(&so->sol_comp)); 468779f106aSGleb Smirnoff db_printf("sol_qlen: %d ", so->sol_qlen); 469779f106aSGleb Smirnoff db_printf("sol_incqlen: %d ", so->sol_incqlen); 470779f106aSGleb Smirnoff db_printf("sol_qlimit: %d ", so->sol_qlimit); 471779f106aSGleb Smirnoff } else { 472779f106aSGleb Smirnoff db_printf("so_qstate: 0x%x (", so->so_qstate); 473779f106aSGleb Smirnoff db_print_soqstate(so->so_qstate); 474c74ae2caSRyan Libby db_printf(") "); 475779f106aSGleb Smirnoff db_printf("so_listen: %p ", so->so_listen); 476c3b162d5SRobert Watson /* so_list skipped */ 477c3b162d5SRobert Watson db_printf("so_timeo: %d ", so->so_timeo); 478c3b162d5SRobert Watson db_printf("so_error: %d\n", so->so_error); 479c3b162d5SRobert Watson 480c3b162d5SRobert Watson db_print_indent(indent); 481c3b162d5SRobert Watson db_printf("so_sigio: %p ", so->so_sigio); 482c74ae2caSRyan Libby db_printf("so_oobmark: %lu\n", so->so_oobmark); 483c3b162d5SRobert Watson 484c3b162d5SRobert Watson db_print_sockbuf(&so->so_rcv, "so_rcv", indent); 485c3b162d5SRobert Watson db_print_sockbuf(&so->so_snd, "so_snd", indent); 486c3b162d5SRobert Watson } 487779f106aSGleb Smirnoff } 488c3b162d5SRobert Watson 489c3b162d5SRobert Watson DB_SHOW_COMMAND(socket, db_show_socket) 490c3b162d5SRobert Watson { 491c3b162d5SRobert Watson struct socket *so; 492c3b162d5SRobert Watson 493c3b162d5SRobert Watson if (!have_addr) { 494c3b162d5SRobert Watson db_printf("usage: show socket <addr>\n"); 495c3b162d5SRobert Watson return; 496c3b162d5SRobert Watson } 497c3b162d5SRobert Watson so = (struct socket *)addr; 498c3b162d5SRobert Watson 499c3b162d5SRobert Watson db_print_socket(so, "socket", 0); 500c3b162d5SRobert Watson } 501c3b162d5SRobert Watson 502c3b162d5SRobert Watson DB_SHOW_COMMAND(sockbuf, db_show_sockbuf) 503c3b162d5SRobert Watson { 504c3b162d5SRobert Watson struct sockbuf *sb; 505c3b162d5SRobert Watson 506c3b162d5SRobert Watson if (!have_addr) { 507c3b162d5SRobert Watson db_printf("usage: show sockbuf <addr>\n"); 508c3b162d5SRobert Watson return; 509c3b162d5SRobert Watson } 510c3b162d5SRobert Watson sb = (struct sockbuf *)addr; 511c3b162d5SRobert Watson 512c3b162d5SRobert Watson db_print_sockbuf(sb, "sockbuf", 0); 513c3b162d5SRobert Watson } 514c3b162d5SRobert Watson 515c3b162d5SRobert Watson DB_SHOW_COMMAND(protosw, db_show_protosw) 516c3b162d5SRobert Watson { 517c3b162d5SRobert Watson struct protosw *pr; 518c3b162d5SRobert Watson 519c3b162d5SRobert Watson if (!have_addr) { 520c3b162d5SRobert Watson db_printf("usage: show protosw <addr>\n"); 521c3b162d5SRobert Watson return; 522c3b162d5SRobert Watson } 523c3b162d5SRobert Watson pr = (struct protosw *)addr; 524c3b162d5SRobert Watson 525c3b162d5SRobert Watson db_print_protosw(pr, "protosw", 0); 526c3b162d5SRobert Watson } 527c3b162d5SRobert Watson 528c3b162d5SRobert Watson DB_SHOW_COMMAND(domain, db_show_domain) 529c3b162d5SRobert Watson { 530c3b162d5SRobert Watson struct domain *d; 531c3b162d5SRobert Watson 532c3b162d5SRobert Watson if (!have_addr) { 533c3b162d5SRobert Watson db_printf("usage: show protosw <addr>\n"); 534c3b162d5SRobert Watson return; 535c3b162d5SRobert Watson } 536c3b162d5SRobert Watson d = (struct domain *)addr; 537c3b162d5SRobert Watson 538c3b162d5SRobert Watson db_print_domain(d, "domain", 0); 539c3b162d5SRobert Watson } 540c3b162d5SRobert Watson #endif 541