mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-04-29 23:08:38 +00:00
pimd: Pass in upstream to pim_msg_join_prune_encode.
Pass in the upstream data structure to pim_msg_join_prune_encode so it can decide to send (S,G,rpt) information if it wants to or not. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
8b9c900bd1
commit
f99df3e77a
@ -399,7 +399,7 @@ int pim_joinprune_send(struct interface *ifp,
|
|||||||
int send_join)
|
int send_join)
|
||||||
{
|
{
|
||||||
struct pim_interface *pim_ifp;
|
struct pim_interface *pim_ifp;
|
||||||
uint8_t pim_msg[1000];
|
uint8_t pim_msg[9000];
|
||||||
int pim_msg_size;
|
int pim_msg_size;
|
||||||
|
|
||||||
on_trace (__PRETTY_FUNCTION__, ifp, upstream_addr);
|
on_trace (__PRETTY_FUNCTION__, ifp, upstream_addr);
|
||||||
@ -450,9 +450,8 @@ int pim_joinprune_send(struct interface *ifp,
|
|||||||
/*
|
/*
|
||||||
Build PIM message
|
Build PIM message
|
||||||
*/
|
*/
|
||||||
pim_msg_size = pim_msg_join_prune_encode (pim_msg, 1000, send_join,
|
pim_msg_size = pim_msg_join_prune_encode (pim_msg, 9000, send_join,
|
||||||
up->sg.src, up->sg.grp,
|
up, upstream_addr, PIM_JP_HOLDTIME);
|
||||||
upstream_addr, PIM_JP_HOLDTIME);
|
|
||||||
|
|
||||||
if (pim_msg_size < 0)
|
if (pim_msg_size < 0)
|
||||||
return pim_msg_size;
|
return pim_msg_size;
|
||||||
|
@ -115,7 +115,7 @@ pim_msg_addr_encode_ipv4_source(uint8_t *buf, int buf_size,
|
|||||||
|
|
||||||
int
|
int
|
||||||
pim_msg_join_prune_encode (uint8_t *buf, int buf_size, int is_join,
|
pim_msg_join_prune_encode (uint8_t *buf, int buf_size, int is_join,
|
||||||
struct in_addr source, struct in_addr group,
|
struct pim_upstream *up,
|
||||||
struct in_addr upstream, int holdtime)
|
struct in_addr upstream, int holdtime)
|
||||||
{
|
{
|
||||||
uint8_t *pim_msg = buf;
|
uint8_t *pim_msg = buf;
|
||||||
@ -153,10 +153,10 @@ pim_msg_join_prune_encode (uint8_t *buf, int buf_size, int is_join,
|
|||||||
|
|
||||||
remain = end - pim_msg_curr;
|
remain = end - pim_msg_curr;
|
||||||
pim_msg_curr = pim_msg_addr_encode_ipv4_group (pim_msg_curr, remain,
|
pim_msg_curr = pim_msg_addr_encode_ipv4_group (pim_msg_curr, remain,
|
||||||
group);
|
up->sg.grp);
|
||||||
if (!pim_msg_curr) {
|
if (!pim_msg_curr) {
|
||||||
char group_str[INET_ADDRSTRLEN];
|
char group_str[INET_ADDRSTRLEN];
|
||||||
pim_inet4_dump("<grp?>", group, group_str, sizeof(group_str));
|
pim_inet4_dump("<grp?>", up->sg.grp, group_str, sizeof(group_str));
|
||||||
zlog_warn("%s: failure encoding group address %s: space left=%d",
|
zlog_warn("%s: failure encoding group address %s: space left=%d",
|
||||||
__PRETTY_FUNCTION__, group_str, remain);
|
__PRETTY_FUNCTION__, group_str, remain);
|
||||||
return -5;
|
return -5;
|
||||||
@ -180,21 +180,21 @@ pim_msg_join_prune_encode (uint8_t *buf, int buf_size, int is_join,
|
|||||||
++pim_msg_curr;
|
++pim_msg_curr;
|
||||||
|
|
||||||
remain = end - pim_msg_curr;
|
remain = end - pim_msg_curr;
|
||||||
if (source.s_addr == INADDR_ANY)
|
if (up->sg.src.s_addr == INADDR_ANY)
|
||||||
{
|
{
|
||||||
struct pim_rpf *rpf = pim_rp_g (group);
|
struct pim_rpf *rpf = pim_rp_g (up->sg.grp);
|
||||||
bits = PIM_ENCODE_SPARSE_BIT | PIM_ENCODE_WC_BIT | PIM_ENCODE_RPT_BIT;
|
bits = PIM_ENCODE_SPARSE_BIT | PIM_ENCODE_WC_BIT | PIM_ENCODE_RPT_BIT;
|
||||||
stosend = rpf->rpf_addr.u.prefix4;
|
stosend = rpf->rpf_addr.u.prefix4;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bits = PIM_ENCODE_SPARSE_BIT;
|
bits = PIM_ENCODE_SPARSE_BIT;
|
||||||
stosend = source;
|
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, remain, stosend, bits);
|
||||||
if (!pim_msg_curr) {
|
if (!pim_msg_curr) {
|
||||||
char source_str[INET_ADDRSTRLEN];
|
char source_str[INET_ADDRSTRLEN];
|
||||||
pim_inet4_dump("<src?>", source, source_str, sizeof(source_str));
|
pim_inet4_dump("<src?>", up->sg.src, source_str, sizeof(source_str));
|
||||||
zlog_warn("%s: failure encoding source address %s: space left=%d",
|
zlog_warn("%s: failure encoding source address %s: space left=%d",
|
||||||
__PRETTY_FUNCTION__, source_str, remain);
|
__PRETTY_FUNCTION__, source_str, remain);
|
||||||
return -7;
|
return -7;
|
||||||
|
@ -55,6 +55,6 @@ uint8_t *pim_msg_addr_encode_ipv4_source(uint8_t *buf,
|
|||||||
|
|
||||||
|
|
||||||
int pim_msg_join_prune_encode (uint8_t *buf, int buf_size, int is_join,
|
int pim_msg_join_prune_encode (uint8_t *buf, int buf_size, int is_join,
|
||||||
struct in_addr source, struct in_addr group,
|
struct pim_upstream *up,
|
||||||
struct in_addr upstream, int holdtime);
|
struct in_addr upstream, int holdtime);
|
||||||
#endif /* PIM_MSG_H */
|
#endif /* PIM_MSG_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user