On 11/01/18(Thu) 21:59, David Gwynne wrote: > [...] > when you say i break carp balancing, are you talking about the removal of the > PACKET_TAG_CARP_BAL_IP tagging? PACKET_TAG_CARP_BAL_IP is only used in > carp_lsdrop to clear the M_MCAST flag on the mbuf. M_MCAST wont be set on > packets destined for the carp interface because we check ac_enaddr before > checking if the packet is multicast or broadcast.
I might be mistaken. I just know that this code is fragile and I'd prefer to see such change tested isolated because carp(4) itself has multiple configurations. CARP balancing has been fixed for 6.2 by friehm@ after being broken for multiple releases. > are you sure? carp and vlan on top of trunk should still function. however, > trunk or bridge/switch on vlan is broken though :( I'm not sure, but I believe mixing input handler and hardcoding some in ether_input() won't fly :) > > If if_input() is called on a pseudo-interface we know we're already in > > a softnet process. > > or a syscall. > > the code above has pseudo interfaces recurse, where they'd loop either on > ifih or at the task level. probably not a huge concern though. We can unroll the loop afterward. What we need now is get rid of the queues. > > We could also think of doing something similar for if_enqueue() and call > > if_start() directly for pseudo-interface. > > ill think about that. ive had some other experiments in that area we could > look at too. I'd be glad to look at your experiments :) > >> note that trunk and bridge/switch are still implemented using > >> interface input handlers at the moment. > > > > If you want to get rid of the input handlers, I'd suggest doing it in > > the beginning of a release cycle and for all pseudo drivers at once. > > considering the trunk and bridge/switch issue, it probably is best to do them > all at once. Yes. I'm aware that the SRP/input handler loop might be considered. We can probably gain some percents if we remove it. However this is a micro optimization compared to other improvements that can be done. Plus it has the advantage of not having fragile #ifdef maze in the rest of the code.