diff options
Diffstat (limited to 'pimd/pim_msg.c')
| -rw-r--r-- | pimd/pim_msg.c | 59 |
1 files changed, 17 insertions, 42 deletions
diff --git a/pimd/pim_msg.c b/pimd/pim_msg.c index 97b9688aff..4378ac99f7 100644 --- a/pimd/pim_msg.c +++ b/pimd/pim_msg.c @@ -37,13 +37,10 @@ #include "pim_rpf.h" #include "pim_register.h" -void pim_msg_build_header(uint8_t *pim_msg, int pim_msg_size, - uint8_t pim_msg_type) +void pim_msg_build_header(uint8_t *pim_msg, size_t pim_msg_size, uint8_t pim_msg_type) { struct pim_msg_header *header = (struct pim_msg_header *)pim_msg; - zassert(pim_msg_size >= PIM_PIM_MIN_LEN); - /* * Write header */ @@ -63,14 +60,8 @@ void pim_msg_build_header(uint8_t *pim_msg, int pim_msg_size, header->checksum = in_cksum (pim_msg, pim_msg_size); } -uint8_t *pim_msg_addr_encode_ipv4_ucast(uint8_t *buf, - int buf_size, - struct in_addr addr) +uint8_t *pim_msg_addr_encode_ipv4_ucast(uint8_t *buf, struct in_addr addr) { - if (buf_size < PIM_ENCODED_IPV4_UCAST_SIZE) { - return NULL; - } - buf[0] = PIM_MSG_ADDRESS_FAMILY_IPV4; /* addr family */ buf[1] = '\0'; /* native encoding */ memcpy(buf+2, &addr, sizeof(struct in_addr)); @@ -78,14 +69,8 @@ uint8_t *pim_msg_addr_encode_ipv4_ucast(uint8_t *buf, return buf + PIM_ENCODED_IPV4_UCAST_SIZE; } -uint8_t *pim_msg_addr_encode_ipv4_group(uint8_t *buf, - int buf_size, - struct in_addr addr) +uint8_t *pim_msg_addr_encode_ipv4_group(uint8_t *buf, struct in_addr addr) { - if (buf_size < PIM_ENCODED_IPV4_GROUP_SIZE) { - return NULL; - } - buf[0] = PIM_MSG_ADDRESS_FAMILY_IPV4; /* addr family */ buf[1] = '\0'; /* native encoding */ buf[2] = '\0'; /* reserved */ @@ -96,13 +81,9 @@ uint8_t *pim_msg_addr_encode_ipv4_group(uint8_t *buf, } uint8_t * -pim_msg_addr_encode_ipv4_source(uint8_t *buf, int buf_size, - struct in_addr addr, uint8_t bits) +pim_msg_addr_encode_ipv4_source(uint8_t *buf, + struct in_addr addr, uint8_t bits) { - if (buf_size < PIM_ENCODED_IPV4_SOURCE_SIZE) { - return NULL; - } - buf[0] = PIM_MSG_ADDRESS_FAMILY_IPV4; /* addr family */ buf[1] = '\0'; /* native encoding */ buf[2] = bits; @@ -179,7 +160,7 @@ pim_msg_addr_encode_ipv4_source(uint8_t *buf, int buf_size, * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ int -pim_msg_join_prune_encode (uint8_t *buf, int buf_size, int is_join, +pim_msg_join_prune_encode (uint8_t *buf, size_t buf_size, int is_join, struct pim_upstream *up, struct in_addr upstream, int holdtime) { @@ -191,23 +172,18 @@ pim_msg_join_prune_encode (uint8_t *buf, int buf_size, int is_join, struct in_addr stosend; uint8_t bits; int remain; - int min_len = PIM_MSG_HEADER_LEN + PIM_JP_GROUP_HEADER_SIZE + + size_t min_len = PIM_MSG_HEADER_LEN + PIM_JP_GROUP_HEADER_SIZE + PIM_ENCODED_IPV4_SOURCE_SIZE; // Only 1 source - if (buf_size < min_len) - { - zlog_warn ("%s: Buffer size specified(%d) will not hold smallest J/P Message Possible\n", - __PRETTY_FUNCTION__, buf_size); - return -2; - } + assert(buf_size > min_len); remain = end - pim_msg_curr; - pim_msg_curr = pim_msg_addr_encode_ipv4_ucast (pim_msg_curr, buf_size - PIM_MSG_HEADER_LEN, upstream); + pim_msg_curr = pim_msg_addr_encode_ipv4_ucast (pim_msg_curr, upstream); if (!pim_msg_curr) { char dst_str[INET_ADDRSTRLEN]; pim_inet4_dump("<dst?>", upstream, dst_str, sizeof(dst_str)); - zlog_warn("%s: failure encoding destination address %s: space left=%d", - __PRETTY_FUNCTION__, dst_str, remain); + zlog_warn("%s: failure encoding destination address %s", + __PRETTY_FUNCTION__, dst_str); return -3; } @@ -221,13 +197,12 @@ pim_msg_join_prune_encode (uint8_t *buf, int buf_size, int is_join, ++pim_msg_curr; remain = end - pim_msg_curr; - pim_msg_curr = pim_msg_addr_encode_ipv4_group (pim_msg_curr, remain, - up->sg.grp); + pim_msg_curr = pim_msg_addr_encode_ipv4_group (pim_msg_curr, up->sg.grp); if (!pim_msg_curr) { char group_str[INET_ADDRSTRLEN]; pim_inet4_dump("<grp?>", up->sg.grp, group_str, sizeof(group_str)); - zlog_warn("%s: failure encoding group address %s: space left=%d", - __PRETTY_FUNCTION__, group_str, remain); + zlog_warn("%s: failure encoding group address %s", + __PRETTY_FUNCTION__, group_str); return -5; } @@ -257,12 +232,12 @@ pim_msg_join_prune_encode (uint8_t *buf, int buf_size, int is_join, bits = PIM_ENCODE_SPARSE_BIT; stosend = up->sg.src; } - pim_msg_curr = pim_msg_addr_encode_ipv4_source (pim_msg_curr, remain, stosend, bits); + pim_msg_curr = pim_msg_addr_encode_ipv4_source (pim_msg_curr, stosend, bits); if (!pim_msg_curr) { char source_str[INET_ADDRSTRLEN]; pim_inet4_dump("<src?>", up->sg.src, source_str, sizeof(source_str)); - zlog_warn("%s: failure encoding source address %s: space left=%d", - __PRETTY_FUNCTION__, source_str, remain); + zlog_warn("%s: failure encoding source address %s", + __PRETTY_FUNCTION__, source_str); return -7; } remain = pim_msg_curr - pim_msg; |
