diff options
Diffstat (limited to 'vlib/vlib/parse.h')
-rw-r--r-- | vlib/vlib/parse.h | 252 |
1 files changed, 151 insertions, 101 deletions
diff --git a/vlib/vlib/parse.h b/vlib/vlib/parse.h index 5b9acebf774..036e744723b 100644 --- a/vlib/vlib/parse.h +++ b/vlib/vlib/parse.h @@ -19,11 +19,13 @@ #include <vlib/lex.h> #include <vppinfra/mhash.h> -typedef struct { +typedef struct +{ /* Word aligned value. */ - union { + union + { u8 as_u8[32 - 1 * sizeof (u16)]; - void * as_pointer; + void *as_pointer; uword as_uword; word as_word; u64 as_u64; @@ -31,32 +33,44 @@ typedef struct { /* 16 bit type at end so that 30 bytes of value are aligned. */ u16 type; -} __attribute ((packed)) vlib_parse_value_t; +} __attribute ((packed)) + vlib_parse_value_t; /* Instance of a type. */ -typedef struct { - u32 type; - - u32 origin; - - u32 help_index; - - union { - void * as_pointer; - uword as_uword; - } value; -} vlib_parse_item_t; - -typedef struct { - /* Index of item for this node. */ - u32 item; - - /* Graph index of peer (sibling) node (linked list of peers). */ - u32 peer; - - /* Graph index of deeper (child) node (linked list of children). */ - u32 deeper; -} vlib_parse_graph_t; + typedef struct + { + u32 + type; + + u32 + origin; + + u32 + help_index; + + union + { + void * + as_pointer; + uword + as_uword; + } value; + } vlib_parse_item_t; + + typedef struct + { + /* Index of item for this node. */ + u32 + item; + + /* Graph index of peer (sibling) node (linked list of peers). */ + u32 + peer; + + /* Graph index of deeper (child) node (linked list of children). */ + u32 + deeper; + } vlib_parse_graph_t; #define foreach_parse_match_type \ _(MATCH_DONE) \ @@ -68,84 +82,112 @@ typedef struct { _(MATCH_AMBIGUOUS) \ _(MATCH_EVAL_FAIL) -typedef enum { + typedef enum + { #define _(a) VLIB_PARSE_##a, - foreach_parse_match_type + foreach_parse_match_type #undef _ -} vlib_parse_match_t; - -struct vlib_parse_type; -struct vlib_parse_main; - -typedef vlib_parse_match_t (vlib_parse_match_function_t) - (struct vlib_parse_main *, - struct vlib_parse_type *, - vlib_lex_token_t *, - vlib_parse_value_t *); -typedef void (vlib_parse_value_cleanup_function_t) (vlib_parse_value_t *); - -typedef struct vlib_parse_type { - /* Type name. */ - char * name; - - vlib_parse_match_function_t * match_function; - - vlib_parse_value_cleanup_function_t * value_cleanup_function; - - format_function_t * format_value; - - u32 rule_index; -} vlib_parse_type_t; - -typedef struct { - char *initializer; - void * eof_match; - int rule_length; -} parse_registration_t; - -typedef struct vlib_parse_main { - /* (type, origin, help, value) tuples */ - vlib_parse_item_t *parse_items; - mhash_t parse_item_hash; - - /* (item, peer, deeper) tuples */ - vlib_parse_graph_t *parse_graph; - u32 root_index; - - u8 *register_input; - - /* parser types */ - vlib_parse_type_t * parse_types; - uword *parse_type_by_name_hash; - - /* Vector of MATCH_VALUEs */ - vlib_parse_value_t * parse_value; - u32 * match_items; - - /* Parse registrations */ - parse_registration_t **parse_registrations; - - /* Token vector */ - vlib_lex_token_t *tokens; - u32 current_token_index; - - vlib_lex_main_t *lex_main; - vlib_main_t *vlib_main; -} vlib_parse_main_t; - -vlib_parse_main_t vlib_parse_main; - -typedef vlib_parse_match_t (vlib_parse_eval_function_t) - (vlib_parse_main_t *, - vlib_parse_item_t *, - vlib_parse_value_t *); - -vlib_parse_match_t vlib_parse_eval (u8 * input); - -format_function_t format_vlib_parse_value; + } vlib_parse_match_t; + + struct vlib_parse_type; + struct vlib_parse_main; + + typedef + vlib_parse_match_t (vlib_parse_match_function_t) + (struct vlib_parse_main *, + struct vlib_parse_type *, vlib_lex_token_t *, vlib_parse_value_t *); + typedef void (vlib_parse_value_cleanup_function_t) (vlib_parse_value_t + *); + + typedef struct vlib_parse_type + { + /* Type name. */ + char * + name; + + vlib_parse_match_function_t * + match_function; + + vlib_parse_value_cleanup_function_t * + value_cleanup_function; + + format_function_t * + format_value; + + u32 + rule_index; + } vlib_parse_type_t; + + typedef struct + { + char * + initializer; + void * + eof_match; + int + rule_length; + } parse_registration_t; + + typedef struct vlib_parse_main + { + /* (type, origin, help, value) tuples */ + vlib_parse_item_t * + parse_items; + mhash_t + parse_item_hash; + + /* (item, peer, deeper) tuples */ + vlib_parse_graph_t * + parse_graph; + u32 + root_index; + + u8 * + register_input; + + /* parser types */ + vlib_parse_type_t * + parse_types; + uword * + parse_type_by_name_hash; + + /* Vector of MATCH_VALUEs */ + vlib_parse_value_t * + parse_value; + u32 * + match_items; + + /* Parse registrations */ + parse_registration_t ** + parse_registrations; + + /* Token vector */ + vlib_lex_token_t * + tokens; + u32 + current_token_index; + + vlib_lex_main_t * + lex_main; + vlib_main_t * + vlib_main; + } vlib_parse_main_t; + + vlib_parse_main_t + vlib_parse_main; + + typedef + vlib_parse_match_t (vlib_parse_eval_function_t) + (vlib_parse_main_t *, vlib_parse_item_t *, vlib_parse_value_t *); + +vlib_parse_match_t +vlib_parse_eval (u8 * input); + + format_function_t format_vlib_parse_value; /* FIXME need these to be global? */ -vlib_parse_match_function_t rule_match, eof_match, word_match, number_match; + vlib_parse_match_function_t rule_match, eof_match, word_match, + number_match; #define _PARSE_REGISTRATION_DATA(x) \ VLIB_ELF_SECTION_DATA(x##_registration,parse_registration_t,parse_registrations) @@ -169,3 +211,11 @@ static _PARSE_TYPE_REGISTRATION_DATA(n) = { \ }; #endif /* included_vlib_parse_h */ + +/* + * fd.io coding-style-patch-verification: ON + * + * Local Variables: + * eval: (c-set-style "gnu") + * End: + */ |