Lines Matching refs:pkt

48 	struct virtio_vsock_pkt *pkt;  in virtio_transport_alloc_pkt()  local
51 pkt = kzalloc(sizeof(*pkt), GFP_KERNEL); in virtio_transport_alloc_pkt()
52 if (!pkt) in virtio_transport_alloc_pkt()
55 pkt->hdr.type = cpu_to_le16(info->type); in virtio_transport_alloc_pkt()
56 pkt->hdr.op = cpu_to_le16(info->op); in virtio_transport_alloc_pkt()
57 pkt->hdr.src_cid = cpu_to_le64(src_cid); in virtio_transport_alloc_pkt()
58 pkt->hdr.dst_cid = cpu_to_le64(dst_cid); in virtio_transport_alloc_pkt()
59 pkt->hdr.src_port = cpu_to_le32(src_port); in virtio_transport_alloc_pkt()
60 pkt->hdr.dst_port = cpu_to_le32(dst_port); in virtio_transport_alloc_pkt()
61 pkt->hdr.flags = cpu_to_le32(info->flags); in virtio_transport_alloc_pkt()
62 pkt->len = len; in virtio_transport_alloc_pkt()
63 pkt->hdr.len = cpu_to_le32(len); in virtio_transport_alloc_pkt()
64 pkt->reply = info->reply; in virtio_transport_alloc_pkt()
65 pkt->vsk = info->vsk; in virtio_transport_alloc_pkt()
68 pkt->buf = kmalloc(len, GFP_KERNEL); in virtio_transport_alloc_pkt()
69 if (!pkt->buf) in virtio_transport_alloc_pkt()
72 pkt->buf_len = len; in virtio_transport_alloc_pkt()
74 err = memcpy_from_msg(pkt->buf, info->msg, len); in virtio_transport_alloc_pkt()
80 pkt->hdr.flags |= cpu_to_le32(VIRTIO_VSOCK_SEQ_EOM); in virtio_transport_alloc_pkt()
83 pkt->hdr.flags |= cpu_to_le32(VIRTIO_VSOCK_SEQ_EOR); in virtio_transport_alloc_pkt()
94 return pkt; in virtio_transport_alloc_pkt()
97 kfree(pkt->buf); in virtio_transport_alloc_pkt()
99 kfree(pkt); in virtio_transport_alloc_pkt()
106 struct virtio_vsock_pkt *pkt = opaque; in virtio_transport_build_skb() local
116 payload_len = le32_to_cpu(pkt->hdr.len); in virtio_transport_build_skb()
117 payload_buf = pkt->buf + pkt->off; in virtio_transport_build_skb()
119 skb = alloc_skb(sizeof(*hdr) + sizeof(pkt->hdr) + payload_len, in virtio_transport_build_skb()
127 hdr->src_cid = pkt->hdr.src_cid; in virtio_transport_build_skb()
128 hdr->src_port = pkt->hdr.src_port; in virtio_transport_build_skb()
129 hdr->dst_cid = pkt->hdr.dst_cid; in virtio_transport_build_skb()
130 hdr->dst_port = pkt->hdr.dst_port; in virtio_transport_build_skb()
133 hdr->len = cpu_to_le16(sizeof(pkt->hdr)); in virtio_transport_build_skb()
136 switch (le16_to_cpu(pkt->hdr.op)) { in virtio_transport_build_skb()
157 skb_put_data(skb, &pkt->hdr, sizeof(pkt->hdr)); in virtio_transport_build_skb()
166 void virtio_transport_deliver_tap_pkt(struct virtio_vsock_pkt *pkt) in virtio_transport_deliver_tap_pkt() argument
168 if (pkt->tap_delivered) in virtio_transport_deliver_tap_pkt()
171 vsock_deliver_tap(virtio_transport_build_skb, pkt); in virtio_transport_deliver_tap_pkt()
172 pkt->tap_delivered = true; in virtio_transport_deliver_tap_pkt()
195 struct virtio_vsock_pkt *pkt; in virtio_transport_send_pkt_info() local
227 pkt = virtio_transport_alloc_pkt(info, pkt_len, in virtio_transport_send_pkt_info()
230 if (!pkt) { in virtio_transport_send_pkt_info()
235 virtio_transport_inc_tx_pkt(vvs, pkt); in virtio_transport_send_pkt_info()
237 return t_ops->send_pkt(pkt); in virtio_transport_send_pkt_info()
241 struct virtio_vsock_pkt *pkt) in virtio_transport_inc_rx_pkt() argument
243 if (vvs->rx_bytes + pkt->len > vvs->buf_alloc) in virtio_transport_inc_rx_pkt()
246 vvs->rx_bytes += pkt->len; in virtio_transport_inc_rx_pkt()
251 struct virtio_vsock_pkt *pkt) in virtio_transport_dec_rx_pkt() argument
253 vvs->rx_bytes -= pkt->len; in virtio_transport_dec_rx_pkt()
254 vvs->fwd_cnt += pkt->len; in virtio_transport_dec_rx_pkt()
257 void virtio_transport_inc_tx_pkt(struct virtio_vsock_sock *vvs, struct virtio_vsock_pkt *pkt) in virtio_transport_inc_tx_pkt() argument
261 pkt->hdr.fwd_cnt = cpu_to_le32(vvs->fwd_cnt); in virtio_transport_inc_tx_pkt()
262 pkt->hdr.buf_alloc = cpu_to_le32(vvs->buf_alloc); in virtio_transport_inc_tx_pkt()
306 struct virtio_vsock_pkt *pkt; in virtio_transport_stream_do_peek() local
312 list_for_each_entry(pkt, &vvs->rx_queue, list) { in virtio_transport_stream_do_peek()
313 off = pkt->off; in virtio_transport_stream_do_peek()
318 while (total < len && off < pkt->len) { in virtio_transport_stream_do_peek()
320 if (bytes > pkt->len - off) in virtio_transport_stream_do_peek()
321 bytes = pkt->len - off; in virtio_transport_stream_do_peek()
328 err = memcpy_to_msg(msg, pkt->buf + off, bytes); in virtio_transport_stream_do_peek()
355 struct virtio_vsock_pkt *pkt; in virtio_transport_stream_do_dequeue() local
362 pkt = list_first_entry(&vvs->rx_queue, in virtio_transport_stream_do_dequeue()
366 if (bytes > pkt->len - pkt->off) in virtio_transport_stream_do_dequeue()
367 bytes = pkt->len - pkt->off; in virtio_transport_stream_do_dequeue()
374 err = memcpy_to_msg(msg, pkt->buf + pkt->off, bytes); in virtio_transport_stream_do_dequeue()
381 pkt->off += bytes; in virtio_transport_stream_do_dequeue()
382 if (pkt->off == pkt->len) { in virtio_transport_stream_do_dequeue()
383 virtio_transport_dec_rx_pkt(vvs, pkt); in virtio_transport_stream_do_dequeue()
384 list_del(&pkt->list); in virtio_transport_stream_do_dequeue()
385 virtio_transport_free_pkt(pkt); in virtio_transport_stream_do_dequeue()
417 struct virtio_vsock_pkt *pkt; in virtio_transport_seqpacket_do_dequeue() local
430 pkt = list_first_entry(&vvs->rx_queue, struct virtio_vsock_pkt, list); in virtio_transport_seqpacket_do_dequeue()
436 pkt_len = (size_t)le32_to_cpu(pkt->hdr.len); in virtio_transport_seqpacket_do_dequeue()
447 err = memcpy_to_msg(msg, pkt->buf, bytes_to_copy); in virtio_transport_seqpacket_do_dequeue()
464 if (le32_to_cpu(pkt->hdr.flags) & VIRTIO_VSOCK_SEQ_EOM) { in virtio_transport_seqpacket_do_dequeue()
468 if (le32_to_cpu(pkt->hdr.flags) & VIRTIO_VSOCK_SEQ_EOR) in virtio_transport_seqpacket_do_dequeue()
472 virtio_transport_dec_rx_pkt(vvs, pkt); in virtio_transport_seqpacket_do_dequeue()
473 list_del(&pkt->list); in virtio_transport_seqpacket_do_dequeue()
474 virtio_transport_free_pkt(pkt); in virtio_transport_seqpacket_do_dequeue()
809 struct virtio_vsock_pkt *pkt) in virtio_transport_reset() argument
813 .reply = !!pkt, in virtio_transport_reset()
818 if (pkt && le16_to_cpu(pkt->hdr.op) == VIRTIO_VSOCK_OP_RST) in virtio_transport_reset()
828 struct virtio_vsock_pkt *pkt) in virtio_transport_reset_no_sock() argument
833 .type = le16_to_cpu(pkt->hdr.type), in virtio_transport_reset_no_sock()
838 if (le16_to_cpu(pkt->hdr.op) == VIRTIO_VSOCK_OP_RST) in virtio_transport_reset_no_sock()
842 le64_to_cpu(pkt->hdr.dst_cid), in virtio_transport_reset_no_sock()
843 le32_to_cpu(pkt->hdr.dst_port), in virtio_transport_reset_no_sock()
844 le64_to_cpu(pkt->hdr.src_cid), in virtio_transport_reset_no_sock()
845 le32_to_cpu(pkt->hdr.src_port)); in virtio_transport_reset_no_sock()
861 struct virtio_vsock_pkt *pkt, *tmp; in virtio_transport_remove_sock() local
866 list_for_each_entry_safe(pkt, tmp, &vvs->rx_queue, list) { in virtio_transport_remove_sock()
867 list_del(&pkt->list); in virtio_transport_remove_sock()
868 virtio_transport_free_pkt(pkt); in virtio_transport_remove_sock()
984 struct virtio_vsock_pkt *pkt) in virtio_transport_recv_connecting() argument
990 switch (le16_to_cpu(pkt->hdr.op)) { in virtio_transport_recv_connecting()
1011 virtio_transport_reset(vsk, pkt); in virtio_transport_recv_connecting()
1020 struct virtio_vsock_pkt *pkt) in virtio_transport_recv_enqueue() argument
1025 pkt->len = le32_to_cpu(pkt->hdr.len); in virtio_transport_recv_enqueue()
1026 pkt->off = 0; in virtio_transport_recv_enqueue()
1030 can_enqueue = virtio_transport_inc_rx_pkt(vvs, pkt); in virtio_transport_recv_enqueue()
1036 if (le32_to_cpu(pkt->hdr.flags) & VIRTIO_VSOCK_SEQ_EOM) in virtio_transport_recv_enqueue()
1043 if (pkt->len <= GOOD_COPY_LEN && !list_empty(&vvs->rx_queue)) { in virtio_transport_recv_enqueue()
1055 if ((pkt->len <= last_pkt->buf_len - last_pkt->len) && in virtio_transport_recv_enqueue()
1057 memcpy(last_pkt->buf + last_pkt->len, pkt->buf, in virtio_transport_recv_enqueue()
1058 pkt->len); in virtio_transport_recv_enqueue()
1059 last_pkt->len += pkt->len; in virtio_transport_recv_enqueue()
1061 last_pkt->hdr.flags |= pkt->hdr.flags; in virtio_transport_recv_enqueue()
1066 list_add_tail(&pkt->list, &vvs->rx_queue); in virtio_transport_recv_enqueue()
1071 virtio_transport_free_pkt(pkt); in virtio_transport_recv_enqueue()
1076 struct virtio_vsock_pkt *pkt) in virtio_transport_recv_connected() argument
1081 switch (le16_to_cpu(pkt->hdr.op)) { in virtio_transport_recv_connected()
1083 virtio_transport_recv_enqueue(vsk, pkt); in virtio_transport_recv_connected()
1093 if (le32_to_cpu(pkt->hdr.flags) & VIRTIO_VSOCK_SHUTDOWN_RCV) in virtio_transport_recv_connected()
1095 if (le32_to_cpu(pkt->hdr.flags) & VIRTIO_VSOCK_SHUTDOWN_SEND) in virtio_transport_recv_connected()
1104 if (le32_to_cpu(pkt->hdr.flags)) in virtio_transport_recv_connected()
1115 virtio_transport_free_pkt(pkt); in virtio_transport_recv_connected()
1121 struct virtio_vsock_pkt *pkt) in virtio_transport_recv_disconnecting() argument
1125 if (le16_to_cpu(pkt->hdr.op) == VIRTIO_VSOCK_OP_RST) in virtio_transport_recv_disconnecting()
1131 struct virtio_vsock_pkt *pkt) in virtio_transport_send_response() argument
1135 .remote_cid = le64_to_cpu(pkt->hdr.src_cid), in virtio_transport_send_response()
1136 .remote_port = le32_to_cpu(pkt->hdr.src_port), in virtio_transport_send_response()
1145 struct virtio_vsock_pkt *pkt) in virtio_transport_space_update() argument
1161 vvs->peer_buf_alloc = le32_to_cpu(pkt->hdr.buf_alloc); in virtio_transport_space_update()
1162 vvs->peer_fwd_cnt = le32_to_cpu(pkt->hdr.fwd_cnt); in virtio_transport_space_update()
1170 virtio_transport_recv_listen(struct sock *sk, struct virtio_vsock_pkt *pkt, in virtio_transport_recv_listen() argument
1178 if (le16_to_cpu(pkt->hdr.op) != VIRTIO_VSOCK_OP_REQUEST) { in virtio_transport_recv_listen()
1179 virtio_transport_reset_no_sock(t, pkt); in virtio_transport_recv_listen()
1184 virtio_transport_reset_no_sock(t, pkt); in virtio_transport_recv_listen()
1190 virtio_transport_reset_no_sock(t, pkt); in virtio_transport_recv_listen()
1201 vsock_addr_init(&vchild->local_addr, le64_to_cpu(pkt->hdr.dst_cid), in virtio_transport_recv_listen()
1202 le32_to_cpu(pkt->hdr.dst_port)); in virtio_transport_recv_listen()
1203 vsock_addr_init(&vchild->remote_addr, le64_to_cpu(pkt->hdr.src_cid), in virtio_transport_recv_listen()
1204 le32_to_cpu(pkt->hdr.src_port)); in virtio_transport_recv_listen()
1212 virtio_transport_reset_no_sock(t, pkt); in virtio_transport_recv_listen()
1217 if (virtio_transport_space_update(child, pkt)) in virtio_transport_recv_listen()
1222 virtio_transport_send_response(vchild, pkt); in virtio_transport_recv_listen()
1240 struct virtio_vsock_pkt *pkt) in virtio_transport_recv_pkt() argument
1247 vsock_addr_init(&src, le64_to_cpu(pkt->hdr.src_cid), in virtio_transport_recv_pkt()
1248 le32_to_cpu(pkt->hdr.src_port)); in virtio_transport_recv_pkt()
1249 vsock_addr_init(&dst, le64_to_cpu(pkt->hdr.dst_cid), in virtio_transport_recv_pkt()
1250 le32_to_cpu(pkt->hdr.dst_port)); in virtio_transport_recv_pkt()
1254 le32_to_cpu(pkt->hdr.len), in virtio_transport_recv_pkt()
1255 le16_to_cpu(pkt->hdr.type), in virtio_transport_recv_pkt()
1256 le16_to_cpu(pkt->hdr.op), in virtio_transport_recv_pkt()
1257 le32_to_cpu(pkt->hdr.flags), in virtio_transport_recv_pkt()
1258 le32_to_cpu(pkt->hdr.buf_alloc), in virtio_transport_recv_pkt()
1259 le32_to_cpu(pkt->hdr.fwd_cnt)); in virtio_transport_recv_pkt()
1261 if (!virtio_transport_valid_type(le16_to_cpu(pkt->hdr.type))) { in virtio_transport_recv_pkt()
1262 (void)virtio_transport_reset_no_sock(t, pkt); in virtio_transport_recv_pkt()
1273 (void)virtio_transport_reset_no_sock(t, pkt); in virtio_transport_recv_pkt()
1278 if (virtio_transport_get_type(sk) != le16_to_cpu(pkt->hdr.type)) { in virtio_transport_recv_pkt()
1279 (void)virtio_transport_reset_no_sock(t, pkt); in virtio_transport_recv_pkt()
1290 (void)virtio_transport_reset_no_sock(t, pkt); in virtio_transport_recv_pkt()
1296 space_available = virtio_transport_space_update(sk, pkt); in virtio_transport_recv_pkt()
1307 virtio_transport_recv_listen(sk, pkt, t); in virtio_transport_recv_pkt()
1308 virtio_transport_free_pkt(pkt); in virtio_transport_recv_pkt()
1311 virtio_transport_recv_connecting(sk, pkt); in virtio_transport_recv_pkt()
1312 virtio_transport_free_pkt(pkt); in virtio_transport_recv_pkt()
1315 virtio_transport_recv_connected(sk, pkt); in virtio_transport_recv_pkt()
1318 virtio_transport_recv_disconnecting(sk, pkt); in virtio_transport_recv_pkt()
1319 virtio_transport_free_pkt(pkt); in virtio_transport_recv_pkt()
1322 (void)virtio_transport_reset_no_sock(t, pkt); in virtio_transport_recv_pkt()
1323 virtio_transport_free_pkt(pkt); in virtio_transport_recv_pkt()
1336 virtio_transport_free_pkt(pkt); in virtio_transport_recv_pkt()
1340 void virtio_transport_free_pkt(struct virtio_vsock_pkt *pkt) in virtio_transport_free_pkt() argument
1342 kvfree(pkt->buf); in virtio_transport_free_pkt()
1343 kfree(pkt); in virtio_transport_free_pkt()