X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=conf%2Fconfbase.Y;h=75158927673af1e7e66ad6f67f95ddafc4d8e600;hb=2de1e2062eba66893a36f5a84f922c880ab6c351;hp=16330984aa164b1d446e8a2b8b4264036f9b1865;hpb=830ba75e6dd369c3e64d122f0537cc85211e56e6;p=thirdparty%2Fbird.git diff --git a/conf/confbase.Y b/conf/confbase.Y index 16330984a..751589276 100644 --- a/conf/confbase.Y +++ b/conf/confbase.Y @@ -33,6 +33,21 @@ check_u16(uint val) cf_error("Value %u out of range (0-65535)", val); } +#define cf_assert(cond, ...) do { if (!(cond)) cf_error(__VA_ARGS__); } while (0) +static inline void cf_assert_symbol(const struct symbol *sym, uint class) { + switch (class) { + case SYM_PROTO: cf_assert(sym->class == SYM_PROTO, "Protocol name required"); break; + case SYM_TEMPLATE: cf_assert(sym->class == SYM_TEMPLATE, "Protocol template name required"); break; + case SYM_FUNCTION: cf_assert(sym->class == SYM_FUNCTION, "Function name required"); break; + case SYM_FILTER: cf_assert(sym->class == SYM_FILTER, "Filter name required"); break; + case SYM_TABLE: cf_assert(sym->class == SYM_TABLE, "Table name required"); break; + case SYM_ATTRIBUTE: cf_assert(sym->class == SYM_ATTRIBUTE, "Custom attribute name required"); break; + case SYM_VARIABLE: cf_assert((sym->class & ~0xff) == SYM_VARIABLE, "Variable name required"); break; + case SYM_CONSTANT: cf_assert((sym->class & ~0xff) == SYM_CONSTANT, "Constant name required"); break; + default: bug("This shall not happen"); + } +} + CF_DECLS %union { @@ -49,15 +64,24 @@ CF_DECLS struct rtable_config *r; struct channel_config *cc; struct f_inst *x; - struct filter *f; + struct { + struct f_inst *begin, *end; + } xp; + enum filter_return fret; + enum ec_subtype ecs; + struct f_dynamic_attr fda; + struct f_static_attr fsa; + struct f_lval flv; + struct f_line *fl; + const struct filter *f; struct f_tree *e; struct f_trie *trie; struct f_val v; - struct f_path_mask *h; struct password_item *p; struct rt_show_data *ra; struct sym_show_data *sd; struct lsadb_show_data *ld; + struct mrt_dump_data *md; struct iface *iface; void *g; btime time; @@ -75,7 +99,7 @@ CF_DECLS %token IP4 %token IP6 %token VPN_RD -%token SYM +%token CF_SYM_KNOWN CF_SYM_UNDEFINED %token TEXT %type ipa_scope @@ -83,10 +107,11 @@ CF_DECLS %type