|
|
| version 1.1.1.1, 2017/08/22 12:33:54 | version 1.1.1.2, 2021/03/17 19:50:23 |
|---|---|
| Line 89 pipe_rt_notify(struct proto *P, rtable *src_table, net | Line 89 pipe_rt_notify(struct proto *P, rtable *src_table, net |
| memcpy(&(e->u), &(new->u), sizeof(e->u)); | memcpy(&(e->u), &(new->u), sizeof(e->u)); |
| e->pref = new->pref; | e->pref = new->pref; |
| e->pflags = new->pflags; | e->pflags = new->pflags; |
| #ifdef CONFIG_BGP | |
| /* Hack to cleanup cached value */ | |
| if (e->attrs->src->proto->proto == &proto_bgp) | |
| e->u.bgp.stale = -1; | |
| #endif | |
| } | } |
| src = a.src; | src = a.src; |
| Line 230 pipe_reconfigure(struct proto *P, struct proto_config | Line 236 pipe_reconfigure(struct proto *P, struct proto_config |
| if ((oc->peer->table != nc->peer->table) || (oc->mode != nc->mode)) | if ((oc->peer->table != nc->peer->table) || (oc->mode != nc->mode)) |
| return 0; | return 0; |
| int import_changed = ! filter_same(new->in_filter, old->in_filter); | |
| int export_changed = ! filter_same(new->out_filter, old->out_filter); | |
| /* Update output filters in ahooks */ | /* Update output filters in ahooks */ |
| if (P->main_ahook) | if (P->main_ahook) |
| { | { |
| P->main_ahook->out_filter = new->out_filter; | P->main_ahook->out_filter = new->out_filter; |
| P->main_ahook->in_limit = new->in_limit; | P->main_ahook->in_limit = new->in_limit; |
| proto_verify_limits(P->main_ahook); | proto_verify_limits(P->main_ahook); |
| if (export_changed) | |
| P->main_ahook->last_out_filter_change = now; | |
| } | } |
| if (p->peer_ahook) | if (p->peer_ahook) |
| Line 243 pipe_reconfigure(struct proto *P, struct proto_config | Line 255 pipe_reconfigure(struct proto *P, struct proto_config |
| p->peer_ahook->out_filter = new->in_filter; | p->peer_ahook->out_filter = new->in_filter; |
| p->peer_ahook->in_limit = new->out_limit; | p->peer_ahook->in_limit = new->out_limit; |
| proto_verify_limits(p->peer_ahook); | proto_verify_limits(p->peer_ahook); |
| if (import_changed) | |
| p->peer_ahook->last_out_filter_change = now; | |
| } | } |
| if ((P->proto_state != PS_UP) || (proto_reconfig_type == RECONFIG_SOFT)) | if ((P->proto_state != PS_UP) || (proto_reconfig_type == RECONFIG_SOFT)) |
| return 1; | return 1; |
| if ((new->preference != old->preference) | if (import_changed || export_changed || (new->preference != old->preference)) |
| || ! filter_same(new->in_filter, old->in_filter) | |
| || ! filter_same(new->out_filter, old->out_filter)) | |
| proto_request_feeding(P); | proto_request_feeding(P); |
| return 1; | return 1; |