From: pcarana Date: Thu, 28 Feb 2019 21:06:57 +0000 (-0600) Subject: Add session ID per protocol version X-Git-Tag: v0.0.2~52^2~48 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2e6122ba3fbeb1df1a8349cb95e0863a3f266016;p=thirdparty%2FFORT-validator.git Add session ID per protocol version --- diff --git a/src/rtr/pdu_handler.c b/src/rtr/pdu_handler.c index 3f3d8c78..00460cb1 100644 --- a/src/rtr/pdu_handler.c +++ b/src/rtr/pdu_handler.c @@ -51,6 +51,7 @@ handle_serial_query_pdu(int fd, void *pdu) int error, updates; u_int32_t current_serial; u_int16_t session_id; + u_int8_t version; /* * RFC 6810 and 8210: @@ -59,14 +60,14 @@ handle_serial_query_pdu(int fd, void *pdu) * mismatch MUST immediately terminate the session with an Error Report PDU * with code 0 ("Corrupt Data")" */ - session_id = current_session_id(); + version = received->header.protocol_version; + session_id = current_session_id(version); if (received->header.session_id != session_id) return send_error_report_pdu(&common, ERR_CORRUPT_DATA, NULL, NULL); current_serial = last_serial_number(); - init_sender_common(&common, fd, received->header.protocol_version, - &received->header.session_id, &received->serial_number, - ¤t_serial); + init_sender_common(&common, fd, version, &session_id, + &received->serial_number, ¤t_serial); updates = deltas_db_status(common.start_serial); switch (updates) { @@ -99,12 +100,14 @@ handle_reset_query_pdu(int fd, void *pdu) struct sender_common common; u_int32_t current_serial; u_int16_t session_id; + u_int8_t version; int error, updates; + version = received->header.protocol_version; + session_id = current_session_id(version); current_serial = last_serial_number(); - session_id = current_session_id(); - init_sender_common(&common, fd, received->header.protocol_version, - &session_id, NULL, ¤t_serial); + init_sender_common(&common, fd, version, &session_id, NULL, + ¤t_serial); updates = deltas_db_status(common.start_serial); switch (updates) { diff --git a/src/vrps.c b/src/vrps.c index 5ab1bf40..ac457240 100644 --- a/src/vrps.c +++ b/src/vrps.c @@ -17,7 +17,8 @@ ARRAY_LIST(deltasdb, struct delta) struct deltasdb db; u_int32_t current_serial; -u_int16_t session_id; +u_int16_t v0_session_id; +u_int16_t v1_session_id; int deltas_db_init(void) @@ -31,7 +32,9 @@ deltas_db_init(void) } current_serial = 0; /* The downcast takes the LSBs */ - session_id = time(NULL); + v0_session_id = time(NULL); + /* Minus 1 to prevent same ID */ + v1_session_id = v0_session_id - 1; return 0; } @@ -236,7 +239,9 @@ last_serial_number(void) } u_int16_t -current_session_id(void) +current_session_id(u_int8_t rtr_version) { - return session_id; + if (rtr_version == 1) + return v1_session_id; + return v0_session_id; } diff --git a/src/vrps.h b/src/vrps.h index 4a774960..1a07a353 100644 --- a/src/vrps.h +++ b/src/vrps.h @@ -39,6 +39,6 @@ void delta_destroy(struct delta *); void deltas_db_destroy(void); u_int32_t last_serial_number(void); -u_int16_t current_session_id(void); +u_int16_t current_session_id(u_int8_t); #endif /* SRC_VRPS_H_ */