summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOndrej Zajicek (work) <santiago@crfreenet.org>2018-12-11 17:57:14 +0100
committerOndrej Zajicek (work) <santiago@crfreenet.org>2018-12-11 17:57:14 +0100
commitd506263da713673f95bc17aaedceebaaad03580d (patch)
tree12ce1ee337d6c8c92f9f6030e1dcfffae6060cf2
parentbaeacdcfd3ce30b3fa89ebdd4e53c60c38c26c31 (diff)
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.
-rw-r--r--nest/proto.c6
-rw-r--r--proto/bgp/bgp.c4
2 files changed, 8 insertions, 2 deletions
diff --git a/nest/proto.c b/nest/proto.c
index 3dcb3429..a6aa4e5c 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 496393ab..e20097ae 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)