Hallo, dies ist ein Test.
PWD: /www/data-lst1/unixsoft/unixsoft/kaempfer/.public_html
Running in File Mode
Relative path: ./../../../../../../usr/include/sys/rctl_impl.h
Real path: /usr/include/sys/rctl_impl.h
Zurück
/* * Copyright (c) 2001, 2022, Oracle and/or its affiliates. */ #ifndef _SYS_RCTL_IMPL_H #define _SYS_RCTL_IMPL_H #include <sys/rctl.h> #ifdef __cplusplus extern "C" { #endif /* * This header file contains private interfaces for rctl subsystem consumers. * Contents and consumers are: * * 1. Private rctl syscall interface, and other interfaces need to implement * rctl syscalls. In userland, libc and any application/library consuming * rctl private syscalls uses this feature, and in kernel, rctl syscall * implementation uses this feature. * 2. rlim_fd_cur and rlim_fd_max: default limit for number of file descriptors. * The only usage of these variables in rctl context is that * 'usr/src/uts/common/os/rctl_proc.c' is using them to initialize * RCHD_PROC_LGC_NOFILE. */ /* syscall subcodes. */ typedef enum { _S10B_RCTLSYS_CODE_GET = 0, _S10B_RCTLSYS_CODE_SET, _S10B_RCTLSYS_CODE_LIST, _S10B_RCTLSYS_CODE_CTL, _S10B_RCTLSYS_CODE_SET_ARR, RCTLSYS_CODE_GET, RCTLSYS_CODE_SET, RCTLSYS_CODE_LIST, RCTLSYS_CODE_CTL, RCTLSYS_CODE_SET_ARR, RCTLSYS_CODE_SCAN, RCTLSYS_CODE_MAX } rctlsys_code_t; #define _RCTLSYS_NEW RCTLSYS_CODE_GET /* flags for rctlctl() */ #define RCTLCTL_GET 0 #define RCTLCTL_SET 1 /* frequently used type size. */ #define RCTL_BLK_SZ (sizeof (rctlblk_t)) /* Given an array of rctlblk_t calculate the address of the n'th element */ #define RCTLBLK_INC(blk, n) (rctlblk_t *)(((uintptr_t)blk) \ + (n * rctlblk_size())) /* * implementation of rctlblk_t. Only rctl subsystem of kernel and libc should * use members of this struct directly. */ struct rctlblk { rctl_qty_t rcq_value; rctl_qty_t rcq_enforced_value; rctl_priv_t rcq_privilege; uint_t rcq_global_flagaction; int rcq_global_syslog_level; uint_t rcq_local_flagaction; int rcq_local_signal; pid_t rcq_local_recipient_pid; hrtime_t rcq_firing_time; }; /* * A struct to contain all rctlsys arguments except the subcode. To eliminate * difference between ilp32/lp64 type definition and to not lose any * information in arguments, all arguments are cast to uint64_t, the largest * unsigned integral type. */ typedef struct { /* rctl name */ uint64_t rctl_arg_name; /* denote the size of nblk for setrctl_arrx() and rctllist(). */ uint64_t rctl_arg_blksz; uint64_t rctl_arg_oblk; /* * In case of rctllist() and rctlscan(), this member points to buffers * specific to these functions. */ uint64_t rctl_arg_nblk; uint64_t rctl_arg_idtype; uint64_t rctl_arg_id; uint64_t rctl_arg_flags; } rctlsys_arg_t; /* Page-out operation modes for rctlscan() syscall. */ typedef enum rctl_rcap_mode { RCAP_MODE_UNREF_PVT, RCAP_MODE_UNREF_ALL, RCAP_MODE_REF_PVT, RCAP_MODE_REF_ALL, RCAP_MODE_MAX } rctl_rcap_mode_t; /* Scan mode for rctlscan() syscall. */ typedef enum rctl_scan_mode { SCAN_MODE_NONE = 0, SCAN_MODE_DRY, SCAN_MODE_END } rctl_scan_mode_t; /* structure passed as an argument for rctlscan */ typedef struct rctl_col_info { id_t col_id; /* Collection ID */ rctl_entity_t col_type; /* Type of collection */ int64_t col_excess; /* Excess above rss cap */ uint64_t col_scan_count; /* Complete Scan count */ } rctl_col_info_t; #ifdef _KERNEL /* * Extern variables: In context of rctl subsystem, they are used only in * 'usr/src/uts/common/os/rctl_proc.c'. */ extern uint_t rlim_fd_cur; extern uint_t rlim_fd_max; extern uint_t rlim_fd_sys; /* rctl interfaces consumed by rctl syscall implementation only */ extern void rctl_global_get(rctl_hndl_t, rctlblk_t *); extern int rctl_global_set(rctl_hndl_t, const rctlblk_t *); extern size_t rctl_name_str_get(const char **); extern void rctl_blk_first_get(rctl_hndl_t, const rctl_entity_p_t *, rctlblk_t *); extern void rctl_blk_sys_get(rctl_hndl_t, const rctl_entity_p_t *, rctlblk_t *); extern int rctl_blk_get(rctl_hndl_t, const rctl_entity_p_t *, const rctlblk_t *, rctlblk_t *); extern int rctl_blk_next_get(rctl_hndl_t, const rctl_entity_p_t *, const rctlblk_t *, rctlblk_t *); extern int rctl_blk_insert(rctl_hndl_t, const rctl_entity_p_t *, const rctlblk_t *, hrtime_t, rctl_alloc_gp_t *); extern int rctl_blk_delete(rctl_hndl_t, const rctl_entity_p_t *, const rctlblk_t *); extern int rctl_blk_overwrite(rctl_hndl_t, const rctl_entity_p_t *, const rctlblk_t *, hrtime_t, rctl_alloc_gp_t *); extern int rctl_blk_replace(rctl_hndl_t, const rctl_entity_p_t *, const rctlblk_t *, const rctlblk_t *, hrtime_t, rctl_alloc_gp_t *); extern void rctl_blk_replace_all(rctl_hndl_t, const rctl_entity_p_t *, size_t, const rctlblk_t *, rctl_alloc_gp_t *); extern boolean_t rctl_blk_valid_convert(rctl_hndl_t, rctlblk_t *); extern int rctl_usage_get(rctl_hndl_t, const rctl_entity_p_t *, rctl_qty_t *); extern struct proc *rctl_proc_find(pid_t); #else /* _KERNEL */ /* private syscalls. */ extern int rctlctl(const char *, rctlblk_t *, uint_t); extern int rctllist(char *, size_t); extern int rctlscan(rctl_col_info_t *, uint_t); extern int setrctl_arr(const char *, rctlblk_t *, size_t); extern int setrctl_arrx(const char *, rctlblk_t *, size_t, idtype_t, id_t); /* private libc rctl interfaces. */ extern int rctlblk_get_global_syslog_level(rctlblk_t *); extern void rctlblk_set_global_action(rctlblk_t *, uint_t); extern void rctlblk_set_global_syslog_level(rctlblk_t *, int); #endif /* _KERNEL */ #ifdef __cplusplus } #endif #endif /* _SYS_RCTL_IMPL_H */