Lines Matching refs:pkt

47 	struct virtio_vsock_pkt *pkt;  in virtio_transport_alloc_pkt()  local
50 pkt = kzalloc(sizeof(*pkt), GFP_KERNEL); in virtio_transport_alloc_pkt()
51 if (!pkt) in virtio_transport_alloc_pkt()
54 pkt->hdr.type = cpu_to_le16(info->type); in virtio_transport_alloc_pkt()
55 pkt->hdr.op = cpu_to_le16(info->op); in virtio_transport_alloc_pkt()
56 pkt->hdr.src_cid = cpu_to_le64(src_cid); in virtio_transport_alloc_pkt()
57 pkt->hdr.dst_cid = cpu_to_le64(dst_cid); in virtio_transport_alloc_pkt()
58 pkt->hdr.src_port = cpu_to_le32(src_port); in virtio_transport_alloc_pkt()
59 pkt->hdr.dst_port = cpu_to_le32(dst_port); in virtio_transport_alloc_pkt()
60 pkt->hdr.flags = cpu_to_le32(info->flags); in virtio_transport_alloc_pkt()
61 pkt->len = len; in virtio_transport_alloc_pkt()
62 pkt->hdr.len = cpu_to_le32(len); in virtio_transport_alloc_pkt()
63 pkt->reply = info->reply; in virtio_transport_alloc_pkt()
64 pkt->vsk = info->vsk; in virtio_transport_alloc_pkt()
67 pkt->buf = kmalloc(len, GFP_KERNEL); in virtio_transport_alloc_pkt()
68 if (!pkt->buf) in virtio_transport_alloc_pkt()
71 pkt->buf_len = len; in virtio_transport_alloc_pkt()
73 err = memcpy_from_msg(pkt->buf, info->msg, len); in virtio_transport_alloc_pkt()
85 return pkt; in virtio_transport_alloc_pkt()
88 kfree(pkt->buf); in virtio_transport_alloc_pkt()
90 kfree(pkt); in virtio_transport_alloc_pkt()
97 struct virtio_vsock_pkt *pkt = opaque; in virtio_transport_build_skb() local
107 payload_len = le32_to_cpu(pkt->hdr.len); in virtio_transport_build_skb()
108 payload_buf = pkt->buf + pkt->off; in virtio_transport_build_skb()
110 skb = alloc_skb(sizeof(*hdr) + sizeof(pkt->hdr) + payload_len, in virtio_transport_build_skb()
118 hdr->src_cid = pkt->hdr.src_cid; in virtio_transport_build_skb()
119 hdr->src_port = pkt->hdr.src_port; in virtio_transport_build_skb()
120 hdr->dst_cid = pkt->hdr.dst_cid; in virtio_transport_build_skb()
121 hdr->dst_port = pkt->hdr.dst_port; in virtio_transport_build_skb()
124 hdr->len = cpu_to_le16(sizeof(pkt->hdr)); in virtio_transport_build_skb()
127 switch (le16_to_cpu(pkt->hdr.op)) { in virtio_transport_build_skb()
148 skb_put_data(skb, &pkt->hdr, sizeof(pkt->hdr)); in virtio_transport_build_skb()
157 void virtio_transport_deliver_tap_pkt(struct virtio_vsock_pkt *pkt) in virtio_transport_deliver_tap_pkt() argument
159 vsock_deliver_tap(virtio_transport_build_skb, pkt); in virtio_transport_deliver_tap_pkt()
168 struct virtio_vsock_pkt *pkt; in virtio_transport_send_pkt_info() local
194 pkt = virtio_transport_alloc_pkt(info, pkt_len, in virtio_transport_send_pkt_info()
197 if (!pkt) { in virtio_transport_send_pkt_info()
202 virtio_transport_inc_tx_pkt(vvs, pkt); in virtio_transport_send_pkt_info()
204 return virtio_transport_get_ops()->send_pkt(pkt); in virtio_transport_send_pkt_info()
208 struct virtio_vsock_pkt *pkt) in virtio_transport_inc_rx_pkt() argument
210 if (vvs->rx_bytes + pkt->len > vvs->buf_alloc) in virtio_transport_inc_rx_pkt()
213 vvs->rx_bytes += pkt->len; in virtio_transport_inc_rx_pkt()
218 struct virtio_vsock_pkt *pkt) in virtio_transport_dec_rx_pkt() argument
220 vvs->rx_bytes -= pkt->len; in virtio_transport_dec_rx_pkt()
221 vvs->fwd_cnt += pkt->len; in virtio_transport_dec_rx_pkt()
224 void virtio_transport_inc_tx_pkt(struct virtio_vsock_sock *vvs, struct virtio_vsock_pkt *pkt) in virtio_transport_inc_tx_pkt() argument
228 pkt->hdr.fwd_cnt = cpu_to_le32(vvs->fwd_cnt); in virtio_transport_inc_tx_pkt()
229 pkt->hdr.buf_alloc = cpu_to_le32(vvs->buf_alloc); in virtio_transport_inc_tx_pkt()
276 struct virtio_vsock_pkt *pkt; in virtio_transport_stream_do_dequeue() local
283 pkt = list_first_entry(&vvs->rx_queue, in virtio_transport_stream_do_dequeue()
287 if (bytes > pkt->len - pkt->off) in virtio_transport_stream_do_dequeue()
288 bytes = pkt->len - pkt->off; in virtio_transport_stream_do_dequeue()
295 err = memcpy_to_msg(msg, pkt->buf + pkt->off, bytes); in virtio_transport_stream_do_dequeue()
302 pkt->off += bytes; in virtio_transport_stream_do_dequeue()
303 if (pkt->off == pkt->len) { in virtio_transport_stream_do_dequeue()
304 virtio_transport_dec_rx_pkt(vvs, pkt); in virtio_transport_stream_do_dequeue()
305 list_del(&pkt->list); in virtio_transport_stream_do_dequeue()
306 virtio_transport_free_pkt(pkt); in virtio_transport_stream_do_dequeue()
680 struct virtio_vsock_pkt *pkt) in virtio_transport_reset() argument
685 .reply = !!pkt, in virtio_transport_reset()
690 if (pkt && le16_to_cpu(pkt->hdr.op) == VIRTIO_VSOCK_OP_RST) in virtio_transport_reset()
699 static int virtio_transport_reset_no_sock(struct virtio_vsock_pkt *pkt) in virtio_transport_reset_no_sock() argument
705 .type = le16_to_cpu(pkt->hdr.type), in virtio_transport_reset_no_sock()
710 if (le16_to_cpu(pkt->hdr.op) == VIRTIO_VSOCK_OP_RST) in virtio_transport_reset_no_sock()
714 le64_to_cpu(pkt->hdr.dst_cid), in virtio_transport_reset_no_sock()
715 le32_to_cpu(pkt->hdr.dst_port), in virtio_transport_reset_no_sock()
716 le64_to_cpu(pkt->hdr.src_cid), in virtio_transport_reset_no_sock()
717 le32_to_cpu(pkt->hdr.src_port)); in virtio_transport_reset_no_sock()
826 struct virtio_vsock_pkt *pkt, *tmp; in virtio_transport_release() local
834 list_for_each_entry_safe(pkt, tmp, &vvs->rx_queue, list) { in virtio_transport_release()
835 list_del(&pkt->list); in virtio_transport_release()
836 virtio_transport_free_pkt(pkt); in virtio_transport_release()
847 struct virtio_vsock_pkt *pkt) in virtio_transport_recv_connecting() argument
853 switch (le16_to_cpu(pkt->hdr.op)) { in virtio_transport_recv_connecting()
874 virtio_transport_reset(vsk, pkt); in virtio_transport_recv_connecting()
883 struct virtio_vsock_pkt *pkt) in virtio_transport_recv_enqueue() argument
888 pkt->len = le32_to_cpu(pkt->hdr.len); in virtio_transport_recv_enqueue()
889 pkt->off = 0; in virtio_transport_recv_enqueue()
893 can_enqueue = virtio_transport_inc_rx_pkt(vvs, pkt); in virtio_transport_recv_enqueue()
903 if (pkt->len <= GOOD_COPY_LEN && !list_empty(&vvs->rx_queue)) { in virtio_transport_recv_enqueue()
912 if (pkt->len <= last_pkt->buf_len - last_pkt->len) { in virtio_transport_recv_enqueue()
913 memcpy(last_pkt->buf + last_pkt->len, pkt->buf, in virtio_transport_recv_enqueue()
914 pkt->len); in virtio_transport_recv_enqueue()
915 last_pkt->len += pkt->len; in virtio_transport_recv_enqueue()
921 list_add_tail(&pkt->list, &vvs->rx_queue); in virtio_transport_recv_enqueue()
926 virtio_transport_free_pkt(pkt); in virtio_transport_recv_enqueue()
931 struct virtio_vsock_pkt *pkt) in virtio_transport_recv_connected() argument
936 switch (le16_to_cpu(pkt->hdr.op)) { in virtio_transport_recv_connected()
938 virtio_transport_recv_enqueue(vsk, pkt); in virtio_transport_recv_connected()
945 if (le32_to_cpu(pkt->hdr.flags) & VIRTIO_VSOCK_SHUTDOWN_RCV) in virtio_transport_recv_connected()
947 if (le32_to_cpu(pkt->hdr.flags) & VIRTIO_VSOCK_SHUTDOWN_SEND) in virtio_transport_recv_connected()
956 if (le32_to_cpu(pkt->hdr.flags)) in virtio_transport_recv_connected()
967 virtio_transport_free_pkt(pkt); in virtio_transport_recv_connected()
973 struct virtio_vsock_pkt *pkt) in virtio_transport_recv_disconnecting() argument
977 if (le16_to_cpu(pkt->hdr.op) == VIRTIO_VSOCK_OP_RST) in virtio_transport_recv_disconnecting()
983 struct virtio_vsock_pkt *pkt) in virtio_transport_send_response() argument
988 .remote_cid = le64_to_cpu(pkt->hdr.src_cid), in virtio_transport_send_response()
989 .remote_port = le32_to_cpu(pkt->hdr.src_port), in virtio_transport_send_response()
999 virtio_transport_recv_listen(struct sock *sk, struct virtio_vsock_pkt *pkt) in virtio_transport_recv_listen() argument
1005 if (le16_to_cpu(pkt->hdr.op) != VIRTIO_VSOCK_OP_REQUEST) { in virtio_transport_recv_listen()
1006 virtio_transport_reset(vsk, pkt); in virtio_transport_recv_listen()
1011 virtio_transport_reset(vsk, pkt); in virtio_transport_recv_listen()
1018 virtio_transport_reset(vsk, pkt); in virtio_transport_recv_listen()
1029 vsock_addr_init(&vchild->local_addr, le64_to_cpu(pkt->hdr.dst_cid), in virtio_transport_recv_listen()
1030 le32_to_cpu(pkt->hdr.dst_port)); in virtio_transport_recv_listen()
1031 vsock_addr_init(&vchild->remote_addr, le64_to_cpu(pkt->hdr.src_cid), in virtio_transport_recv_listen()
1032 le32_to_cpu(pkt->hdr.src_port)); in virtio_transport_recv_listen()
1036 virtio_transport_send_response(vchild, pkt); in virtio_transport_recv_listen()
1045 struct virtio_vsock_pkt *pkt) in virtio_transport_space_update() argument
1053 vvs->peer_buf_alloc = le32_to_cpu(pkt->hdr.buf_alloc); in virtio_transport_space_update()
1054 vvs->peer_fwd_cnt = le32_to_cpu(pkt->hdr.fwd_cnt); in virtio_transport_space_update()
1063 void virtio_transport_recv_pkt(struct virtio_vsock_pkt *pkt) in virtio_transport_recv_pkt() argument
1070 vsock_addr_init(&src, le64_to_cpu(pkt->hdr.src_cid), in virtio_transport_recv_pkt()
1071 le32_to_cpu(pkt->hdr.src_port)); in virtio_transport_recv_pkt()
1072 vsock_addr_init(&dst, le64_to_cpu(pkt->hdr.dst_cid), in virtio_transport_recv_pkt()
1073 le32_to_cpu(pkt->hdr.dst_port)); in virtio_transport_recv_pkt()
1077 le32_to_cpu(pkt->hdr.len), in virtio_transport_recv_pkt()
1078 le16_to_cpu(pkt->hdr.type), in virtio_transport_recv_pkt()
1079 le16_to_cpu(pkt->hdr.op), in virtio_transport_recv_pkt()
1080 le32_to_cpu(pkt->hdr.flags), in virtio_transport_recv_pkt()
1081 le32_to_cpu(pkt->hdr.buf_alloc), in virtio_transport_recv_pkt()
1082 le32_to_cpu(pkt->hdr.fwd_cnt)); in virtio_transport_recv_pkt()
1084 if (le16_to_cpu(pkt->hdr.type) != VIRTIO_VSOCK_TYPE_STREAM) { in virtio_transport_recv_pkt()
1085 (void)virtio_transport_reset_no_sock(pkt); in virtio_transport_recv_pkt()
1096 (void)virtio_transport_reset_no_sock(pkt); in virtio_transport_recv_pkt()
1103 space_available = virtio_transport_space_update(sk, pkt); in virtio_transport_recv_pkt()
1115 virtio_transport_recv_listen(sk, pkt); in virtio_transport_recv_pkt()
1116 virtio_transport_free_pkt(pkt); in virtio_transport_recv_pkt()
1119 virtio_transport_recv_connecting(sk, pkt); in virtio_transport_recv_pkt()
1120 virtio_transport_free_pkt(pkt); in virtio_transport_recv_pkt()
1123 virtio_transport_recv_connected(sk, pkt); in virtio_transport_recv_pkt()
1126 virtio_transport_recv_disconnecting(sk, pkt); in virtio_transport_recv_pkt()
1127 virtio_transport_free_pkt(pkt); in virtio_transport_recv_pkt()
1130 virtio_transport_free_pkt(pkt); in virtio_transport_recv_pkt()
1142 virtio_transport_free_pkt(pkt); in virtio_transport_recv_pkt()
1146 void virtio_transport_free_pkt(struct virtio_vsock_pkt *pkt) in virtio_transport_free_pkt() argument
1148 kfree(pkt->buf); in virtio_transport_free_pkt()
1149 kfree(pkt); in virtio_transport_free_pkt()