* Copyright (c) 1983, 1988 Regents of the University of California.
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the University of California, Berkeley. The name of the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
static char sccsid
[] = "@(#)unix.c 5.6 (Berkeley) 6/29/88";
* Display protocol blocks in the unix domain.
#include <sys/socketvar.h>
unixpr(nfileaddr
, fileaddr
, unixsw
)
off_t nfileaddr
, fileaddr
;
register struct file
*fp
;
struct socket sock
, *so
= &sock
;
if (nfileaddr
== 0 || fileaddr
== 0) {
printf("nfile or file not in namelist.\n");
klseek(kmem
, nfileaddr
, L_SET
);
if (read(kmem
, (char *)&nfile
, sizeof (nfile
)) != sizeof (nfile
)) {
printf("nfile: bad read.\n");
klseek(kmem
, fileaddr
, L_SET
);
if (read(kmem
, (char *)&filep
, sizeof (filep
)) != sizeof (filep
)) {
printf("File table address, bad read.\n");
file
= (struct file
*)calloc(nfile
, sizeof (struct file
));
if (file
== (struct file
*)0) {
printf("Out of memory (file table).\n");
klseek(kmem
, (off_t
)filep
, L_SET
);
if (read(kmem
, (char *)file
, nfile
* sizeof (struct file
)) !=
nfile
* sizeof (struct file
)) {
printf("File table read error.\n");
fileNFILE
= file
+ nfile
;
for (fp
= file
; fp
< fileNFILE
; fp
++) {
if (fp
->f_count
== 0 || fp
->f_type
!= DTYPE_SOCKET
)
klseek(kmem
, (off_t
)fp
->f_data
, L_SET
);
if (read(kmem
, (char *)so
, sizeof (*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
;
klseek(kmem
, (off_t
)so
->so_pcb
, L_SET
);
if (read(kmem
, (char *)unp
, sizeof (*unp
)) != sizeof (*unp
))
klseek(kmem
, (off_t
)unp
->unp_addr
, L_SET
);
if (read(kmem
, (char *)m
, sizeof (*m
)) != sizeof (*m
))
sa
= mtod(m
, struct sockaddr_un
*);
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_inode
, unp
->unp_conn
,
unp
->unp_refs
, unp
->unp_nextref
);
printf(" %.*s", m
->m_len
- sizeof(sa
->sun_family
),