#include "plist.h"
#include "pimd.h"
+#include "pim_instance.h"
#include "pim_str.h"
#include "pim_tlv.h"
#include "pim_msg.h"
* If the RP sent in the message is not
* our RP for the group, drop the message
*/
- rpf_addr = pim_addr_from_prefix(&rp->rpf_addr);
+ rpf_addr = rp->rpf_addr;
if (pim_addr_cmp(sg->src, rpf_addr)) {
zlog_warn(
"%s: Specified RP(%pPAs) in join is different than our configured RP(%pPAs)",
pastend = tlv_buf + tlv_buf_size;
pim_ifp = ifp->info;
+ if (pim_ifp->pim_passive_enable) {
+ if (PIM_DEBUG_PIM_PACKETS)
+ zlog_debug(
+ "skip receiving PIM message on passive interface %s",
+ ifp->name);
+ return 0;
+ }
+
/*
Parse ucast addr
*/
size_t packet_left = 0;
size_t packet_size = 0;
size_t group_size = 0;
- pim_addr rpf_addr;
if (rpf->source_nexthop.interface)
pim_ifp = rpf->source_nexthop.interface->info;
return -1;
}
- rpf_addr = pim_addr_from_prefix(&rpf->rpf_addr);
- on_trace(__func__, rpf->source_nexthop.interface, rpf_addr);
+ on_trace(__func__, rpf->source_nexthop.interface, rpf->rpf_addr);
if (!pim_ifp) {
zlog_warn("%s: multicast not enabled on interface %s", __func__,
return -1;
}
- if (pim_addr_is_any(rpf_addr)) {
+ if (pim_addr_is_any(rpf->rpf_addr)) {
if (PIM_DEBUG_PIM_J_P)
zlog_debug(
"%s: upstream=%pPA is myself on interface %s",
- __func__, &rpf_addr,
+ __func__, &rpf->rpf_addr,
rpf->source_nexthop.interface->name);
return 0;
}
memset(msg, 0, sizeof(*msg));
pim_msg_addr_encode_ucast((uint8_t *)&msg->addr,
- rpf_addr);
+ rpf->rpf_addr);
msg->reserved = 0;
msg->holdtime = htons(PIM_JP_HOLDTIME);
if (PIM_DEBUG_PIM_J_P)
zlog_debug(
"%s: sending (G)=%pPAs to upstream=%pPA on interface %s",
- __func__, &group->group, &rpf_addr,
+ __func__, &group->group, &rpf->rpf_addr,
rpf->source_nexthop.interface->name);
group_size = pim_msg_get_jp_group_size(group->sources);
pim_ifp->primary_address,
qpim_all_pim_routers_addr, pim_msg,
packet_size,
- rpf->source_nexthop.interface->name)) {
+ rpf->source_nexthop.interface)) {
zlog_warn(
"%s: could not send PIM message on interface %s",
__func__,
memset(msg, 0, sizeof(*msg));
pim_msg_addr_encode_ucast((uint8_t *)&msg->addr,
- rpf_addr);
+ rpf->rpf_addr);
msg->reserved = 0;
msg->holdtime = htons(PIM_JP_HOLDTIME);
packet_size += group_size;
pim_msg_build_jp_groups(grp, group, group_size);
- pim_ifp->pim_ifstat_join_send += ntohs(grp->joins);
- pim_ifp->pim_ifstat_prune_send += ntohs(grp->prunes);
+ if (!pim_ifp->pim_passive_enable) {
+ pim_ifp->pim_ifstat_join_send += ntohs(grp->joins);
+ pim_ifp->pim_ifstat_prune_send += ntohs(grp->prunes);
+ }
if (PIM_DEBUG_PIM_TRACE)
zlog_debug(
pim_ifp->primary_address,
qpim_all_pim_routers_addr, pim_msg,
packet_size,
- rpf->source_nexthop.interface->name)) {
+ rpf->source_nexthop.interface)) {
zlog_warn(
"%s: could not send PIM message on interface %s",
__func__,
pim_msg, packet_size, PIM_MSG_TYPE_JOIN_PRUNE, false);
if (pim_msg_send(pim_ifp->pim_sock_fd, pim_ifp->primary_address,
qpim_all_pim_routers_addr, pim_msg,
- packet_size,
- rpf->source_nexthop.interface->name)) {
+ packet_size, rpf->source_nexthop.interface)) {
zlog_warn(
"%s: could not send PIM message on interface %s",
__func__, rpf->source_nexthop.interface->name);