#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
*/
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));
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 */
}
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;
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
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)
{
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;
}
++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;
}
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;
uint16_t checksum;
} __attribute__ ((packed));
-void pim_msg_build_header(uint8_t *pim_msg, int pim_msg_size,
- uint8_t pim_msg_type);
-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_group(uint8_t *buf,
- int buf_size,
- struct in_addr addr);
+void pim_msg_build_header(uint8_t *pim_msg, size_t pim_msg_size, uint8_t pim_msg_type);
+uint8_t *pim_msg_addr_encode_ipv4_ucast(uint8_t *buf, struct in_addr addr);
+uint8_t *pim_msg_addr_encode_ipv4_group(uint8_t *buf, struct in_addr addr);
#define PIM_ENCODE_SPARSE_BIT 0x04
#define PIM_ENCODE_WC_BIT 0x02
#define PIM_ENCODE_RPT_BIT 0x01
uint8_t *pim_msg_addr_encode_ipv4_source(uint8_t *buf,
- int buf_size,
- struct in_addr addr,
- uint8_t bits);
+ struct in_addr addr, uint8_t bits);
-int pim_msg_join_prune_encode (uint8_t *buf, int buf_size, int is_join,
- struct pim_upstream *up,
- struct in_addr upstream, int holdtime);
+int 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);
#endif /* PIM_MSG_H */