Moving bpf_mtap_ether() from if_input() to (the top of) ether_input() makes PPPoE session successfully get established.
On Thu, Jun 02, 2016 at 02:25:39PM +0900, Masao Uebayashi wrote: > I spoke too early; I thought frames were broken but actually it was not. > What was happening, according to tcpdump(8), was that frames, both broadcast > and unicast, are flooded for some reason, and pppoe(4) fails to receive > necessary frames in order. > > OTOH, assigning IP addresses and pinging between pair(4)'s doesn't flood > frames. > > bridge(4) and bpf(4) interacting badly? > > On Thu, Jun 02, 2016 at 10:34:10AM +0900, Masao Uebayashi wrote: > > I'm playing with PPPoE and it (npppd(8) + ppppoe(4)) works fine with patched > > pair(4) interfaces, that's good. > > > > patch > > pair0 --- pair1 > > pppoe npppd > > > > To try more wierd things, I added one pair(4), to which npppd(8) was > > listening > > on, to a bridge(4). This stops pppoe(4) from working. Seems PPPoE > > Discovery > > frames sent to pppoe(4) get broken. > > > > patch bridge0 > > pair0 --- pair1 ===== > > pppoe npppd > > > > If I add another interface, e.g. vether(4), to the bridge and let npppd(8) > > listen on vether(4), things work. > > > > patch bridge0 > > pair0 --- pair1 ===== vether0 > > pppoe npppd > > > > I thought adding an interface (pair1) to a bridge does not change what pair1 > > sees logically, or am I wrong? > > > > Masao