summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2016-06-01 21:31:02 +0200
committerDonald Sharp <sharpd@cumulusnetworks.com>2016-06-01 21:31:02 +0200
commitf91f89bcd6a7c0b26d9e5b9d7062a29451ab51b5 (patch)
treeb6ea99b4b91e6090f032b5a26388d8f36ac8bbc6
parentzebra: Remove experimental warning (diff)
downloadfrr-f91f89bcd6a7c0b26d9e5b9d7062a29451ab51b5.tar.xz
frr-f91f89bcd6a7c0b26d9e5b9d7062a29451ab51b5.zip
pimd: Add support for displaying ip mroute
When you enter a static mroute under an interface the 'show run' is not displaying this information. Add code to allow this. Ticket: CM-11257 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com> Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com> Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
-rw-r--r--pimd/pim_static.c33
-rw-r--r--pimd/pim_static.h1
-rw-r--r--pimd/pim_vty.c3
3 files changed, 37 insertions, 0 deletions
diff --git a/pimd/pim_static.c b/pimd/pim_static.c
index 26743b596..5114901da 100644
--- a/pimd/pim_static.c
+++ b/pimd/pim_static.c
@@ -20,6 +20,10 @@
$QuaggaId: $Format:%an, %ai, %h$ $
*/
+#include <zebra.h>
+
+#include "vty.h"
+
#include "pim_static.h"
#include "pim_time.h"
#include "pim_str.h"
@@ -303,3 +307,32 @@ int pim_static_del(struct interface *iif, struct interface *oif, struct in_addr
return 0;
}
+
+int
+pim_static_write_mroute (struct vty *vty, struct interface *ifp)
+{
+ struct listnode *node;
+ struct static_route *sroute;
+ int count = 0;
+ char sbuf[100];
+ char gbuf[100];
+
+ for (ALL_LIST_ELEMENTS_RO (qpim_static_route_list, node, sroute))
+ {
+ pim_inet4_dump ("<ifaddr?>", sroute->group, gbuf, sizeof (gbuf));
+ pim_inet4_dump ("<ifaddr?>", sroute->source, sbuf, sizeof (sbuf));
+ if (sroute->iif == ifp->ifindex)
+ {
+ int i;
+ for (i = 0; i < MAXVIFS; i++)
+ if (sroute->oif_ttls[i])
+ {
+ struct interface *oifp = if_lookup_by_index (i);
+ vty_out (vty, " ip mroute %s %s %s%s", oifp->name, gbuf, sbuf, VTY_NEWLINE);
+ count ++;
+ }
+ }
+ }
+
+ return count;
+}
diff --git a/pimd/pim_static.h b/pimd/pim_static.h
index 3a096932d..b3be09e91 100644
--- a/pimd/pim_static.h
+++ b/pimd/pim_static.h
@@ -43,5 +43,6 @@ void pim_static_route_free(struct static_route *s_route);
int pim_static_add(struct interface *iif, struct interface *oif, struct in_addr group, struct in_addr source);
int pim_static_del(struct interface *iif, struct interface *oif, struct in_addr group, struct in_addr source);
+int pim_static_write_mroute (struct vty *vty, struct interface *ifp);
#endif /* PIM_STATIC_H_ */
diff --git a/pimd/pim_vty.c b/pimd/pim_vty.c
index eeeda9d43..beb0622a3 100644
--- a/pimd/pim_vty.c
+++ b/pimd/pim_vty.c
@@ -33,6 +33,7 @@
#include "pim_str.h"
#include "pim_ssmpingd.h"
#include "pim_pim.h"
+#include "pim_static.h"
int pim_debug_config_write(struct vty *vty)
{
@@ -200,6 +201,8 @@ int pim_interface_config_write(struct vty *vty)
++writes;
}
}
+
+ writes += pim_static_write_mroute (vty, ifp);
}
vty_out(vty, "!%s", VTY_NEWLINE);
++writes;