xref: /freebsd/lib/libprocstat/libprocstat.h (revision d1145837)
10daf62d9SStanislav Sedov /*-
20daf62d9SStanislav Sedov  * Copyright (c) 2009 Stanislav Sedov <stas@FreeBSD.org>
30daf62d9SStanislav Sedov  * All rights reserved.
40daf62d9SStanislav Sedov  *
50daf62d9SStanislav Sedov  * Redistribution and use in source and binary forms, with or without
60daf62d9SStanislav Sedov  * modification, are permitted provided that the following conditions
70daf62d9SStanislav Sedov  * are met:
80daf62d9SStanislav Sedov  * 1. Redistributions of source code must retain the above copyright
90daf62d9SStanislav Sedov  *    notice, this list of conditions and the following disclaimer.
100daf62d9SStanislav Sedov  * 2. Redistributions in binary form must reproduce the above copyright
110daf62d9SStanislav Sedov  *    notice, this list of conditions and the following disclaimer in the
120daf62d9SStanislav Sedov  *    documentation and/or other materials provided with the distribution.
130daf62d9SStanislav Sedov  *
140daf62d9SStanislav Sedov  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
150daf62d9SStanislav Sedov  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
160daf62d9SStanislav Sedov  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
170daf62d9SStanislav Sedov  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
180daf62d9SStanislav Sedov  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
190daf62d9SStanislav Sedov  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
200daf62d9SStanislav Sedov  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
210daf62d9SStanislav Sedov  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
220daf62d9SStanislav Sedov  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
230daf62d9SStanislav Sedov  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
240daf62d9SStanislav Sedov  * SUCH DAMAGE.
250daf62d9SStanislav Sedov  *
260daf62d9SStanislav Sedov  * $FreeBSD$
270daf62d9SStanislav Sedov  */
280daf62d9SStanislav Sedov 
290daf62d9SStanislav Sedov #ifndef _LIBPROCSTAT_H_
300daf62d9SStanislav Sedov #define	_LIBPROCSTAT_H_
310daf62d9SStanislav Sedov 
320daf62d9SStanislav Sedov /*
330daf62d9SStanislav Sedov  * Vnode types.
340daf62d9SStanislav Sedov  */
350daf62d9SStanislav Sedov #define	PS_FST_VTYPE_VNON	1
360daf62d9SStanislav Sedov #define	PS_FST_VTYPE_VREG	2
370daf62d9SStanislav Sedov #define	PS_FST_VTYPE_VDIR	3
380daf62d9SStanislav Sedov #define	PS_FST_VTYPE_VBLK	4
390daf62d9SStanislav Sedov #define	PS_FST_VTYPE_VCHR	5
400daf62d9SStanislav Sedov #define	PS_FST_VTYPE_VLNK	6
410daf62d9SStanislav Sedov #define	PS_FST_VTYPE_VSOCK	7
420daf62d9SStanislav Sedov #define	PS_FST_VTYPE_VFIFO	8
430daf62d9SStanislav Sedov #define	PS_FST_VTYPE_VBAD	9
440daf62d9SStanislav Sedov #define	PS_FST_VTYPE_UNKNOWN	255
450daf62d9SStanislav Sedov 
460daf62d9SStanislav Sedov /*
470daf62d9SStanislav Sedov  * Descriptor types.
480daf62d9SStanislav Sedov  */
490daf62d9SStanislav Sedov #define	PS_FST_TYPE_VNODE	1
500daf62d9SStanislav Sedov #define	PS_FST_TYPE_FIFO	2
510daf62d9SStanislav Sedov #define	PS_FST_TYPE_SOCKET	3
520daf62d9SStanislav Sedov #define	PS_FST_TYPE_PIPE	4
530daf62d9SStanislav Sedov #define	PS_FST_TYPE_PTS		5
540daf62d9SStanislav Sedov #define	PS_FST_TYPE_KQUEUE	6
550daf62d9SStanislav Sedov #define	PS_FST_TYPE_CRYPTO	7
560daf62d9SStanislav Sedov #define	PS_FST_TYPE_MQUEUE	8
570daf62d9SStanislav Sedov #define	PS_FST_TYPE_SHM		9
580daf62d9SStanislav Sedov #define	PS_FST_TYPE_SEM		10
590daf62d9SStanislav Sedov #define	PS_FST_TYPE_UNKNOWN	11
600daf62d9SStanislav Sedov #define	PS_FST_TYPE_NONE	12
610daf62d9SStanislav Sedov 
620daf62d9SStanislav Sedov /*
630daf62d9SStanislav Sedov  * Special descriptor numbers.
640daf62d9SStanislav Sedov  */
650daf62d9SStanislav Sedov #define	PS_FST_UFLAG_RDIR	0x0001
660daf62d9SStanislav Sedov #define	PS_FST_UFLAG_CDIR	0x0002
670daf62d9SStanislav Sedov #define	PS_FST_UFLAG_JAIL	0x0004
680daf62d9SStanislav Sedov #define	PS_FST_UFLAG_TRACE	0x0008
690daf62d9SStanislav Sedov #define	PS_FST_UFLAG_TEXT	0x0010
700daf62d9SStanislav Sedov #define	PS_FST_UFLAG_MMAP	0x0020
710daf62d9SStanislav Sedov #define	PS_FST_UFLAG_CTTY	0x0040
720daf62d9SStanislav Sedov 
730daf62d9SStanislav Sedov /*
740daf62d9SStanislav Sedov  * Descriptor flags.
750daf62d9SStanislav Sedov  */
760daf62d9SStanislav Sedov #define PS_FST_FFLAG_READ	0x0001
770daf62d9SStanislav Sedov #define PS_FST_FFLAG_WRITE	0x0002
780daf62d9SStanislav Sedov #define	PS_FST_FFLAG_NONBLOCK	0x0004
790daf62d9SStanislav Sedov #define	PS_FST_FFLAG_APPEND	0x0008
800daf62d9SStanislav Sedov #define	PS_FST_FFLAG_SHLOCK	0x0010
810daf62d9SStanislav Sedov #define	PS_FST_FFLAG_EXLOCK	0x0020
820daf62d9SStanislav Sedov #define	PS_FST_FFLAG_ASYNC	0x0040
830daf62d9SStanislav Sedov #define	PS_FST_FFLAG_SYNC	0x0080
840daf62d9SStanislav Sedov #define	PS_FST_FFLAG_NOFOLLOW	0x0100
850daf62d9SStanislav Sedov #define	PS_FST_FFLAG_CREAT	0x0200
860daf62d9SStanislav Sedov #define	PS_FST_FFLAG_TRUNC	0x0400
870daf62d9SStanislav Sedov #define	PS_FST_FFLAG_EXCL	0x0800
880daf62d9SStanislav Sedov #define	PS_FST_FFLAG_DIRECT	0x1000
890daf62d9SStanislav Sedov #define	PS_FST_FFLAG_EXEC	0x2000
900daf62d9SStanislav Sedov #define	PS_FST_FFLAG_HASLOCK	0x4000
91d57486e2SRobert Watson #define	PS_FST_FFLAG_CAPABILITY	0x8000
920daf62d9SStanislav Sedov 
930daf62d9SStanislav Sedov struct procstat;
940daf62d9SStanislav Sedov struct filestat {
950daf62d9SStanislav Sedov 	int	fs_type;	/* Descriptor type. */
960daf62d9SStanislav Sedov 	int	fs_flags;	/* filestat specific flags. */
970daf62d9SStanislav Sedov 	int	fs_fflags;	/* Descriptor access flags. */
980daf62d9SStanislav Sedov 	int	fs_uflags;	/* How this file is used. */
990daf62d9SStanislav Sedov 	int	fs_fd;		/* File descriptor number. */
1000daf62d9SStanislav Sedov 	int	fs_ref_count;	/* Reference count. */
1010daf62d9SStanislav Sedov 	off_t	fs_offset;	/* Seek location. */
1020daf62d9SStanislav Sedov 	void	*fs_typedep;	/* Type dependent data. */
1030daf62d9SStanislav Sedov 	char	*fs_path;
1040daf62d9SStanislav Sedov 	STAILQ_ENTRY(filestat)	next;
105d57486e2SRobert Watson 	cap_rights_t	fs_cap_rights;	/* Capability rights, if flag set. */
1060daf62d9SStanislav Sedov };
1070daf62d9SStanislav Sedov struct vnstat {
1080daf62d9SStanislav Sedov 	uint64_t	vn_fileid;
1090daf62d9SStanislav Sedov 	uint64_t	vn_size;
1100daf62d9SStanislav Sedov 	char		*vn_mntdir;
1110daf62d9SStanislav Sedov 	uint32_t	vn_dev;
1120daf62d9SStanislav Sedov 	uint32_t	vn_fsid;
1130daf62d9SStanislav Sedov 	int		vn_type;
1140daf62d9SStanislav Sedov 	uint16_t	vn_mode;
1150daf62d9SStanislav Sedov 	char		vn_devname[SPECNAMELEN + 1];
1160daf62d9SStanislav Sedov };
1170daf62d9SStanislav Sedov struct ptsstat {
1180daf62d9SStanislav Sedov 	uint32_t	dev;
1190daf62d9SStanislav Sedov 	char		devname[SPECNAMELEN + 1];
1200daf62d9SStanislav Sedov };
1210daf62d9SStanislav Sedov struct pipestat {
1220daf62d9SStanislav Sedov 	size_t		buffer_cnt;
1230daf62d9SStanislav Sedov 	uint64_t	addr;
1240daf62d9SStanislav Sedov 	uint64_t	peer;
1250daf62d9SStanislav Sedov };
126e506e182SJohn Baldwin struct shmstat {
127e506e182SJohn Baldwin 	uint64_t	size;
128e506e182SJohn Baldwin 	uint16_t	mode;
129e506e182SJohn Baldwin };
1300daf62d9SStanislav Sedov struct sockstat {
1310daf62d9SStanislav Sedov 	uint64_t	inp_ppcb;
1320daf62d9SStanislav Sedov 	uint64_t	so_addr;
1330daf62d9SStanislav Sedov 	uint64_t	so_pcb;
1340daf62d9SStanislav Sedov 	uint64_t	unp_conn;
1350daf62d9SStanislav Sedov 	int		dom_family;
1360daf62d9SStanislav Sedov 	int		proto;
1370daf62d9SStanislav Sedov 	int		so_rcv_sb_state;
1380daf62d9SStanislav Sedov 	int		so_snd_sb_state;
1390daf62d9SStanislav Sedov 	struct sockaddr_storage	sa_local;	/* Socket address. */
1400daf62d9SStanislav Sedov 	struct sockaddr_storage	sa_peer;	/* Peer address. */
1410daf62d9SStanislav Sedov 	int		type;
1420daf62d9SStanislav Sedov 	char		dname[32];
1430daf62d9SStanislav Sedov };
1440daf62d9SStanislav Sedov 
1450daf62d9SStanislav Sedov STAILQ_HEAD(filestat_list, filestat);
1460daf62d9SStanislav Sedov 
147d1145837SMikolaj Golub __BEGIN_DECLS
1480daf62d9SStanislav Sedov void	procstat_close(struct procstat *procstat);
1490daf62d9SStanislav Sedov void	procstat_freeprocs(struct procstat *procstat, struct kinfo_proc *p);
1500daf62d9SStanislav Sedov void	procstat_freefiles(struct procstat *procstat,
1510daf62d9SStanislav Sedov     struct filestat_list *head);
1520daf62d9SStanislav Sedov struct filestat_list	*procstat_getfiles(struct procstat *procstat,
1530daf62d9SStanislav Sedov     struct kinfo_proc *kp, int mmapped);
1540daf62d9SStanislav Sedov struct kinfo_proc	*procstat_getprocs(struct procstat *procstat,
1550daf62d9SStanislav Sedov     int what, int arg, unsigned int *count);
1560daf62d9SStanislav Sedov int	procstat_get_pipe_info(struct procstat *procstat, struct filestat *fst,
1570daf62d9SStanislav Sedov     struct pipestat *pipe, char *errbuf);
1580daf62d9SStanislav Sedov int	procstat_get_pts_info(struct procstat *procstat, struct filestat *fst,
1590daf62d9SStanislav Sedov     struct ptsstat *pts, char *errbuf);
160e506e182SJohn Baldwin int	procstat_get_shm_info(struct procstat *procstat, struct filestat *fst,
161e506e182SJohn Baldwin     struct shmstat *shm, char *errbuf);
1620daf62d9SStanislav Sedov int	procstat_get_socket_info(struct procstat *procstat, struct filestat *fst,
1630daf62d9SStanislav Sedov     struct sockstat *sock, char *errbuf);
1640daf62d9SStanislav Sedov int	procstat_get_vnode_info(struct procstat *procstat, struct filestat *fst,
1650daf62d9SStanislav Sedov     struct vnstat *vn, char *errbuf);
1660daf62d9SStanislav Sedov struct procstat	*procstat_open_sysctl(void);
1670daf62d9SStanislav Sedov struct procstat	*procstat_open_kvm(const char *nlistf, const char *memf);
168d1145837SMikolaj Golub __END_DECLS
1690daf62d9SStanislav Sedov 
1700daf62d9SStanislav Sedov #endif	/* !_LIBPROCSTAT_H_ */
171