Fixes reconfiguration of global set variables.

When global set variables were used, every reconfiguration restarted
protocols that use it in filters.

Thanks to Sergey Popovich for a bugreport.
This commit is contained in:
Ondrej Zajicek 2013-09-10 12:58:24 +02:00
parent d27e127aa9
commit 507e182a60

View file

@ -1413,9 +1413,32 @@ i_same(struct f_inst *f1, struct f_inst *f2)
} }
break; break;
case 'C': case 'C':
if (val_compare(* (struct f_val *) f1->a1.p, * (struct f_val *) f2->a1.p)) {
struct f_val *v1 = (struct f_val *) f1->a1.p;
struct f_val *v2 = (struct f_val *) f2->a1.p;
/* Handle some cases that are not handled by val_compare()
also T_PATH, T_CLIST and T_ECLIST does not work,
but you cannot easily create such constants */
if ((v1->type == T_SET) && (v2->type == T_SET))
{
if (!same_tree(v1->val.t, v2->val.t))
return 0; return 0;
break; break;
}
if ((v1->type == T_PREFIX_SET) && (v2->type == T_PREFIX_SET))
{
if (!trie_same(v1->val.ti, v2->val.ti))
return 0;
break;
}
if (val_compare(*v1 , *v2))
return 0;
}
break;
case 'V': case 'V':
if (strcmp((char *) f1->a2.p, (char *) f2->a2.p)) if (strcmp((char *) f1->a2.p, (char *) f2->a2.p))
return 0; return 0;