]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
RPKI: wait for retry_time if we get error immediately after connected
authorMaria Matejka <mq@ucw.cz>
Mon, 3 Oct 2022 15:09:02 +0000 (17:09 +0200)
committerMaria Matejka <mq@ucw.cz>
Mon, 3 Oct 2022 15:09:02 +0000 (17:09 +0200)
proto/rpki/rpki.c

index 4fca9e546a4280c43645eee688c4a2bad4bcd62c..3c27aa1a5fd1af7a48455c346d3cf4df40f83666 100644 (file)
@@ -278,12 +278,13 @@ rpki_cache_change_state(struct rpki_cache *cache, const enum rpki_cache_state ne
 
   case RPKI_CS_NO_INCR_UPDATE_AVAIL:
     /* Server was unable to answer the last Serial Query and sent Cache Reset. */
-    rpki_cache_change_state(cache, RPKI_CS_RESET);
-    break;
-
   case RPKI_CS_ERROR_NO_DATA_AVAIL:
     /* No validation records are available on the cache server. */
-    rpki_cache_change_state(cache, RPKI_CS_RESET);
+
+    if (old_state == RPKI_CS_ESTABLISHED)
+      rpki_cache_change_state(cache, RPKI_CS_RESET);
+    else
+      rpki_schedule_next_retry(cache);
     break;
 
   case RPKI_CS_ERROR_FATAL:
@@ -453,6 +454,11 @@ rpki_retry_hook(timer *tm)
     }
     break;
 
+  case RPKI_CS_NO_INCR_UPDATE_AVAIL:
+  case RPKI_CS_ERROR_NO_DATA_AVAIL:
+    rpki_cache_change_state(cache, RPKI_CS_RESET);
+    break;
+
   default:
     rpki_cache_change_state(cache, RPKI_CS_CONNECTING);
     break;