#ifndef _SYS_CONTRACT_PROCESS_IMPL_H
#define _SYS_CONTRACT_PROCESS_IMPL_H
#include <sys/contract.h>
#include <sys/contract_impl.h>
#include <sys/contract/process.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/refstr.h>
#ifdef __cplusplus
extern "C" {
#endif
#define PRCTID(pp) \
((pp)->p_ct_process ? (pp)->p_ct_process->conp_contract.ct_id : 0)
struct ctmpl_process {
ct_template_t ctp_ctmpl;
contract_t *ctp_subsume;
uint_t ctp_params;
uint_t ctp_ev_fatal;
refstr_t *ctp_svc_fmri;
refstr_t *ctp_svc_aux;
};
struct cont_process {
contract_t conp_contract;
cred_t *conp_cred;
list_t conp_members;
list_t conp_inherited;
uint_t conp_params;
uint_t conp_ev_fatal;
uint_t conp_nmembers;
uint_t conp_ninherited;
refstr_t *conp_svc_fmri;
ctid_t conp_svc_ctid;
refstr_t *conp_svc_creator;
refstr_t *conp_svc_aux;
ctid_t conp_svc_zone_enter;
};
extern ctmpl_process_t *sys_process_tmpl;
extern ct_type_t *process_type;
struct proc;
void contract_process_init(void);
cont_process_t *contract_process_fork(ctmpl_process_t *, struct proc *,
struct proc *, int);
void contract_process_exit(cont_process_t *, struct proc *, int);
void contract_process_core(cont_process_t *, struct proc *, int,
const char *, const char *, const char *);
void contract_process_hwerr(cont_process_t *, struct proc *);
void contract_process_sig(cont_process_t *, struct proc *, int, pid_t, ctid_t,
zoneid_t);
void contract_process_take(contract_t *, contract_t *);
int contract_process_accept(contract_t *);
void contract_process_adopt(contract_t *, proc_t *);
#ifdef __cplusplus
}
#endif
#endif