2 * Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * The contents of this file constitute Original Code as defined in and
7 * are subject to the Apple Public Source License Version 1.1 (the
8 * "License"). You may not use this file except in compliance with the
9 * License. Please obtain a copy of the License at
10 * http://www.apple.com/publicsource and read it before using this file.
12 * This Original Code and all software distributed under the License are
13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17 * License for the specific language governing rights and limitations
20 * @APPLE_LICENSE_HEADER_END@
23 #ifndef _SYS_PROC_INFO_H
24 #define _SYS_PROC_INFO_H
26 #include <sys/cdefs.h>
27 #include <sys/param.h>
28 #include <sys/types.h>
30 #include <sys/mount.h>
31 #include <sys/socket.h>
33 #include <sys/kern_control.h>
35 #include <net/route.h>
36 #include <netinet/in.h>
37 #include <netinet/tcp.h>
42 #define PROC_ALL_PIDS 1
43 #define PROC_PGRP_ONLY 2
44 #define PROC_TTY_ONLY 3
45 #define PROC_UID_ONLY 4
46 #define PROC_RUID_ONLY 5
49 uint32_t pbi_flags
; /* 64bit; emulated etc */
60 char pbi_comm
[MAXCOMLEN
+ 1];
61 char pbi_name
[2*MAXCOMLEN
+ 1]; /* empty if no name is registered */
65 uint32_t e_tdev
; /* controlling tty dev */
66 uint32_t e_tpgid
; /* tty process group id */
67 struct timeval pbi_start
;
73 /* pbi_flags values */
74 #define PROC_FLAG_SYSTEM 1
75 #define PROC_FLAG_TRACED 2
76 #define PROC_FLAG_INEXIT 4
77 #define PROC_FLAG_PPWAIT 8
78 #define PROC_FLAG_LP64 0x10
79 #define PROC_FLAG_SLEADER 0x20
80 #define PROC_FLAG_CTTY 0x40
81 #define PROC_FLAG_CONTROLT 0x80
84 struct proc_taskinfo
{
85 uint64_t pti_virtual_size
; /* virtual memory size (bytes) */
86 uint64_t pti_resident_size
; /* resident memory size (bytes) */
87 uint64_t pti_total_user
; /* total time */
88 uint64_t pti_total_system
;
89 uint64_t pti_threads_user
; /* existing threads only */
90 uint64_t pti_threads_system
;
91 int32_t pti_policy
; /* default policy for new threads */
92 int32_t pti_faults
; /* number of page faults */
93 int32_t pti_pageins
; /* number of actual pageins */
94 int32_t pti_cow_faults
; /* number of copy-on-write faults */
95 int32_t pti_messages_sent
; /* number of messages sent */
96 int32_t pti_messages_received
; /* number of messages received */
97 int32_t pti_syscalls_mach
; /* number of mach system calls */
98 int32_t pti_syscalls_unix
; /* number of unix system calls */
99 int32_t pti_csw
; /* number of context switches */
100 int32_t pti_threadnum
; /* number of threads in the task */
101 int32_t pti_numrunning
; /* number of running threads */
102 int32_t pti_priority
; /* task priority*/
105 struct proc_taskallinfo
{
106 struct proc_bsdinfo pbsd
;
107 struct proc_taskinfo ptinfo
;
111 struct proc_threadinfo
{
112 uint64_t pth_user_time
; /* user run time */
113 uint64_t pth_system_time
; /* system run time */
114 int32_t pth_cpu_usage
; /* scaled cpu usage percentage */
115 int32_t pth_policy
; /* scheduling policy in effect */
116 int32_t pth_run_state
; /* run state (see below) */
117 int32_t pth_flags
; /* various flags (see below) */
118 int32_t pth_sleep_time
; /* number of seconds that thread */
119 int32_t pth_curpri
; /* cur priority*/
120 int32_t pth_priority
; /* priority*/
121 int32_t pth_maxpriority
; /* max priority*/
124 struct proc_regioninfo
{
125 uint32_t pri_protection
;
126 uint32_t pri_max_protection
;
127 uint32_t pri_inheritance
;
128 uint32_t pri_flags
; /* shared, external pager, is submap */
130 uint32_t pri_behavior
;
131 uint32_t pri_user_wired_count
;
132 uint32_t pri_user_tag
;
133 uint32_t pri_pages_resident
;
134 uint32_t pri_pages_shared_now_private
;
135 uint32_t pri_pages_swapped_out
;
136 uint32_t pri_pages_dirtied
;
137 uint32_t pri_ref_count
;
138 uint32_t pri_shadow_depth
;
139 uint32_t pri_share_mode
;
140 uint32_t pri_private_pages_resident
;
141 uint32_t pri_shared_pages_resident
;
143 uint64_t pri_address
;
148 #define PROC_REGION_SUBMAP 1
149 #define PROC_REGION_SHARED 2
155 #define SM_TRUESHARED 5
156 #define SM_PRIVATE_ALIASED 6
157 #define SM_SHARED_ALIASED 7
161 * Thread run states (state field).
164 #define TH_STATE_RUNNING 1 /* thread is running normally */
165 #define TH_STATE_STOPPED 2 /* thread is stopped */
166 #define TH_STATE_WAITING 3 /* thread is waiting normally */
167 #define TH_STATE_UNINTERRUPTIBLE 4 /* thread is in an uninterruptible
169 #define TH_STATE_HALTED 5 /* thread is halted at a
173 * Thread flags (flags field).
175 #define TH_FLAGS_SWAPPED 0x1 /* thread is swapped out */
176 #define TH_FLAGS_IDLE 0x2 /* thread is an idle thread */
180 struct proc_fileinfo
{
181 uint32_t fi_openflags
;
194 struct vnode_info_path
{
195 struct vnode_info vip_vi
;
196 char vip_path
[MAXPATHLEN
]; /* tail end of it */
199 struct vnode_fdinfo
{
200 struct proc_fileinfo pfi
;
201 struct vnode_info pvi
;
204 struct vnode_fdinfowithpath
{
205 struct proc_fileinfo pfi
;
206 struct vnode_info_path pvip
;
211 struct proc_regionwithpathinfo
{
212 struct proc_regioninfo prp_prinfo
;
213 struct vnode_info_path prp_vip
;
216 struct proc_vnodepathinfo
{
217 struct vnode_info_path pvi_cdir
;
218 struct vnode_info_path pvi_rdir
;
228 * IPv4 and IPv6 Sockets
235 u_int32_t i46a_pad32
[3];
236 struct in_addr i46a_addr4
;
240 int insi_fport
; /* foreign port */
241 int insi_lport
; /* local port */
242 uint64_t insi_gencnt
; /* generation count of this instance */
243 uint32_t insi_flags
; /* generic IP/datagram flags */
246 uint8_t insi_vflag
; /* ini_IPV4 or ini_IPV6 */
247 uint8_t insi_ip_ttl
; /* time to live proto */
248 /* protocol dependent part */
250 struct in4in6_addr ina_46
;
251 struct in6_addr ina_6
;
252 } insi_faddr
; /* foreign host table entry */
254 struct in4in6_addr ina_46
;
255 struct in6_addr ina_6
;
256 } insi_laddr
; /* local host table entry */
258 u_char in4_tos
; /* type of service */
272 #define TSI_T_REXMT 0 /* retransmit */
273 #define TSI_T_PERSIST 1 /* retransmit persistence */
274 #define TSI_T_KEEP 2 /* keep alive */
275 #define TSI_T_2MSL 3 /* 2*msl quiet time timer */
276 #define TSI_T_NTIMERS 4
278 #define TSI_S_CLOSED 0 /* closed */
279 #define TSI_S_LISTEN 1 /* listening for connection */
280 #define TSI_S_SYN_SENT 2 /* active, have sent syn */
281 #define TSI_S_SYN_RECEIVED 3 /* have send and received syn */
282 #define TSI_S_ESTABLISHED 4 /* established */
283 #define TSI_S__CLOSE_WAIT 5 /* rcvd fin, waiting for close */
284 #define TSI_S_FIN_WAIT_1 6 /* have closed, sent fin */
285 #define TSI_S_CLOSING 7 /* closed xchd FIN; await FIN ACK */
286 #define TSI_S_LAST_ACK 8 /* had fin and close; await FIN ACK */
287 #define TSI_S_FIN_WAIT_2 9 /* have closed, fin is acked */
288 #define TSI_S_TIME_WAIT 10 /* in 2*msl quiet wait after close */
289 #define TSI_S_RESERVED 11 /* pseudo state: reserved */
291 struct tcp_sockinfo
{
292 struct in_sockinfo tcpsi_ini
;
294 int tcpsi_timer
[TSI_T_NTIMERS
];
296 uint32_t tcpsi_flags
;
297 uint64_t tcpsi_tp
; /* opaque handle of TCP protocol control block */
301 * Unix Domain Sockets
306 uint64_t unsi_conn_so
; /* opaque handle of connected socket */
307 uint64_t unsi_conn_pcb
; /* opaque handle of connected protocol control block */
309 struct sockaddr_un ua_sun
;
310 char ua_dummy
[SOCK_MAXADDRLEN
];
311 } unsi_addr
; /* bound address */
313 struct sockaddr_un ua_sun
;
314 char ua_dummy
[SOCK_MAXADDRLEN
];
315 } unsi_caddr
; /* address of socket connected to */
323 uint32_t ndrvsi_if_family
;
324 uint32_t ndrvsi_if_unit
;
325 char ndrvsi_if_name
[IF_NAMESIZE
];
329 * Kernel Event Sockets
332 struct kern_event_info
{
333 uint32_t kesi_vendor_code_filter
;
334 uint32_t kesi_class_filter
;
335 uint32_t kesi_subclass_filter
;
339 * Kernel Control Sockets
342 struct kern_ctl_info
{
344 uint32_t kcsi_reg_unit
;
345 uint32_t kcsi_flags
; /* support flags */
346 uint32_t kcsi_recvbufsize
; /* request more than the default buffer size */
347 uint32_t kcsi_sendbufsize
; /* request more than the default buffer size */
349 char kcsi_name
[MAX_KCTL_NAME
]; /* unique nke identifier, provided by DTS */
354 #define SOI_S_NOFDREF 0x0001 /* no file table ref any more */
355 #define SOI_S_ISCONNECTED 0x0002 /* socket connected to a peer */
356 #define SOI_S_ISCONNECTING 0x0004 /* in process of connecting to peer */
357 #define SOI_S_ISDISCONNECTING 0x0008 /* in process of disconnecting */
358 #define SOI_S_CANTSENDMORE 0x0010 /* can't send more data to peer */
359 #define SOI_S_CANTRCVMORE 0x0020 /* can't receive more data from peer */
360 #define SOI_S_RCVATMARK 0x0040 /* at mark on input */
361 #define SOI_S_PRIV 0x0080 /* privileged for broadcast, raw... */
362 #define SOI_S_NBIO 0x0100 /* non-blocking ops */
363 #define SOI_S_ASYNC 0x0200 /* async i/o notify */
364 #define SOI_S_INCOMP 0x0800 /* Unaccepted, incomplete connection */
365 #define SOI_S_COMP 0x1000 /* unaccepted, complete connection */
366 #define SOI_S_ISDISCONNECTED 0x2000 /* socket disconnected from peer */
367 #define SOI_S_DRAINING 0x4000 /* close waiting for blocked system calls to drain */
369 struct sockbuf_info
{
371 uint32_t sbi_hiwat
; /* SO_RCVBUF, SO_SNDBUF */
380 SOCKINFO_GENERIC
= 0,
385 SOCKINFO_KERN_EVENT
= 5,
386 SOCKINFO_KERN_CTL
= 6
390 struct stat soi_stat
;
391 uint64_t soi_so
; /* opaque handle of socket */
392 uint64_t soi_pcb
; /* opaque handle of protocol control block */
404 uint32_t soi_oobmark
;
405 struct sockbuf_info soi_rcv
;
406 struct sockbuf_info soi_snd
;
409 struct in_sockinfo pri_in
; /* SOCKINFO_IN */
410 struct tcp_sockinfo pri_tcp
; /* SOCKINFO_TCP */
411 struct un_sockinfo pri_un
; /* SOCKINFO_UN */
412 struct ndrv_info pri_ndrv
; /* SOCKINFO_NDRV */
413 struct kern_event_info pri_kern_event
; /* SOCKINFO_KERN_EVENT */
414 struct kern_ctl_info pri_kern_ctl
; /* SOCKINFO_KERN_CTL */
418 struct socket_fdinfo
{
419 struct proc_fileinfo pfi
;
420 struct socket_info psi
;
426 struct stat psem_stat
;
427 char psem_name
[MAXPATHLEN
];
431 struct proc_fileinfo pfi
;
432 struct psem_info pseminfo
;
438 struct stat pshm_stat
;
439 uint64_t pshm_mappaddr
;
440 char pshm_name
[MAXPATHLEN
];
444 struct proc_fileinfo pfi
;
445 struct pshm_info pshminfo
;
450 struct stat pipe_stat
;
451 uint64_t pipe_handle
;
452 uint64_t pipe_peerhandle
;
457 struct proc_fileinfo pfi
;
458 struct pipe_info pipeinfo
;
466 #define PROC_KQUEUE_SELECT 1
467 #define PROC_KQUEUE_SLEEP 2
469 struct kqueue_fdinfo
{
470 struct proc_fileinfo pfi
;
471 struct kqueue_info kqueueinfo
;
474 struct appletalk_info
{
475 struct stat atalk_stat
;
478 struct appletalk_fdinfo
{
479 struct proc_fileinfo pfi
;
480 struct appletalk_info appletalkinfo
;
485 /* defns of process file desc type */
486 #define PROX_FDTYPE_ATALK 0
487 #define PROX_FDTYPE_VNODE 1
488 #define PROX_FDTYPE_SOCKET 2
489 #define PROX_FDTYPE_PSHM 3
490 #define PROX_FDTYPE_PSEM 4
491 #define PROX_FDTYPE_KQUEUE 5
492 #define PROX_FDTYPE_PIPE 6
493 #define PROX_FDTYPE_FSEVENTS 7
497 uint32_t proc_fdtype
;
500 /* Falvors for proc_pidinfo() */
501 #define PROC_PIDLISTFDS 1
502 #define PROC_PIDLISTFD_SIZE (sizeof(struct proc_fdinfo))
504 #define PROC_PIDTASKALLINFO 2
505 #define PROC_PIDTASKALLINFO_SIZE (sizeof(struct proc_taskallinfo))
507 #define PROC_PIDTBSDINFO 3
508 #define PROC_PIDTBSDINFO_SIZE (sizeof(struct proc_bsdinfo))
510 #define PROC_PIDTASKINFO 4
511 #define PROC_PIDTASKINFO_SIZE (sizeof(struct proc_taskinfo))
513 #define PROC_PIDTHREADINFO 5
514 #define PROC_PIDTHREADINFO_SIZE (sizeof(struct proc_threadinfo))
516 #define PROC_PIDLISTTHREADS 6
517 #define PROC_PIDLISTTHREADS_SIZE (2* sizeof(uint32_t))
520 #define PROC_PIDREGIONINFO 7
521 #define PROC_PIDREGIONINFO_SIZE (sizeof(struct proc_regioninfo))
523 #define PROC_PIDREGIONPATHINFO 8
524 #define PROC_PIDREGIONPATHINFO_SIZE (sizeof(struct proc_regionwithpathinfo))
526 #define PROC_PIDVNODEPATHINFO 9
527 #define PROC_PIDVNODEPATHINFO_SIZE (sizeof(struct proc_vnodepathinfo))
529 /* Flavors for proc_pidfdinfo */
531 #define PROC_PIDFDVNODEINFO 1
532 #define PROC_PIDFDVNODEINFO_SIZE (sizeof(struct vnode_fdinfo))
534 #define PROC_PIDFDVNODEPATHINFO 2
535 #define PROC_PIDFDVNODEPATHINFO_SIZE (sizeof(struct vnode_fdinfowithpath))
537 #define PROC_PIDFDSOCKETINFO 3
538 #define PROC_PIDFDSOCKETINFO_SIZE (sizeof(struct socket_fdinfo))
540 #define PROC_PIDFDPSEMINFO 4
541 #define PROC_PIDFDPSEMINFO_SIZE (sizeof(struct psem_fdinfo))
543 #define PROC_PIDFDPSHMINFO 5
544 #define PROC_PIDFDPSHMINFO_SIZE (sizeof(struct pshm_fdinfo))
546 #define PROC_PIDFDPIPEINFO 6
547 #define PROC_PIDFDPIPEINFO_SIZE (sizeof(struct pipe_fdinfo))
549 #define PROC_PIDFDKQUEUEINFO 7
550 #define PROC_PIDFDKQUEUEINFO_SIZE (sizeof(struct kqueue_fdinfo))
552 #define PROC_PIDFDATALKINFO 8
553 #define PROC_PIDFDATALKINFO_SIZE (sizeof(struct appletalk_fdinfo))
557 #ifdef XNU_KERNEL_PRIVATE
558 extern int fill_socketinfo(socket_t so
, struct socket_info
*si
);
559 extern int fill_pshminfo(struct pshmnode
* pshm
, struct pshm_info
* pinfo
);
560 extern int fill_pseminfo(struct psemnode
* psem
, struct psem_info
* pinfo
);
561 extern int fill_pipeinfo(struct pipe
* cpipe
, struct pipe_info
* pinfo
);
562 extern int fill_kqueueinfo(struct kqueue
* kq
, struct kqueue_info
* kinfo
);
563 #endif /* XNU_KERNEL_PRIVATE */
568 #endif /*_SYS_PROC_INFO_H */