diff mbox series

[v7,1/4] vhost_vdpa : Add a new parameter to enable check mac address

Message ID 20250417102522.4125379-2-lulu@redhat.com (mailing list archive)
State New
Headers show
Series virtio_net: Add the check for vdpa's mac address | expand

Commit Message

Cindy Lu April 17, 2025, 10:24 a.m. UTC
When using a VDPA device, it's important to ensure that the MAC
address is correctly set.
This patch adds a new QEMU command line parameter to enable MAC
address verification,  which is enabled by default.

Usage example:
....
-netdev type=vhost-vdpa,vhostdev=/dev/vhost-vdpa-0,id=vhost-vdpa0,check-mac=true\
-device virtio-net-pci,netdev=vhost-vdpa0\
....
To disable this check:
....
-netdev type=vhost-vdpa,vhostdev=/dev/vhost-vdpa-0,id=vhost-vdpa0,check-mac=false\
-device virtio-net-pci,netdev=vhost-vdpa0\
....

Signed-off-by: Cindy Lu <lulu@redhat.com>
---
 include/net/net.h | 1 +
 net/vhost-vdpa.c  | 5 +++++
 qapi/net.json     | 5 +++++
 3 files changed, 11 insertions(+)

Comments

Lei Yang April 18, 2025, 2:23 a.m. UTC | #1
I tested this series of patches v7 with virtio-net regression tests,
everything works fine.

Tested-by: Lei Yang <leiyang@redhat.com>

On Thu, Apr 17, 2025 at 6:26 PM Cindy Lu <lulu@redhat.com> wrote:
>
> When using a VDPA device, it's important to ensure that the MAC
> address is correctly set.
> This patch adds a new QEMU command line parameter to enable MAC
> address verification,  which is enabled by default.
>
> Usage example:
> ....
> -netdev type=vhost-vdpa,vhostdev=/dev/vhost-vdpa-0,id=vhost-vdpa0,check-mac=true\
> -device virtio-net-pci,netdev=vhost-vdpa0\
> ....
> To disable this check:
> ....
> -netdev type=vhost-vdpa,vhostdev=/dev/vhost-vdpa-0,id=vhost-vdpa0,check-mac=false\
> -device virtio-net-pci,netdev=vhost-vdpa0\
> ....
>
> Signed-off-by: Cindy Lu <lulu@redhat.com>
> ---
>  include/net/net.h | 1 +
>  net/vhost-vdpa.c  | 5 +++++
>  qapi/net.json     | 5 +++++
>  3 files changed, 11 insertions(+)
>
> diff --git a/include/net/net.h b/include/net/net.h
> index cdd5b109b0..fac1951b6e 100644
> --- a/include/net/net.h
> +++ b/include/net/net.h
> @@ -112,6 +112,7 @@ struct NetClientState {
>      bool is_netdev;
>      bool do_not_pad; /* do not pad to the minimum ethernet frame length */
>      bool is_datapath;
> +    bool check_mac;
>      QTAILQ_HEAD(, NetFilterState) filters;
>  };
>
> diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
> index 7ca8b46eee..7dbe6cf65c 100644
> --- a/net/vhost-vdpa.c
> +++ b/net/vhost-vdpa.c
> @@ -1871,6 +1871,11 @@ int net_init_vhost_vdpa(const Netdev *netdev, const char *name,
>          if (!ncs[i])
>              goto err;
>      }
> +    /* Enable the mac check by default */
> +    if (opts->has_check_mac)
> +        ncs[0]->check_mac = opts->check_mac;
> +    else
> +        ncs[0]->check_mac = true;
>
>      if (has_cvq) {
>          VhostVDPAState *s0 = DO_UPCAST(VhostVDPAState, nc, ncs[0]);
> diff --git a/qapi/net.json b/qapi/net.json
> index 310cc4fd19..0607c83833 100644
> --- a/qapi/net.json
> +++ b/qapi/net.json
> @@ -510,6 +510,10 @@
>  # @queues: number of queues to be created for multiqueue vhost-vdpa
>  #     (default: 1)
>  #
> +# @check-mac: Enable the check for whether the device's MAC address
> +#     and the MAC in QEMU command line are acceptable for booting.
> +#     (default: true)
> +#
>  # @x-svq: Start device with (experimental) shadow virtqueue.  (Since
>  #     7.1) (default: false)
>  #
> @@ -524,6 +528,7 @@
>      '*vhostdev':     'str',
>      '*vhostfd':      'str',
>      '*queues':       'int',
> +    '*check-mac':    'bool',
>      '*x-svq':        {'type': 'bool', 'features' : [ 'unstable'] } } }
>
>  ##
> --
> 2.45.0
>
>
diff mbox series

Patch

diff --git a/include/net/net.h b/include/net/net.h
index cdd5b109b0..fac1951b6e 100644
--- a/include/net/net.h
+++ b/include/net/net.h
@@ -112,6 +112,7 @@  struct NetClientState {
     bool is_netdev;
     bool do_not_pad; /* do not pad to the minimum ethernet frame length */
     bool is_datapath;
+    bool check_mac;
     QTAILQ_HEAD(, NetFilterState) filters;
 };
 
diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
index 7ca8b46eee..7dbe6cf65c 100644
--- a/net/vhost-vdpa.c
+++ b/net/vhost-vdpa.c
@@ -1871,6 +1871,11 @@  int net_init_vhost_vdpa(const Netdev *netdev, const char *name,
         if (!ncs[i])
             goto err;
     }
+    /* Enable the mac check by default */
+    if (opts->has_check_mac)
+        ncs[0]->check_mac = opts->check_mac;
+    else
+        ncs[0]->check_mac = true;
 
     if (has_cvq) {
         VhostVDPAState *s0 = DO_UPCAST(VhostVDPAState, nc, ncs[0]);
diff --git a/qapi/net.json b/qapi/net.json
index 310cc4fd19..0607c83833 100644
--- a/qapi/net.json
+++ b/qapi/net.json
@@ -510,6 +510,10 @@ 
 # @queues: number of queues to be created for multiqueue vhost-vdpa
 #     (default: 1)
 #
+# @check-mac: Enable the check for whether the device's MAC address
+#     and the MAC in QEMU command line are acceptable for booting.
+#     (default: true)
+#
 # @x-svq: Start device with (experimental) shadow virtqueue.  (Since
 #     7.1) (default: false)
 #
@@ -524,6 +528,7 @@ 
     '*vhostdev':     'str',
     '*vhostfd':      'str',
     '*queues':       'int',
+    '*check-mac':    'bool',
     '*x-svq':        {'type': 'bool', 'features' : [ 'unstable'] } } }
 
 ##