On 06/06/16(Mon) 13:04, Masao Uebayashi wrote: > Broadcast frame, coming into a bridge'ed interface, passes if_input() 3 times, > and actually input (ether_input()) twice. > > - A frame enters an interface (e.g. pair(4)), the interface calls if_input() > on it. The frame is queued in if_input_queue. > > - A task running if_input_process() is triggered. It takes the frame and > calls bridge_input(). Frame is queued in bridgeintrq. > > - bridge_process() dispatches frame as multicast/broadcast (if > (ETHER_IS_MULTICAST())) and calls bridge_ifinput() on it, then passes the > frame to bridgeintr_frame(). > > - bridgeintr_frame() calls bridge_broadcast() on it. > > - bridge_broadcast() calls bridge_localbroadcast(), which again calls > bridge_ifinput(). > > bridge_ifinput() is called twice for each broadcast frames. bridge_ifinput() > calls if_input(). Thus 3 if_input() for each. > > These duplicate frames confuse pppoe(4), that's why it stops working.
What do you mean by "confuse pppoe(4)"? I still don't understand what's the link between pppoe(4) and bpf(4) in this case and why BPF matters for a kernel driver.