diff options
Diffstat (limited to 'cooker/cooker.h')
-rw-r--r-- | cooker/cooker.h | 101 |
1 files changed, 83 insertions, 18 deletions
diff --git a/cooker/cooker.h b/cooker/cooker.h index a1cc360..82b24f7 100644 --- a/cooker/cooker.h +++ b/cooker/cooker.h @@ -6,6 +6,9 @@ #ifndef COOKER_H #define COOKER_H +#define _GNU_SOURCE +#include <fcntl.h> +#include <unistd.h> #include <stddef.h> #include <stdint.h> #include <stdio.h> @@ -14,27 +17,46 @@ #include <sys/types.h> #include <arpa/inet.h> -#define REFS_MAX 256 -#define REF_NAMEMAX 256 +#define TAGS_MAX 256 #define CALL_ARGS 6 struct num; struct field; struct select; +/** + * union desc - Description of lists of numbers, structs or selector fields + * @d_num: Pointer to a list of numbers and their labels + * @d_struct: Pointer to a struct description + * @d_select: Pointer to description of a selector + */ union desc { struct num *d_num; struct field *d_struct; struct select *d_select; }; +/** + * union value - Represent a generic value used internally by cooker + * @v_int: Value of type int + * @v_u32: Value of type u32 + * @v_num: Value of type long long, or any other numeric type + * @v_str: String, directly from JSON + */ union value { int v_int; uint32_t v_u32; long long v_num; + const char *v_str; }; +/** + * enum type - Types of values for arguments and fields within arguments + */ enum type { + UNDEF = 0, + NONE, + INT, INTMASK, INTFLAGS, @@ -43,6 +65,10 @@ enum type { U32MASK, U32FLAGS, + U64, + U64MASK, + U64FLAGS, + LONG, LONGMASK, LONGFLAGS, @@ -51,6 +77,7 @@ enum type { STRUCT, SELECT, + SELECTED, PID, @@ -68,16 +95,24 @@ enum type { #define TYPE_IS_COMPOUND(t) ((t) == STRUCT || (t) == SELECT) #define TYPE_IS_NUM(t) ((t) == INT || (t) == U32 || (t) == LONG) -enum jump_type { - NEXT_BLOCK, - END, -}; - +/** + * struct num - A numeric value and its label + * @name: Label for numeric value + * @value: Numeric value + */ struct num { char *name; long long value; }; +/** + * struct field - Field inside a struct + * @name: Name of field + * @type: Type of field + * @offset: Offset of field within struct, in bytes + * @strlen: Length of string for string types, 0 otherwise + * @desc: Description of possible values for field, or linked struct + */ struct field { char *name; enum type type; @@ -88,21 +123,27 @@ struct field { union desc desc; }; -struct select_num { - long long value; +/** + * struct select_target - Description of value selected by selector field + * @type: Type of value + * @size: Size to dereference for pointers, 0 otherwise + * @desc: Description for selected value + */ +struct select_target { + enum type type; /* TODO: Almost a struct arg? */ + size_t size; - enum type type; union desc desc; }; -struct select { - struct field *field; - - union { - struct select_num *d_num; - } desc; -}; - +/** + * struct arg - Description of part of, or complete system call argument + * @pos: Index of argument in system call + * @name: JSON name used for matches and calls + * @type: Argument type + * @size: Size of pointed area if any, 0 otherwise + * @desc: Description of list of numbers, struct or selector field + */ struct arg { int pos; char *name; @@ -113,4 +154,28 @@ struct arg { union desc desc; }; +/** + * struct select_num - List of possible selections based on numeric selector + * @value: Numeric value of the selector + * @target: Argument description defined by this selector + */ +struct select_num { + long long value; + + struct arg target; +}; + +/** + * struct select - Association between argument description and selected values + * @field: Description of argument operating the selection + * @d_num: List of possible selections + */ +struct select { + struct field *field; + + union { + struct select_num *d_num; + } desc; +}; + #endif /* COOKER_H */ |