]> git.ipfire.org Git - thirdparty/FORT-validator.git/commitdiff
Implement Cache Reset PDU (it has some TODOs to complete PDU exchange)
authorpcarana <pc.moreno2099@gmail.com>
Fri, 22 Feb 2019 15:51:34 +0000 (09:51 -0600)
committerpcarana <pc.moreno2099@gmail.com>
Fri, 22 Feb 2019 15:51:34 +0000 (09:51 -0600)
src/rtr/pdu.h
src/rtr/pdu_handler.c
src/rtr/pdu_sender.c
src/rtr/pdu_sender.h
src/rtr/pdu_serializer.c

index dc9530bbeacd7c62bc310a1493d6cd7c1c20c333..4e5fe9216480a067b36911d27c039241f488f976 100644 (file)
@@ -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;
index c82d764eefb4cf27a1836b774e6339b499c700ca..7eaba7d3de51f728b9cc30e990cc1294dd052ab7 100644 (file)
@@ -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
index eadee39eecb011623b6a8c28fde78080634d28fb..e302f64a5f0b79de3a88172e07321cbea1f1ab8b 100644 (file)
@@ -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)
 {
index 47559abdcf2d7d40528bc21a21b26cba7bb8aa0f..c49bcea9d09b03737cb8550d957b65901a12e7c4 100644 (file)
@@ -4,6 +4,7 @@
 #include <sys/types.h>
 
 
+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);
index 524a3df2893eab4480b920499147c4938ed7d88a..4d6fe665c98248ee1524c867a32c022e4c4d1a23 100644 (file)
@@ -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