On 26.07.2023 20:58, Bobby Eshleman wrote: > On Sat, Jul 22, 2023 at 11:45:29AM +0300, Arseniy Krasnov wrote: >> >> >> On 19.07.2023 03:50, Bobby Eshleman wrote: >>> This commit implements datagram support for virtio/vsock by teaching >>> virtio to use the general virtio transport ->dgram_addr_init() function >>> and implementation a new version of ->dgram_allow(). >>> >>> Additionally, it drops virtio_transport_dgram_allow() as an exported >>> symbol because it is no longer used in other transports. >>> >>> Signed-off-by: Bobby Eshleman <bobby.eshleman@xxxxxxxxxxxxx> >>> --- >>> include/linux/virtio_vsock.h | 1 - >>> net/vmw_vsock/virtio_transport.c | 24 +++++++++++++++++++++++- >>> net/vmw_vsock/virtio_transport_common.c | 6 ------ >>> 3 files changed, 23 insertions(+), 8 deletions(-) >>> >>> diff --git a/include/linux/virtio_vsock.h b/include/linux/virtio_vsock.h >>> index b3856b8a42b3..d0a4f08b12c1 100644 >>> --- a/include/linux/virtio_vsock.h >>> +++ b/include/linux/virtio_vsock.h >>> @@ -211,7 +211,6 @@ void virtio_transport_notify_buffer_size(struct vsock_sock *vsk, u64 *val); >>> u64 virtio_transport_stream_rcvhiwat(struct vsock_sock *vsk); >>> bool virtio_transport_stream_is_active(struct vsock_sock *vsk); >>> bool virtio_transport_stream_allow(u32 cid, u32 port); >>> -bool virtio_transport_dgram_allow(u32 cid, u32 port); >>> void virtio_transport_dgram_addr_init(struct sk_buff *skb, >>> struct sockaddr_vm *addr); >>> >>> diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c >>> index ac2126c7dac5..713718861bd4 100644 >>> --- a/net/vmw_vsock/virtio_transport.c >>> +++ b/net/vmw_vsock/virtio_transport.c >>> @@ -63,6 +63,7 @@ struct virtio_vsock { >>> >>> u32 guest_cid; >>> bool seqpacket_allow; >>> + bool dgram_allow; >>> }; >>> >>> static u32 virtio_transport_get_local_cid(void) >>> @@ -413,6 +414,7 @@ static void virtio_vsock_rx_done(struct virtqueue *vq) >>> queue_work(virtio_vsock_workqueue, &vsock->rx_work); >>> } >>> >>> +static bool virtio_transport_dgram_allow(u32 cid, u32 port); >> >> May be add body here? Without prototyping? Same for loopback and vhost. >> > > Sounds okay with me, but this seems to go against the pattern > established by seqpacket. Any reason why? Stefano Garzarella <sgarzare@xxxxxxxxxx> commented my patch with the same approach: https://lore.kernel.org/netdev/lex6l5suez7azhirt22lidndtjomkbagfbpvvi5p7c2t7klzas@4l2qly7at37c/ Thanks, Arseniy > >>> static bool virtio_transport_seqpacket_allow(u32 remote_cid); >>> >>> static struct virtio_transport virtio_transport = { >>> @@ -430,6 +432,7 @@ static struct virtio_transport virtio_transport = { >>> >>> .dgram_enqueue = virtio_transport_dgram_enqueue, >>> .dgram_allow = virtio_transport_dgram_allow, >>> + .dgram_addr_init = virtio_transport_dgram_addr_init, >>> >>> .stream_dequeue = virtio_transport_stream_dequeue, >>> .stream_enqueue = virtio_transport_stream_enqueue, >>> @@ -462,6 +465,21 @@ static struct virtio_transport virtio_transport = { >>> .send_pkt = virtio_transport_send_pkt, >>> }; >>> >>> +static bool virtio_transport_dgram_allow(u32 cid, u32 port) >>> +{ >>> + struct virtio_vsock *vsock; >>> + bool dgram_allow; >>> + >>> + dgram_allow = false; >>> + rcu_read_lock(); >>> + vsock = rcu_dereference(the_virtio_vsock); >>> + if (vsock) >>> + dgram_allow = vsock->dgram_allow; >>> + rcu_read_unlock(); >>> + >>> + return dgram_allow; >>> +} >>> + >>> static bool virtio_transport_seqpacket_allow(u32 remote_cid) >>> { >>> struct virtio_vsock *vsock; >>> @@ -655,6 +673,9 @@ static int virtio_vsock_probe(struct virtio_device *vdev) >>> if (virtio_has_feature(vdev, VIRTIO_VSOCK_F_SEQPACKET)) >>> vsock->seqpacket_allow = true; >>> >>> + if (virtio_has_feature(vdev, VIRTIO_VSOCK_F_DGRAM)) >>> + vsock->dgram_allow = true; >>> + >>> vdev->priv = vsock; >>> >>> ret = virtio_vsock_vqs_init(vsock); >>> @@ -747,7 +768,8 @@ static struct virtio_device_id id_table[] = { >>> }; >>> >>> static unsigned int features[] = { >>> - VIRTIO_VSOCK_F_SEQPACKET >>> + VIRTIO_VSOCK_F_SEQPACKET, >>> + VIRTIO_VSOCK_F_DGRAM >>> }; >>> >>> static struct virtio_driver virtio_vsock_driver = { >>> diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c >>> index 96118e258097..77898f5325cd 100644 >>> --- a/net/vmw_vsock/virtio_transport_common.c >>> +++ b/net/vmw_vsock/virtio_transport_common.c >>> @@ -783,12 +783,6 @@ bool virtio_transport_stream_allow(u32 cid, u32 port) >>> } >>> EXPORT_SYMBOL_GPL(virtio_transport_stream_allow); >>> >>> -bool virtio_transport_dgram_allow(u32 cid, u32 port) >>> -{ >>> - return false; >>> -} >>> -EXPORT_SYMBOL_GPL(virtio_transport_dgram_allow); >>> - >>> int virtio_transport_connect(struct vsock_sock *vsk) >>> { >>> struct virtio_vsock_pkt_info info = { >>> >> >> Thanks, Arseniy > > Thanks, > Bobby