forked from Mirror/frr
pimd: Modify pim_parse_addr_source to use 'struct prefix_sg'
Modify the pim_parse_addr_source function to take a 'struct prefix_sg' and to fill in the src data. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
bce0e64521
commit
a7762e0765
|
@ -302,7 +302,6 @@ int pim_joinprune_recv(struct interface *ifp,
|
|||
/* Scan groups */
|
||||
for (group = 0; group < msg_num_groups; ++group) {
|
||||
struct prefix_sg sg;
|
||||
struct prefix msg_source_addr;
|
||||
uint8_t msg_source_flags;
|
||||
uint16_t msg_num_joined_sources;
|
||||
uint16_t msg_num_pruned_sources;
|
||||
|
@ -348,7 +347,7 @@ int pim_joinprune_recv(struct interface *ifp,
|
|||
|
||||
/* Scan joined sources */
|
||||
for (source = 0; source < msg_num_joined_sources; ++source) {
|
||||
addr_offset = pim_parse_addr_source (&msg_source_addr,
|
||||
addr_offset = pim_parse_addr_source (&sg,
|
||||
&msg_source_flags,
|
||||
buf, pastend - buf);
|
||||
if (addr_offset < 1) {
|
||||
|
@ -360,13 +359,13 @@ int pim_joinprune_recv(struct interface *ifp,
|
|||
recv_join(ifp, neigh, msg_holdtime,
|
||||
msg_upstream_addr.u.prefix4,
|
||||
sg.grp,
|
||||
msg_source_addr.u.prefix4,
|
||||
sg.src,
|
||||
msg_source_flags);
|
||||
}
|
||||
|
||||
/* Scan pruned sources */
|
||||
for (source = 0; source < msg_num_pruned_sources; ++source) {
|
||||
addr_offset = pim_parse_addr_source (&msg_source_addr,
|
||||
addr_offset = pim_parse_addr_source (&sg,
|
||||
&msg_source_flags,
|
||||
buf, pastend - buf);
|
||||
if (addr_offset < 1) {
|
||||
|
@ -378,7 +377,7 @@ int pim_joinprune_recv(struct interface *ifp,
|
|||
recv_prune(ifp, neigh, msg_holdtime,
|
||||
msg_upstream_addr.u.prefix4,
|
||||
sg.grp,
|
||||
msg_source_addr.u.prefix4,
|
||||
sg.src,
|
||||
msg_source_flags);
|
||||
}
|
||||
|
||||
|
|
|
@ -568,7 +568,7 @@ pim_parse_addr_group (struct prefix_sg *sg,
|
|||
}
|
||||
|
||||
int
|
||||
pim_parse_addr_source(struct prefix *p,
|
||||
pim_parse_addr_source(struct prefix_sg *sg,
|
||||
uint8_t *flags,
|
||||
const uint8_t *buf,
|
||||
int buf_size)
|
||||
|
@ -612,9 +612,7 @@ pim_parse_addr_source(struct prefix *p,
|
|||
return -3;
|
||||
}
|
||||
|
||||
p->family = AF_INET; /* notice: AF_INET != PIM_MSG_ADDRESS_FAMILY_IPV4 */
|
||||
memcpy(&p->u.prefix4, addr, sizeof(struct in_addr));
|
||||
p->prefixlen = mask_len;
|
||||
memcpy(&sg->src, addr, sizeof(struct in_addr));
|
||||
|
||||
/*
|
||||
RFC 4601: 4.9.1 Encoded Source and Group Address Formats
|
||||
|
@ -626,9 +624,9 @@ pim_parse_addr_source(struct prefix *p,
|
|||
and 128 for IPv6 native). A router SHOULD ignore any messages
|
||||
received with any other mask length.
|
||||
*/
|
||||
if (p->prefixlen != 32) {
|
||||
if (mask_len != 32) {
|
||||
zlog_warn("%s: IPv4 bad source address mask: %d",
|
||||
__PRETTY_FUNCTION__, p->prefixlen);
|
||||
__PRETTY_FUNCTION__, mask_len);
|
||||
return -4;
|
||||
}
|
||||
|
||||
|
|
|
@ -119,7 +119,7 @@ int pim_parse_addr_ucast (struct prefix *p,
|
|||
int pim_parse_addr_group (struct prefix_sg *sg,
|
||||
const uint8_t *buf,
|
||||
int buf_size);
|
||||
int pim_parse_addr_source(struct prefix *p,
|
||||
int pim_parse_addr_source(struct prefix_sg *sg,
|
||||
uint8_t *flags,
|
||||
const uint8_t *buf,
|
||||
int buf_size);
|
||||
|
|
Loading…
Reference in a new issue