]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd: Get show run to display vrf sub mode
authorDonald Sharp <sharpd@cumulusnetworks.com>
Mon, 22 May 2017 19:13:13 +0000 (15:13 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Mon, 24 Jul 2017 17:51:37 +0000 (13:51 -0400)
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
pimd/pim_cmd.c
pimd/pim_instance.c
pimd/pim_msdp.c
pimd/pim_msdp.h
pimd/pim_vty.c
pimd/pim_vty.h

index de87c39bc829201518922fc2d3279e1871feb6c6..059bd4e6f4af3e752b83db57fbef672c480d6ba9 100644 (file)
@@ -4265,12 +4265,13 @@ DEFUN (show_ip_ssmpingd,
        return CMD_SUCCESS;
 }
 
-static int pim_rp_cmd_worker(struct vty *vty, const char *rp, const char *group,
+static int pim_rp_cmd_worker(struct vty *vty, struct pim_instance *pim,
+                            const char *rp, const char *group,
                             const char *plist)
 {
        int result;
 
-       result = pim_rp_new(pimg, rp, group, plist);
+       result = pim_rp_new(pim, rp, group, plist);
 
        if (result == PIM_MALLOC_FAIL) {
                vty_out(vty, "%% Out of memory\n");
@@ -4523,12 +4524,15 @@ DEFUN (ip_pim_rp,
        "ip address of RP\n"
        "Group Address range to cover\n")
 {
+       VTY_DECLVAR_CONTEXT(vrf, vrf);
+       struct pim_instance *pim = vrf->info;
        int idx_ipv4 = 3;
 
        if (argc == (idx_ipv4 + 1))
-               return pim_rp_cmd_worker(vty, argv[idx_ipv4]->arg, NULL, NULL);
+               return pim_rp_cmd_worker(vty, pim, argv[idx_ipv4]->arg, NULL,
+                                        NULL);
        else
-               return pim_rp_cmd_worker(vty, argv[idx_ipv4]->arg,
+               return pim_rp_cmd_worker(vty, pim, argv[idx_ipv4]->arg,
                                         argv[idx_ipv4 + 1]->arg, NULL);
 }
 
@@ -4542,7 +4546,7 @@ DEFUN (ip_pim_rp_prefix_list,
        "group prefix-list filter\n"
        "Name of a prefix-list\n")
 {
-       return pim_rp_cmd_worker(vty, argv[3]->arg, NULL, argv[5]->arg);
+       return pim_rp_cmd_worker(vty, pimg, argv[3]->arg, NULL, argv[5]->arg);
 }
 
 static int pim_no_rp_cmd_worker(struct vty *vty, const char *rp,
@@ -7344,7 +7348,9 @@ void pim_cmd_init()
        install_element(CONFIG_NODE, &ip_multicast_routing_cmd);
        install_element(CONFIG_NODE, &no_ip_multicast_routing_cmd);
        install_element(CONFIG_NODE, &ip_pim_rp_cmd);
+       install_element(VRF_NODE, &ip_pim_rp_cmd);
        install_element(CONFIG_NODE, &no_ip_pim_rp_cmd);
+       install_element(VRF_NODE, &no_ip_pim_rp_cmd);
        install_element(CONFIG_NODE, &ip_pim_rp_prefix_list_cmd);
        install_element(CONFIG_NODE, &no_ip_pim_rp_prefix_list_cmd);
        install_element(CONFIG_NODE, &no_ip_pim_ssm_prefix_list_cmd);
index bfe2604e930d741c227ad815223408b8a2ddadbb..d493657917f8284cef4016df981b3a13deb4ec03 100644 (file)
@@ -31,6 +31,7 @@
 #include "pim_oil.h"
 #include "pim_static.h"
 #include "pim_ssmpingd.h"
+#include "pim_vty.h"
 
 static void pim_instance_terminate(struct pim_instance *pim)
 {
@@ -190,8 +191,9 @@ static int pim_vrf_config_write(struct vty *vty)
        RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
        {
                pim = vrf->info;
-               if (!pim || !vrf->vrf_id != VRF_DEFAULT) {
+               if (!pim || vrf->vrf_id != VRF_DEFAULT) {
                        vty_out(vty, "vrf %s\n", vrf->name);
+                       pim_global_config_write_worker(pim, vty);
                        vty_out(vty, "!\n");
                }
        }
index 63ead7817ec95b1c3fec25c13ed031e304bc3ca8..b58a0333d7e9746db1ff4aaf723bffe7df9729fd 100644 (file)
@@ -1537,8 +1537,7 @@ enum pim_msdp_err pim_msdp_mg_src_add(struct pim_instance *pim,
 }
 
 /*********************** MSDP feature APIs *********************************/
-static int pim_msdp_config_write_helper(struct pim_instance *pim,
-                                       struct vty *vty)
+int pim_msdp_config_write_helper(struct pim_instance *pim, struct vty *vty)
 {
        struct listnode *mbrnode;
        struct pim_msdp_mg_mbr *mbr;
index b53391bdd1434a7d79cbd6b1049fe0d921ca5f32..669e7690ca9c4aca796c4ffe454d1de3463bb829 100644 (file)
@@ -239,6 +239,7 @@ int pim_msdp_write(struct thread *thread);
 char *pim_msdp_peer_key_dump(struct pim_msdp_peer *mp, char *buf, int buf_size,
                             bool long_format);
 int pim_msdp_config_write(struct vty *vty);
+int pim_msdp_config_write_helper(struct pim_instance *pim, struct vty *vty);
 void pim_msdp_peer_pkt_txed(struct pim_msdp_peer *mp);
 void pim_msdp_sa_ref(struct pim_instance *pim, struct pim_msdp_peer *mp,
                     struct prefix_sg *sg, struct in_addr rp);
index 30589f6e17445c525414bae79c8878c551e03cda..2a3f183b7549d1e1ae982b936a6189de18f042a7 100644 (file)
@@ -142,13 +142,12 @@ int pim_debug_config_write(struct vty *vty)
        return writes;
 }
 
-static int pim_global_config_write_worker(struct pim_instance *pim,
-                                         struct vty *vty)
+int pim_global_config_write_worker(struct pim_instance *pim, struct vty *vty)
 {
        int writes = 0;
        struct pim_ssm *ssm = pim->ssm_info;
 
-       writes += pim_msdp_config_write(vty);
+       writes += pim_msdp_config_write_helper(pim, vty);
 
        if (!pim->send_v6_secondary) {
                vty_out(vty, "no ip pim send-v6-secondary\n");
index 54bab623dcded72e5f559c8af1b1d76cf95ee781..aef90cacc39a0061d57e74546a8aef59b2b3db62 100644 (file)
@@ -24,6 +24,7 @@
 
 int pim_debug_config_write(struct vty *vty);
 int pim_global_config_write(struct vty *vty);
+int pim_global_config_write_worker(struct pim_instance *pim, struct vty *vty);
 int pim_interface_config_write(struct vty *vty);
 
 #endif /* PIM_VTY_H */