@@ -101,6 +101,8 @@ Post-v2.5.0
- ovs-pki: Changed message digest algorithm from SHA-1 to SHA-512 because
SHA-1 is no longer secure and some operating systems have started to
disable it in OpenSSL.
+ - Add 'mtu_request' column to the Interface table. It can be used to
+ configure the MTU of non-internal ports.
v2.5.0 - 26 Feb 2016
@@ -1639,57 +1639,6 @@ netdev_dpdk_get_mtu(const struct netdev *netdev, int *mtup)
}
static int
-netdev_dpdk_set_mtu(const struct netdev *netdev, int mtu)
-{
- struct netdev_dpdk *dev = netdev_dpdk_cast(netdev);
- int old_mtu, err, dpdk_mtu;
- struct dpdk_mp *old_mp;
- struct dpdk_mp *mp;
- uint32_t buf_size;
-
- ovs_mutex_lock(&dpdk_mutex);
- ovs_mutex_lock(&dev->mutex);
- if (dev->mtu == mtu) {
- err = 0;
- goto out;
- }
-
- buf_size = dpdk_buf_size(mtu);
- dpdk_mtu = FRAME_LEN_TO_MTU(buf_size);
-
- mp = dpdk_mp_get(dev->socket_id, dpdk_mtu);
- if (!mp) {
- err = ENOMEM;
- goto out;
- }
-
- rte_eth_dev_stop(dev->port_id);
-
- old_mtu = dev->mtu;
- old_mp = dev->dpdk_mp;
- dev->dpdk_mp = mp;
- dev->mtu = mtu;
- dev->max_packet_len = MTU_TO_FRAME_LEN(dev->mtu);
-
- err = dpdk_eth_dev_init(dev);
- if (err) {
- dpdk_mp_put(mp);
- dev->mtu = old_mtu;
- dev->dpdk_mp = old_mp;
- dev->max_packet_len = MTU_TO_FRAME_LEN(dev->mtu);
- dpdk_eth_dev_init(dev);
- goto out;
- }
-
- dpdk_mp_put(old_mp);
- netdev_change_seq_changed(netdev);
-out:
- ovs_mutex_unlock(&dev->mutex);
- ovs_mutex_unlock(&dpdk_mutex);
- return err;
-}
-
-static int
netdev_dpdk_get_carrier(const struct netdev *netdev, bool *carrier);
static int
@@ -2964,7 +2913,7 @@ netdev_dpdk_vhost_cuse_reconfigure(struct netdev *netdev)
netdev_dpdk_set_etheraddr, \
netdev_dpdk_get_etheraddr, \
netdev_dpdk_get_mtu, \
- netdev_dpdk_set_mtu, \
+ NULL, /* set_mtu */ \
netdev_dpdk_get_ifindex, \
GET_CARRIER, \
netdev_dpdk_get_carrier_resets, \
@@ -775,6 +775,15 @@ bridge_delete_or_reconfigure_ports(struct bridge *br)
goto delete;
}
+ if (iface->cfg->n_mtu_request == 1
+ && strcmp(iface->type,
+ ofproto_port_open_type(br->type, "internal"))) {
+ /* Try to set the MTU to the requested value. This is not done
+ * for internal interfaces, since their MTU is decided by the
+ * ofproto module, based on other ports in the bridge. */
+ netdev_set_mtu(iface->netdev, *iface->cfg->mtu_request);
+ }
+
/* If the requested OpenFlow port for 'iface' changed, and it's not
* already the correct port, then we might want to temporarily delete
* this interface, so we can add it back again with the new OpenFlow
@@ -1,6 +1,6 @@
{"name": "Open_vSwitch",
- "version": "7.13.0",
- "cksum": "889248633 22774",
+ "version": "7.14.0",
+ "cksum": "3974332717 22936",
"tables": {
"Open_vSwitch": {
"columns": {
@@ -321,6 +321,12 @@
"mtu": {
"type": {"key": "integer", "min": 0, "max": 1},
"ephemeral": true},
+ "mtu_request": {
+ "type": {
+ "key": {"type": "integer",
+ "minInteger": 1},
+ "min": 0,
+ "max": 1}},
"error": {
"type": {"key": "string", "min": 0, "max": 1}}},
"indexes": [["name"]]},
@@ -2380,6 +2380,44 @@
</column>
</group>
+ <group title="MTU">
+ <p>
+ The MTU (maximum transmission unit) is the largest amount of data
+ that can fit into a single Ethernet frame. The standard Ethernet
+ MTU is 1500 bytes. Some physical media and many kinds of virtual
+ interfaces can be configured with higher MTUs.
+ </p>
+
+ <p>
+ A client may change a non-internal interface MTU by filling in
+ <ref column="mtu_request"/>. Internal interfaces MTU, instead, is set
+ by Open vSwitch to the minimum of non-internal interfaces MTU in the
+ bridge. In any case, Open vSwitch then reports in <ref column="mtu"/>
+ the currently configured value.
+ </p>
+
+ <column name="mtu">
+ <p>
+ This column will be empty for an interface that does not
+ have an MTU as, for example, some kinds of tunnels do not.
+ </p>
+
+ <p>
+ Open vSwitch sets this column's value, so other clients should treat
+ it as read-only.
+ </p>
+ </column>
+
+ <column name="mtu_request"
+ type='{"type": "integer", "minInteger": 1}'>
+ <p>
+ Requested MTU (Maximum Transmission Unit) for the interface. A client
+ can fill this column to change the MTU of a non-internal interface.
+ </p>
+ </column>
+
+ </group>
+
<group title="Interface Status">
<p>
Status information about interfaces attached to bridges, updated every
@@ -2422,20 +2460,6 @@
</p>
</column>
- <column name="mtu">
- <p>
- The MTU (maximum transmission unit); i.e. the largest
- amount of data that can fit into a single Ethernet frame.
- The standard Ethernet MTU is 1500 bytes. Some physical media
- and many kinds of virtual interfaces can be configured with
- higher MTUs.
- </p>
- <p>
- This column will be empty for an interface that does not
- have an MTU as, for example, some kinds of tunnels do not.
- </p>
- </column>
-
<column name="lacp_current">
Boolean value indicating LACP status for this interface. If true, this
interface has current LACP information about its LACP partner. This