From 6f439a70581a8c458a083e1ee4b6c6d5360c9664 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Sun, 21 May 2017 09:30:02 -0400 Subject: [PATCH] pimd: Cleanup pim_ssm.c to use 'struct pim_instance *' Signed-off-by: Donald Sharp --- pimd/pim_cmd.c | 14 ++++++++------ pimd/pim_ifchannel.c | 2 +- pimd/pim_mroute.c | 2 +- pimd/pim_register.c | 2 +- pimd/pim_ssm.c | 24 +++++++++++++----------- pimd/pim_ssm.h | 8 +++++--- pimd/pim_upstream.c | 2 +- pimd/pim_zebra.c | 7 ++++--- pimd/pimd.c | 2 +- 9 files changed, 35 insertions(+), 28 deletions(-) diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index e0777e40d6..06186a2413 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -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); } -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) return CMD_SUCCESS; @@ -4632,7 +4633,7 @@ DEFUN (ip_pim_ssm_prefix_list, "group range prefix-list filter\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, @@ -4644,7 +4645,7 @@ DEFUN (no_ip_pim_ssm_prefix_list, "Source Specific Multicast\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, @@ -4660,7 +4661,7 @@ DEFUN (no_ip_pim_ssm_prefix_list_name, struct pim_ssm *ssm = pimg->ssm_info; 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); @@ -4711,7 +4712,8 @@ static void ip_pim_ssm_show_group_type(struct vty *vty, u_char uj, type_str = "invalid"; else { 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 type_str = "not-multicast"; } diff --git a/pimd/pim_ifchannel.c b/pimd/pim_ifchannel.c index 4027489a78..469d33318c 100644 --- a/pimd/pim_ifchannel.c +++ b/pimd/pim_ifchannel.c @@ -1016,7 +1016,7 @@ int pim_ifchannel_local_membership_add(struct interface *ifp, /* skip (*,G) ch creation if G is of type SSM */ 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) zlog_debug( "%s: local membership (S,G)=%s ignored as group is SSM", diff --git a/pimd/pim_mroute.c b/pimd/pim_mroute.c index 4195685f35..435f5e6413 100644 --- a/pimd/pim_mroute.c +++ b/pimd/pim_mroute.c @@ -277,7 +277,7 @@ static int pim_mroute_msg_wholepkt(int fd, struct interface *ifp, * If we've received a register suppress */ 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) zlog_debug( "%s register forward skipped as group is SSM", diff --git a/pimd/pim_register.c b/pimd/pim_register.c index d7b13fe05c..9448dd8182 100644 --- a/pimd/pim_register.c +++ b/pimd/pim_register.c @@ -50,7 +50,7 @@ void pim_register_join(struct pim_upstream *up) { 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) zlog_debug("%s register setup skipped as group is SSM", up->sg_str); diff --git a/pimd/pim_ssm.c b/pimd/pim_ssm.c index 35d588abd5..8d270e6205 100644 --- a/pimd/pim_ssm.c +++ b/pimd/pim_ssm.c @@ -29,7 +29,7 @@ #include "pim_ssm.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 * to @@ -47,13 +47,14 @@ static void pim_ssm_range_reevaluate(void) * will * disappear in time for SSM groups. */ - pim_upstream_register_reevaluate(pimg); + pim_upstream_register_reevaluate(pim); 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 || strcmp(ssm->plist_name, prefix_list_name(plist))) { @@ -61,7 +62,7 @@ void pim_ssm_prefix_list_update(struct prefix_list *plist) return; } - pim_ssm_range_reevaluate(); + pim_ssm_range_reevaluate(pim); } 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); } -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 prefix group; @@ -88,7 +89,7 @@ int pim_is_grp_ssm(struct in_addr group_addr) group.u.prefix4 = group_addr; group.prefixlen = 32; - ssm = pimg->ssm_info; + ssm = pim->ssm_info; if (!ssm->plist_name) { 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); } -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; int change = 0; - if (vrf_id != pimg->vrf_id) + if (vrf_id != pim->vrf_id) return PIM_SSM_ERR_NO_VRF; - ssm = pimg->ssm_info; + ssm = pim->ssm_info; if (plist_name) { if (ssm->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) - pim_ssm_range_reevaluate(); + pim_ssm_range_reevaluate(pim); return PIM_SSM_ERR_NONE; } diff --git a/pimd/pim_ssm.h b/pimd/pim_ssm.h index 85f7c5de28..7235ade8dc 100644 --- a/pimd/pim_ssm.h +++ b/pimd/pim_ssm.h @@ -32,9 +32,11 @@ struct pim_ssm { char *plist_name; /* prefix list of group ranges */ }; -void pim_ssm_prefix_list_update(struct prefix_list *plist); -int pim_is_grp_ssm(struct in_addr group_addr); -int pim_ssm_range_set(vrf_id_t vrf_id, const char *plist_name); +void pim_ssm_prefix_list_update(struct pim_instance *pim, + struct prefix_list *plist); +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_terminate(struct pim_ssm *ssm); #endif diff --git a/pimd/pim_upstream.c b/pimd/pim_upstream.c index cb0170767a..6e255d677c 100644 --- a/pimd/pim_upstream.c +++ b/pimd/pim_upstream.c @@ -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) 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 */ if (up->reg_state != PIM_REG_NOINFO) { if (PIM_DEBUG_PIM_EVENTS) diff --git a/pimd/pim_zebra.c b/pimd/pim_zebra.c index ab7abb9a64..6f915bd98a 100644 --- a/pimd/pim_zebra.c +++ b/pimd/pim_zebra.c @@ -787,7 +787,8 @@ void igmp_anysource_forward_stop(struct igmp_group *group) 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 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; 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 (ch && (ch->local_ifmembership == PIM_IFMEMBERSHIP_INCLUDE)) { @@ -866,7 +867,7 @@ void igmp_source_forward_reevaluate_all(void) grp->group_source_list, srcnode, src)) { igmp_source_forward_reevaluate_one( - src); + pim, src); } /* scan group sources */ } /* scan igmp groups */ } /* scan igmp sockets */ diff --git a/pimd/pimd.c b/pimd/pimd.c index ffb025d97a..465ab73fcd 100644 --- a/pimd/pimd.c +++ b/pimd/pimd.c @@ -83,7 +83,7 @@ void pim_prefix_list_update(struct prefix_list *plist) continue; 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); } } -- 2.39.5