From: pcarana Date: Fri, 22 Feb 2019 15:51:34 +0000 (-0600) Subject: Implement Cache Reset PDU (it has some TODOs to complete PDU exchange) X-Git-Tag: v0.0.2~52^2~56 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cee27eaff522a55d135c488c1fb9adead52c639a;p=thirdparty%2FFORT-validator.git Implement Cache Reset PDU (it has some TODOs to complete PDU exchange) --- diff --git a/src/rtr/pdu.h b/src/rtr/pdu.h index dc9530bb..4e5fe921 100644 --- a/src/rtr/pdu.h +++ b/src/rtr/pdu.h @@ -13,6 +13,7 @@ #define IPV4_PREFIX_PDU_TYPE 4 #define IPV6_PREFIX_PDU_TYPE 6 #define END_OF_DATA_PDU_TYPE 7 +#define CACHE_RESET_PDU_TYPE 8 struct pdu_header { u_int8_t protocol_version; diff --git a/src/rtr/pdu_handler.c b/src/rtr/pdu_handler.c index c82d764e..7eaba7d3 100644 --- a/src/rtr/pdu_handler.c +++ b/src/rtr/pdu_handler.c @@ -25,7 +25,15 @@ handle_serial_notify_pdu(int fd, void *pdu) int handle_serial_query_pdu(int fd, void *pdu) { - return -EUNIMPLEMENTED; + struct reset_query_pdu *received = pdu; + u_int8_t version; + + version = received->header.protocol_version; + /* + * TODO The Serial should be read to get updates, so + * more work needs to be done here. + */ + return send_cache_reset_pdu(fd, version); } int diff --git a/src/rtr/pdu_sender.c b/src/rtr/pdu_sender.c index eadee39e..e302f64a 100644 --- a/src/rtr/pdu_sender.c +++ b/src/rtr/pdu_sender.c @@ -78,6 +78,21 @@ send_response(int fd, char *data, size_t data_len) return 0; } +int +send_cache_reset_pdu(int fd, u_int8_t version) +{ + struct cache_reset_pdu pdu; + char data[BUFFER_SIZE]; + size_t len; + + /* This PDU has only the header */ + set_header_values(&pdu.header, version, CACHE_RESET_PDU_TYPE, 0); + pdu.header.length = HEADER_LENGTH; + + len = serialize_cache_reset_pdu(&pdu, data); + return send_response(fd, data, len); +} + int send_cache_response_pdu(int fd, u_int8_t version, u_int16_t session_id) { diff --git a/src/rtr/pdu_sender.h b/src/rtr/pdu_sender.h index 47559abd..c49bcea9 100644 --- a/src/rtr/pdu_sender.h +++ b/src/rtr/pdu_sender.h @@ -4,6 +4,7 @@ #include +int send_cache_reset_pdu(int, u_int8_t); int send_cache_response_pdu(int, u_int8_t, u_int16_t); int send_payload_pdus(int, u_int8_t, u_int32_t); int send_end_of_data_pdu(int, u_int8_t, u_int16_t); diff --git a/src/rtr/pdu_serializer.c b/src/rtr/pdu_serializer.c index 524a3df2..4d6fe665 100644 --- a/src/rtr/pdu_serializer.c +++ b/src/rtr/pdu_serializer.c @@ -105,8 +105,8 @@ serialize_end_of_data_pdu(struct end_of_data_pdu *pdu, char *buf) size_t serialize_cache_reset_pdu(struct cache_reset_pdu *pdu, char *buf) { - // FIXME Complete me! - return 0; + /* No payload to serialize */ + return serialize_pdu_header(&pdu->header, pdu->header.reserved, buf); } size_t