FreeBSD discarding received packets > MTU

Julian Elischer julian at
Thu Sep 6 15:26:08 PDT 2007

Julian Elischer wrote:
> Ok which clever person did this again?
> It just broke our product.
> If it hasn't been removed from 7.0 and 6.x yet it's just about to be...
> _______________________________________________
> freebsd-net at mailing list
> To unsubscribe, send any mail to "freebsd-net-unsubscribe at"

on the topic above, I've found that the bce driver seems to be throwingaway packets
larger than the mtu regardless of the rest of the system..

the following code seems to be responsible..

in the spirit of "be generous on receive" as mentionned before,
 should it be relaxed?

        /* Calculate and program the Ethernet MTU size. */
        ether_mtu = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN + ifp->if_mtu +

        DBPRINT(sc, BCE_INFO, "%s(): setting mtu = %d\n",__FUNCTION__, ether_mtu);

         * Program the mtu, enabling jumbo frame
         * support if necessary.  Also set the mbuf
         * allocation count for RX frames.
        if (ether_mtu > ETHER_MAX_LEN + ETHER_VLAN_ENCAP_LEN) {
                REG_WR(sc, BCE_EMAC_RX_MTU_SIZE, ether_mtu |
                sc->mbuf_alloc_size = MJUM9BYTES;
        } else {
                REG_WR(sc, BCE_EMAC_RX_MTU_SIZE, ether_mtu);
                sc->mbuf_alloc_size = MCLBYTES;

could probably be relaxed in the non jumbo case to accept packets up to 
MCLBYTES in size instead of ether_mtu.

manually I have set the mtu to larger values which increases
ether_mtu and that seems to work..
now, Why do we need this?

WCCP is a protocol from Cisco.
it  encapsulates packets in GRE, including an extra intermediate header.
when packets are encapsulated in GRE by cisco 6k switches (quite a few around)
they do NOT frag the result, but instead, send an oversized packet.

if you have a bce interface, it discards these packets which is a drag.

More information about the freebsd-net mailing list