#include "pim_iface.h"
#include "pim_rpf.h"
+enum rp_source {
+ RP_SRC_NONE = 0,
+ RP_SRC_STATIC,
+ RP_SRC_BSR
+};
+
struct rp_info {
struct prefix group;
struct pim_rpf rp;
+ enum rp_source rp_src;
int i_am_rp;
char *plist;
};
void pim_rp_list_hash_clean(void *data);
-int pim_rp_new(struct pim_instance *pim, const char *rp, const char *group,
- const char *plist);
-int pim_rp_del(struct pim_instance *pim, const char *rp, const char *group,
- const char *plist);
+int pim_rp_new_config(struct pim_instance *pim, const char *rp,
+ const char *group, const char *plist);
+int pim_rp_new(struct pim_instance *pim, struct in_addr rp_addr,
+ struct prefix group, const char *plist,
+ enum rp_source rp_src_flag);
+int pim_rp_del_config(struct pim_instance *pim, const char *rp,
+ const char *group, const char *plist);
+int pim_rp_del(struct pim_instance *pim, struct in_addr rp_addr,
+ struct prefix group, const char *plist,
+ enum rp_source rp_src_flag);
+int pim_rp_change(struct pim_instance *pim, struct in_addr new_rp_addr,
+ struct prefix group, enum rp_source rp_src_flag);
void pim_rp_prefix_list_update(struct pim_instance *pim,
struct prefix_list *plist);
void pim_rp_show_information(struct pim_instance *pim, struct vty *vty,
bool uj);
-void pim_resolve_rp_nh(struct pim_instance *pim);
+void pim_resolve_rp_nh(struct pim_instance *pim, struct pim_neighbor *nbr);
int pim_rp_list_cmp(void *v1, void *v2);
struct rp_info *pim_rp_find_match_group(struct pim_instance *pim,
const struct prefix *group);