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