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");
"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);
}
"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,
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);
#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)
{
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");
}
}
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);
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");