Fixes behavior of defined() on bgp_community attribute.

This commit is contained in:
Ondrej Zajicek 2010-03-18 00:10:35 +01:00
parent 1528d30aeb
commit 74e9331fe0

View file

@ -607,12 +607,6 @@ interpret(struct f_inst *what)
e = ea_find( (*f_rte)->attrs->eattrs, what->a2.i ); e = ea_find( (*f_rte)->attrs->eattrs, what->a2.i );
if (!e) { if (!e) {
/* A special case: undefined int_set looks like empty int_set */
if ((what->aux & EAF_TYPE_MASK) == EAF_TYPE_INT_SET) {
res.type = T_CLIST;
res.val.ad = adata_empty(f_pool);
break;
}
/* Undefined value */ /* Undefined value */
res.type = T_VOID; res.type = T_VOID;
break; break;
@ -821,7 +815,11 @@ interpret(struct f_inst *what)
case P('C','a'): /* Community list add or delete */ case P('C','a'): /* Community list add or delete */
TWOARGS; TWOARGS;
if (v1.type != T_CLIST)
/* Replace undefined value with empty community list */
if (v1.type == T_VOID)
v1.val.ad = adata_empty(f_pool);
else if (v1.type != T_CLIST)
runtime("Can't add/delete to non-clist"); runtime("Can't add/delete to non-clist");
if (v2.type != T_PAIR) if (v2.type != T_PAIR)
runtime("Can't add/delete non-pair"); runtime("Can't add/delete non-pair");