]> git.proxmox.com Git - mirror_frr.git/blobdiff - pimd/pim_join.c
Merge pull request #11934 from sri-mohan1/sri-eigrp-dbg1
[mirror_frr.git] / pimd / pim_join.c
index 88078dd366e78412caa8a3ea422f7ce6864d7364..8c7ae80d2bfc52ad49d50d26a5e7c3c09edc2250 100644 (file)
@@ -28,6 +28,7 @@
 #include "plist.h"
 
 #include "pimd.h"
+#include "pim_instance.h"
 #include "pim_str.h"
 #include "pim_tlv.h"
 #include "pim_msg.h"
@@ -85,7 +86,7 @@ static void recv_join(struct interface *ifp, struct pim_neighbor *neigh,
                 * 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)",
@@ -163,6 +164,14 @@ int pim_joinprune_recv(struct interface *ifp, struct pim_neighbor *neigh,
        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
        */
@@ -418,7 +427,6 @@ int pim_joinprune_send(struct pim_rpf *rpf, struct list *groups)
        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;
@@ -427,9 +435,8 @@ int pim_joinprune_send(struct pim_rpf *rpf, struct list *groups)
                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__,
@@ -437,11 +444,11 @@ int pim_joinprune_send(struct pim_rpf *rpf, struct list *groups)
                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;
        }
@@ -464,7 +471,7 @@ int pim_joinprune_send(struct pim_rpf *rpf, struct list *groups)
                        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);
 
@@ -483,7 +490,7 @@ int pim_joinprune_send(struct pim_rpf *rpf, struct list *groups)
                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);
@@ -496,7 +503,7 @@ int pim_joinprune_send(struct pim_rpf *rpf, struct list *groups)
                                         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__,
@@ -507,7 +514,7 @@ int pim_joinprune_send(struct pim_rpf *rpf, struct list *groups)
                        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);
 
@@ -534,8 +541,10 @@ int pim_joinprune_send(struct pim_rpf *rpf, struct list *groups)
                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(
@@ -554,7 +563,7 @@ int pim_joinprune_send(struct pim_rpf *rpf, struct list *groups)
                                         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__,
@@ -573,8 +582,7 @@ int pim_joinprune_send(struct pim_rpf *rpf, struct list *groups)
                        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);