]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd: Modify 'show ip multicast' to be VRF aware
authorDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 17 May 2017 19:08:39 +0000 (15:08 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Mon, 24 Jul 2017 17:51:34 +0000 (13:51 -0400)
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
pimd/pim_cmd.c

index 1faf1114fb8e022ea3258d7ba4e59f8f2f865f28..fe3416c5576364a6cdf45420a1609850c0d2f679 100644 (file)
@@ -3640,40 +3640,52 @@ static void show_multicast_interfaces(struct vty *vty)
 {
        struct listnode *node;
        struct interface *ifp;
+       struct pim_instance *pim;
+       struct vrf *vrf;
 
        vty_out(vty, "\n");
 
        vty_out(vty,
-               "Interface Address         ifi Vif  PktsIn PktsOut    BytesIn   BytesOut\n");
+               "Interface Address         ifi Vif  PktsIn PktsOut    BytesIn   BytesOut VRF\n");
 
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pimg->vrf_id), node, ifp)) {
-               struct pim_interface *pim_ifp;
-               struct in_addr ifaddr;
-               struct sioc_vif_req vreq;
+       RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+       {
+               pim = vrf->info;
+               if (!pim)
+                       continue;
 
-               pim_ifp = ifp->info;
+               for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), node, ifp)) {
+                       struct pim_interface *pim_ifp;
+                       struct in_addr ifaddr;
+                       struct sioc_vif_req vreq;
 
-               if (!pim_ifp)
-                       continue;
+                       pim_ifp = ifp->info;
 
-               memset(&vreq, 0, sizeof(vreq));
-               vreq.vifi = pim_ifp->mroute_vif_index;
+                       if (!pim_ifp)
+                               continue;
 
-               if (ioctl(pimg->mroute_socket, SIOCGETVIFCNT, &vreq)) {
-                       zlog_warn(
-                               "ioctl(SIOCGETVIFCNT=%lu) failure for interface %s vif_index=%d: errno=%d: %s\n",
-                               (unsigned long)SIOCGETVIFCNT, ifp->name,
-                               pim_ifp->mroute_vif_index, errno,
-                               safe_strerror(errno));
-               }
+                       memset(&vreq, 0, sizeof(vreq));
+                       vreq.vifi = pim_ifp->mroute_vif_index;
 
-               ifaddr = pim_ifp->primary_address;
+                       if (ioctl(pim->mroute_socket, SIOCGETVIFCNT, &vreq)) {
+                               zlog_warn(
+                                       "ioctl(SIOCGETVIFCNT=%lu) failure for interface %s vif_index=%d: errno=%d: %s",
+                                       (unsigned long)SIOCGETVIFCNT, ifp->name,
+                                       pim_ifp->mroute_vif_index, errno,
+                                       safe_strerror(errno));
+                       }
+
+                       ifaddr = pim_ifp->primary_address;
 
-               vty_out(vty, "%-9s %-15s %3d %3d %7lu %7lu %10lu %10lu\n",
-                       ifp->name, inet_ntoa(ifaddr), ifp->ifindex,
-                       pim_ifp->mroute_vif_index, (unsigned long)vreq.icount,
-                       (unsigned long)vreq.ocount, (unsigned long)vreq.ibytes,
-                       (unsigned long)vreq.obytes);
+                       vty_out(vty,
+                               "%-12s %-15s %3d %3d %7lu %7lu %10lu %10lu\n",
+                               ifp->name, inet_ntoa(ifaddr), ifp->ifindex,
+                               pim_ifp->mroute_vif_index,
+                               (unsigned long)vreq.icount,
+                               (unsigned long)vreq.ocount,
+                               (unsigned long)vreq.ibytes,
+                               (unsigned long)vreq.obytes);
+               }
        }
 }
 
@@ -3684,11 +3696,23 @@ DEFUN (show_ip_multicast,
        IP_STR
        "Multicast global information\n")
 {
+       struct vrf *vrf;
+       struct pim_instance *pim;
        time_t now = pim_time_monotonic_sec();
 
        char uptime[10];
 
-       vty_out(vty, "Mroute socket descriptor: %d\n", pimg->mroute_socket);
+       vty_out(vty, "Mroute socket descriptor:");
+
+       RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+       {
+               pim = vrf->info;
+               if (!pim)
+                       continue;
+
+               vty_out(vty, " %d(%s)", pim->mroute_socket, pim->vrf->name);
+       }
+       vty_out(vty, "\n");
 
        pim_time_uptime(uptime, sizeof(uptime),
                        now - pimg->mroute_socket_creation);
@@ -5504,6 +5528,8 @@ DEFUN (interface_ip_pim_sm,
        }
 
        pim_ifp = ifp->info;
+
+       vty_out(vty, "PIM vrf: %s", pim_ifp->pim->vrf->name);
        pim_if_create_pimreg(pim_ifp->pim);
 
        return CMD_SUCCESS;