so carp_output calls ether_output, which makes it pretty obvious that carp is for ethernet only. ie, this diff is safe.
> On 10 Jan 2018, at 14:05, David Gwynne <da...@gwynne.id.au> wrote: > > this copies the "valid interface" check from carp6_proto_input_if > to carp_proto_input_if. the current check looks to see if the current > interface is carp, or if the current interface has any carps attached > to it. the carp6_proto_input_if check just checks if the current > interface is IFT_CARP or not. > > right now i think we only really support carp(4) on top of ethernet > interfaces, and the ethernet stack goes to some lengths to make > packets for a carp interface appear to have been received on the > carp interface. either a packet is sent to the carp interfaces mac > address, or it is a multicast packet which gets duplicated for > reception by the carp interface. > > i guess a bigger question is do we support carp on non-ethernet > interaces? if so, the check from carp_proto_input_if should be > copied to carp6_proto_input_if. if not, there's a bunch of other > cleanup that could be done. > > ok? > > Index: ip_carp.c > =================================================================== > RCS file: /cvs/src/sys/netinet/ip_carp.c,v > retrieving revision 1.321 > diff -u -p -r1.321 ip_carp.c > --- ip_carp.c 9 Jan 2018 15:24:24 -0000 1.321 > +++ ip_carp.c 10 Jan 2018 03:57:43 -0000 > @@ -454,8 +454,7 @@ carp_proto_input_if(struct ifnet *ifp, s > ismulti = IN_MULTICAST(ip->ip_dst.s_addr); > > /* check if received on a valid carp interface */ > - if (!(ifp->if_type == IFT_CARP || > - (ifp->if_type != IFT_CARP && !ismulti && ifp->if_carp != NULL))) { > + if (ifp->if_type != IFT_CARP) { > carpstat_inc(carps_badif); > CARP_LOG(LOG_INFO, sc, > ("packet received on non-carp interface: %s", >