From patchwork Thu Apr 12 12:52:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tonghao Zhang X-Patchwork-Id: 897657 X-Patchwork-Delegate: ian.stokes@intel.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="lKgRr4m4"; dkim-atps=neutral Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40MLXF3FLgz9s2M for ; Thu, 12 Apr 2018 22:57:01 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 412EFDBC; Thu, 12 Apr 2018 12:53:16 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id ADE85D7C for ; Thu, 12 Apr 2018 12:53:13 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-pl0-f68.google.com (mail-pl0-f68.google.com [209.85.160.68]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 4C109670 for ; Thu, 12 Apr 2018 12:53:13 +0000 (UTC) Received: by mail-pl0-f68.google.com with SMTP id x4-v6so3854158pln.7 for ; Thu, 12 Apr 2018 05:53:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=UeP0VIRhfamlDnLKirqZCVeNEOn3zcO9CtM/8mdi6Lg=; b=lKgRr4m4VDUbJeJuV+HpR88usbTWdNlx7oCDJUtdQUjLySFU9MI1nHH7ysIMlfQtfk 6K23hwx68hRCWbYHE8V2kxG5FQvb80/f1GVVstj5Vi4cuNjg00/oq2MHlHLbT8sqv14y Zt1VqENqXis1yLgI+k/hXG4to9HduOOiY8sMDyoeQ41Yo+P/i9AgHUAysci/r+pUZmCM +I8Cvg3tS9Rt5LcJDtsoJvgHwfALvsMzGbvnI+C0cw8H+HVfb6ErNauCSR3RVxhysFeZ 8NMeaskJ0Znvuq/N8BMI3dbp14VK9hDoZYCYX8M56JVUacQjuboNTEeSNULfMBbLu834 as7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=UeP0VIRhfamlDnLKirqZCVeNEOn3zcO9CtM/8mdi6Lg=; b=nc7p6vQ4ufyZ5CLO0Wd2F+H6VWUZj/FofA3QTFGbtb8k2cy6Rz2v/EBvjUV4Ns65HP jUCMEJklj3wveeQhAPvAYw9LuCfFLCsIz8OFL/fWSTohVWPAFcd3rbkK+viXhBxJvTJK /pLjU5MYJt+7wBPanaTd3sh7cVA5RsHzS3dCUAZbFTgi4NIZPakQVWnV/Do1W0iSaFAK vamCQqRDX8P3okc/0wqt7WAgDaCRHJiSFfEgbiRGTmzx9mX0La0B4JUYGAHRC+lShQ/7 pcb7ImTXrExzfDT9Fi8sqFJn/+N4ksT3bVyMEIUfMWUOUFKSGGe7+2nNvZpJ8BXsb8jS EC6g== X-Gm-Message-State: ALQs6tBmNsWPG8cZeIddCSopONsZW+cfsVC6Wa8EZz/7B+Xorcsz/Jag +wqWIUQCNhrTrhOpwbyGzjKt+z/v X-Google-Smtp-Source: AIpwx4/bTWiANlsMS9xs6hIF6Uu5M1dAG//0QWsBTFW8gZ4GXiokjEAEJFUgef3cVOzSIjkL6sm6bw== X-Received: by 2002:a17:902:bd8e:: with SMTP id q14-v6mr905095pls.322.1523537592896; Thu, 12 Apr 2018 05:53:12 -0700 (PDT) Received: from local.opencloud.tech.localdomain ([52.229.160.192]) by smtp.gmail.com with ESMTPSA id x17sm7009505pfm.161.2018.04.12.05.53.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 12 Apr 2018 05:53:12 -0700 (PDT) From: xiangxia.m.yue@gmail.com To: dev@openvswitch.org Date: Thu, 12 Apr 2018 05:52:52 -0700 Message-Id: <1523537572-2595-7-git-send-email-xiangxia.m.yue@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1523537572-2595-1-git-send-email-xiangxia.m.yue@gmail.com> References: <1523537572-2595-1-git-send-email-xiangxia.m.yue@gmail.com> X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Subject: [ovs-dev] [PATCH net-next 6/6] netdev-dpdk: Add dpdk-bond mode setting X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org From: Tonghao Zhang This patch allows users to set the dpdk-bond mode, such as round_robin, active_backup and balance and so on. ovs-vsctl add-port br0 dpdk0 -- \ set Interface dpdk0 type=dpdk \ options:dpdk-devargs=0000:06:00.0,0000:06:00.1 \ options:dpdkbond-mode=alb Signed-off-by: Tonghao Zhang --- lib/netdev-dpdk.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 76 insertions(+), 1 deletion(-) diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 4ef7d9f..a951d5d 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -150,6 +150,8 @@ static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20); for (int i = 0; i < DPDK_BOND_SLAVE_MAX && \ SLAVES[i] != DPDK_ETH_PORT_ID_INVALID; i++) +#define DIM(a) (sizeof (a) / sizeof ((a)[0])) + /* DPDK library uses uint16_t for port_id. */ typedef uint16_t dpdk_port_t; #define DPDK_PORT_ID_FMT "%"PRIu16 @@ -348,7 +350,8 @@ enum dpdk_bond_mode { MODE_BROADCAST = BONDING_MODE_BROADCAST, MODE_8023AD = BONDING_MODE_8023AD, MODE_TLB = BONDING_MODE_TLB, - MODE_ALB = BONDING_MODE_ALB + MODE_ALB = BONDING_MODE_ALB, + MODE_INVALID, }; struct netdev_dpdk_bond { @@ -1536,6 +1539,75 @@ netdev_dpdk_bond_name_key(char *key, dpdk_port_t *rs) return key; } +static uint8_t +netdev_dpdk_bond_mode_parse(const char *mode) +{ + static struct { + const char *name; + enum dpdk_bond_mode mode; + } map[] = { + { "round_robin", MODE_ROUND_ROBIN }, + { "active_backup", MODE_ACTIVE_BACKUP}, + { "balance", MODE_BALANCE }, + { "broadcast", MODE_BROADCAST }, + { "8023ad", MODE_8023AD }, + { "tlb", MODE_TLB }, + { "alb", MODE_ALB }, + }; + + for (int i = 0; i < DIM(map); i++) { + if(!strcasecmp(mode, map[i].name)) { + return map[i].mode; + } + } + + return MODE_INVALID; +} + +static void +netdev_dpdk_bond_mode_set(struct netdev_dpdk *dev, const char *mode) +{ + uint8_t bond_mode; + + bond_mode = netdev_dpdk_bond_mode_parse(mode); + if (bond_mode != MODE_INVALID && + bond_mode == dev->bond->mode) { + return; + } + + if (bond_mode == MODE_INVALID) { + VLOG_WARN_ONCE("The dpdk-bond (%s) mode (%s) is invalid, " + "do not change current mode.", + dev->up.name, + mode); + return; + } + + if (rte_eth_bond_mode_set(dev->port_id, bond_mode)) { + VLOG_WARN_ONCE("Set %s the dpdk-bond mode failed.\n", + dev->up.name); + return; + } + + dev->bond->mode = bond_mode; +} + +static bool +netdev_dpdk_bond_is_active(struct netdev_dpdk *dev) +{ + return dev->bond->name && dev->bond->name[0]; +} + +static void +netdev_dpdk_bond_args_set(struct netdev_dpdk *dev, const struct smap *args) +{ + if (!netdev_dpdk_bond_is_active(dev)) { + return; + } + + netdev_dpdk_bond_mode_set(dev, smap_get(args, "dpdkbond-mode")); +} + /* Try to parse devargs as dpdk-bond device. If success, * create a bond device and add slave ports to it. And the * bond devcie id will be set to dev->port_id as a normal @@ -1732,6 +1804,9 @@ netdev_dpdk_set_config(struct netdev *netdev, const struct smap *args, } } } + + netdev_dpdk_bond_args_set(dev, args); + } else { VLOG_WARN_BUF(errp, "'%s' is missing 'options:dpdk-devargs'. " "The old 'dpdk' names are not supported",