From: Ondrej Zajicek (work) Date: Tue, 11 Dec 2018 16:57:14 +0000 (+0100) Subject: Nest: Forbid adding channels during reconfiguration X-Git-Tag: v2.0.3~25 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d506263d;p=thirdparty%2Fbird.git Nest: Forbid adding channels during reconfiguration When a new channel is found during reconfiguration, do force restart of the protocol, like with any other un-reconfigurable change. The old behavior was that the new channel was added but remained in down state, even if the protocol was up, so a manual protocol restart was often necessary. In the future this should be improved such that a reconfigurable channel addition (e.g. direct) is accepted and channel is started, while an un-reconfigurable addition forces protocol restart. --- diff --git a/nest/proto.c b/nest/proto.c index 3dcb34292..a6aa4e5ce 100644 --- a/nest/proto.c +++ b/nest/proto.c @@ -602,7 +602,11 @@ proto_configure_channel(struct proto *p, struct channel **pc, struct channel_con if (!c && cf) { - *pc = proto_add_channel(p, cf); + /* We could add the channel, but currently it would just stay in down state + until protocol is restarted, so it is better to force restart anyways. */ + log(L_INFO "Cannot add channel %s.%s", p->name, cf->name); + return 0; + // *pc = proto_add_channel(p, cf); } else if (c && !cf) { diff --git a/proto/bgp/bgp.c b/proto/bgp/bgp.c index 496393ab0..e20097ae9 100644 --- a/proto/bgp/bgp.c +++ b/proto/bgp/bgp.c @@ -1878,7 +1878,9 @@ bgp_reconfigure(struct proto *P, struct proto_config *CF) { C = (struct channel *) bgp_find_channel(p, cc->afi); same = proto_configure_channel(P, &C, &cc->c) && same; - C->stale = 0; + + if (C) + C->stale = 0; } WALK_LIST_DELSAFE(C, C2, p->p.channels)