summaryrefslogtreecommitdiffhomepage
path: root/include/ntux/ntux.h
blob: 07c735be71540e0fa47552f9ac63cdb346d2ef60 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#ifndef NTUX_H
#define NTUX_H

#include <stdint.h>

#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,
	NTUX_CMD_CAP,
};

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;
};

/* driver api */
ntux_api int  ntux_get_driver_ctx       (char **, char **, uint32_t,
                                         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 **);

/* error trace api */
ntux_api int  ntux_output_error_vector  (const struct ntux_driver_ctx *);

/* package info */
ntux_api const struct ntux_source_version * ntux_source_version(void);

#ifdef __cplusplus
}
#endif

#endif