From: Alberto Leiva Popper Date: Fri, 29 May 2026 01:07:01 +0000 (-0600) Subject: Parrot a different session number for each RTR version X-Git-Tag: 1.7.0.experimental~16 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=79627e393aef972e657b2c3e819f565a55db465f;p=thirdparty%2FFORT-validator.git Parrot a different session number for each RTR version I'd forgotten this requirement from 8210bis: > To reduce the risk of confusion, > cache servers SHOULD NOT use the same Session ID across multiple > protocol versions --- diff --git a/src/rtr/pdu_handler.c b/src/rtr/pdu_handler.c index 40b3dddb..ad3ed4eb 100644 --- a/src/rtr/pdu_handler.c +++ b/src/rtr/pdu_handler.c @@ -230,7 +230,7 @@ send_aspas(int fd, uint8_t ver, serial_t serial) } static int -load_rtr_metadata(struct rtr_metadata *rtr) +load_rtr_metadata(struct rtr_metadata *rtr, uint8_t version) { struct rtr_index idx; int error; @@ -243,7 +243,7 @@ load_rtr_metadata(struct rtr_metadata *rtr) goto end; } - rtr->session = idx.session; + rtr->session = idx.session + version; rtr->serial = idx.serials->serial; end: rtridx_cleanup(&idx); @@ -263,7 +263,7 @@ handle_reset_query_pdu(struct rtr_request *request) stream.fd = request->fd; stream.ver = request->pdu.rtr_version; - error = load_rtr_metadata(&rtr); + error = load_rtr_metadata(&rtr, stream.ver); switch (error) { case 0: break; @@ -511,7 +511,7 @@ handle_serial_query_pdu(struct rtr_request *request) stream.fd = request->fd; stream.ver = request->pdu.rtr_version; - error = load_rtr_metadata(&rtr); + error = load_rtr_metadata(&rtr, stream.ver); switch (error) { case 0: break; case ENOENT: return err_pdu_send_no_data_available(stream.fd, stream.ver); diff --git a/src/rtr/pdu_sender.c b/src/rtr/pdu_sender.c index baf7d610..1768d110 100644 --- a/src/rtr/pdu_sender.c +++ b/src/rtr/pdu_sender.c @@ -94,7 +94,7 @@ send_serial_notify_pdu(int fd, uint8_t version, struct rtr_metadata *meta) pr_op_debug("Sending Serial Notify PDU."); - buf = serialize_hdr(data, version, type, meta->session, len); + buf = serialize_hdr(data, version, type, meta->session + version, len); buf = write_uint32(buf, meta->serial); return send_response(fd, type, data, len); diff --git a/test/rtr/pdu_handler_test.c b/test/rtr/pdu_handler_test.c index 257d7d8c..6d54a240 100644 --- a/test/rtr/pdu_handler_test.c +++ b/test/rtr/pdu_handler_test.c @@ -324,10 +324,10 @@ START_TEST(test_natural_flows) e = 0; expected_pdu_add(PDU_TYPE_ERROR_REPORT, 0, 0); rcv_reset_query(); - rcv_serial_query(0x1234, 0); + rcv_serial_query(0x1236, 0); /* First cycle: One tree, no deltas */ - session = mock_serial1(); + session = mock_serial1() + RTR_V2; e = 0; expected_pdu_add(PDU_TYPE_CACHE_RESPONSE, 0, 0); @@ -475,7 +475,7 @@ START_TEST(test_delta_forget) rcv_serial_query(0x1234, 0); /* First cycle: One tree, no deltas */ - session = mock_serial1(); + session = mock_serial1() + RTR_V2; e = 0; expected_pdu_add(PDU_TYPE_CACHE_RESPONSE, 0, 0); @@ -601,7 +601,7 @@ START_TEST(test_no_incremental_update_available) deltas_lifetime = 5; if (file_exists("tmp/rtr") == 0) ck_assert_int_eq(0, file_rm_rf("tmp/rtr")); - session = mock_serial1(); + session = mock_serial1() + RTR_V2; mock_serial2(); mock_serial3(); mock_serial4();