From 591211557f4106ed9e877fa9b80eb56ffb99fef3 Mon Sep 17 00:00:00 2001 From: Ondrej Zajicek Date: Wed, 24 Dec 2008 12:18:10 +0100 Subject: Fixes bug related to reconfiguration of BGP. BGP keeps its copy of configuration ptr and didn't update it during reconfiguration. But old configuration is freed during reconfiguration. That leads to unnecessary reset of BGP connection during reconfiguration (old conf is corrupted and therefore different) and possibly other strange behavior. --- proto/bgp/bgp.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'proto') diff --git a/proto/bgp/bgp.c b/proto/bgp/bgp.c index 46b28906..d1b7dee9 100644 --- a/proto/bgp/bgp.c +++ b/proto/bgp/bgp.c @@ -876,9 +876,15 @@ bgp_reconfigure(struct proto *P, struct proto_config *C) struct bgp_proto *p = (struct bgp_proto *) P; struct bgp_config *old = p->cf; - return !memcmp(((byte *) old) + sizeof(struct proto_config), - ((byte *) new) + sizeof(struct proto_config), - sizeof(struct bgp_config) - sizeof(struct proto_config)); + int same = !memcmp(((byte *) old) + sizeof(struct proto_config), + ((byte *) new) + sizeof(struct proto_config), + sizeof(struct bgp_config) - sizeof(struct proto_config)); + + /* We should update our copy of configuration ptr as old configuration will be freed */ + if (same) + p->cf = new; + + return same; } struct protocol proto_bgp = { -- cgit v1.2.3