From: pcarana Date: Fri, 8 Mar 2019 16:25:11 +0000 (-0600) Subject: Send only header of erroneous PDU at Error Report PDU X-Git-Tag: v0.0.2~52^2~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5c34d7bb3c9b8304876bfeaa44f8f5281ffd9a6d;p=thirdparty%2FFORT-validator.git Send only header of erroneous PDU at Error Report PDU --- diff --git a/src/rtr/pdu_sender.c b/src/rtr/pdu_sender.c index cdcf2db5..e46fc62c 100644 --- a/src/rtr/pdu_sender.c +++ b/src/rtr/pdu_sender.c @@ -9,7 +9,6 @@ #include "../configuration.h" #include "../vrps.h" -#include "pdu.h" #include "pdu_serializer.h" /* Header length field is always 64 bits long */ @@ -249,7 +248,7 @@ send_end_of_data_pdu(struct sender_common *common) int send_error_report_pdu(struct sender_common *common, u_int16_t code, - void *err_pdu, char *message) + struct pdu_header *err_pdu_header, char *message) { struct error_report_pdu pdu; char data[BUFFER_SIZE]; @@ -259,11 +258,9 @@ send_error_report_pdu(struct sender_common *common, u_int16_t code, code); pdu.error_pdu_length = 0; - pdu.erroneous_pdu = err_pdu; - if (err_pdu != NULL) { - /* TODO Really? Or get the PDU header length field */ - pdu.error_pdu_length = sizeof(*err_pdu); - } + pdu.erroneous_pdu = (void *)err_pdu_header; + if (err_pdu_header != NULL) + pdu.error_pdu_length = sizeof(err_pdu_header); pdu.error_message_length = 0; pdu.error_message = NULL; diff --git a/src/rtr/pdu_sender.h b/src/rtr/pdu_sender.h index f7d767a6..9a0b85f2 100644 --- a/src/rtr/pdu_sender.h +++ b/src/rtr/pdu_sender.h @@ -2,6 +2,7 @@ #define SRC_RTR_PDU_SENDER_H_ #include +#include "pdu.h" struct sender_common { int fd; @@ -19,7 +20,8 @@ int send_cache_reset_pdu(struct sender_common *); int send_cache_response_pdu(struct sender_common *); int send_payload_pdus(struct sender_common *); int send_end_of_data_pdu(struct sender_common *); -int send_error_report_pdu(struct sender_common *, u_int16_t, void *, char *); +int send_error_report_pdu(struct sender_common *, u_int16_t, + struct pdu_header *, char *); #endif /* SRC_RTR_PDU_SENDER_H_ */ diff --git a/src/rtr/pdu_serializer.c b/src/rtr/pdu_serializer.c index 8c11819c..4ab8914c 100644 --- a/src/rtr/pdu_serializer.c +++ b/src/rtr/pdu_serializer.c @@ -120,6 +120,7 @@ serialize_cache_reset_pdu(struct cache_reset_pdu *pdu, char *buf) size_t serialize_error_report_pdu(struct error_report_pdu *pdu, char *buf) { + struct pdu_header *err_pdu_header; size_t head_size; char *ptr, *tmp_ptr; int i; @@ -130,12 +131,11 @@ serialize_error_report_pdu(struct error_report_pdu *pdu, char *buf) ptr = write_int32(ptr, pdu->error_pdu_length); if (pdu->error_pdu_length > 0) { - tmp_ptr = pdu->erroneous_pdu; - /* TODO Set only the header of err PDU */ - while (*tmp_ptr != '\0') { - ptr = write_int8(ptr, *tmp_ptr); - tmp_ptr++; - } + /* Set only the header of err PDU */ + err_pdu_header = (struct pdu_header *)pdu->erroneous_pdu; + head_size = serialize_pdu_header(err_pdu_header, + err_pdu_header->reserved, ptr); + ptr = ptr + head_size; } ptr = write_int32(ptr, pdu->error_message_length);