diff --git a/libnetwork/drivers/overlay/joinleave.go b/libnetwork/drivers/overlay/joinleave.go index 0d428b2b04..39e4634227 100644 --- a/libnetwork/drivers/overlay/joinleave.go +++ b/libnetwork/drivers/overlay/joinleave.go @@ -35,15 +35,31 @@ func (d *driver) Join(nid, eid string, sboxKey string, jinfo driverapi.JoinInfo, return err } + // Set the container interface and its peer MTU to 1450 to allow + // for 50 bytes vxlan encap (inner eth header(14) + outer IP(20) + + // outer UDP(8) + vxlan header(8)) + veth, err := netlink.LinkByName(name1) + if err != nil { + return fmt.Errorf("cound not find link by name %s: %v", name1, err) + } + err = netlink.LinkSetMTU(veth, vxlanVethMTU) + if err != nil { + return err + } + if err := sbox.AddInterface(name1, "veth", sbox.InterfaceOptions().Master("bridge1")); err != nil { return fmt.Errorf("could not add veth pair inside the network sandbox: %v", err) } - veth, err := netlink.LinkByName(name2) + veth, err = netlink.LinkByName(name2) if err != nil { return fmt.Errorf("could not find link by name %s: %v", name2, err) } + err = netlink.LinkSetMTU(veth, vxlanVethMTU) + if err != nil { + return err + } if err := netlink.LinkSetHardwareAddr(veth, ep.mac); err != nil { return fmt.Errorf("could not set mac address to the container interface: %v", err) diff --git a/libnetwork/drivers/overlay/overlay.go b/libnetwork/drivers/overlay/overlay.go index 9bd63f558f..8f55ad6dca 100644 --- a/libnetwork/drivers/overlay/overlay.go +++ b/libnetwork/drivers/overlay/overlay.go @@ -21,6 +21,7 @@ const ( vxlanIDStart = 256 vxlanIDEnd = 1000 vxlanPort = 4789 + vxlanVethMTU = 1450 ) type driver struct {