[PATCH] RPKI: Fix unnecessary reconnection on reconfiguration

Kazuki Yamaguchi k at rhe.jp
Wed Jun 3 07:21:17 CEST 2020


Compare the new timing parameters with the old configuration, not with
the temporary state of the current connection.

The timing values in struct rpki_cache is updated by a version 1 End Of
Data PDU, unless this behavior is suppressed by the configuration
explicitly by the "keep" keyword. Consequently, every reconfiguration
of BIRD triggers a reconnection even if it is not necessary.

Signed-off-by: Kazuki Yamaguchi <k at rhe.jp>
---

Hello,

I reproduce the issue with the following simple RPKI protocol
configuration, where "a-cache" is a Routinator which supports the RTR
protocol version 1.

	roa4 table r4;
	roa6 table r6;

	protocol rpki {
		roa4 { table r4; };
		roa6 { table r6; };

		remote "a-cache" port 3323;
		debug all;
	}

And "birdc config" causes a transport reconnection.

	2020-06-03 13:59:20.085 <TRACE> rpki1: Received End of Data packet (session id: 17629, serial number: 639, refresh: 500s, retry: 600s, expire: 7200s)
	...
	2020-06-03 13:59:22.077 <INFO> Reconfiguring
	...
	2020-06-03 13:59:22.077 <TRACE> rpki1: Refresh interval changed to 3600 seconds 
	2020-06-03 13:59:22.077 <TRACE> rpki1: Changing from Established to Fast-Reconnect state

Kazuki Yamaguchi

 proto/rpki/rpki.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/proto/rpki/rpki.c b/proto/rpki/rpki.c
index aa07f7d9d323..3e46b6d197a8 100644
--- a/proto/rpki/rpki.c
+++ b/proto/rpki/rpki.c
@@ -701,7 +701,7 @@ rpki_reconfigure_cache(struct rpki_proto *p UNUSED, struct rpki_cache *cache, st
 #endif
 
 #define TEST_INTERVAL(name, Name) 						\
-    if (cache->name##_interval != new->name##_interval ||			\
+    if (old->name##_interval != new->name##_interval ||				\
 	old->keep_##name##_interval != new->keep_##name##_interval) 		\
     { 										\
       cache->name##_interval = new->name##_interval;				\
-- 
2.27.0



More information about the Bird-users mailing list