From patchwork Wed Nov 8 22:06:20 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: 163175 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b129:0:b0:403:3b70:6f57 with SMTP id q9csp72281vqs; Wed, 8 Nov 2023 14:08:07 -0800 (PST) X-Google-Smtp-Source: AGHT+IHUOoHu8s6aZIx50V2HB6ugpwqwRqca1AHFFHIOk+oy3/3fNKQiu1B3zMP9ZynAQ1ZUrKq2 X-Received: by 2002:aa7:88d1:0:b0:6c3:69b9:44db with SMTP id k17-20020aa788d1000000b006c369b944dbmr2939097pff.22.1699481287087; Wed, 08 Nov 2023 14:08:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699481287; cv=none; d=google.com; s=arc-20160816; b=YsYEMPjU7Azaaz/KOoue2bGj1OeVcjRfyWMQXs2wBaT38Jj97jZKop9C6sEwi7TiGb vSMTqsNF90KsAhFaBqEndKTku3Ggft5nOOy2rbBO06Qq7oOS2EgYdu6lNy/k8d3aOwdA Yi7C5WriBFRvTuZ7paXCSUc7laBs83yH8MZtsvkPAAfqtL8phDT+lOJb92Lmc+n8ManD CHMuzFv/GvV7wg/dOptXK9+4HcuahEtrZCIqdfwZfoCHuNvWqRc6SanppmYTYoTFPLLv SfvcukxAhjqhHrFtPa5nUJI/LZWeVYQ/KyFpprZ491vjOUujmYYMkwFLfXTc4wu50o/3 46Ag== 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=9XdLVz2db7rfFcQe7ydvfN6yR+cFs5DgiBaH3dFhqe0=; fh=3JPFMrNsIuDanFY1RD/GwMR1715l2SJPmDW+zclM96o=; b=QEjX32cA1srJXdRcVTjbN9w7FmbEAujwhIg7yQiGIvTTWyouX1fT56AGsc4aIE39/r /G84LUvNryJyvK9+8sW6bXR2W87Qk+OdzEgN2lxKH9O6rX/AbIdrKmNjiCIR5IxNigzh not4OzJ0oXexGBhL5pzMlJXiyShSGNtmtjRkbx8tQKGvLUdmndS1dQld/6M3V8XGgCRz xPGzdk5GGFJR+2QCsTTObMVf14rUJJqFTXdFtTT30QlnLUitjLQqyvoRZKVwogTnYGjI tOye/7KrJlfYpywSmro5FGg/EvqZgS4aZWEqHRyZsxoHCThDhllwiJ3daiYObsWxGl9W y4XQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxonhyperv.com header.s=default header.b="q/0i7DvF"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 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 agentk.vger.email (agentk.vger.email. [2620:137:e000::3:2]) by mx.google.com with ESMTPS id ka11-20020a056a00938b00b006be1c26af7dsi14021564pfb.236.2023.11.08.14.08.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Nov 2023 14:08:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) client-ip=2620:137:e000::3:2; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxonhyperv.com header.s=default header.b="q/0i7DvF"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 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 agentk.vger.email (Postfix) with ESMTP id 8C01C819AD82; Wed, 8 Nov 2023 14:08:04 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230345AbjKHWGb (ORCPT + 32 others); Wed, 8 Nov 2023 17:06:31 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48786 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229460AbjKHWGa (ORCPT ); Wed, 8 Nov 2023 17:06:30 -0500 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 97B87B4; Wed, 8 Nov 2023 14:06:28 -0800 (PST) Received: by linux.microsoft.com (Postfix, from userid 1004) id 01F8A20B74C0; Wed, 8 Nov 2023 14:06:28 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 01F8A20B74C0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxonhyperv.com; s=default; t=1699481188; bh=9XdLVz2db7rfFcQe7ydvfN6yR+cFs5DgiBaH3dFhqe0=; h=From:To:Cc:Subject:Date:From; b=q/0i7DvFkAU9jaANRYw/QGHvJB7DnbNDBYo36YbgGK63T0kzWjXvLzcfJb4GIQV75 i7wj8+jahcnorcv+paMcpCAw3CxnIA/Q3rrVe+uTh97FBeZFrpQ0qTN7yley5gGPgi GQyiYntLZgG1P+tYyS3Cb+OkD3W3owBtSKC4ReA8= 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 v3] hv_netvsc: Mark VF as slave before exposing it to user-mode Date: Wed, 8 Nov 2023 14:06:20 -0800 Message-Id: <1699481180-17511-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 (agentk.vger.email [0.0.0.0]); Wed, 08 Nov 2023 14:08:04 -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 agentk.vger.email X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1782035289673543591 X-GMAIL-MSGID: 1782035289673543591 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. 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: