From nobody Thu Apr 3 11:28:42 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1742995317; cv=none; d=zohomail.com; s=zohoarc; b=ds95ZKC592ncsaw2q/68/2Hf+8OUm7XWg1yiiSWRI2S6S1QzYnFKxukdlb0T/NkhrSlznef5LWZcb+IXHcaV6wDdK+1sB80sRrW86+uZyyx+aubYVxbd1EVcNCmREi1cDP9vquxA1dVx6BBRBmknkProYN3jl1EjxiPefpho+ro= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1742995317; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=8GMDLKVArVG1fcUKB+sYhePHWyGMH2kXaND/YejbAJk=; b=LoZFT9bLNQL4Fxu/j7QWikfB9dDmjMq8ShqQrmFWFF7G47n++/+88Yy8w4FvQ0lvm3xmeQQgb3OCobbgvlGg8y1eR1X18YeewJlYe3s1xAsH0wTjXI9O5g2ofJk0J9h0AweqbCXhN2ix69bC1RfZqVJqhYiquAi5/DvYehawtsI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1742995317626571.8677603588202; Wed, 26 Mar 2025 06:21:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1txQgd-0008RR-4i; Wed, 26 Mar 2025 09:20:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1txQgb-0008Q6-Rw for qemu-devel@nongnu.org; Wed, 26 Mar 2025 09:20:49 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1txQga-00070C-9x for qemu-devel@nongnu.org; Wed, 26 Mar 2025 09:20:49 -0400 Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-601-QOmdSMj9MRGnkoL5bA0uGg-1; Wed, 26 Mar 2025 09:20:45 -0400 Received: from mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.15]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 7ECA71933B48 for ; Wed, 26 Mar 2025 13:20:43 +0000 (UTC) Received: from server.redhat.com (unknown [10.72.112.11]) by mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id AAE041956095; Wed, 26 Mar 2025 13:20:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742995246; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=8GMDLKVArVG1fcUKB+sYhePHWyGMH2kXaND/YejbAJk=; b=NEkNQd2TypKyALkUuC3JHfhk4y2Gxm8Qrza/zL32WbS1f+tKxhvd3IKMqaf6GdZZ8aQp3t bMSrfOm4532DuLqrO43f8EMJ2gNZg+70fExd3cQDurHyWRhYOSkaHYZCP6hoaVPvTBCcug y4Ctb903d/KlaI0jw93et1FiB2E8+n8= X-MC-Unique: QOmdSMj9MRGnkoL5bA0uGg-1 X-Mimecast-MFC-AGG-ID: QOmdSMj9MRGnkoL5bA0uGg_1742995244 From: Cindy Lu To: lulu@redhat.com, mst@redhat.com, jasowang@redhat.com, qemu-devel@nongnu.org Subject: [PATCH v5 2/4] virtio_net: Add the check for vdpa's mac address Date: Wed, 26 Mar 2025 21:19:31 +0800 Message-ID: <20250326132021.1215568-3-lulu@redhat.com> In-Reply-To: <20250326132021.1215568-1-lulu@redhat.com> References: <20250326132021.1215568-1-lulu@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.15 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=lulu@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1742995319672019000 Content-Type: text/plain; charset="utf-8" When using a VDPA device, it is important to ensure that the MAC address is correctly set. The MAC address in the hardware should match the MAC address from the QEMU command line. This is a recommended configuration and will allow the system to boot. Signed-off-by: Cindy Lu Tested-by: Lei Yang --- hw/net/virtio-net.c | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index de87cfadff..a3b431e000 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -3749,12 +3749,43 @@ static bool failover_hide_primary_device(DeviceList= ener *listener, /* failover_primary_hidden is set during feature negotiation */ return qatomic_read(&n->failover_primary_hidden); } +static bool virtio_net_check_vdpa_mac(NetClientState *nc, VirtIONet *n, + MACAddr *cmdline_mac, Error **errp) +{ + struct virtio_net_config hwcfg =3D {}; + static const MACAddr zero =3D { .a =3D { 0, 0, 0, 0, 0, 0 } }; + + vhost_net_get_config(get_vhost_net(nc->peer), (uint8_t *)&hwcfg, ETH_A= LEN); + + /*For VDPA device following situations are acceptable:*/ + + if (memcmp(&hwcfg.mac, &zero, sizeof(MACAddr)) !=3D 0) { + /* + * 1.The hardware MAC address is the same as the QEMU command line= MAC + * address, and both of them are not 0. + */ + if ((memcmp(&hwcfg.mac, cmdline_mac, sizeof(MACAddr)) =3D=3D 0)) { + return true; + } + } =20 + error_setg(errp, + "vDPA device's mac %02x:%02x:%02x:%02x:%02x:%02x" + "not same with the cmdline's mac %02x:%02x:%02x:%02x:%02x:%= 02x," + "Please check.", + hwcfg.mac[0], hwcfg.mac[1], hwcfg.mac[2], hwcfg.mac[3], + hwcfg.mac[4], hwcfg.mac[5], cmdline_mac->a[0], cmdline_mac-= >a[1], + cmdline_mac->a[2], cmdline_mac->a[3], cmdline_mac->a[4], + cmdline_mac->a[5]); + + return false; +} static void virtio_net_device_realize(DeviceState *dev, Error **errp) { VirtIODevice *vdev =3D VIRTIO_DEVICE(dev); VirtIONet *n =3D VIRTIO_NET(dev); NetClientState *nc; + MACAddr macaddr_cmdline; int i; =20 if (n->net_conf.mtu) { @@ -3862,6 +3893,7 @@ static void virtio_net_device_realize(DeviceState *de= v, Error **errp) virtio_net_add_queue(n, 0); =20 n->ctrl_vq =3D virtio_add_queue(vdev, 64, virtio_net_handle_ctrl); + memcpy(&macaddr_cmdline, &n->nic_conf.macaddr, sizeof(n->mac)); qemu_macaddr_default_if_unset(&n->nic_conf.macaddr); memcpy(&n->mac[0], &n->nic_conf.macaddr, sizeof(n->mac)); n->status =3D VIRTIO_NET_S_LINK_UP; @@ -3908,7 +3940,13 @@ static void virtio_net_device_realize(DeviceState *d= ev, Error **errp) nc =3D qemu_get_queue(n->nic); nc->rxfilter_notify_enabled =3D 1; =20 - if (nc->peer && nc->peer->info->type =3D=3D NET_CLIENT_DRIVER_VHOST_VDP= A) { + if (nc->peer && (nc->peer->info->type =3D=3D NET_CLIENT_DRIVER_VHOST_V= DPA)) { + if (nc->peer->check_mac) { + if (!virtio_net_check_vdpa_mac(nc, n, &macaddr_cmdline, errp))= { + virtio_cleanup(vdev); + return; + } + } struct virtio_net_config netcfg =3D {}; memcpy(&netcfg.mac, &n->nic_conf.macaddr, ETH_ALEN); vhost_net_set_config(get_vhost_net(nc->peer), --=20 2.45.0