From patchwork Tue Feb 19 01:51:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chris Mi X-Patchwork-Id: 1044394 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=mellanox.com 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 443Nyd6bB4z9sMl for ; Tue, 19 Feb 2019 12:52:09 +1100 (AEDT) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id C463CD53; Tue, 19 Feb 2019 01:52:05 +0000 (UTC) X-Original-To: ovs-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 BB18BD4C for ; Tue, 19 Feb 2019 01:51:50 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by smtp1.linuxfoundation.org (Postfix) with ESMTP id C935F108 for ; Tue, 19 Feb 2019 01:51:49 +0000 (UTC) Received: from Internal Mail-Server by MTLPINE1 (envelope-from chrism@mellanox.com) with ESMTPS (AES256-SHA encrypted); 19 Feb 2019 03:51:48 +0200 Received: from dev-r630-04.mtbc.labs.mlnx (dev-r630-04.mtbc.labs.mlnx [10.12.205.14]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id x1J1pkJY014665; Tue, 19 Feb 2019 03:51:47 +0200 From: Chris Mi To: ovs-dev@openvswitch.org Date: Tue, 19 Feb 2019 10:51:40 +0900 Message-Id: <20190219015140.6755-1-chrism@mellanox.com> X-Mailer: git-send-email 2.14.4 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: simon.horman@netronome.com Subject: [ovs-dev] [PATCH] netdev-vport: Use the vxlan dst_port in netdev name 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 If vxlan dst_port is not default 4789, "ovs-dpctl dump-flows" will fail. The error message is: netdev_linux|INFO|ioctl(SIOCGIFINDEX) on vxlan_sys_4789 device failed: No such device That's because when calling netdev_vport_construct() for netdev vxlan_sys_xxxx, the default dst_port is used. Actually, the dst_port value is in the name of the netdev. Use it to avoid the error. Signed-off-by: Chris Mi --- v1 == Any comment about this patch? We are not sure if it is correct to verify the port from the name. If it is correct, is it applicable for other tunnels? Thanks! lib/netdev-vport.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c index 808a43f99..be68fad1a 100644 --- a/lib/netdev-vport.c +++ b/lib/netdev-vport.c @@ -189,17 +189,28 @@ netdev_vport_alloc(void) int netdev_vport_construct(struct netdev *netdev_) { + const struct netdev_class *class = netdev_get_class(netdev_); + const char *dpif_port = netdev_vport_class_get_dpif_port(class); struct netdev_vport *dev = netdev_vport_cast(netdev_); const char *type = netdev_get_type(netdev_); ovs_mutex_init(&dev->mutex); eth_addr_random(&dev->etheraddr); - /* Add a default destination port for tunnel ports if none specified. */ + /* Add a default destination port for tunnel ports if none specified. + * For vxlan, the dst_port is in the netdev name when creating it, so + * use it instead of the default one */ if (!strcmp(type, "geneve")) { dev->tnl_cfg.dst_port = htons(GENEVE_DST_PORT); } else if (!strcmp(type, "vxlan")) { - dev->tnl_cfg.dst_port = htons(VXLAN_DST_PORT); + const char *p, *name = netdev_->name; + uint16_t port = VXLAN_DST_PORT; + + if (!strncmp(name, dpif_port, strlen(dpif_port))) { + p = name + strlen(dpif_port) + 1; + port = atoi(p); + } + dev->tnl_cfg.dst_port = htons(port); update_vxlan_global_cfg(netdev_, NULL, &dev->tnl_cfg); } else if (!strcmp(type, "lisp")) { dev->tnl_cfg.dst_port = htons(LISP_DST_PORT);