summaryrefslogtreecommitdiff
path: root/pimd/pim_cmd.c
diff options
context:
space:
mode:
authorQuentin Young <qlyoung@cumulusnetworks.com>2016-09-21 22:11:53 +0000
committerQuentin Young <qlyoung@cumulusnetworks.com>2016-09-21 22:11:53 +0000
commit844ec28cee41395cdd1cc0cdf8cf0168f9dc1adf (patch)
treef2fe0a9a71bb075a5f6f43cd992b89f46b95574f /pimd/pim_cmd.c
parentd0bfb22c223d645e554290ca82581eb06f94ac3b (diff)
parent039dc61292de5f3ed5f46316b1940ab6bb184c3f (diff)
Merge branch 'cmaster-next' into vtysh-grammar
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com> Conflicts: lib/.gitignore lib/command.c lib/command.h
Diffstat (limited to 'pimd/pim_cmd.c')
-rw-r--r--pimd/pim_cmd.c106
1 files changed, 41 insertions, 65 deletions
diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c
index 68446572eb..6cfed0f2c6 100644
--- a/pimd/pim_cmd.c
+++ b/pimd/pim_cmd.c
@@ -22,14 +22,13 @@
#include <zebra.h>
-#include <sys/ioctl.h>
-
#include "command.h"
#include "if.h"
#include "prefix.h"
#include "zclient.h"
#include "pimd.h"
+#include "pim_mroute.h"
#include "pim_cmd.h"
#include "pim_iface.h"
#include "pim_vty.h"
@@ -1599,7 +1598,7 @@ static void mroute_add_all()
struct channel_oil *c_oil;
for (ALL_LIST_ELEMENTS_RO(qpim_channel_oil_list, node, c_oil)) {
- if (pim_mroute_add(&c_oil->oil)) {
+ if (pim_mroute_add(c_oil)) {
/* just log warning */
char source_str[100];
char group_str[100];
@@ -1618,7 +1617,7 @@ static void mroute_del_all()
struct channel_oil *c_oil;
for (ALL_LIST_ELEMENTS_RO(qpim_channel_oil_list, node, c_oil)) {
- if (pim_mroute_del(&c_oil->oil)) {
+ if (pim_mroute_del(c_oil)) {
/* just log warning */
char source_str[100];
char group_str[100];
@@ -1637,12 +1636,12 @@ static void static_mroute_add_all()
struct static_route *s_route;
for (ALL_LIST_ELEMENTS_RO(qpim_static_route_list, node, s_route)) {
- if (pim_mroute_add(&s_route->mc)) {
+ if (pim_mroute_add(&s_route->c_oil)) {
/* just log warning */
char source_str[100];
char group_str[100];
- pim_inet4_dump("<source?>", s_route->mc.mfcc_origin, source_str, sizeof(source_str));
- pim_inet4_dump("<group?>", s_route->mc.mfcc_mcastgrp, group_str, sizeof(group_str));
+ pim_inet4_dump("<source?>", s_route->c_oil.oil.mfcc_origin, source_str, sizeof(source_str));
+ pim_inet4_dump("<group?>", s_route->c_oil.oil.mfcc_mcastgrp, group_str, sizeof(group_str));
zlog_warn("%s %s: (S,G)=(%s,%s) failure writing MFC",
__FILE__, __PRETTY_FUNCTION__,
source_str, group_str);
@@ -1656,12 +1655,12 @@ static void static_mroute_del_all()
struct static_route *s_route;
for (ALL_LIST_ELEMENTS_RO(qpim_static_route_list, node, s_route)) {
- if (pim_mroute_del(&s_route->mc)) {
+ if (pim_mroute_del(&s_route->c_oil)) {
/* just log warning */
char source_str[100];
char group_str[100];
- pim_inet4_dump("<source?>", s_route->mc.mfcc_origin, source_str, sizeof(source_str));
- pim_inet4_dump("<group?>", s_route->mc.mfcc_mcastgrp, group_str, sizeof(group_str));
+ pim_inet4_dump("<source?>", s_route->c_oil.oil.mfcc_origin, source_str, sizeof(source_str));
+ pim_inet4_dump("<group?>", s_route->c_oil.oil.mfcc_mcastgrp, group_str, sizeof(group_str));
zlog_warn("%s %s: (S,G)=(%s,%s) failure clearing MFC",
__FILE__, __PRETTY_FUNCTION__,
source_str, group_str);
@@ -2088,10 +2087,10 @@ static void show_multicast_interfaces(struct vty *vty)
inet_ntoa(ifaddr),
ifp->ifindex,
pim_ifp->mroute_vif_index,
- vreq.icount,
- vreq.ocount,
- vreq.ibytes,
- vreq.obytes,
+ (unsigned long) vreq.icount,
+ (unsigned long) vreq.ocount,
+ (unsigned long) vreq.ibytes,
+ (unsigned long) vreq.obytes,
VTY_NEWLINE);
}
}
@@ -2189,6 +2188,9 @@ static void show_mroute(struct vty *vty)
char source_str[100];
int oif_vif_index;
+ if (!c_oil->installed)
+ continue;
+
pim_inet4_dump("<group?>", c_oil->oil.mfcc_mcastgrp, group_str, sizeof(group_str));
pim_inet4_dump("<source?>", c_oil->oil.mfcc_origin, source_str, sizeof(source_str));
@@ -2239,6 +2241,9 @@ static void show_mroute(struct vty *vty)
char source_str[100];
int oif_vif_index;
+ if (!s_route->c_oil.installed)
+ continue;
+
pim_inet4_dump("<group?>", s_route->group, group_str, sizeof(group_str));
pim_inet4_dump("<source?>", s_route->source, source_str, sizeof(source_str));
@@ -2256,7 +2261,7 @@ static void show_mroute(struct vty *vty)
ifp_in = pim_if_find_by_vif_index(s_route->iif);
ifp_out = pim_if_find_by_vif_index(oif_vif_index);
- pim_time_uptime(oif_uptime, sizeof(oif_uptime), now - s_route->creation[oif_vif_index]);
+ pim_time_uptime(oif_uptime, sizeof(oif_uptime), now - s_route->c_oil.oif_creation[oif_vif_index]);
proto[0] = '\0';
strcat(proto, "S");
@@ -2302,34 +2307,21 @@ static void show_mroute_count(struct vty *vty)
for (ALL_LIST_ELEMENTS_RO(qpim_channel_oil_list, node, c_oil)) {
char group_str[100];
char source_str[100];
- struct sioc_sg_req sgreq;
- memset(&sgreq, 0, sizeof(sgreq));
- sgreq.src = c_oil->oil.mfcc_origin;
- sgreq.grp = c_oil->oil.mfcc_mcastgrp;
+ if (!c_oil->installed)
+ continue;
+
+ pim_mroute_update_counters (c_oil);
pim_inet4_dump("<group?>", c_oil->oil.mfcc_mcastgrp, group_str, sizeof(group_str));
pim_inet4_dump("<source?>", c_oil->oil.mfcc_origin, source_str, sizeof(source_str));
- if (ioctl(qpim_mroute_socket_fd, SIOCGETSGCNT, &sgreq)) {
- int e = errno;
- vty_out(vty,
- "ioctl(SIOCGETSGCNT=%lu) failure for (S,G)=(%s,%s): errno=%d: %s%s",
- (unsigned long)SIOCGETSGCNT,
- source_str,
- group_str,
- e,
- safe_strerror(e),
- VTY_NEWLINE);
- continue;
- }
-
vty_out(vty, "%-15s %-15s %7ld %10ld %7ld %s",
source_str,
group_str,
- sgreq.pktcnt,
- sgreq.bytecnt,
- sgreq.wrong_if,
+ c_oil->cc.pktcnt,
+ c_oil->cc.bytecnt,
+ c_oil->cc.wrong_if,
VTY_NEWLINE);
}
@@ -2337,37 +2329,21 @@ static void show_mroute_count(struct vty *vty)
for (ALL_LIST_ELEMENTS_RO(qpim_static_route_list, node, s_route)) {
char group_str[100];
char source_str[100];
- struct sioc_sg_req sgreq;
- memset(&sgreq, 0, sizeof(sgreq));
- sgreq.src = s_route->mc.mfcc_origin;
- sgreq.grp = s_route->mc.mfcc_mcastgrp;
+ if (!s_route->c_oil.installed)
+ continue;
- pim_inet4_dump("<group?>", s_route->mc.mfcc_mcastgrp, group_str, sizeof(group_str));
- pim_inet4_dump("<source?>", s_route->mc.mfcc_origin, source_str, sizeof(source_str));
+ pim_mroute_update_counters (&s_route->c_oil);
- if (ioctl(qpim_mroute_socket_fd, SIOCGETSGCNT, &sgreq)) {
- int e = errno;
- vty_out(vty,
- "ioctl(SIOCGETSGCNT=%lu) failure for (S,G)=(%s,%s): errno=%d: %s%s",
- /* note that typeof ioctl defs can vary across platforms, from
- * int, to unsigned int, to long unsigned int
- */
- (unsigned long)SIOCGETSGCNT,
- source_str,
- group_str,
- e,
- safe_strerror(e),
- VTY_NEWLINE);
- continue;
- }
+ pim_inet4_dump("<group?>", s_route->c_oil.oil.mfcc_mcastgrp, group_str, sizeof(group_str));
+ pim_inet4_dump("<source?>", s_route->c_oil.oil.mfcc_origin, source_str, sizeof(source_str));
vty_out(vty, "%-15s %-15s %7ld %10ld %7ld %s",
source_str,
group_str,
- sgreq.pktcnt,
- sgreq.bytecnt,
- sgreq.wrong_if,
+ s_route->c_oil.cc.pktcnt,
+ s_route->c_oil.cc.bytecnt,
+ s_route->c_oil.cc.wrong_if,
VTY_NEWLINE);
}
}
@@ -2486,9 +2462,9 @@ DEFUN (ip_pim_rp,
ip_pim_rp_cmd,
"ip pim rp A.B.C.D",
IP_STR
- "pim multicast routing"
- "Rendevous Point"
- "ip address of RP")
+ "pim multicast routing\n"
+ "Rendevous Point\n"
+ "ip address of RP\n")
{
int result;
@@ -2511,9 +2487,9 @@ DEFUN (no_ip_pim_rp,
"no ip pim rp {A.B.C.D}",
NO_STR
IP_STR
- "pim multicast routing"
- "Rendevous Point"
- "ip address of RP")
+ "pim multicast routing\n"
+ "Rendevous Point\n"
+ "ip address of RP\n")
{
qpim_rp.rpf_addr.s_addr = INADDR_NONE;