From patchwork Wed Nov 8 22:56:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: longli@linuxonhyperv.com X-Patchwork-Id: 163176 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b129:0:b0:403:3b70:6f57 with SMTP id q9csp94135vqs; Wed, 8 Nov 2023 14:57:51 -0800 (PST) X-Google-Smtp-Source: AGHT+IHwML/XjAlPgMmysjigK6oHzOzZKyk9aWdN7g5IUDRr3ZIRIsxwxrmFk8cI5ybQ/UmKvQTx X-Received: by 2002:a17:902:d486:b0:1cc:87f8:96b6 with SMTP id c6-20020a170902d48600b001cc87f896b6mr4023745plg.66.1699484270777; Wed, 08 Nov 2023 14:57:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699484270; cv=none; d=google.com; s=arc-20160816; b=UepzB7RfuvDAloMd/z+IY51d42OH9LztANVpIKG/cOINDMwGVXUs7DDulF8vcyts7s oBEULv4BhkD2zaVBZUlDPcvtYG6FUglx5fcbL0zRIzws72KFWgn+FS+sKvMVK/viokIT D7jAeFpjnTTBTKKFXUrVyJwyyZn30wAO0bO88K7Dmtrj052qSWI77fLgrQtgRIOOTSdk zOLp+Fe1o7MfuUx86fJiaXgId0ffNNdfpaPy3Ruhpo0AUB3VYQHia1xSqofbIi7ZoCEG YBNX0DSqqgf3g3f479z/BzrIA21FVXgOlkK+nVtWmpbkvjfhHTXD4y3fjSLBII7XA4J+ fjlA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:cc:to:from :dkim-signature:dkim-filter; bh=7KYB4AGHIgeUyjEG3r33fMLYHpsuUr24nqIpPaxvALs=; fh=3JPFMrNsIuDanFY1RD/GwMR1715l2SJPmDW+zclM96o=; b=TgcTLhzpmlZwxYwkcZSk/lwU6binSuhDWbhW8gx5RZKCyZNd41pvJBmZ7NVWFyHNny hRv46xP1EpyDlT+wIW0Dl4Mtzb62OBPNg8DeE3FU5dfWUhWdTg+iP5iqY0GLB/iezRCD IPtwsy5VtAKMWrrbRHv5N7f9SEsFRFvsUp9I+5qZCGoMecJWfHRS6NYRmTe+7l9pqFdw TrRp1ZAf2FeJn+h0gRMFcADfXcuOV8YqC64nods39k/ErcN8Gyu0j9AfLYATEpLXOWGS 9JKa/w/3/FKAZYmWo3pj94dJvL5QjqGIxd8rlxTFwukBN3R/ReeOmJMMec8yq3Tr7hnK MACQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxonhyperv.com header.s=default header.b=gmeLGiqv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxonhyperv.com Received: from lipwig.vger.email (lipwig.vger.email. [23.128.96.33]) by mx.google.com with ESMTPS id q3-20020a17090311c300b001c46467a211si3449432plh.193.2023.11.08.14.57.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Nov 2023 14:57:50 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) client-ip=23.128.96.33; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxonhyperv.com header.s=default header.b=gmeLGiqv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxonhyperv.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 9CB4C8088A4D; Wed, 8 Nov 2023 14:57:34 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230433AbjKHW5F (ORCPT + 32 others); Wed, 8 Nov 2023 17:57:05 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34688 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229565AbjKHW5E (ORCPT ); Wed, 8 Nov 2023 17:57:04 -0500 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 15CDD2593; Wed, 8 Nov 2023 14:57:02 -0800 (PST) Received: by linux.microsoft.com (Postfix, from userid 1004) id 7869120B74C0; Wed, 8 Nov 2023 14:57:01 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 7869120B74C0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxonhyperv.com; s=default; t=1699484221; bh=7KYB4AGHIgeUyjEG3r33fMLYHpsuUr24nqIpPaxvALs=; h=From:To:Cc:Subject:Date:From; b=gmeLGiqvhMbZMueKyf0oZCuXCNcMPao+Y5KJTtTUBNXAMeus2JyaCLqJCmxtbhl+a Z6zVoiq70QfWZeOqFrj7qvAbSrRGn95H3lxjcIFrI6RN+/rWsX10ALLVxBXsj3Zkji 9HjAqZFCeNKWJ1o5oVINYSAxbRUvmzU+GNyiv/jY= From: longli@linuxonhyperv.com To: "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-hyperv@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Long Li Subject: [PATCH net-next v4] hv_netvsc: Mark VF as slave before exposing it to user-mode Date: Wed, 8 Nov 2023 14:56:52 -0800 Message-Id: <1699484212-24079-1-git-send-email-longli@linuxonhyperv.com> X-Mailer: git-send-email 1.8.3.1 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Wed, 08 Nov 2023 14:57:34 -0800 (PST) X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1782035289673543591 X-GMAIL-MSGID: 1782038418556372044 From: Long Li When a VF is being exposed form the kernel, it should be marked as "slave" before exposing to the user-mode. The VF is not usable without netvsc running as master. The user-mode should never see a VF without the "slave" flag. An example of a user-mode program depending on this flag is cloud-init (https://github.com/canonical/cloud-init/blob/19.3/cloudinit/net/__init__.py) When scanning interfaces, it checks on if this interface has a master to decide if it should be configured. There are other user-mode programs perform similar checks. This commit moves the code of setting the slave flag to the time before VF is exposed to user-mode. Signed-off-by: Long Li --- Change since v1: Use a new function to handle NETDEV_POST_INIT. Change since v2: Add "net" in subject. Add more details on the user-mode program behavior. Change since v3: Change target to net-next. drivers/net/hyperv/netvsc_drv.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c index ec77fb9dcf89..fdad58dcc6a8 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@ -2206,9 +2206,6 @@ static int netvsc_vf_join(struct net_device *vf_netdev, goto upper_link_failed; } - /* set slave flag before open to prevent IPv6 addrconf */ - vf_netdev->flags |= IFF_SLAVE; - schedule_delayed_work(&ndev_ctx->vf_takeover, VF_TAKEOVER_INT); call_netdevice_notifiers(NETDEV_JOIN, vf_netdev); @@ -2320,11 +2317,9 @@ static struct net_device *get_netvsc_byslot(const struct net_device *vf_netdev) */ list_for_each_entry(ndev_ctx, &netvsc_dev_list, list) { ndev = hv_get_drvdata(ndev_ctx->device_ctx); - if (ether_addr_equal(vf_netdev->perm_addr, ndev->perm_addr)) { - netdev_notice(vf_netdev, - "falling back to mac addr based matching\n"); + if (ether_addr_equal(vf_netdev->perm_addr, ndev->perm_addr) || + ether_addr_equal(vf_netdev->dev_addr, ndev->perm_addr)) return ndev; - } } netdev_notice(vf_netdev, @@ -2332,6 +2327,19 @@ static struct net_device *get_netvsc_byslot(const struct net_device *vf_netdev) return NULL; } +static int netvsc_prepare_slave(struct net_device *vf_netdev) +{ + struct net_device *ndev; + + ndev = get_netvsc_byslot(vf_netdev); + if (!ndev) + return NOTIFY_DONE; + + /* set slave flag before open to prevent IPv6 addrconf */ + vf_netdev->flags |= IFF_SLAVE; + return NOTIFY_DONE; +} + static int netvsc_register_vf(struct net_device *vf_netdev) { struct net_device_context *net_device_ctx; @@ -2753,6 +2761,8 @@ static int netvsc_netdev_event(struct notifier_block *this, return NOTIFY_DONE; switch (event) { + case NETDEV_POST_INIT: + return netvsc_prepare_slave(event_dev); case NETDEV_REGISTER: return netvsc_register_vf(event_dev); case NETDEV_UNREGISTER: