#ifndef NTUX_H #define NTUX_H #include #include "ntux_api.h" #ifdef __cplusplus extern "C" { #endif /* pre-alpha */ #ifndef NTUX_APP #ifndef NTUX_PRE_ALPHA #error libntux: pre-alpha: ABI is not final! #error to use the library, please pass -DNTUX_PRE_ALPHA to the compiler. #endif #endif /* status codes */ #define NTUX_OK 0x00 #define NTUX_USAGE 0x01 #define NTUX_ERROR 0x02 /* driver flags */ #define NTUX_DRIVER_VERBOSITY_NONE 0x0000 #define NTUX_DRIVER_VERBOSITY_ERRORS 0x0001 #define NTUX_DRIVER_VERBOSITY_STATUS 0x0002 #define NTUX_DRIVER_VERBOSITY_USAGE 0x0004 #define NTUX_DRIVER_CLONE_VECTOR 0x0008 #define NTUX_DRIVER_VERSION 0x0010 #define NTUX_DRIVER_DRY_RUN 0x0020 #define NTUX_DRIVER_ANNOTATE_ALWAYS 0x10000000 #define NTUX_DRIVER_ANNOTATE_NEVER 0x20000000 #define NTUX_DRIVER_ANNOTATE_FULL 0x40000000 /* error flags */ #define NTUX_ERROR_TOP_LEVEL 0x0001 #define NTUX_ERROR_NESTED 0x0002 #define NTUX_ERROR_CHILD 0x0004 #define NTUX_ERROR_CUSTOM 0x0008 #define NTUX_ERROR_NATIVE 0x0010 enum ntux_custom_error { NTUX_ERR_FLOW_ERROR, NTUX_ERR_FLEE_ERROR, NTUX_ERR_LDSO_INIT, }; enum ntux_cmd { NTUX_CMD_DEFAULT, NTUX_CMD_STAT, NTUX_CMD_SPAWN, NTUX_CMD_STRACE, }; struct ntux_source_version { int major; int minor; int revision; const char * commit; }; struct ntux_error_info { const struct ntux_driver_ctx * edctx; const struct ntux_unit_ctx * euctx; const char * eunit; int esyscode; int elibcode; const char * efunction; int eline; unsigned eflags; void * eany; }; struct ntux_common_ctx { uint64_t drvflags; uint64_t actflags; uint64_t fmtflags; enum ntux_cmd cmd; uint32_t state; char ** sargv; char ** senvp; const char * loader; const char * logfile; uint32_t sysmask[16]; uint32_t dbgmask[16]; uint32_t osmask [32]; }; struct ntux_driver_ctx { const char ** units; const char * program; const char * module; const struct ntux_common_ctx * cctx; struct ntux_error_info ** errv; void * any; }; struct ntux_unit_ctx { const char * const * path; void * any; }; /* package info */ ntux_api const struct ntux_source_version * ntux_source_version(void); /* driver api */ ntux_api int ntux_get_driver_ctx (char ** argv, char ** envp, uint32_t flags, struct ntux_driver_ctx **); ntux_api int ntux_create_driver_ctx (const struct ntux_common_ctx *, struct ntux_driver_ctx **); ntux_api void ntux_free_driver_ctx (struct ntux_driver_ctx *); /* cmd api */ ntux_api int ntux_cmd_stat (const struct ntux_driver_ctx *, const char *); ntux_api int ntux_cmd_spawn (const struct ntux_driver_ctx *); ntux_api int ntux_cmd_strace (const struct ntux_driver_ctx *); /* utility api */ ntux_api int ntux_main (int, char **, char **); ntux_api int ntux_output_error_vector (const struct ntux_driver_ctx *); #ifdef __cplusplus } #endif #endif