From: Laurent Vivier <lvivier@redhat.com>
To: Stefano Brivio <sbrivio@redhat.com>
Cc: passt-dev@passt.top
Subject: Re: [PATCH] vhost-user: Implement an empty VHOST_USER_SEND_RARP command
Date: Fri, 24 Jan 2025 19:50:57 +0100 [thread overview]
Message-ID: <e847bbf3-af27-46eb-af53-040ad4dad9dd@redhat.com> (raw)
In-Reply-To: <20250124194016.4c26375c@elisabeth>
On 24/01/2025 19:40, Stefano Brivio wrote:
> On Fri, 24 Jan 2025 19:35:33 +0100
> Laurent Vivier <lvivier@redhat.com> wrote:
>
>> On 24/01/2025 17:10, Stefano Brivio wrote:
>>> On Fri, 24 Jan 2025 15:21:37 +0100
>>> Laurent Vivier <lvivier@redhat.com> wrote:
>>>
>>>> Passt cannot manage and doesn't need to manage the broadcast of a fake RARP,
>>>> but QEMU will report an error message if Passt doesn't implement it.
>>>>
>>>> Implement an empty SEND_RARP command to silence QEMU error message.
>>>>
>>>> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
>>>> ---
>>>> vhost_user.c | 28 +++++++++++++++++++++++++++-
>>>> 1 file changed, 27 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/vhost_user.c b/vhost_user.c
>>>> index f12dec5ddc58..e6633ae75ce8 100644
>>>> --- a/vhost_user.c
>>>> +++ b/vhost_user.c
>>>> @@ -914,7 +914,8 @@ static bool vu_get_protocol_features_exec(struct vu_dev *vdev,
>>>> {
>>>> uint64_t features = 1ULL << VHOST_USER_PROTOCOL_F_REPLY_ACK |
>>>> 1ULL << VHOST_USER_PROTOCOL_F_LOG_SHMFD |
>>>> - 1ULL << VHOST_USER_PROTOCOL_F_DEVICE_STATE;
>>>> + 1ULL << VHOST_USER_PROTOCOL_F_DEVICE_STATE |
>>>> + 1ULL << VHOST_USER_PROTOCOL_F_RARP;
>>>>
>>>> (void)vdev;
>>>> vmsg_set_reply_u64(msg, features);
>>>> @@ -981,6 +982,30 @@ static bool vu_set_vring_enable_exec(struct vu_dev *vdev,
>>>> return false;
>>>> }
>>>>
>>>> +/**
>>>> + * vu_set_send_rarp_exec() - Broadcast a fake RARP to notify the migration
>>>> + * is terminated
>>>
>>> Fine, so we need to add this.
>>>
>>> But can we at least make it clear for our future benefit? That is,
>>> there's no such thing as "fake RARP". The only thing that's actually
>>> fake here is this callback. For others, see thread at:
>>>
>>> https://lore.kernel.org/qemu-devel/20250121100029.1106973-1-lvivier@redhat.com/
>>>
>>> What about "Do nothing to silence QEMU bogus error message"? Claiming
>>> we are broadcasting a RARP message and not doing it is... confusing.
>>
>> I think it's interesting to have this comment as it comes from the vhost-user
>> specification as it describes the aim of the command, and we can add something like "but
>> as passt don't need to update any ARP table we do nothing only to silence QEMU bogus error
>> message".
>
> Eh, if we're already making it verbose, maybe we can go with something
> like:
>
> vhost-user specification says: "Broadcast ...", but passt ...
As you prefer...
If you want you can update the patch when you commit it.
>
>>>> + * @vdev: vhost-user device
>>>> + * @vmsg: vhost-user message
>>>> + *
>>>> + * Return: False as no reply is requested
>>>> + */
>>>> +static bool vu_send_rarp_exec(struct vu_dev *vdev,
>>>> + struct vhost_user_msg *msg)
>>>> +{
>>>> + char macstr[ETH_ADDRSTRLEN];
>>>> +
>>>> + (void)vdev;
>>>> +
>>>> + /* ignore the command */
>>>> +
>>>> + debug("Ignore command VHOST_USER_SEND_RARP from %s",
>>>
>>> This is also a bit confusing, but I'm not sure I got it right.
>>>
>>> We don't actually get any message *from* the guest, correct? We get a
>>> message from QEMU telling us we should send a RARP broadcast *for* a
>>> given MAC address...? If I got it right, s/from/for/?
>>
>> Yes, you're right.
>> The purpose of this debug message was to identify for :) which interface QEMU wants this
>> broadcast.
>>
>>>
>>>> + eth_ntop((unsigned char *)&msg->payload.u64, macstr,
>>>> + sizeof(macstr)));
>>>> +
>>>> + return false;
>>>> +}
>>>> +
>>>> /**
>>>> * vu_set_migration_watch() - Add the migration file descriptor to epoll
>>>> * @vdev: vhost-user device
>>>> @@ -1177,6 +1202,7 @@ static bool (*vu_handle[VHOST_USER_MAX])(struct vu_dev *vdev,
>>>> [VHOST_USER_SET_VRING_CALL] = vu_set_vring_call_exec,
>>>> [VHOST_USER_SET_VRING_ERR] = vu_set_vring_err_exec,
>>>> [VHOST_USER_SET_VRING_ENABLE] = vu_set_vring_enable_exec,
>>>> + [VHOST_USER_SEND_RARP] = vu_send_rarp_exec,
>>>> [VHOST_USER_SET_DEVICE_STATE_FD] = vu_set_device_state_fd_exec,
>>>> [VHOST_USER_CHECK_DEVICE_STATE] = vu_check_device_state_exec,
>>>> };
>
Thanks,
Laurent
next prev parent reply other threads:[~2025-01-24 18:51 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-24 14:21 [PATCH] vhost-user: Implement an empty VHOST_USER_SEND_RARP command Laurent Vivier
2025-01-24 16:10 ` Stefano Brivio
2025-01-24 18:35 ` Laurent Vivier
2025-01-24 18:40 ` Stefano Brivio
2025-01-24 18:50 ` Laurent Vivier [this message]
2025-01-24 18:57 ` Stefano Brivio
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e847bbf3-af27-46eb-af53-040ad4dad9dd@redhat.com \
--to=lvivier@redhat.com \
--cc=passt-dev@passt.top \
--cc=sbrivio@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://passt.top/passt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).