#include "pdu.h"
#include "pdu_serializer.h"
-/* Header without length field is always 32 bits long */
-#define HEADER_LENGTH 4
+/* Header length field is always 64 bits long */
+#define HEADER_LENGTH 8
/* IPvN PDUs length without header */
#define IPV4_PREFIX_LENGTH 12
#define IPV6_PREFIX_LENGTH 24
header->reserved = reserved;
}
-static u_int32_t
-length_cache_response_pdu(struct cache_response_pdu *pdu)
-{
- /* This PDU has no payload, consider 32 bits of the length field */
- return HEADER_LENGTH + sizeof(u_int32_t);
-}
-
static u_int32_t
length_ipvx_prefix_pdu(bool isv4)
{
- /* Consider 32 bits of the length field */
- return HEADER_LENGTH + sizeof(u_int32_t) +
- (isv4 ? IPV4_PREFIX_LENGTH : IPV6_PREFIX_LENGTH);
+ return HEADER_LENGTH + (isv4 ? IPV4_PREFIX_LENGTH : IPV6_PREFIX_LENGTH);
}
static u_int32_t
{
u_int32_t len;
- /* Consider 32 bits of the length field */
- len = HEADER_LENGTH + sizeof(u_int32_t);
+ len = HEADER_LENGTH;
len += sizeof(pdu->serial_number);
if (pdu->header.protocol_version == RTR_V1) {
len += sizeof(pdu->refresh_interval);
char data[BUFFER_SIZE];
size_t len;
+ /* This PDU has only the header */
set_header_values(&pdu.header, version,
CACHE_RESPONSE_PDU_TYPE, session_id);
- pdu.header.length = length_cache_response_pdu(&pdu);
+ pdu.header.length = HEADER_LENGTH;
len = serialize_cache_response_pdu(&pdu, data);
/* TODO wait for the ACK? */
size_t len;
set_header_values(&pdu.header, version, IPV4_PREFIX_PDU_TYPE, 0);
- /* TODO FLAGS!! Hardcoded 1 to send announcement */
- pdu.flags = 1;
+
+ pdu.flags = vrp->flags;
pdu.prefix_length = vrp->prefix_length;
pdu.max_length = vrp->max_prefix_length;
pdu.zero = 0;
size_t len;
set_header_values(&pdu.header, version, IPV6_PREFIX_PDU_TYPE, 0);
- /* TODO FLAGS!! Hardcoded 1 to send announcement */
- pdu.flags = 1;
+
+ pdu.flags = vrp->flags;
pdu.prefix_length = vrp->prefix_length;
pdu.max_length = vrp->max_prefix_length;
pdu.zero = 0;
#include "array_list.h"
+#define FLAG_WITHDRAWAL 0
+#define FLAG_ANNOUNCEMENT 1
+
ARRAY_LIST(delta, struct vrp *)
ARRAY_LIST(deltasdb, struct delta)
result->asn = asn;
result->prefix_length = prefix_length;
result->max_prefix_length = max_prefix_length;
+ result->flags = FLAG_ANNOUNCEMENT;
return result;
}