mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-22 09:41:54 +00:00
Fixed bad filter re-evaluation with import table if filtered->accepted
The import table feed wasn't resetting the table-specific route values like REF_FILTERED and thus made the route look like filtered even though it should have been re-evaluated as accepted.
This commit is contained in:
parent
aa5fc3b99d
commit
97d2875e99
10
lib/route.h
10
lib/route.h
@ -46,6 +46,16 @@ static inline int rte_is_valid(rte *r) { return r && !(r->flags & REF_FILTERED);
|
||||
/* Route just has REF_FILTERED flag */
|
||||
static inline int rte_is_filtered(rte *r) { return !!(r->flags & REF_FILTERED); }
|
||||
|
||||
/* Strip the route of the table-specific values */
|
||||
static inline rte rte_init_from(const rte *r)
|
||||
{
|
||||
return (rte) {
|
||||
.attrs = r->attrs,
|
||||
.net = r->net,
|
||||
.src = r->src,
|
||||
};
|
||||
}
|
||||
|
||||
struct rte_src {
|
||||
struct rte_src *next; /* Hash chain */
|
||||
struct rte_owner *owner; /* Route source owner */
|
||||
|
@ -657,7 +657,10 @@ channel_reload_stopped(struct rt_export_request *req)
|
||||
|
||||
/* Restart reload */
|
||||
if (c->reload_pending)
|
||||
{
|
||||
c->reload_pending = 0;
|
||||
channel_request_reload(c);
|
||||
}
|
||||
|
||||
if (c->channel_state != CS_UP)
|
||||
channel_check_stopped(c);
|
||||
|
@ -4406,8 +4406,10 @@ void channel_reload_export_bulk(struct rt_export_request *req, const net_addr *n
|
||||
for (uint i=0; i<count; i++)
|
||||
if (feed[i]->sender == c->in_req.hook)
|
||||
{
|
||||
/* Strip the table-specific information */
|
||||
rte new = rte_init_from(feed[i]);
|
||||
|
||||
/* Strip the later attribute layers */
|
||||
rte new = *feed[i];
|
||||
while (new.attrs->next)
|
||||
new.attrs = new.attrs->next;
|
||||
|
||||
|
@ -62,12 +62,9 @@ pipe_rt_notify(struct proto *P, struct channel *src_ch, const net_addr *n, rte *
|
||||
|
||||
if (new)
|
||||
{
|
||||
rte e0 = {
|
||||
.attrs = new->attrs,
|
||||
.src = new->src,
|
||||
.generation = new->generation + 1,
|
||||
};
|
||||
rte e0 = rte_init_from(new);
|
||||
|
||||
e0.generation = new->generation + 1;
|
||||
ea_unset_attr(&e0.attrs, 0, &ea_gen_hostentry);
|
||||
|
||||
rte_update(dst, n, &e0, new->src);
|
||||
|
Loading…
Reference in New Issue
Block a user