]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
RPKI: Increase max PDU length to 64k
authorOndrej Zajicek <santiago@crfreenet.org>
Mon, 2 Dec 2024 05:38:59 +0000 (06:38 +0100)
committerOndrej Zajicek <santiago@crfreenet.org>
Mon, 2 Dec 2024 06:06:34 +0000 (07:06 +0100)
APSA records can be arbitrarily large, let's use 64k as
a reasonable limit.

proto/rpki/packets.c
proto/rpki/packets.h

index f23cf467d891564e4acd92c93d7884b7797fb9db..3300c9c9affbbd6bc68dce3f167590f0be44234f 100644 (file)
@@ -1141,7 +1141,7 @@ rpki_connected_hook(sock *sk)
  * This function prepares Error PDU and sends it to a cache server.
  */
 static int
-rpki_send_error_pdu(struct rpki_cache *cache, const enum pdu_error_type error_code, const u32 err_pdu_len, const struct pdu_header *erroneous_pdu, const char *fmt, ...)
+rpki_send_error_pdu(struct rpki_cache *cache, const enum pdu_error_type error_code, u32 err_pdu_len, const struct pdu_header *erroneous_pdu, const char *fmt, ...)
 {
   va_list args;
   char msg[128];
@@ -1163,6 +1163,9 @@ rpki_send_error_pdu(struct rpki_cache *cache, const enum pdu_error_type error_co
     va_end(args);
   }
 
+  u32 err_pdu_max_len = ROUND_DOWN_POW2(RPKI_TX_BUFFER_SIZE - (16 + msg_len), 4);
+  err_pdu_len = MIN(err_pdu_len, err_pdu_max_len);
+
   u32 pdu_size = 16 + err_pdu_len + msg_len;
   byte pdu[pdu_size];
   memset(pdu, 0, sizeof(pdu));
index f7897d9af29e30a62ca34d52117f6091a1c88481..4f16c4d9a385b8452390ad2c8e93b4dd7beee9d5 100644 (file)
  *     ------------
  *     = 848 bytes (Maximal expected PDU size)
  *
- * Received ASPA PDU can have any size, so let's start with 4k */
-#define RPKI_PDU_MAX_LEN       4096
+ * Received ASPA PDU can have any size, so let's start with 64k */
+#define RPKI_PDU_MAX_LEN       65536
 
 /* RX buffer size has a great impact to scheduler granularity */
-#define RPKI_RX_BUFFER_SIZE    4096
-#define RPKI_TX_BUFFER_SIZE    RPKI_PDU_MAX_LEN
+#define RPKI_RX_BUFFER_SIZE    65536
+#define RPKI_TX_BUFFER_SIZE    4096
 
 /* Return values */
 enum rpki_rtvals {