The kernel GRE driver ignores IFLA_MTU in RTM_NEWLINK requests and overrides the MTU to 1472 bytes. This commit works around the problem by following up a request to create a GRE device with a second request to set the MTU.
Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=1488484 Reported-by: Eric Garver <[email protected]> Reported-by: James Page <[email protected]> Signed-off-by: Ben Pfaff <[email protected]> --- lib/dpif-netlink-rtnl.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/lib/dpif-netlink-rtnl.c b/lib/dpif-netlink-rtnl.c index 37451b80de0e..40c456951827 100644 --- a/lib/dpif-netlink-rtnl.c +++ b/lib/dpif-netlink-rtnl.c @@ -338,6 +338,25 @@ dpif_netlink_rtnl_create(const struct netdev_tunnel_config *tnl_cfg, nl_msg_end_nested(&request, linkinfo_off); err = nl_transact(NETLINK_ROUTE, &request, NULL); + if (!err && type == OVS_VPORT_TYPE_GRE) { + /* Work around a bug in kernel GRE driver, which ignores IFLA_MTU in + * RTM_NEWLINK, by setting the MTU again. See + * https://bugzilla.redhat.com/show_bug.cgi?id=1488484. */ + ofpbuf_clear(&request); + nl_msg_put_nlmsghdr(&request, 0, RTM_SETLINK, + NLM_F_REQUEST | NLM_F_ACK); + ofpbuf_put_zeros(&request, sizeof(struct ifinfomsg)); + nl_msg_put_string(&request, IFLA_IFNAME, name); + nl_msg_put_u32(&request, IFLA_MTU, MAX_MTU); + + int err2 = nl_transact(NETLINK_ROUTE, &request, NULL); + if (err2) { + static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5); + + VLOG_WARN_RL(&rl, "setting MTU of tunnel %s failed (%s)", + name, ovs_strerror(err2)); + } + } exit: ofpbuf_uninit(&request); -- 2.10.2 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
