From: pcarana Date: Thu, 28 Feb 2019 21:30:55 +0000 (-0600) Subject: Implement Serial Notify PDU (isn't sent yet) X-Git-Tag: v0.0.2~52^2~47 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=44208ea555a4f48310c54e4c180757ab4477c494;p=thirdparty%2FFORT-validator.git Implement Serial Notify PDU (isn't sent yet) --- diff --git a/src/rtr/pdu.h b/src/rtr/pdu.h index 95f288cf..2c194b5a 100644 --- a/src/rtr/pdu.h +++ b/src/rtr/pdu.h @@ -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 diff --git a/src/rtr/pdu_sender.c b/src/rtr/pdu_sender.c index ca7cdcbe..a58d8738 100644 --- a/src/rtr/pdu_sender.c +++ b/src/rtr/pdu_sender.c @@ -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) { diff --git a/src/rtr/pdu_serializer.c b/src/rtr/pdu_serializer.c index f35dac75..8c11819c 100644 --- a/src/rtr/pdu_serializer.c +++ b/src/rtr/pdu_serializer.c @@ -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