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...

Reply via email to