int error, updates;
u_int32_t current_serial;
u_int16_t session_id;
+ u_int8_t version;
/*
* RFC 6810 and 8210:
* 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) {
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) {
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)
}
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;
}
}
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;
}