#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
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)
{
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)
{
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