ok.
friehm
On 01/22/18 11:58, Martin Pieuchot wrote:
Check if `if_carp' is empty inside carp_ourether() instead of outside.
ok?
Index: net/if_bridge.c
===================================================================
RCS file: /cvs/src/sys/net/if_bridge.c,v
retrieving revision 1.301
diff -u -p -r1.301 if_bridge.c
--- net/if_bridge.c 10 Jan 2018 23:50:39 -0000 1.301
+++ net/if_bridge.c 22 Jan 2018 10:54:48 -0000
@@ -1108,8 +1108,7 @@ bridge_process(struct ifnet *ifp, struct
ac = (struct arpcom *)ifl->ifp;
if (bcmp(ac->ac_enaddr, eh->ether_dhost, ETHER_ADDR_LEN) == 0
#if NCARP > 0
- || (!SRPL_EMPTY_LOCKED(&ifl->ifp->if_carp) &&
- !carp_ourether(ifl->ifp, eh->ether_dhost))
+ || !carp_ourether(ifl->ifp, eh->ether_dhost)
#endif
) {
if (srcifl->bif_flags & IFBIF_LEARNING)
@@ -1131,8 +1130,7 @@ bridge_process(struct ifnet *ifp, struct
}
if (bcmp(ac->ac_enaddr, eh->ether_shost, ETHER_ADDR_LEN) == 0
#if NCARP > 0
- || (!SRPL_EMPTY_LOCKED(&ifl->ifp->if_carp) &&
- !carp_ourether(ifl->ifp, eh->ether_shost))
+ || !carp_ourether(ifl->ifp, eh->ether_shost)
#endif
) {
m_freem(m);
Index: netinet/ip_carp.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_carp.c,v
retrieving revision 1.327
diff -u -p -r1.327 ip_carp.c
--- netinet/ip_carp.c 12 Jan 2018 23:47:24 -0000 1.327
+++ netinet/ip_carp.c 22 Jan 2018 10:53:35 -0000
@@ -1339,12 +1339,15 @@ carp_iamatch(struct ifnet *ifp)
int
carp_ourether(struct ifnet *ifp, u_int8_t *ena)
{
- struct srpl *cif;
+ struct srpl *cif = &ifp->if_carp;
struct carp_softc *vh;
KERNEL_ASSERT_LOCKED(); /* touching if_carp + carp_vhosts */
+
+ if (SRPL_EMPTY_LOCKED(cif))
+ return (0);
+
KASSERT(ifp->if_type == IFT_ETHER);
- cif = &ifp->if_carp;
SRPL_FOREACH_LOCKED(vh, cif, sc_list) {
struct carp_vhost_entry *vhe;