ovs: set MTU from connection when creating an internal interface

The ovs-vswitchd.conf.db(5) man page says about the the mtu_request
column in the Interface table:

  "Requested MTU (Maximum Transmission Unit) for the interface. A
   client can fill this column to change the MTU of an
   interface [...] If this is not set and if the interface has
   internal type, Open vSwitch will change the MTU to match the
   minimum of the other interfaces in the bridge."

Therefore, if the connection specifies a MTU, set it early when adding
the interface to the ovsdb so that it will not be changed to the
minimum of other interfaces.

(cherry picked from commit ad12f26312)
(cherry picked from commit 7311d5e294)
(cherry picked from commit b81370f70b)
This commit is contained in:
Beniamino Galvani 2020-02-27 13:54:43 +01:00 committed by Thomas Haller
parent 021141481e
commit 59787018c9
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728

View file

@ -367,11 +367,20 @@ _insert_interface (json_t *params, NMConnection *interface, NMDevice *interface_
gs_free char *cloned_mac = NULL;
gs_free_error GError *error = NULL;
json_t *row;
guint32 mtu = 0;
s_ovs_iface = nm_connection_get_setting_ovs_interface (interface);
if (s_ovs_iface)
type = nm_setting_ovs_interface_get_interface_type (s_ovs_iface);
if (nm_streq0 (type, "internal")) {
NMSettingWired *s_wired;
s_wired = _nm_connection_get_setting (interface, NM_TYPE_SETTING_WIRED);
if (s_wired)
mtu = nm_setting_wired_get_mtu (s_wired);
}
if (!nm_device_hw_addr_get_cloned (interface_device,
interface,
FALSE,
@ -404,6 +413,9 @@ _insert_interface (json_t *params, NMConnection *interface, NMDevice *interface_
if (cloned_mac)
json_object_set_new (row, "mac", json_string (cloned_mac));
if (mtu != 0)
json_object_set_new (row, "mtu_request", json_integer (mtu));
json_array_append_new (params,
json_pack ("{s:s, s:s, s:o, s:s}",
"op", "insert",