Looking at the source in sys/netinet/ip_ether.c of void etherip_decap(struct mbuf *, int); which calls etherip_getgif(struct mbuf *m) first, and then clears these flags of the _inner_ Ethernet header: ... /* Reset the flags based on the inner packet */ m->m_flags &= ~(M_BCAST|M_MCAST|M_AUTH|M_CONF|M_PROTO1);
Why? I can not yet understand this (false?) symmetry to what gif_encap() does to the outer Ethernet header which gif_output() calls in sys/net/if_gif.c . Could that be the cause of my problem where Ethernet frames that come out of the gif tunnel and are EtherIP decapsulated are actually not forwarded by the other members of the bridge because the M_MCAST bit got cleared, instead being left untouched on decapsulation? Setting up a build host with current right now to find out...