1
- From cea879931c45169784b8b2301ae02ee45c4aa20d Mon Sep 17 00:00:00 2001
1
+ From b103d01ce2eccd9b73f3db15674137b259f02ec4 Mon Sep 17 00:00:00 2001
2
2
From: Bobby Eshleman <bobby.eshleman () bytedance ! com>
3
3
Date: Sat, 10 Jun 2023 00:58:33 +0000
4
4
Subject: [PATCH 08/20] virtio/vsock: support dgrams
@@ -345,7 +345,7 @@ index 4e138ad3c113..3dd63dc8f6b7 100644
345
345
346
346
static struct virtio_driver virtio_vsock_driver = {
347
347
diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
348
- index 0b2f6c211544..7ff2d3a44dc2 100644
348
+ index 456dfa74c642..2908af557aa0 100644
349
349
--- a/net/vmw_vsock/virtio_transport_common.c
350
350
+++ b/net/vmw_vsock/virtio_transport_common.c
351
351
@@ -37,6 +37,35 @@ virtio_transport_get_ops(struct vsock_sock *vsk)
@@ -475,23 +475,23 @@ index 0b2f6c211544..7ff2d3a44dc2 100644
475
475
+ EXPORT_SYMBOL_GPL(virtio_transport_dgram_get_cid);
476
476
+
477
477
+ int virtio_transport_dgram_get_port(struct sk_buff *skb, unsigned int *port)
478
- + {
478
+ {
479
+ - return -EOPNOTSUPP;
479
480
+ *port = le32_to_cpu(virtio_vsock_hdr(skb)->src_port);
480
481
+ return 0;
481
- + }
482
+ }
483
+ - EXPORT_SYMBOL_GPL(virtio_transport_dgram_dequeue);
482
484
+ EXPORT_SYMBOL_GPL(virtio_transport_dgram_get_port);
483
485
+
484
486
+ int virtio_transport_dgram_get_length(struct sk_buff *skb, size_t *len)
485
- {
486
- - return -EOPNOTSUPP;
487
+ + {
487
488
+ /* The device layer must have already moved the data ptr beyond the
488
489
+ * header for skb->len to be correct.
489
490
+ */
490
491
+ WARN_ON(skb->data == skb->head);
491
492
+ *len = skb->len;
492
493
+ return 0;
493
- }
494
- - EXPORT_SYMBOL_GPL(virtio_transport_dgram_dequeue);
494
+ + }
495
495
+ EXPORT_SYMBOL_GPL(virtio_transport_dgram_get_length);
496
496
497
497
s64 virtio_transport_stream_has_data(struct vsock_sock *vsk)
@@ -563,15 +563,15 @@ index 0b2f6c211544..7ff2d3a44dc2 100644
563
563
}
564
564
EXPORT_SYMBOL_GPL(virtio_transport_dgram_enqueue);
565
565
566
- @@ -966 ,6 +1030 ,7 @@ static int virtio_transport_reset_no_sock(const struct virtio_transport *t,
566
+ @@ -967 ,6 +1031 ,7 @@ static int virtio_transport_reset_no_sock(const struct virtio_transport *t,
567
567
.reply = true,
568
568
};
569
569
struct sk_buff *reply;
570
570
+ int err;
571
571
572
572
/* Send RST only if the original pkt is not a RST pkt */
573
573
if (le16_to_cpu(hdr->op) == VIRTIO_VSOCK_OP_RST)
574
- @@ -978 ,9 +1043 ,10 @@ static int virtio_transport_reset_no_sock(const struct virtio_transport *t,
574
+ @@ -979 ,9 +1044 ,10 @@ static int virtio_transport_reset_no_sock(const struct virtio_transport *t,
575
575
le64_to_cpu(hdr->dst_cid),
576
576
le32_to_cpu(hdr->dst_port),
577
577
le64_to_cpu(hdr->src_cid),
@@ -584,7 +584,7 @@ index 0b2f6c211544..7ff2d3a44dc2 100644
584
584
585
585
return t->send_pkt(reply);
586
586
}
587
- @@ -1200 ,6 +1266 ,21 @@ virtio_transport_recv_enqueue(struct vsock_sock *vsk,
587
+ @@ -1201 ,6 +1267 ,21 @@ virtio_transport_recv_enqueue(struct vsock_sock *vsk,
588
588
kfree_skb(skb);
589
589
}
590
590
@@ -606,7 +606,7 @@ index 0b2f6c211544..7ff2d3a44dc2 100644
606
606
static int
607
607
virtio_transport_recv_connected(struct sock *sk,
608
608
struct sk_buff *skb)
609
- @@ -1369 ,7 +1450 ,8 @@ virtio_transport_recv_listen(struct sock *sk, struct sk_buff *skb,
609
+ @@ -1378 ,7 +1459 ,8 @@ virtio_transport_recv_listen(struct sock *sk, struct sk_buff *skb,
610
610
static bool virtio_transport_valid_type(u16 type)
611
611
{
612
612
return (type == VIRTIO_VSOCK_TYPE_STREAM) ||
@@ -616,7 +616,7 @@ index 0b2f6c211544..7ff2d3a44dc2 100644
616
616
}
617
617
618
618
/* We are under the virtio-vsock's vsock->rx_lock or vhost-vsock's vq->mutex
619
- @@ -1383 ,40 +1465 ,52 @@ void virtio_transport_recv_pkt(struct virtio_transport *t,
619
+ @@ -1392 ,40 +1474 ,52 @@ void virtio_transport_recv_pkt(struct virtio_transport *t,
620
620
struct vsock_sock *vsk;
621
621
struct sock *sk;
622
622
bool space_available;
@@ -679,7 +679,7 @@ index 0b2f6c211544..7ff2d3a44dc2 100644
679
679
sock_put(sk);
680
680
goto free_pkt;
681
681
}
682
- @@ -1432 ,12 +1526 ,18 @@ void virtio_transport_recv_pkt(struct virtio_transport *t,
682
+ @@ -1441 ,12 +1535 ,18 @@ void virtio_transport_recv_pkt(struct virtio_transport *t,
683
683
684
684
/* Check if sk has been closed before lock_sock */
685
685
if (sock_flag(sk, SOCK_DONE)) {
@@ -699,7 +699,7 @@ index 0b2f6c211544..7ff2d3a44dc2 100644
699
699
space_available = virtio_transport_space_update(sk, skb);
700
700
701
701
/* Update CID in case it has changed after a transport reset event */
702
- @@ -1469 ,6 +1569 ,7 @@ void virtio_transport_recv_pkt(struct virtio_transport *t,
702
+ @@ -1478 ,6 +1578 ,7 @@ void virtio_transport_recv_pkt(struct virtio_transport *t,
703
703
break;
704
704
}
705
705
0 commit comments