* Copyright (c) 1983, 1988 Regents of the University of California.
* %sccs.include.redist.c%
static char sccsid
[] = "@(#)unix.c 5.14 (Berkeley) %G%";
* Display protocol blocks in the unix domain.
#include <sys/socketvar.h>
static void unixdomainpr
__P((struct socket
*, caddr_t
));
struct file
*file
, *fileNFILE
;
register struct file
*fp
;
struct socket sock
, *so
= &sock
;
struct protosw
*unixsw
= (struct protosw
*)off
;
filebuf
= (char *)kvm_getfiles(kvmd
, KINFO_FILE
, 0, &nfiles
);
printf("Out of memory (file table).\n");
file
= (struct file
*)(filebuf
+ sizeof(fp
));
fileNFILE
= file
+ nfiles
;
for (fp
= file
; fp
< fileNFILE
; fp
++) {
if (fp
->f_count
== 0 || fp
->f_type
!= DTYPE_SOCKET
)
if (kread((u_long
)fp
->f_data
, (char *)so
, sizeof (*so
)))
if (so
->so_proto
>= unixsw
&& so
->so_proto
<= unixsw
+ 2)
unixdomainpr(so
, fp
->f_data
);
static char *socktype
[] =
{ "#0", "stream", "dgram", "raw", "rdm", "seqpacket" };
register struct socket
*so
;
struct unpcb unpcb
, *unp
= &unpcb
;
if (kread((u_long
)so
->so_pcb
, (char *)unp
, sizeof (*unp
)))
if (kread((u_long
)unp
->unp_addr
, (char *)m
, sizeof (*m
)))
sa
= (struct sockaddr_un
*)(m
->m_dat
);
printf("Active UNIX domain sockets\n");
"%-8.8s %-6.6s %-6.6s %-6.6s %8.8s %8.8s %8.8s %8.8s Addr\n",
"Address", "Type", "Recv-Q", "Send-Q",
"Inode", "Conn", "Refs", "Nextref");
printf("%8x %-6.6s %6d %6d %8x %8x %8x %8x",
soaddr
, socktype
[so
->so_type
], so
->so_rcv
.sb_cc
, so
->so_snd
.sb_cc
,
unp
->unp_vnode
, unp
->unp_conn
,
unp
->unp_refs
, unp
->unp_nextref
);
printf(" %.*s", m
->m_len
- (int)sizeof(sa
->sun_family
),