From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from proxy.6wind.com (host.76.145.23.62.rev.coltfrance.com [62.23.145.76]) by dpdk.org (Postfix) with ESMTP id B563A2C35 for ; Tue, 7 Mar 2017 17:31:59 +0100 (CET) Received: from 6wind.com (unknown [10.16.0.184]) by proxy.6wind.com (Postfix) with SMTP id 0884E25B4F; Tue, 7 Mar 2017 17:31:54 +0100 (CET) Received: by 6wind.com (sSMTP sendmail emulation); Tue, 07 Mar 2017 17:31:44 +0100 From: Pascal Mazon To: keith.wiles@intel.com Cc: dev@dpdk.org, Pascal Mazon Date: Tue, 7 Mar 2017 17:31:36 +0100 Message-Id: <1488904298-31395-5-git-send-email-pascal.mazon@6wind.com> X-Mailer: git-send-email 2.8.0.rc0 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v3 4/6] net/tap: add MTU management 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: , X-List-Received-Date: Tue, 07 Mar 2017 16:31:59 -0000 The MTU is assigned to the tap netdevice according to the argument, but packet transmission and reception just write/read on an fd with the default limit being the socket buffer size. Signed-off-by: Pascal Mazon --- doc/guides/nics/features/tap.ini | 1 + drivers/net/tap/rte_eth_tap.c | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/doc/guides/nics/features/tap.ini b/doc/guides/nics/features/tap.ini index 6878a9b8fd17..6aa11874e2bc 100644 --- a/doc/guides/nics/features/tap.ini +++ b/doc/guides/nics/features/tap.ini @@ -9,6 +9,7 @@ Jumbo frame = Y Promiscuous mode = Y Allmulticast mode = Y Basic stats = Y +MTU update = Y Multicast MAC filter = Y Speed capabilities = Y Unicast MAC filter = Y diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c index 301072f20930..d76f1dc83b03 100644 --- a/drivers/net/tap/rte_eth_tap.c +++ b/drivers/net/tap/rte_eth_tap.c @@ -733,6 +733,42 @@ tap_set_mc_addr_list(struct rte_eth_dev *dev __rte_unused, return 0; } +static int +tap_mtu_set(struct rte_eth_dev *dev, uint16_t mtu) +{ + struct pmd_internals *pmd = dev->data->dev_private; + struct ifreq ifr; + int err, s; + + s = socket(AF_INET, SOCK_DGRAM, 0); + if (s < 0) { + RTE_LOG(ERR, PMD, + "Unable to get a socket for %s to set flags: %s\n", + pmd->name, strerror(errno)); + return -1; + } + memset(&ifr, 0, sizeof(ifr)); + snprintf(ifr.ifr_name, IFNAMSIZ, "%s", pmd->name); + err = ioctl(s, SIOCGIFMTU, &ifr); + if (err < 0) { + RTE_LOG(WARNING, PMD, "Unable to get %s device MTU: %s\n", + pmd->name, strerror(errno)); + close(s); + return -1; + } + ifr.ifr_mtu = mtu; + err = ioctl(s, SIOCSIFMTU, &ifr); + if (err < 0) { + RTE_LOG(WARNING, PMD, "Unable to set %s mtu %d: %s\n", + pmd->name, mtu, strerror(errno)); + close(s); + return -1; + } + close(s); + dev->data->mtu = mtu; + return 0; +} + static const struct eth_dev_ops ops = { .dev_start = tap_dev_start, .dev_stop = tap_dev_stop, @@ -754,6 +790,7 @@ static const struct eth_dev_ops ops = { .mac_addr_add = tap_mac_add, .mac_addr_set = tap_mac_set, .set_mc_addr_list = tap_set_mc_addr_list, + .mtu_set = tap_mtu_set, .stats_get = tap_stats_get, .stats_reset = tap_stats_reset, }; -- 2.8.0.rc0