]> git.ipfire.org Git - thirdparty/FORT-validator.git/commitdiff
Implement Serial Notify PDU (isn't sent yet)
authorpcarana <pc.moreno2099@gmail.com>
Thu, 28 Feb 2019 21:30:55 +0000 (15:30 -0600)
committerpcarana <pc.moreno2099@gmail.com>
Thu, 28 Feb 2019 21:30:55 +0000 (15:30 -0600)
src/rtr/pdu.h
src/rtr/pdu_sender.c
src/rtr/pdu_serializer.c

index 95f288cfb8408e4ff4e06d694598b924b237caa8..2c194b5ae32884421e42b7ff70ffeb5820c1b1d1 100644 (file)
@@ -9,6 +9,7 @@
 #define RTR_V0 0
 #define RTR_V1 1
 
+#define PDU_TYPE_SERIAL_NOTIFY         0
 #define PDU_TYPE_CACHE_RESPONSE                3
 #define PDU_TYPE_IPV4_PREFIX           4
 #define PDU_TYPE_IPV6_PREFIX           6
index ca7cdcbecd4cf632af10bdb6abda9c9b260ffd58..a58d87386b7ba33460831991a1b97cb724df3e98 100644 (file)
@@ -39,6 +39,12 @@ set_header_values(struct pdu_header *header, u_int8_t version, u_int8_t type,
        header->reserved = reserved;
 }
 
+static u_int32_t
+length_serial_notify_pdu(struct serial_notify_pdu *pdu)
+{
+       return HEADER_LENGTH + sizeof(pdu->serial_number);
+}
+
 static u_int32_t
 length_ipvx_prefix_pdu(bool isv4)
 {
@@ -98,6 +104,24 @@ send_response(int fd, char *data, size_t data_len)
        return 0;
 }
 
+int
+send_serial_notify_pdu(struct sender_common *common)
+{
+       struct serial_notify_pdu pdu;
+       char data[BUFFER_SIZE];
+       size_t len;
+
+       set_header_values(&pdu.header, common->version, PDU_TYPE_SERIAL_NOTIFY,
+           *common->session_id);
+
+       pdu.serial_number = *common->start_serial;
+       pdu.header.length = length_serial_notify_pdu(&pdu);
+
+       len = serialize_serial_notify_pdu(&pdu, data);
+
+       return send_response(common->fd, data, len);
+}
+
 int
 send_cache_reset_pdu(struct sender_common *common)
 {
index f35dac7526a48fbb4c68290d0517f2a9ab74584a..8c11819cf23ca15da92e7cc0480265324500383d 100644 (file)
@@ -35,8 +35,15 @@ serialize_pdu_header(struct pdu_header *header, u_int16_t union_value,
 size_t
 serialize_serial_notify_pdu(struct serial_notify_pdu *pdu, char *buf)
 {
-       // FIXME Complete me!
-       return 0;
+       size_t head_size;
+       char *ptr;
+
+       head_size = serialize_pdu_header(&pdu->header, pdu->header.session_id, buf);
+
+       ptr = buf + head_size;
+       ptr = write_int32(ptr, pdu->serial_number);
+
+       return ptr - buf;
 }
 
 size_t