mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-27 19:21:17 +00:00
pimd: allow sending packets without pinned iface
The upcoming Candidate-RP code needs to send PIM packets that go through normal unicast routing, without forcing a specific output interface. Allow passing in NULL ifp to do that. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
This commit is contained in:
parent
18b82f64c9
commit
cca9bc193e
@ -636,18 +636,16 @@ static int pim_msg_send_frame(pim_addr src, pim_addr dst, ifindex_t ifindex,
|
|||||||
int pim_msg_send(int fd, pim_addr src, pim_addr dst, uint8_t *pim_msg,
|
int pim_msg_send(int fd, pim_addr src, pim_addr dst, uint8_t *pim_msg,
|
||||||
int pim_msg_size, struct interface *ifp)
|
int pim_msg_size, struct interface *ifp)
|
||||||
{
|
{
|
||||||
struct pim_interface *pim_ifp;
|
if (ifp) {
|
||||||
|
struct pim_interface *pim_ifp = ifp->info;
|
||||||
|
|
||||||
pim_ifp = ifp->info;
|
|
||||||
|
|
||||||
if (pim_ifp->pim_passive_enable) {
|
if (pim_ifp->pim_passive_enable) {
|
||||||
if (PIM_DEBUG_PIM_PACKETS)
|
if (PIM_DEBUG_PIM_PACKETS)
|
||||||
zlog_debug(
|
zlog_debug("skip sending PIM message on passive interface %s",
|
||||||
"skip sending PIM message on passive interface %s",
|
|
||||||
ifp->name);
|
ifp->name);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if PIM_IPV == 4
|
#if PIM_IPV == 4
|
||||||
uint8_t ttl;
|
uint8_t ttl;
|
||||||
@ -710,7 +708,7 @@ int pim_msg_send(int fd, pim_addr src, pim_addr dst, uint8_t *pim_msg,
|
|||||||
|
|
||||||
if (PIM_DEBUG_PIM_PACKETS)
|
if (PIM_DEBUG_PIM_PACKETS)
|
||||||
zlog_debug("%s: to %pPA on %s: msg_size=%d checksum=%x",
|
zlog_debug("%s: to %pPA on %s: msg_size=%d checksum=%x",
|
||||||
__func__, &dst, ifp->name, pim_msg_size,
|
__func__, &dst, ifp ? ifp->name : "*", pim_msg_size,
|
||||||
header->checksum);
|
header->checksum);
|
||||||
|
|
||||||
if (PIM_DEBUG_PIM_PACKETDUMP_SEND) {
|
if (PIM_DEBUG_PIM_PACKETDUMP_SEND) {
|
||||||
@ -718,7 +716,7 @@ int pim_msg_send(int fd, pim_addr src, pim_addr dst, uint8_t *pim_msg,
|
|||||||
}
|
}
|
||||||
|
|
||||||
pim_msg_send_frame(fd, (char *)buffer, sendlen, (struct sockaddr *)&to,
|
pim_msg_send_frame(fd, (char *)buffer, sendlen, (struct sockaddr *)&to,
|
||||||
tolen, ifp->name);
|
tolen, ifp ? ifp->name : "*");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
@ -727,7 +725,7 @@ int pim_msg_send(int fd, pim_addr src, pim_addr dst, uint8_t *pim_msg,
|
|||||||
iovector[0].iov_base = pim_msg;
|
iovector[0].iov_base = pim_msg;
|
||||||
iovector[0].iov_len = pim_msg_size;
|
iovector[0].iov_len = pim_msg_size;
|
||||||
|
|
||||||
pim_msg_send_frame(src, dst, ifp->ifindex, &iovector[0], fd);
|
pim_msg_send_frame(src, dst, ifp ? ifp->ifindex : 0, &iovector[0], fd);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user