#ifndef _LOWLEVEL_IMPL_H
#define _LOWLEVEL_IMPL_H
#include "libscf_impl.h"
#include <door.h>
#include <libuutil.h>
#include <limits.h>
#include <pthread.h>
#include <stddef.h>
#include <sys/zone.h>
#include "repcache_protocol.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct scf_datael {
scf_handle_t *rd_handle;
uint32_t rd_entity;
uint32_t rd_type;
uint32_t rd_reset;
uu_list_node_t rd_node;
} scf_datael_t;
#define DATAEL_VALID 0x0001
struct scf_handle {
pthread_mutex_t rh_lock;
pthread_cond_t rh_cv;
uint32_t rh_nextiter;
uint32_t rh_nextentity;
uint32_t rh_nextchangeid;
int rh_doorfd;
int rh_doorfd_old;
door_id_t rh_doorid;
pid_t rh_doorpid;
uid_t rh_uid;
uint32_t rh_debug;
uint32_t rh_flags;
uint32_t rh_fd_users;
uu_list_t *rh_dataels;
uu_list_t *rh_iters;
long rh_entries;
long rh_values;
long rh_extrefs;
long rh_intrefs;
char rh_doorpath[PATH_MAX + 1];
zoneid_t rh_zoneid;
pthread_t rh_holder;
uint32_t rh_hold_flags;
scf_iter_t *rh_iter;
scf_scope_t *rh_scope;
scf_service_t *rh_service;
scf_instance_t *rh_instance;
scf_snapshot_t *rh_snapshot;
scf_snaplevel_t *rh_snaplvl;
scf_propertygroup_t *rh_pg;
scf_property_t *rh_property;
scf_value_t *rh_value;
};
#define HANDLE_DEAD 0x0001
#define HANDLE_UNREFED 0x0002
#define HANDLE_WRAPPED_ENTITY 0x0004
#define HANDLE_WRAPPED_ITER 0x0008
#define RH_HOLD_ITER 0x0001
#define RH_HOLD_SCOPE 0x0002
#define RH_HOLD_SERVICE 0x0004
#define RH_HOLD_INSTANCE 0x0008
#define RH_HOLD_SNAPSHOT 0x0010
#define RH_HOLD_SNAPLVL 0x0020
#define RH_HOLD_PG 0x0040
#define RH_HOLD_PROPERTY 0x0080
#define RH_HOLD_VALUE 0x0100
#define RH_HOLD_ALL 0x01ff
struct scf_scope {
scf_datael_t rd_d;
};
struct scf_service {
scf_datael_t rd_d;
};
struct scf_instance {
scf_datael_t rd_d;
};
struct scf_snapshot {
scf_datael_t rd_d;
};
struct scf_snaplevel {
scf_datael_t rd_d;
};
struct scf_propertygroup {
scf_datael_t rd_d;
};
struct scf_property {
scf_datael_t rd_d;
};
struct scf_value {
scf_handle_t *value_handle;
scf_value_t *value_next;
scf_transaction_entry_t *value_tx;
rep_protocol_value_type_t value_type;
size_t value_size;
char value_value[REP_PROTOCOL_VALUE_LEN];
};
enum scf_entry_state {
ENTRY_STATE_INVALID,
ENTRY_STATE_IN_TX_ACTION
};
struct scf_transaction_entry {
const char *entry_property;
scf_handle_t *entry_handle;
scf_transaction_t *entry_tx;
enum scf_entry_state entry_state;
uu_list_node_t entry_link;
scf_value_t *entry_head;
scf_value_t *entry_tail;
enum rep_protocol_transaction_action entry_action;
rep_protocol_value_type_t entry_type;
char entry_namebuf[REP_PROTOCOL_NAME_LEN];
};
enum scf_tx_state {
TRAN_STATE_NEW,
TRAN_STATE_SETUP,
TRAN_STATE_COMMITTED
};
struct scf_transaction {
enum scf_tx_state tran_state;
scf_propertygroup_t tran_pg;
int tran_invalid;
uu_list_t *tran_props;
};
struct scf_iter {
scf_handle_t *iter_handle;
int iter_type;
uint32_t iter_id;
uint32_t iter_sequence;
uu_list_node_t iter_node;
};
#ifdef __cplusplus
}
#endif
#endif