Hi, Daniele.
Maybe I'm not the very right person to review such things, but I'm
actually used this patch since it appeared in your github and it
looks good to me. Also, I wanted to remove this non-working
implementation of 'netdev_dpdk_set_mtu' for a long time.

Acked-by: Ilya Maximets <i.maxim...@samsung.com>

On 09.08.2016 19:01, Mark Kavanagh wrote:
> From: Daniele Di Proietto <diproiet...@vmware.com>
> 
> The 'mtu_request' column can be used to set the MTU of a specific
> interface.
> 
> This column is useful because it will allow changing the MTU of DPDK
> devices (implemented in a future commit), which are not accessible
> outside the ovs-vswitchd process, but it can be used for kernel
> interfaces as well.
> 
> The current implementation of set_mtu() in netdev-dpdk is removed
> because it's broken.  It will be reintroduced by a subsequent commit on
> this series.
> 
> Signed-off-by: Daniele Di Proietto <diproiet...@vmware.com>
> ---
>  NEWS                       |  2 ++
>  lib/netdev-dpdk.c          | 53 
> +---------------------------------------------
>  vswitchd/bridge.c          |  9 ++++++++
>  vswitchd/vswitch.ovsschema | 10 +++++++--
>  vswitchd/vswitch.xml       | 52 +++++++++++++++++++++++++++++++++------------
>  5 files changed, 58 insertions(+), 68 deletions(-)
> 
> diff --git a/NEWS b/NEWS
> index c2ed71d..ce10982 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -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
> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
> index f37ec1c..60db568 100644
> --- a/lib/netdev-dpdk.c
> +++ b/lib/netdev-dpdk.c
> @@ -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,                           \
> diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
> index ddf1fe5..397be70 100644
> --- a/vswitchd/bridge.c
> +++ b/vswitchd/bridge.c
> @@ -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
> diff --git a/vswitchd/vswitch.ovsschema b/vswitchd/vswitch.ovsschema
> index 32fdf28..8966803 100644
> --- a/vswitchd/vswitch.ovsschema
> +++ b/vswitchd/vswitch.ovsschema
> @@ -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"]]},
> diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml
> index 65acdc7..780bd2d 100644
> --- a/vswitchd/vswitch.xml
> +++ b/vswitchd/vswitch.xml
> @@ -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
> 
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to