pimd: Cleanup pim_ssm.c to use 'struct pim_instance *'

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
Donald Sharp 2017-05-21 09:30:02 -04:00
parent cc0cecae78
commit 6f439a7058
9 changed files with 35 additions and 28 deletions

View File

@ -4602,9 +4602,10 @@ DEFUN (no_ip_pim_rp_prefix_list,
return pim_no_rp_cmd_worker(vty, argv[4]->arg, NULL, argv[6]->arg); return pim_no_rp_cmd_worker(vty, argv[4]->arg, NULL, argv[6]->arg);
} }
static int pim_ssm_cmd_worker(struct vty *vty, const char *plist) static int pim_ssm_cmd_worker(struct pim_instance *pim, struct vty *vty,
const char *plist)
{ {
int result = pim_ssm_range_set(pimg->vrf_id, plist); int result = pim_ssm_range_set(pim, pim->vrf_id, plist);
if (result == PIM_SSM_ERR_NONE) if (result == PIM_SSM_ERR_NONE)
return CMD_SUCCESS; return CMD_SUCCESS;
@ -4632,7 +4633,7 @@ DEFUN (ip_pim_ssm_prefix_list,
"group range prefix-list filter\n" "group range prefix-list filter\n"
"Name of a prefix-list\n") "Name of a prefix-list\n")
{ {
return pim_ssm_cmd_worker(vty, argv[0]->arg); return pim_ssm_cmd_worker(pimg, vty, argv[0]->arg);
} }
DEFUN (no_ip_pim_ssm_prefix_list, DEFUN (no_ip_pim_ssm_prefix_list,
@ -4644,7 +4645,7 @@ DEFUN (no_ip_pim_ssm_prefix_list,
"Source Specific Multicast\n" "Source Specific Multicast\n"
"group range prefix-list filter\n") "group range prefix-list filter\n")
{ {
return pim_ssm_cmd_worker(vty, NULL); return pim_ssm_cmd_worker(pimg, vty, NULL);
} }
DEFUN (no_ip_pim_ssm_prefix_list_name, DEFUN (no_ip_pim_ssm_prefix_list_name,
@ -4660,7 +4661,7 @@ DEFUN (no_ip_pim_ssm_prefix_list_name,
struct pim_ssm *ssm = pimg->ssm_info; struct pim_ssm *ssm = pimg->ssm_info;
if (ssm->plist_name && !strcmp(ssm->plist_name, argv[0]->arg)) if (ssm->plist_name && !strcmp(ssm->plist_name, argv[0]->arg))
return pim_ssm_cmd_worker(vty, NULL); return pim_ssm_cmd_worker(pimg, vty, NULL);
vty_out(vty, "%% pim ssm prefix-list %s doesn't exist\n", argv[0]->arg); vty_out(vty, "%% pim ssm prefix-list %s doesn't exist\n", argv[0]->arg);
@ -4711,7 +4712,8 @@ static void ip_pim_ssm_show_group_type(struct vty *vty, u_char uj,
type_str = "invalid"; type_str = "invalid";
else { else {
if (pim_is_group_224_4(group_addr)) if (pim_is_group_224_4(group_addr))
type_str = pim_is_grp_ssm(group_addr) ? "SSM" : "ASM"; type_str = pim_is_grp_ssm(pimg, group_addr) ? "SSM"
: "ASM";
else else
type_str = "not-multicast"; type_str = "not-multicast";
} }

View File

@ -1016,7 +1016,7 @@ int pim_ifchannel_local_membership_add(struct interface *ifp,
/* skip (*,G) ch creation if G is of type SSM */ /* skip (*,G) ch creation if G is of type SSM */
if (sg->src.s_addr == INADDR_ANY) { if (sg->src.s_addr == INADDR_ANY) {
if (pim_is_grp_ssm(sg->grp)) { if (pim_is_grp_ssm(pim, sg->grp)) {
if (PIM_DEBUG_PIM_EVENTS) if (PIM_DEBUG_PIM_EVENTS)
zlog_debug( zlog_debug(
"%s: local membership (S,G)=%s ignored as group is SSM", "%s: local membership (S,G)=%s ignored as group is SSM",

View File

@ -277,7 +277,7 @@ static int pim_mroute_msg_wholepkt(int fd, struct interface *ifp,
* If we've received a register suppress * If we've received a register suppress
*/ */
if (!up->t_rs_timer) { if (!up->t_rs_timer) {
if (pim_is_grp_ssm(sg.grp)) { if (pim_is_grp_ssm(pim_ifp->pim, sg.grp)) {
if (PIM_DEBUG_PIM_REG) if (PIM_DEBUG_PIM_REG)
zlog_debug( zlog_debug(
"%s register forward skipped as group is SSM", "%s register forward skipped as group is SSM",

View File

@ -50,7 +50,7 @@ void pim_register_join(struct pim_upstream *up)
{ {
struct pim_instance *pim = up->channel_oil->pim; struct pim_instance *pim = up->channel_oil->pim;
if (pim_is_grp_ssm(up->sg.grp)) { if (pim_is_grp_ssm(pim, up->sg.grp)) {
if (PIM_DEBUG_PIM_EVENTS) if (PIM_DEBUG_PIM_EVENTS)
zlog_debug("%s register setup skipped as group is SSM", zlog_debug("%s register setup skipped as group is SSM",
up->sg_str); up->sg_str);

View File

@ -29,7 +29,7 @@
#include "pim_ssm.h" #include "pim_ssm.h"
#include "pim_zebra.h" #include "pim_zebra.h"
static void pim_ssm_range_reevaluate(void) static void pim_ssm_range_reevaluate(struct pim_instance *pim)
{ {
/* 1. Setup register state for (S,G) entries if G has changed from SSM /* 1. Setup register state for (S,G) entries if G has changed from SSM
* to * to
@ -47,13 +47,14 @@ static void pim_ssm_range_reevaluate(void)
* will * will
* disappear in time for SSM groups. * disappear in time for SSM groups.
*/ */
pim_upstream_register_reevaluate(pimg); pim_upstream_register_reevaluate(pim);
igmp_source_forward_reevaluate_all(); igmp_source_forward_reevaluate_all();
} }
void pim_ssm_prefix_list_update(struct prefix_list *plist) void pim_ssm_prefix_list_update(struct pim_instance *pim,
struct prefix_list *plist)
{ {
struct pim_ssm *ssm = pimg->ssm_info; struct pim_ssm *ssm = pim->ssm_info;
if (!ssm->plist_name if (!ssm->plist_name
|| strcmp(ssm->plist_name, prefix_list_name(plist))) { || strcmp(ssm->plist_name, prefix_list_name(plist))) {
@ -61,7 +62,7 @@ void pim_ssm_prefix_list_update(struct prefix_list *plist)
return; return;
} }
pim_ssm_range_reevaluate(); pim_ssm_range_reevaluate(pim);
} }
static int pim_is_grp_standard_ssm(struct prefix *group) static int pim_is_grp_standard_ssm(struct prefix *group)
@ -77,7 +78,7 @@ static int pim_is_grp_standard_ssm(struct prefix *group)
return prefix_match(&group_ssm, group); return prefix_match(&group_ssm, group);
} }
int pim_is_grp_ssm(struct in_addr group_addr) int pim_is_grp_ssm(struct pim_instance *pim, struct in_addr group_addr)
{ {
struct pim_ssm *ssm; struct pim_ssm *ssm;
struct prefix group; struct prefix group;
@ -88,7 +89,7 @@ int pim_is_grp_ssm(struct in_addr group_addr)
group.u.prefix4 = group_addr; group.u.prefix4 = group_addr;
group.prefixlen = 32; group.prefixlen = 32;
ssm = pimg->ssm_info; ssm = pim->ssm_info;
if (!ssm->plist_name) { if (!ssm->plist_name) {
return pim_is_grp_standard_ssm(&group); return pim_is_grp_standard_ssm(&group);
} }
@ -100,15 +101,16 @@ int pim_is_grp_ssm(struct in_addr group_addr)
return (prefix_list_apply(plist, &group) == PREFIX_PERMIT); return (prefix_list_apply(plist, &group) == PREFIX_PERMIT);
} }
int pim_ssm_range_set(vrf_id_t vrf_id, const char *plist_name) int pim_ssm_range_set(struct pim_instance *pim, vrf_id_t vrf_id,
const char *plist_name)
{ {
struct pim_ssm *ssm; struct pim_ssm *ssm;
int change = 0; int change = 0;
if (vrf_id != pimg->vrf_id) if (vrf_id != pim->vrf_id)
return PIM_SSM_ERR_NO_VRF; return PIM_SSM_ERR_NO_VRF;
ssm = pimg->ssm_info; ssm = pim->ssm_info;
if (plist_name) { if (plist_name) {
if (ssm->plist_name) { if (ssm->plist_name) {
if (!strcmp(ssm->plist_name, plist_name)) if (!strcmp(ssm->plist_name, plist_name))
@ -125,7 +127,7 @@ int pim_ssm_range_set(vrf_id_t vrf_id, const char *plist_name)
} }
if (change) if (change)
pim_ssm_range_reevaluate(); pim_ssm_range_reevaluate(pim);
return PIM_SSM_ERR_NONE; return PIM_SSM_ERR_NONE;
} }

View File

@ -32,9 +32,11 @@ struct pim_ssm {
char *plist_name; /* prefix list of group ranges */ char *plist_name; /* prefix list of group ranges */
}; };
void pim_ssm_prefix_list_update(struct prefix_list *plist); void pim_ssm_prefix_list_update(struct pim_instance *pim,
int pim_is_grp_ssm(struct in_addr group_addr); struct prefix_list *plist);
int pim_ssm_range_set(vrf_id_t vrf_id, const char *plist_name); int pim_is_grp_ssm(struct pim_instance *pim, struct in_addr group_addr);
int pim_ssm_range_set(struct pim_instance *pim, vrf_id_t vrf_id,
const char *plist_name);
void *pim_ssm_init(void); void *pim_ssm_init(void);
void pim_ssm_terminate(struct pim_ssm *ssm); void pim_ssm_terminate(struct pim_ssm *ssm);
#endif #endif

View File

@ -483,7 +483,7 @@ void pim_upstream_register_reevaluate(struct pim_instance *pim)
if (!PIM_UPSTREAM_FLAG_TEST_FHR(up->flags) || !up->t_ka_timer) if (!PIM_UPSTREAM_FLAG_TEST_FHR(up->flags) || !up->t_ka_timer)
continue; continue;
if (pim_is_grp_ssm(up->sg.grp)) { if (pim_is_grp_ssm(pim, up->sg.grp)) {
/* clear the register state for SSM groups */ /* clear the register state for SSM groups */
if (up->reg_state != PIM_REG_NOINFO) { if (up->reg_state != PIM_REG_NOINFO) {
if (PIM_DEBUG_PIM_EVENTS) if (PIM_DEBUG_PIM_EVENTS)

View File

@ -787,7 +787,8 @@ void igmp_anysource_forward_stop(struct igmp_group *group)
igmp_source_forward_stop(source); igmp_source_forward_stop(source);
} }
static void igmp_source_forward_reevaluate_one(struct igmp_source *source) static void igmp_source_forward_reevaluate_one(struct pim_instance *pim,
struct igmp_source *source)
{ {
struct prefix_sg sg; struct prefix_sg sg;
struct igmp_group *group = source->source_group; struct igmp_group *group = source->source_group;
@ -802,7 +803,7 @@ static void igmp_source_forward_reevaluate_one(struct igmp_source *source)
sg.grp = group->group_addr; sg.grp = group->group_addr;
ch = pim_ifchannel_find(group->group_igmp_sock->interface, &sg); ch = pim_ifchannel_find(group->group_igmp_sock->interface, &sg);
if (pim_is_grp_ssm(group->group_addr)) { if (pim_is_grp_ssm(pim, group->group_addr)) {
/* If SSM group withdraw local membership */ /* If SSM group withdraw local membership */
if (ch if (ch
&& (ch->local_ifmembership == PIM_IFMEMBERSHIP_INCLUDE)) { && (ch->local_ifmembership == PIM_IFMEMBERSHIP_INCLUDE)) {
@ -866,7 +867,7 @@ void igmp_source_forward_reevaluate_all(void)
grp->group_source_list, grp->group_source_list,
srcnode, src)) { srcnode, src)) {
igmp_source_forward_reevaluate_one( igmp_source_forward_reevaluate_one(
src); pim, src);
} /* scan group sources */ } /* scan group sources */
} /* scan igmp groups */ } /* scan igmp groups */
} /* scan igmp sockets */ } /* scan igmp sockets */

View File

@ -83,7 +83,7 @@ void pim_prefix_list_update(struct prefix_list *plist)
continue; continue;
pim_rp_prefix_list_update(pim, plist); pim_rp_prefix_list_update(pim, plist);
pim_ssm_prefix_list_update(plist); pim_ssm_prefix_list_update(pim, plist);
pim_upstream_spt_prefix_list_update(pim, plist); pim_upstream_spt_prefix_list_update(pim, plist);
} }
} }