diff options
Diffstat (limited to 'libvmon/defs/_begin.def')
-rw-r--r-- | libvmon/defs/_begin.def | 549 |
1 files changed, 0 insertions, 549 deletions
diff --git a/libvmon/defs/_begin.def b/libvmon/defs/_begin.def deleted file mode 100644 index 047fd4d..0000000 --- a/libvmon/defs/_begin.def +++ /dev/null @@ -1,549 +0,0 @@ -/* the common types are handled in _begin.def and _end.def, individual .def files are free to create special types as well, but should - * provide macros for all the ifdef's supported here for any additions. - */ - -/* for declaring the want-specific sample data structure (used by vmon.h) */ -#ifdef VMON_DECLARE_MEMBERS -#define vmon_datum_str(_name, _sym, _label, _desc) char *_name; -#define vmon_datum_str_array(_name, _sym, _label, _desc) char **_name; -#define vmon_datum_char(_name, _sym, _label, _desc) char _name; -#define vmon_datum_char_array(_name, _sym, _label, _desc) vmon_char_array_t _name; -#define vmon_datum_int(_name, _sym, _label, _desc) int _name; -#define vmon_datum_uint(_name, _sym, _label, _desc) unsigned int _name; -#define vmon_datum_ulong(_name, _sym, _label, _desc) unsigned long _name; -#define vmon_datum_ulonglong(_name, _sym, _label, _desc) unsigned long long _name; -#define vmon_datum_long(_name, _sym, _label, _desc) long _name; -#define vmon_datum_longlong(_name, _sym, _label, _desc) long long _name; - -/* leave omissions undefined, they'll get defined as noops at the end of this file */ -#endif - - - -/* for creating the symbolic constants enumeration (used by vmon.h) */ -#ifdef VMON_ENUM_SYMBOLS -#define vmon_datum_str(_name, _sym, _label, _desc) VMON_ ## _sym, -#define vmon_datum_str_array(_name, _sym, _label, _desc) VMON_ ## _sym, -#define vmon_datum_char(_name, _sym, _label, _desc) VMON_ ## _sym, -#define vmon_datum_char_array(_name, _sym, _label, _desc) VMON_ ## _sym, -#define vmon_datum_int(_name, _sym, _label, _desc) VMON_ ## _sym, -#define vmon_datum_uint(_name, _sym, _label, _desc) VMON_ ## _sym, -#define vmon_datum_ulong(_name, _sym, _label, _desc) VMON_ ## _sym, -#define vmon_datum_ulonglong(_name, _sym, _label, _desc) VMON_ ## _sym, -#define vmon_datum_long(_name, _sym, _label, _desc) VMON_ ## _sym, -#define vmon_datum_longlong(_name, _sym, _label, _desc) VMON_ ## _sym, - -/* leave omissions undefined, they'll get defined as noops at the end of this file */ -#endif - - - -/* for creating an offset table relating symbols to struct member offsets */ -#ifdef VMON_INITIALIZE_OFFSET_TABLE -/* TODO: error out using #error if VMON_OFFSET_TABLE_STRUCT is not defined */ -/* I use the gcc builtin here because it's convenient, otherwise we either do the double macro expansion dance or put the offsetof definition here */ -#define vmon_datum_str(_name, _sym, _label, _desc) __builtin_offsetof(VMON_OFFSET_TABLE_STRUCT, _name), -#define vmon_datum_str_array(_name, _sym, _label, _desc) __builtin_offsetof(VMON_OFFSET_TABLE_STRUCT, _name), -#define vmon_datum_char(_name, _sym, _label, _desc) __builtin_offsetof(VMON_OFFSET_TABLE_STRUCT, _name), -#define vmon_datum_char_array(_name, _sym, _label, _desc) __builtin_offsetof(VMON_OFFSET_TABLE_STRUCT, _name), -#define vmon_datum_int(_name, _sym, _label, _desc) __builtin_offsetof(VMON_OFFSET_TABLE_STRUCT, _name), -#define vmon_datum_uint(_name, _sym, _label, _desc) __builtin_offsetof(VMON_OFFSET_TABLE_STRUCT, _name), -#define vmon_datum_ulong(_name, _sym, _label, _desc) __builtin_offsetof(VMON_OFFSET_TABLE_STRUCT, _name), -#define vmon_datum_ulonglong(_name, _sym, _label, _desc) __builtin_offsetof(VMON_OFFSET_TABLE_STRUCT, _name), -#define vmon_datum_long(_name, _sym, _label, _desc) __builtin_offsetof(VMON_OFFSET_TABLE_STRUCT, _name), -#define vmon_datum_longlong(_name, _sym, _label, _desc) __builtin_offsetof(VMON_OFFSET_TABLE_STRUCT, _name), - -/* no offsets can exist for omitted members, so they're declared as nops */ -/* leave omissions undefined, they'll get defined as noops at the end of this file */ -#endif - - - -/* for creating a lookup table for the member names as strings, indexed by the enumerated symbols */ -#ifdef VMON_INITIALIZE_NAME_TABLE -#define vmon_datum_str(_name, _sym, _label, _desc) #_name , -#define vmon_datum_str_array(_name, _sym, _label, _desc) #_name , -#define vmon_datum_char(_name, _sym, _label, _desc) #_name , -#define vmon_datum_char_array(_name, _sym, _label, _desc) #_name , -#define vmon_datum_int(_name, _sym, _label, _desc) #_name , -#define vmon_datum_uint(_name, _sym, _label, _desc) #_name , -#define vmon_datum_ulong(_name, _sym, _label, _desc) #_name , -#define vmon_datum_ulonglong(_name, _sym, _label, _desc) #_name , -#define vmon_datum_long(_name, _sym, _label, _desc) #_name , -#define vmon_datum_longlong(_name, _sym, _label, _desc) #_name , - -/* leave omissions undefined, they'll get defined as noops at the end of this file */ -#endif - - - -/* for creating a lookup table for the human-readable descriptions, indexed by the enumerated symbols */ -#ifdef VMON_INITIALIZE_DESC_TABLE -#define vmon_datum_str(_name, _sym, _label, _desc) _desc , -#define vmon_datum_str_array(_name, _sym, _label, _desc) _desc , -#define vmon_datum_char(_name, _sym, _label, _desc) _desc , -#define vmon_datum_char_array(_name, _sym, _label, _desc) _desc , -#define vmon_datum_int(_name, _sym, _label, _desc) _desc , -#define vmon_datum_uint(_name, _sym, _label, _desc) _desc , -#define vmon_datum_ulong(_name, _sym, _label, _desc) _desc , -#define vmon_datum_ulonglong(_name, _sym, _label, _desc) _desc , -#define vmon_datum_long(_name, _sym, _label, _desc) _desc , -#define vmon_datum_longlong(_name, _sym, _label, _desc) _desc , - -/* leave omissions undefined, they'll get defined as noops at the end of this file */ -#endif - - - -/* these are different from the symbols, because they ignore the omissions, the definition includes all fields so we can parse the file, - * but the symbols only relate to fields we actually store in memory. */ -#ifdef VMON_ENUM_PARSER_STATES -#define vmon_datum_str(_name, _sym, _label, _desc) VMON_PARSER_STATE_ ## _sym, -#define vmon_datum_str_array(_name, _sym, _label, _desc) VMON_PARSER_STATE_ ## _sym, -#define vmon_datum_char(_name, _sym, _label, _desc) VMON_PARSER_STATE_ ## _sym, -#define vmon_datum_char_array(_name, _sym, _label, _desc) VMON_PARSER_STATE_ ## _sym, -#define vmon_datum_int(_name, _sym, _label, _desc) VMON_PARSER_STATE_ ## _sym, -#define vmon_datum_uint(_name, _sym, _label, _desc) VMON_PARSER_STATE_ ## _sym, -#define vmon_datum_ulong(_name, _sym, _label, _desc) VMON_PARSER_STATE_ ## _sym, -#define vmon_datum_ulonglong(_name, _sym, _label, _desc) VMON_PARSER_STATE_ ## _sym, -#define vmon_datum_long(_name, _sym, _label, _desc) VMON_PARSER_STATE_ ## _sym, -#define vmon_datum_longlong(_name, _sym, _label, _desc) VMON_PARSER_STATE_ ## _sym, - -#define vmon_omit_n(_n, _sym, _desc) VMON_PARSER_STATE_ ## _sym, -#define vmon_omit_literal(_lit, _sym) VMON_PARSER_STATE_ ## _sym, -#define vmon_omit_run(_char, _sym) VMON_PARSER_STATE_ ## _sym, -#define vmon_omit_str(_name, _sym, _label, _desc) VMON_PARSER_STATE_ ## _sym, -#define vmon_omit_str_array(_name, _sym, _label, _desc) VMON_PARSER_STATE_ ## _sym, -#define vmon_omit_char(_name, _sym, _label, _desc) VMON_PARSER_STATE_ ## _sym, -#define vmon_omit_char_array(_name, _sym, _label, _desc) VMON_PARSER_STATE_ ## _sym, -#define vmon_omit_int(_name, _sym, _label, _desc) VMON_PARSER_STATE_ ## _sym, -#define vmon_omit_uint(_name, _sym, _label, _desc) VMON_PARSER_STATE_ ## _sym, -#define vmon_omit_ulong(_name, _sym, _label, _desc) VMON_PARSER_STATE_ ## _sym, -#define vmon_omit_ulonglong(_name, _sym, _label, _desc) VMON_PARSER_STATE_ ## _sym, -#define vmon_omit_long(_name, _sym, _label, _desc) VMON_PARSER_STATE_ ## _sym, -#define vmon_omit_longlong(_name, _sym, _label, _desc) VMON_PARSER_STATE_ ## _sym, -#endif - - -/* most the stuff we need in scope for the parser generated via VMON_IMPLEMENT_PARSER before including the appropriate .def */ -#ifdef VMON_PREPARE_PARSER - char input; - int var_isneg = 0; - int var_int = 0; - unsigned int var_uint = 0; - long var_long = 0; - long long var_longlong = 0; - unsigned long var_ulong = 0; - unsigned long long var_ulonglong = 0; - char *var_array = NULL; - int var_array_alloc_len = 0, var_array_len = 0; - -#define vmon_datum_str(_name, _sym, _label, _desc) -#define vmon_datum_str_array(_name, _sym, _label, _desc) -#define vmon_datum_char(_name, _sym, _label, _desc) -#define vmon_datum_char_array(_name, _sym, _label, _desc) -#define vmon_datum_int(_name, _sym, _label, _desc) -#define vmon_datum_uint(_name, _sym, _label, _desc) -#define vmon_datum_ulong(_name, _sym, _label, _desc) -#define vmon_datum_ulonglong(_name, _sym, _label, _desc) -#define vmon_datum_long(_name, _sym, _label, _desc) -#define vmon_datum_longlong(_name, _sym, _label, _desc) - -#define vmon_omit_n(_n, _sym, _desc) -#define vmon_omit_literal(_lit, _sym) -#define vmon_omit_run(_char, _sym) -#define vmon_omit_str(_name, _sym, _label, _desc) -#define vmon_omit_str_array(_name, _sym, _label, _desc) -#define vmon_omit_char(_name, _sym, _label, _desc) -#define vmon_omit_char_array(_name, _sym, _label, _desc) -#define vmon_omit_int(_name, _sym, _label, _desc) -#define vmon_omit_uint(_name, _sym, _label, _desc) -#define vmon_omit_ulong(_name, _sym, _label, _desc) -#define vmon_omit_ulonglong(_name, _sym, _label, _desc) -#define vmon_omit_long(_name, _sym, _label, _desc) -#define vmon_omit_longlong(_name, _sym, _label, _desc) -#endif - - -/* implements the cases for a simple switch()-based bytestream parser */ -#ifdef VMON_IMPLEMENT_PARSER -/* TODO: error out if the following aren't defined, these are utilized by the parser FSM: - * VMON_PARSER_DELIM <-- what value to treat as a delimiter for string/char arrays (sort of like IFS in bash) - * TODO: there are a bunch of variables we assume are available and named a certain way here, - * it would be preferable to be able to define those externally and inform the x-macro of their - * names etc. - */ -#define vmon_datum_str(_name, _sym, _label, _desc) case VMON_PARSER_STATE_ ## _sym:\ - switch(input) {\ - case VMON_PARSER_DELIM:\ - /* store accumulated string, reset tmp, and advance */\ - if(*store)->_name) {\ - if( strncmp((*store)->name, _array, var_array_len) ||\ - (*store)->name[var_array_len] != '\0') {\ - BITSET((*store)->changed, VMON_ ## _sym);\ - changes++;\ - }\ - free((*store)->name);\ - } else {\ - BITSET((*store)->changed, VMON_ ## _sym);\ - changes++;\ - }\ - (*store)->_name = strndup(var_array, var_array_len);\ - var_array_len = 0;\ - state++;\ - break;\ - default:\ - /* accumulate string */\ - var_array[var_array_len++] = input;\ - break;\ - }\ - break; - -#define vmon_datum_str_array(_name, _sym, _label, _desc) case VMON_PARSER_STATE_ ## _sym:\ - /* TODO ? */ \ - break; - -#define vmon_datum_char(_name, _sym, _label, _desc) case VMON_PARSER_STATE_ ## _sym:\ - if((*store)->_name != input) {\ - BITSET((*store)->changed, VMON_ ## _sym);\ - changes++;\ - (*store)->_name = input;\ - }\ - state++;\ - break; - -#define vmon_datum_char_array(_name, _sym, _label, _desc) case VMON_PARSER_STATE_ ## _sym:\ - /* TODO */\ - /* TODO */\ - break; - -#define vmon_datum_int(_name, _sym, _label, _desc) case VMON_PARSER_STATE_ ## _sym:\ - switch(input) {\ - case '-':\ - /* TODO: we don't verify the '-' is leading... */\ - var_isneg = 1;\ - break;\ - case '0' ... '9':\ - var_int *= 10;\ - var_int += input - '0';\ - break;\ - default:\ - if(var_isneg) {\ - var_int = -var_int;\ - var_isneg = 0;\ - }\ - if((*store)->_name != var_int) {\ - BITSET((*store)->changed, VMON_ ## _sym);\ - changes++;\ - (*store)->_name = var_int;\ - }\ - var_int = 0;\ - state++;\ - break;\ - }\ - if(state == VMON_PARSER_STATE_ ## _sym) {\ - /* we want to fall-through when the state advances */\ - break;\ - } - -#define vmon_datum_uint(_name, _sym, _label, _desc) case VMON_PARSER_STATE_ ## _sym:\ - switch(input) {\ - case '0' ... '9':\ - var_uint *= 10;\ - var_uint += input - '0';\ - break;\ - default:\ - if((*store)->_name != var_uint) {\ - BITSET((*store)->changed, VMON_ ## _sym);\ - changes++;\ - (*store)->_name = var_uint;\ - }\ - var_uint = 0;\ - state++;\ - break;\ - }\ - if(state == VMON_PARSER_STATE_ ## _sym) {\ - /* we want to fall-through when the state advances */\ - break;\ - } - -#define vmon_datum_ulong(_name, _sym, _label, _desc) case VMON_PARSER_STATE_ ## _sym:\ - switch(input) {\ - case '0' ... '9':\ - var_ulong *= 10;\ - var_ulong += input - '0';\ - break;\ - default:\ - if((*store)->_name != var_ulong) {\ - BITSET((*store)->changed, VMON_ ## _sym);\ - changes++;\ - (*store)->_name = var_ulong;\ - }\ - var_ulong = 0;\ - state++;\ - break;\ - }\ - if(state == VMON_PARSER_STATE_ ## _sym) {\ - /* we want to fall-through when the state advances */\ - break;\ - } - -#define vmon_datum_ulonglong(_name, _sym, _label, _desc) case VMON_PARSER_STATE_ ## _sym:\ - switch(input) {\ - case '0' ... '9':\ - var_ulonglong *= 10;\ - var_ulonglong += input - '0';\ - break;\ - default:\ - if((*store)->_name != var_ulonglong) {\ - BITSET((*store)->changed, VMON_ ## _sym);\ - changes++;\ - (*store)->_name = var_ulonglong;\ - }\ - var_ulonglong = 0;\ - state++;\ - break;\ - }\ - if(state == VMON_PARSER_STATE_ ## _sym) {\ - /* we want to fall-through when the state advances */\ - break;\ - } - -#define vmon_datum_long(_name, _sym, _label, _desc) case VMON_PARSER_STATE_ ## _sym:\ - switch(input) {\ - case '-':\ - /* TODO: we dont verify the '-' is leading... */\ - var_isneg = 1;\ - break;\ - case '0' ... '9':\ - var_long *= 10;\ - var_long += input - '0';\ - break;\ - default:\ - if(var_isneg) {\ - var_long = -var_long;\ - var_isneg = 0;\ - }\ - if((*store)->_name != var_long) {\ - BITSET((*store)->changed, VMON_ ## _sym);\ - changes++;\ - (*store)->_name = var_long;\ - }\ - var_long = 0;\ - state++;\ - break;\ - }\ - if(state == VMON_PARSER_STATE_ ## _sym) {\ - /* we want to fall-through when the state advances */\ - break;\ - } - -#define vmon_datum_longlong(_name, _sym, _label, _desc) case VMON_PARSER_STATE_ ## _sym:\ - switch(input) {\ - case '-':\ - /* TODO: we dont verify the '-' is leading... */\ - var_isneg = 1;\ - break;\ - case '0' ... '9':\ - var_longlong *= 10;\ - var_longlong += input - '0';\ - break;\ - default:\ - if(var_isneg) {\ - var_longlong = -var_longlong;\ - var_isneg = 0;\ - }\ - if((*store)->_name != var_longlong) {\ - BITSET((*store)->changed, VMON_ ## _sym);\ - changes++;\ - (*store)->_name = var_longlong;\ - }\ - var_longlong = 0;\ - state++;\ - break;\ - }\ - if(state == VMON_PARSER_STATE_ ## _sym) {\ - /* we want to fall-through when the state advances */\ - break;\ - } - -/* parse but simply skip omitted fields, advance on the delimiter */ -#define vmon_omit_n(_n, _sym, _desc) case VMON_PARSER_STATE_ ## _sym:\ - var_int++;\ - if(var_int >= _n) {\ - var_int = 0;\ - state++;\ - }\ - break; - -#define vmon_omit_literal(_lit, _sym) case VMON_PARSER_STATE_ ## _sym:\ - /* TODO make this actually match the literal, for now we skip the length. */ \ - var_int++;\ - if(var_int >= (sizeof(_lit) - 1)) {\ - var_int = 0;\ - state++;\ - }\ - break; - -#define vmon_omit_run(_char, _sym) case VMON_PARSER_STATE_ ## _sym:\ - if(input != _char) {\ - state++;\ - /* XXX: we fall-through to the next case because this byte belongs to the next state */\ - } else {\ - break;\ - } - - -#define vmon_omit_str(_name, _sym, _label, _desc) case VMON_PARSER_STATE_ ## _sym:\ - if(input == VMON_PARSER_DELIM) {\ - state++;\ - } else {\ - break;\ - } - -#define vmon_omit_str_array(_name, _sym, _label, _desc) case VMON_PARSER_STATE_ ## _sym:\ - if(input == VMON_PARSER_DELIM) {\ - state++;\ - } else {\ - break;\ - } - -#define vmon_omit_char(_name, _sym, _label, _desc) case VMON_PARSER_STATE_ ## _sym:\ - state++;\ - break; - -#define vmon_omit_char_array(_name, _sym, _label, _desc) case VMON_PARSER_STATE_ ## _sym:\ - if(input == VMON_PARSER_DELIM) {\ - state++;\ - } else {\ - break;\ - } - -#define vmon_omit_int(_name, _sym, _label, _desc) case VMON_PARSER_STATE_ ## _sym:\ - switch(input) {\ - case '0' ... '9':\ - case '-':\ - break;\ - default:\ - state++;\ - break;\ - }\ - if(state == VMON_PARSER_STATE_ ## _sym) {\ - /* we want to fall-through when the state advances */\ - break;\ - } - -#define vmon_omit_uint(_name, _sym, _label, _desc) case VMON_PARSER_STATE_ ## _sym:\ - switch(input) {\ - case '0' ... '9':\ - break;\ - default:\ - state++;\ - break;\ - }\ - if(state == VMON_PARSER_STATE_ ## _sym) {\ - /* we want to fall-through when the state advances */\ - break;\ - } - -#define vmon_omit_ulong(_name, _sym, _label, _desc) case VMON_PARSER_STATE_ ## _sym:\ - switch(input) {\ - case '0' ... '9':\ - break;\ - default:\ - state++;\ - break;\ - }\ - if(state == VMON_PARSER_STATE_ ## _sym) {\ - /* we want to fall-through when the state advances */\ - break;\ - } - -#define vmon_omit_ulonglong(_name, _sym, _label, _desc) case VMON_PARSER_STATE_ ## _sym:\ - switch(input) {\ - case '0' ... '9':\ - break;\ - default:\ - state++;\ - break;\ - }\ - if(state == VMON_PARSER_STATE_ ## _sym) {\ - /* we want to fall-through when the state advances */\ - break;\ - } - -#define vmon_omit_long(_name, _sym, _label, _desc) case VMON_PARSER_STATE_ ## _sym:\ - switch(input) {\ - case '0' ... '9':\ - case '-':\ - break;\ - default:\ - state++;\ - break;\ - }\ - if(state == VMON_PARSER_STATE_ ## _sym) {\ - /* we want to fall-through when the state advances */\ - break;\ - } - -#define vmon_omit_longlong(_name, _sym, _label, _desc) case VMON_PARSER_STATE_ ## _sym:\ - switch(input) {\ - case '0' ... '9':\ - case '-':\ - break;\ - default:\ - state++;\ - break;\ - }\ - if(state == VMON_PARSER_STATE_ ## _sym) {\ - /* we want to fall-through when the state advances */\ - break;\ - } -#endif - - -/* for convenience, if the omit macros are undefind define them as noops, since that's the most common pattern */ -/* XXX TODO: we may need to add some mechanism for informing the VMON_SUPPRESS_UNDEFS clause in _end.def when these - * have been automatically defined vs. explicitly defined. When automatically defined, we should undefine them regarldess - * of undef suppression. But when they are explicitly defined prior to entering here, we should honor the undef suppression. - * I'm going to leave it as-is for now until it bites me in the ass. - */ -#ifndef vmon_omit_n -# define vmon_omit_n(_n, _sym, _desc) -#endif -#ifndef vmon_omit_literal -# define vmon_omit_literal(_lit, _sym) -#endif -#ifndef vmon_omit_run -# define vmon_omit_run(_char, _sym) -#endif -#ifndef vmon_omit_str -# define vmon_omit_str(_name, _sym, _label, _desc) -#endif -#ifndef vmon_omit_str_array -# define vmon_omit_str_array(_name, _sym, _label, _desc) -#endif -#ifndef vmon_omit_char -# define vmon_omit_char(_name, _sym, _label, _desc) -#endif -#ifndef vmon_omit_char_array -# define vmon_omit_char_array(_name, _sym, _label, _desc) -#endif -#ifndef vmon_omit_int -# define vmon_omit_int(_name, _sym, _label, _desc) -#endif -#ifndef vmon_omit_uint -# define vmon_omit_uint(_name, _sym, _label, _desc) -#endif -#ifndef vmon_omit_ulong -# define vmon_omit_ulong(_name, _sym, _label, _desc) -#endif -#ifndef vmon_omit_ulonglong -# define vmon_omit_ulonglong(_name, _sym, _label, _desc) -#endif -#ifndef vmon_omit_long -# define vmon_omit_long(_name, _sym, _label, _desc) -#endif -#ifndef vmon_omit_longlong -# define vmon_omit_longlong(_name, _sym, _label, _desc) -#endif |