mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 13:27:53 +00:00
pimd: extern pim_null_register_send
pim_vxlan will use this for registering the local-VTEP-IP wth the RP independent of the presence of BUM traffic. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
This commit is contained in:
parent
b1891fa084
commit
aea1f84551
@ -219,6 +219,45 @@ void pim_register_send(const uint8_t *buf, int buf_size, struct in_addr src,
|
||||
}
|
||||
}
|
||||
|
||||
void pim_null_register_send(struct pim_upstream *up)
|
||||
{
|
||||
struct ip ip_hdr;
|
||||
struct pim_interface *pim_ifp;
|
||||
struct pim_rpf *rpg;
|
||||
struct in_addr src;
|
||||
|
||||
pim_ifp = up->rpf.source_nexthop.interface->info;
|
||||
if (!pim_ifp) {
|
||||
if (PIM_DEBUG_TRACE)
|
||||
zlog_debug(
|
||||
"%s: Cannot send null-register for %s no valid iif",
|
||||
__PRETTY_FUNCTION__, up->sg_str);
|
||||
return;
|
||||
}
|
||||
|
||||
rpg = RP(pim_ifp->pim, up->sg.grp);
|
||||
if (!rpg) {
|
||||
if (PIM_DEBUG_TRACE)
|
||||
zlog_debug(
|
||||
"%s: Cannot send null-register for %s no RPF to the RP",
|
||||
__PRETTY_FUNCTION__, up->sg_str);
|
||||
return;
|
||||
}
|
||||
|
||||
memset(&ip_hdr, 0, sizeof(struct ip));
|
||||
ip_hdr.ip_p = PIM_IP_PROTO_PIM;
|
||||
ip_hdr.ip_hl = 5;
|
||||
ip_hdr.ip_v = 4;
|
||||
ip_hdr.ip_src = up->sg.src;
|
||||
ip_hdr.ip_dst = up->sg.grp;
|
||||
ip_hdr.ip_len = htons(20);
|
||||
|
||||
/* checksum is broken */
|
||||
src = pim_ifp->primary_address;
|
||||
pim_register_send((uint8_t *)&ip_hdr, sizeof(struct ip),
|
||||
src, rpg, 1, up);
|
||||
}
|
||||
|
||||
/*
|
||||
* 4.4.2 Receiving Register Messages at the RP
|
||||
*
|
||||
|
@ -42,5 +42,6 @@ void pim_register_send(const uint8_t *buf, int buf_size, struct in_addr src,
|
||||
void pim_register_stop_send(struct interface *ifp, struct prefix_sg *sg,
|
||||
struct in_addr src, struct in_addr originator);
|
||||
void pim_register_join(struct pim_upstream *up);
|
||||
void pim_null_register_send(struct pim_upstream *up);
|
||||
|
||||
#endif
|
||||
|
@ -1417,8 +1417,6 @@ static int pim_upstream_register_stop_timer(struct thread *t)
|
||||
struct pim_interface *pim_ifp;
|
||||
struct pim_instance *pim;
|
||||
struct pim_upstream *up;
|
||||
struct pim_rpf *rpg;
|
||||
struct ip ip_hdr;
|
||||
up = THREAD_ARG(t);
|
||||
pim = up->channel_oil->pim;
|
||||
|
||||
@ -1466,24 +1464,7 @@ static int pim_upstream_register_stop_timer(struct thread *t)
|
||||
__PRETTY_FUNCTION__);
|
||||
return 0;
|
||||
}
|
||||
rpg = RP(pim_ifp->pim, up->sg.grp);
|
||||
if (!rpg) {
|
||||
if (PIM_DEBUG_TRACE)
|
||||
zlog_debug(
|
||||
"%s: Cannot send register for %s no RPF to the RP",
|
||||
__PRETTY_FUNCTION__, up->sg_str);
|
||||
return 0;
|
||||
}
|
||||
memset(&ip_hdr, 0, sizeof(struct ip));
|
||||
ip_hdr.ip_p = PIM_IP_PROTO_PIM;
|
||||
ip_hdr.ip_hl = 5;
|
||||
ip_hdr.ip_v = 4;
|
||||
ip_hdr.ip_src = up->sg.src;
|
||||
ip_hdr.ip_dst = up->sg.grp;
|
||||
ip_hdr.ip_len = htons(20);
|
||||
// checksum is broken
|
||||
pim_register_send((uint8_t *)&ip_hdr, sizeof(struct ip),
|
||||
pim_ifp->primary_address, rpg, 1, up);
|
||||
pim_null_register_send(up);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user