Static: Fix handling of 'net' attribute in per-route filters
We need to define 'net' field temporarily as it may be accessed by per-route filters. Thanks to Damian Zaremba for the bugreport.
This commit is contained in:
parent
9e2635505a
commit
ea3c6c1a15
1 changed files with 11 additions and 0 deletions
|
@ -106,8 +106,19 @@ static_announce_rte(struct static_proto *p, struct static_route *r)
|
||||||
e->pflags = 0;
|
e->pflags = 0;
|
||||||
|
|
||||||
if (r->cmds)
|
if (r->cmds)
|
||||||
|
{
|
||||||
|
/* Create a temporary table node */
|
||||||
|
e->net = alloca(sizeof(net) + r->net->length);
|
||||||
|
memset(e->net, 0, sizeof(net) + r->net->length);
|
||||||
|
net_copy(e->net->n.addr, r->net);
|
||||||
|
|
||||||
|
/* Evaluate the filter */
|
||||||
f_eval_rte(r->cmds, &e, static_lp);
|
f_eval_rte(r->cmds, &e, static_lp);
|
||||||
|
|
||||||
|
/* Remove the temporary node */
|
||||||
|
e->net = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
rte_update2(p->p.main_channel, r->net, e, a->src);
|
rte_update2(p->p.main_channel, r->net, e, a->src);
|
||||||
r->state = SRS_CLEAN;
|
r->state = SRS_CLEAN;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue