From mboxrd@z Thu Jan 1 00:00:00 1970 From: Solio Sarabia Subject: [PATCH 1/2] rtnetlink: allow GSO maximums to be passed to device Date: Tue, 5 Dec 2017 17:14:25 -0800 Message-ID: <1512522866-5544-2-git-send-email-solio.sarabia@intel.com> References: <1512522866-5544-1-git-send-email-solio.sarabia@intel.com> Cc: eric.dumazet@gmail.com, dsahern@gmail.com, kys@microsoft.com, shiny.sebastian@intel.com, solio.sarabia@intel.com, Stephen Hemminger To: netdev@vger.kernel.org, davem@davemloft.net, stephen@networkplumber.org Return-path: Received: from mga02.intel.com ([134.134.136.20]:54757 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754120AbdLFBSq (ORCPT ); Tue, 5 Dec 2017 20:18:46 -0500 In-Reply-To: <1512522866-5544-1-git-send-email-solio.sarabia@intel.com> Sender: netdev-owner@vger.kernel.org List-ID: From: Stephen Hemminger Allow GSO maximum segments and size as netlink parameters on input, with 'ip link add' utils for example. Allow also updating these attributes after rtnetlink devices are created. Signed-off-by: Stephen Hemminger Signed-off-by: Solio Sarabia --- net/core/rtnetlink.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index a4faefd..a1ff2a8 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -1637,6 +1637,8 @@ static const struct nla_policy ifla_policy[IFLA_MAX+1] = { [IFLA_PROMISCUITY] = { .type = NLA_U32 }, [IFLA_NUM_TX_QUEUES] = { .type = NLA_U32 }, [IFLA_NUM_RX_QUEUES] = { .type = NLA_U32 }, + [IFLA_GSO_MAX_SEGS] = { .type = NLA_U32 }, + [IFLA_GSO_MAX_SIZE] = { .type = NLA_U32 }, [IFLA_PHYS_PORT_ID] = { .type = NLA_BINARY, .len = MAX_PHYS_ITEM_ID_LEN }, [IFLA_CARRIER_CHANGES] = { .type = NLA_U32 }, /* ignored */ [IFLA_PHYS_SWITCH_ID] = { .type = NLA_BINARY, .len = MAX_PHYS_ITEM_ID_LEN }, @@ -2287,6 +2289,34 @@ static int do_setlink(const struct sk_buff *skb, } } + if (tb[IFLA_GSO_MAX_SIZE]) { + u32 max_size = nla_get_u32(tb[IFLA_GSO_MAX_SIZE]); + + if (max_size > GSO_MAX_SIZE) { + err = -EINVAL; + goto errout; + } + + if (dev->gso_max_size ^ max_size) { + netif_set_gso_max_size(dev, max_size); + status |= DO_SETLINK_MODIFIED; + } + } + + if (tb[IFLA_GSO_MAX_SEGS]) { + u32 max_segs = nla_get_u32(tb[IFLA_GSO_MAX_SEGS]); + + if (max_segs > GSO_MAX_SEGS) { + err = -EINVAL; + goto errout; + } + + if (dev->gso_max_segs ^ max_segs) { + dev->gso_max_segs = max_segs; + status |= DO_SETLINK_MODIFIED; + } + } + if (tb[IFLA_OPERSTATE]) set_operstate(dev, nla_get_u8(tb[IFLA_OPERSTATE])); -- 2.7.4