From patchwork Thu Sep 19 11:22:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Ryzhov X-Patchwork-Id: 59445 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C2F221EE22; Thu, 19 Sep 2019 13:23:03 +0200 (CEST) Received: from mail-lj1-f196.google.com (mail-lj1-f196.google.com [209.85.208.196]) by dpdk.org (Postfix) with ESMTP id EB06C1EDE0 for ; Thu, 19 Sep 2019 13:23:01 +0200 (CEST) Received: by mail-lj1-f196.google.com with SMTP id y3so1797580ljj.6 for ; Thu, 19 Sep 2019 04:23:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nfware-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=S92BTyCBYDTWEc3958m9bF76b6cNJkouuALxRqQlBzI=; b=v75FHfgw08TTHOEecGOTzO8IeckMvdiuo5MoKegH/IpKX/HRBwwS0ZaSh+mR7tbd8r O3gweELM/jATDXGGxSe9sHQ1IG6ndDIQ/8C+ZU6thyhsDfHrLwKbWkCHIHkKwvH026Kw DxhqsEWLQ1xGwtd/1LX4g90leAP1cyyJmAe5A5fEFoybCEFH0BlW6N/dka3IjKvQswE0 Pjtv0Db2zV3rcUiW4AslK7JsQe1MQ6XBOfNEIBviL+WU9jAkIRy9KH3fyQDjIbU1440d aNu+RyDe/L9O6TODP/a9C0WsKc6SktR4cpQwKZ8yKJRVnISju9Fu1Uvup5Ent8cn9mZ1 hxQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=S92BTyCBYDTWEc3958m9bF76b6cNJkouuALxRqQlBzI=; b=bTfwR+HaagPH/nrhEB0oa+CWmk7ZWLRk694mJ7jYtkjFZy1Ko946LSs2padkBVrZ54 NFuAyqgQmAk1NkWoAj9zeABlMHJfcDtg+UxEhefkSR8H1yXUi8V7hVXBw5nw1GswolW+ Fj/7ouXxtuzFXRwiPFtDw6CPTqG0GEpuhT8tV9Pc8HJid0WY+AdjNKx+UXn1BZ2cozYX dwqqWPOSeaTNFQf4sAT9E6AesrZQ9PKGZpWL8YqUfIMLFreP8ajOKjqoufnI/KiC4mQl 8Eyz4PfsP29ozsMjQ+qOBgW4nRWkBJKNfmiRMwYC7lO4+SR6oY9lfoCf1Nll8nH0BKyM YDrQ== X-Gm-Message-State: APjAAAWF9S0gyaa0PCvf95H6YnK4EWGW73/veBycpwdiuX8gfYWsUk/1 r9AFo6h1fWH7FMZeno/WR/fPtTF2Tek= X-Google-Smtp-Source: APXvYqzxprlLGv3vn/pg9IwVdaFJwq6egtBPggSUWF8iOokrPqaJLHMAOLPg0FAxhMkwgUilUaZpGg== X-Received: by 2002:a2e:904c:: with SMTP id n12mr4851182ljg.139.1568892181215; Thu, 19 Sep 2019 04:23:01 -0700 (PDT) Received: from localhost.localdomain ([212.48.63.198]) by smtp.gmail.com with ESMTPSA id 126sm1721195lfh.45.2019.09.19.04.23.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Sep 2019 04:23:00 -0700 (PDT) From: Igor Ryzhov To: dev@dpdk.org Date: Thu, 19 Sep 2019 14:22:57 +0300 Message-Id: <20190919112257.85337-1-iryzhov@nfware.com> X-Mailer: git-send-email 2.23.0 MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH] kni: add ability to set min/max MTU X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Starting with kernel version 4.10, there are new min/max MTU values in net_device structure, which are set to ETH_MIN_MTU and ETH_DATA_LEN by default. We should be able to change these values to allow MTU more than 1500 to be set on KNI. Signed-off-by: Igor Ryzhov Acked-by: Ferruh Yigit --- examples/kni/main.c | 3 +++ kernel/linux/kni/compat.h | 4 ++++ kernel/linux/kni/kni_misc.c | 8 ++++++++ lib/librte_eal/linux/eal/include/rte_kni_common.h | 2 ++ lib/librte_kni/rte_kni.c | 2 ++ lib/librte_kni/rte_kni.h | 2 ++ 6 files changed, 21 insertions(+) diff --git a/examples/kni/main.c b/examples/kni/main.c index 4710d7176..c22a7c18d 100644 --- a/examples/kni/main.c +++ b/examples/kni/main.c @@ -907,6 +907,9 @@ kni_alloc(uint16_t port_id) rte_eth_dev_get_mtu(port_id, &conf.mtu); + conf.min_mtu = dev_info.min_mtu; + conf.max_mtu = dev_info.max_mtu; + memset(&ops, 0, sizeof(ops)); ops.port_id = port_id; ops.change_mtu = kni_change_mtu; diff --git a/kernel/linux/kni/compat.h b/kernel/linux/kni/compat.h index 562d8bf94..fe0ee55e7 100644 --- a/kernel/linux/kni/compat.h +++ b/kernel/linux/kni/compat.h @@ -89,6 +89,10 @@ #define HAVE_TRANS_START_HELPER #endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0) +#define HAVE_MIN_MAX_MTU +#endif + /* * KNI uses NET_NAME_UNKNOWN macro to select correct version of alloc_netdev() * For old kernels just backported the commit that enables the macro diff --git a/kernel/linux/kni/kni_misc.c b/kernel/linux/kni/kni_misc.c index 2b75502a8..aeb275329 100644 --- a/kernel/linux/kni/kni_misc.c +++ b/kernel/linux/kni/kni_misc.c @@ -390,6 +390,14 @@ kni_ioctl_create(struct net *net, uint32_t ioctl_num, net_dev->max_mtu = net_dev->mtu; #endif +#ifdef HAVE_MIN_MAX_MTU + if (dev_info.min_mtu) + net_dev->min_mtu = dev_info.min_mtu; + + if (dev_info.max_mtu) + net_dev->max_mtu = dev_info.max_mtu; +#endif + ret = register_netdev(net_dev); if (ret) { pr_err("error %i registering device \"%s\"\n", diff --git a/lib/librte_eal/linux/eal/include/rte_kni_common.h b/lib/librte_eal/linux/eal/include/rte_kni_common.h index 37d9ee8f0..70992d835 100644 --- a/lib/librte_eal/linux/eal/include/rte_kni_common.h +++ b/lib/librte_eal/linux/eal/include/rte_kni_common.h @@ -120,6 +120,8 @@ struct rte_kni_device_info { /* mbuf size */ unsigned mbuf_size; unsigned int mtu; + unsigned int min_mtu; + unsigned int max_mtu; uint8_t mac_addr[6]; }; diff --git a/lib/librte_kni/rte_kni.c b/lib/librte_kni/rte_kni.c index 4b51fb4fe..521db27c4 100644 --- a/lib/librte_kni/rte_kni.c +++ b/lib/librte_kni/rte_kni.c @@ -252,6 +252,8 @@ rte_kni_alloc(struct rte_mempool *pktmbuf_pool, dev_info.group_id = conf->group_id; dev_info.mbuf_size = conf->mbuf_size; dev_info.mtu = conf->mtu; + dev_info.min_mtu = conf->min_mtu; + dev_info.max_mtu = conf->max_mtu; memcpy(dev_info.mac_addr, conf->mac_addr, RTE_ETHER_ADDR_LEN); diff --git a/lib/librte_kni/rte_kni.h b/lib/librte_kni/rte_kni.h index 5699a6443..b22446fa7 100644 --- a/lib/librte_kni/rte_kni.h +++ b/lib/librte_kni/rte_kni.h @@ -70,6 +70,8 @@ struct rte_kni_conf { uint8_t force_bind : 1; /* Flag to bind kernel thread */ uint8_t mac_addr[RTE_ETHER_ADDR_LEN]; /* MAC address assigned to KNI */ uint16_t mtu; + uint16_t min_mtu; + uint16_t max_mtu; }; /**