diff options
author | Laurent Vivier <lvivier@redhat.com> | 2025-01-24 20:07:41 +0100 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2025-01-24 21:40:05 +0100 |
commit | dd6a6854c73a09c4091c1776ee7f349d1e1f966c (patch) | |
tree | df71428472cb906e1cacdbc620d9ef0ad1d71177 | |
parent | d477a1fb03c5995d07e481b25dd94fc9e9bc02f2 (diff) | |
download | passt-dd6a6854c73a09c4091c1776ee7f349d1e1f966c.tar passt-dd6a6854c73a09c4091c1776ee7f349d1e1f966c.tar.gz passt-dd6a6854c73a09c4091c1776ee7f349d1e1f966c.tar.bz2 passt-dd6a6854c73a09c4091c1776ee7f349d1e1f966c.tar.lz passt-dd6a6854c73a09c4091c1776ee7f349d1e1f966c.tar.xz passt-dd6a6854c73a09c4091c1776ee7f349d1e1f966c.tar.zst passt-dd6a6854c73a09c4091c1776ee7f349d1e1f966c.zip |
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>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r-- | vhost_user.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/vhost_user.c b/vhost_user.c index f12dec5..6bf0dda 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); @@ -982,6 +983,32 @@ static bool vu_set_vring_enable_exec(struct vu_dev *vdev, } /** + * vu_set_send_rarp_exec() - vhost-user specification says: "Broadcast a fake + * RARP to notify the migration is terminated", + * but passt doesn't need to update any ARP table, + * so do nothing to silence QEMU bogus error message + * @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 for %s", + 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 * @fd: File descriptor to add @@ -1177,6 +1204,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, }; |