diff options
| author | Corey Siltala <csiltala@atcorp.com> | 2024-11-26 08:35:42 -0600 | 
|---|---|---|
| committer | Corey Siltala <csiltala@atcorp.com> | 2024-12-06 14:44:52 -0600 | 
| commit | 8465ba1dde06102ae631ad3d53c2e2e53cc6c7b9 (patch) | |
| tree | 252ceafb94a921fc4f19f96e94d2c146152f5ad5 /pimd | |
| parent | ff5309ca2d0291cd6da776dd83c210fb01aeb948 (diff) | |
pimd: Convert boundary_oil_plist to struct prefix_list
Rather than storing the prefix-list name and looking it up every time we use it, store a pointer to the prefix-list itself.
Signed-off-by: Corey Siltala <csiltala@atcorp.com>
Diffstat (limited to 'pimd')
| -rw-r--r-- | pimd/pim_iface.c | 1 | ||||
| -rw-r--r-- | pimd/pim_iface.h | 2 | ||||
| -rw-r--r-- | pimd/pim_igmpv3.c | 7 | ||||
| -rw-r--r-- | pimd/pim_nb_config.c | 18 | ||||
| -rw-r--r-- | pimd/pim_util.c | 11 | ||||
| -rw-r--r-- | pimd/pim_vty.c | 3 | 
6 files changed, 21 insertions, 21 deletions
diff --git a/pimd/pim_iface.c b/pimd/pim_iface.c index f92a42dd8a..bd7164c9b9 100644 --- a/pimd/pim_iface.c +++ b/pimd/pim_iface.c @@ -216,7 +216,6 @@ void pim_if_delete(struct interface *ifp)  	if (pim_ifp->bfd_config.profile)  		XFREE(MTYPE_TMP, pim_ifp->bfd_config.profile); -	XFREE(MTYPE_PIM_INTERFACE, pim_ifp->boundary_oil_plist);  	XFREE(MTYPE_PIM_INTERFACE, pim_ifp);  	ifp->info = NULL; diff --git a/pimd/pim_iface.h b/pimd/pim_iface.h index 18e88ffbd5..90a81a21d0 100644 --- a/pimd/pim_iface.h +++ b/pimd/pim_iface.h @@ -134,7 +134,7 @@ struct pim_interface {  	int pim_dr_num_nondrpri_neighbors; /* neighbors without dr_pri */  	/* boundary prefix-list (group) */ -	char *boundary_oil_plist; +	struct prefix_list *boundary_oil_plist;  	/* boundary access-list (source and group) */  	struct access_list *boundary_acl; diff --git a/pimd/pim_igmpv3.c b/pimd/pim_igmpv3.c index d0ba79378b..7348d8130f 100644 --- a/pimd/pim_igmpv3.c +++ b/pimd/pim_igmpv3.c @@ -9,6 +9,8 @@  #include "memory.h"  #include "if.h"  #include "lib_errors.h" +#include "plist.h" +#include "plist_int.h"  #include "pimd.h"  #include "pim_instance.h" @@ -1815,9 +1817,10 @@ static bool igmp_pkt_grp_addr_ok(struct interface *ifp, const char *from_str,  		if (PIM_DEBUG_GM_PACKETS) {  			zlog_debug("Filtering IGMPv3 group record %pI4 from %s on %s per prefix-list %s or access-list %s",  				   &grp.s_addr, from_str, ifp->name, -				   (pim_ifp->boundary_oil_plist ? pim_ifp->boundary_oil_plist +				   (pim_ifp->boundary_oil_plist ? pim_ifp->boundary_oil_plist->name  								: "(not found)"), -				   (pim_ifp->boundary_acl ? pim_ifp->boundary_acl->name : "(not found)")); +				   (pim_ifp->boundary_acl ? pim_ifp->boundary_acl->name +							  : "(not found)"));  		}  		return false;  	} diff --git a/pimd/pim_nb_config.c b/pimd/pim_nb_config.c index 2533f8c4d4..41457ffba2 100644 --- a/pimd/pim_nb_config.c +++ b/pimd/pim_nb_config.c @@ -2390,7 +2390,6 @@ int lib_interface_pim_address_family_multicast_boundary_oil_modify(  {  	struct interface *ifp;  	struct pim_interface *pim_ifp; -	const char *plist;  	const struct lyd_node *if_dnode;  	switch (args->event) { @@ -2398,7 +2397,12 @@ int lib_interface_pim_address_family_multicast_boundary_oil_modify(  		if_dnode = yang_dnode_get_parent(args->dnode, "interface");  		if (!is_pim_interface(if_dnode)) {  			snprintf(args->errmsg, args->errmsg_len, -					"Pim not enabled on this interface"); +				 "%% Enable PIM and/or IGMP on this interface first"); +			return NB_ERR_VALIDATION; +		} +		if (!prefix_list_lookup(AFI_IP, yang_dnode_get_string(args->dnode, NULL))) { +			snprintf(args->errmsg, args->errmsg_len, +				 "%% Specified prefix-list not found");  			return NB_ERR_VALIDATION;  		}  		break; @@ -2408,13 +2412,8 @@ int lib_interface_pim_address_family_multicast_boundary_oil_modify(  	case NB_EV_APPLY:  		ifp = nb_running_get_entry(args->dnode, NULL, true);  		pim_ifp = ifp->info; -		plist = yang_dnode_get_string(args->dnode, NULL); - -		if (pim_ifp->boundary_oil_plist) -			XFREE(MTYPE_PIM_INTERFACE, pim_ifp->boundary_oil_plist); -  		pim_ifp->boundary_oil_plist = -			XSTRDUP(MTYPE_PIM_INTERFACE, plist); +			prefix_list_lookup(AFI_IP, yang_dnode_get_string(args->dnode, NULL));  		break;  	} @@ -2444,8 +2443,7 @@ int lib_interface_pim_address_family_multicast_boundary_oil_destroy(  	case NB_EV_APPLY:  		ifp = nb_running_get_entry(args->dnode, NULL, true);  		pim_ifp = ifp->info; -		if (pim_ifp->boundary_oil_plist) -			XFREE(MTYPE_PIM_INTERFACE, pim_ifp->boundary_oil_plist); +		pim_ifp->boundary_oil_plist = NULL;  		break;  	} diff --git a/pimd/pim_util.c b/pimd/pim_util.c index b6f3be52fc..40404714e7 100644 --- a/pimd/pim_util.c +++ b/pimd/pim_util.c @@ -9,6 +9,7 @@  #include "log.h"  #include "prefix.h"  #include "plist.h" +#include "plist_int.h"  #include "pimd.h"  #include "pim_instance.h" @@ -174,7 +175,6 @@ bool pim_is_group_filtered(struct pim_interface *pim_ifp, pim_addr *grp, pim_add  	bool is_filtered = false;  #if PIM_IPV == 4  	struct prefix grp_pfx = {}; -	struct prefix_list *pl = NULL;  	pim_addr any_src = PIMADDR_ANY;  	if (!pim_ifp->boundary_oil_plist && !pim_ifp->boundary_acl) @@ -182,14 +182,13 @@ bool pim_is_group_filtered(struct pim_interface *pim_ifp, pim_addr *grp, pim_add  	pim_addr_to_prefix(&grp_pfx, *grp); -	pl = prefix_list_lookup(PIM_AFI, pim_ifp->boundary_oil_plist); -  	/* Filter if either group or (S,G) are denied */ -	if (pl) { -		is_filtered = prefix_list_apply_ext(pl, NULL, &grp_pfx, true) == PREFIX_DENY; +	if (pim_ifp->boundary_oil_plist) { +		is_filtered = prefix_list_apply_ext(pim_ifp->boundary_oil_plist, NULL, &grp_pfx, +						    true) == PREFIX_DENY;  		if (is_filtered && PIM_DEBUG_EVENTS) {  			zlog_debug("Filtering group %pI4 per prefix-list %s", grp, -				   pim_ifp->boundary_oil_plist); +				   pim_ifp->boundary_oil_plist->name);  		}  	}  	if (!is_filtered && pim_ifp->boundary_acl) { diff --git a/pimd/pim_vty.c b/pimd/pim_vty.c index ec87093325..4c3762b2ed 100644 --- a/pimd/pim_vty.c +++ b/pimd/pim_vty.c @@ -12,6 +12,7 @@  #include "vty.h"  #include "vrf.h"  #include "plist.h" +#include "plist_int.h"  #include "filter.h"  #include "pimd.h" @@ -493,7 +494,7 @@ int pim_config_write(struct vty *vty, int writes, struct interface *ifp,  	/* boundary */  	if (pim_ifp->boundary_oil_plist) {  		vty_out(vty, " " PIM_AF_NAME " multicast boundary oil %s\n", -			pim_ifp->boundary_oil_plist); +			pim_ifp->boundary_oil_plist->name);  		++writes;  	}  | 
