123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- #include <sys/sysctl.h>
- /* vnode types (vnode->v_type) */
- enum vtype {
- /* 0 */
- VNON,
- /* 1 - 5 */
- VREG, VDIR, VBLK, VCHR, VLNK,
- /* 6 - 10 */
- VSOCK, VFIFO, VBAD, VSTR, VCPLX
- };
- struct qm_trace {
- char * lastfile;
- int lastline;
- char * prevfile;
- int prevline;
- };
- typedef struct {
- unsigned long opaque[2];
- } lck_mtx_t;
- struct vnode;
- typedef struct vnode * vnode_t;
- struct ucred;
- typedef struct ucred *kauth_cred_t;
- struct vnode {
- lck_mtx_t v_lock; /* vnode mutex */
- struct {
- struct uint64_t *tqh_first;
- struct uint64_t **tqh_last;
- struct qm_trace trace;
- } v_ncchildren;
- struct {
- struct uint64_t *lh_first;
- } v_nclinks;
- vnode_t v_defer_reclaimlist; /* in case we have to defer the reclaim to avoid recursion */ // 8(?)
- uint32_t v_listflag; /* flags protected by the vnode_list_lock (see below) */ // 4
- uint32_t v_flag; /* vnode flags (see below) */ // 4
- uint16_t v_lflag; /* vnode local and named ref flags */ // 2
- uint8_t v_iterblkflags; /* buf iterator flags */ // 1
- uint8_t v_references; /* number of times io_count has been granted */ // 1
- int32_t v_kusecount; /* count of in-kernel refs */ // 4
- int32_t v_usecount; /* reference count of users */ // 4
- int32_t v_iocount; /* iocounters */ // 4
- void * v_owner; /* act that owns the vnode */ // 8
- uint16_t v_type; /* vnode type */ // 2
- uint16_t v_tag; /* type of underlying data */
- uint32_t v_id; /* identity of vnode contents */
- union {
- struct mount *vu_mountedhere; /* ptr to mounted vfs (VDIR) */
- struct socket *vu_socket; /* unix ipc (VSOCK) */
- struct specinfo *vu_specinfo; /* device (VCHR, VBLK) */
- struct fifoinfo *vu_fifoinfo; /* fifo (VFIFO) */
- struct ubc_info *vu_ubcinfo; /* valid for (VREG) */
- } v_un;
- void * v_cleanblkhd;
- void * v_dirtyblkhd;
- struct klist v_knotes;
- kauth_cred_t v_cred;
- int v_authorized_actions;
- int v_cred_timestamp;
- int v_nc_generation;
- int32_t v_numoutput;
- int32_t v_writecount;
- const char *v_name;
- vnode_t v_parent;
- struct lockf *v_lockf;
- int (**v_op)(void *);
- void *v_mount;
- void *v_data;
- struct label *v_label;
- /* rest removed */
- };
- struct ubc_info {
- uint64_t ui_pager; /* pager */
- uint64_t ui_control; /* VM control for the pager */
- vnode_t ui_vnode; /* vnode for this ubc_info */
- kauth_cred_t ui_ucred; /* holds credentials for NFS paging */
- long long ui_size; /* file size for the vnode */
- uint32_t ui_flags; /* flags */
- uint32_t cs_add_gen; /* generation count when csblob was validated */
- struct cl_readahead *cl_rahead; /* cluster read ahead context */
- struct cl_writebehind *cl_wbehind; /* cluster write behind context */
- struct timespec cs_mtime; /* modify time of file when first cs_blob was loaded */
- struct cs_blob *cs_blobs; /* for CODE SIGNING */
- /* rest removed */
- };
- struct cs_blob {
- struct cs_blob *csb_next;
- int csb_cpu_type;
- unsigned int csb_flags;
- long long csb_base_offset; /* Offset of Mach-O binary in fat binary */
- long long csb_start_offset; /* Blob coverage area start, from csb_base_offset */
- long long csb_end_offset; /* Blob coverage area end, from csb_base_offset */
- unsigned long csb_mem_size;
- unsigned long csb_mem_offset;
- unsigned long csb_mem_kaddr;
- unsigned char csb_cdhash[CS_CDHASH_LEN];
- const struct cs_hash *csb_hashtype;
- unsigned long csb_hash_pagesize; /* each hash entry represent this many bytes */
- unsigned long csb_hash_pagemask;
- unsigned long csb_hash_pageshift;
- unsigned long csb_hash_firstlevel_pagesize;
- const CS_CodeDirectory *csb_cd;
- const char * csb_teamid;
- const CS_GenericBlob *csb_entitlements_blob; /* raw blob, subrange of csb_mem_kaddr */
- void * csb_entitlements; /* The entitlements as an OSDictionary */
- unsigned int csb_platform_binary;
- unsigned int csb_platform_path;
- };
- struct cs_hash {
- uint8_t cs_type; /* type code as per code signing */
- size_t cs_size; /* size of effective hash (may be truncated) */
- size_t cs_digest_size; /* size of native hash */
- uint64_t cs_init;
- uint64_t cs_update;
- uint64_t cs_final;
- };
- struct vnode_attr {
- /* bitfields */
- uint64_t va_supported;
- uint64_t va_active;
-
- /*
- * Control flags. The low 16 bits are reserved for the
- * ioflags being passed for truncation operations.
- */
- int va_vaflags;
-
- /* traditional stat(2) parameter fields */
- dev_t va_rdev; /* device id (device nodes only) */
- uint64_t va_nlink; /* number of references to this file */
- uint64_t va_total_size; /* size in bytes of all forks */
- uint64_t va_total_alloc; /* disk space used by all forks */
- uint64_t va_data_size; /* size in bytes of the fork managed by current vnode */
- uint64_t va_data_alloc; /* disk space used by the fork managed by current vnode */
- uint32_t va_iosize; /* optimal I/O blocksize */
-
- /* file security information */
- uid_t va_uid; /* owner UID */
- gid_t va_gid; /* owner GID */
- mode_t va_mode; /* posix permissions */
- uint32_t va_flags; /* file flags */
- struct kauth_acl *va_acl; /* access control list */
-
- /* timestamps */
- struct timespec va_create_time; /* time of creation */
- struct timespec va_access_time; /* time of last access */
- struct timespec va_modify_time; /* time of last data modification */
- struct timespec va_change_time; /* time of last metadata change */
- struct timespec va_backup_time; /* time of last backup */
- };
|