~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/net/vmw_vsock/vmci_transport.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0-only */
  2 /*
  3  * VMware vSockets Driver
  4  *
  5  * Copyright (C) 2013 VMware, Inc. All rights reserved.
  6  */
  7 
  8 #ifndef _VMCI_TRANSPORT_H_
  9 #define _VMCI_TRANSPORT_H_
 10 
 11 #include <linux/vmw_vmci_defs.h>
 12 #include <linux/vmw_vmci_api.h>
 13 
 14 #include <net/vsock_addr.h>
 15 #include <net/af_vsock.h>
 16 
 17 /* If the packet format changes in a release then this should change too. */
 18 #define VMCI_TRANSPORT_PACKET_VERSION 1
 19 
 20 /* The resource ID on which control packets are sent. */
 21 #define VMCI_TRANSPORT_PACKET_RID 1
 22 
 23 /* The resource ID on which control packets are sent to the hypervisor. */
 24 #define VMCI_TRANSPORT_HYPERVISOR_PACKET_RID 15
 25 
 26 #define VSOCK_PROTO_INVALID        0
 27 #define VSOCK_PROTO_PKT_ON_NOTIFY (1 << 0)
 28 #define VSOCK_PROTO_ALL_SUPPORTED (VSOCK_PROTO_PKT_ON_NOTIFY)
 29 
 30 #define vmci_trans(_vsk) ((struct vmci_transport *)((_vsk)->trans))
 31 
 32 enum vmci_transport_packet_type {
 33         VMCI_TRANSPORT_PACKET_TYPE_INVALID = 0,
 34         VMCI_TRANSPORT_PACKET_TYPE_REQUEST,
 35         VMCI_TRANSPORT_PACKET_TYPE_NEGOTIATE,
 36         VMCI_TRANSPORT_PACKET_TYPE_OFFER,
 37         VMCI_TRANSPORT_PACKET_TYPE_ATTACH,
 38         VMCI_TRANSPORT_PACKET_TYPE_WROTE,
 39         VMCI_TRANSPORT_PACKET_TYPE_READ,
 40         VMCI_TRANSPORT_PACKET_TYPE_RST,
 41         VMCI_TRANSPORT_PACKET_TYPE_SHUTDOWN,
 42         VMCI_TRANSPORT_PACKET_TYPE_WAITING_WRITE,
 43         VMCI_TRANSPORT_PACKET_TYPE_WAITING_READ,
 44         VMCI_TRANSPORT_PACKET_TYPE_REQUEST2,
 45         VMCI_TRANSPORT_PACKET_TYPE_NEGOTIATE2,
 46         VMCI_TRANSPORT_PACKET_TYPE_MAX
 47 };
 48 
 49 struct vmci_transport_waiting_info {
 50         u64 generation;
 51         u64 offset;
 52 };
 53 
 54 /* Control packet type for STREAM sockets.  DGRAMs have no control packets nor
 55  * special packet header for data packets, they are just raw VMCI DGRAM
 56  * messages.  For STREAMs, control packets are sent over the control channel
 57  * while data is written and read directly from queue pairs with no packet
 58  * format.
 59  */
 60 struct vmci_transport_packet {
 61         struct vmci_datagram dg;
 62         u8 version;
 63         u8 type;
 64         u16 proto;
 65         u32 src_port;
 66         u32 dst_port;
 67         u32 _reserved2;
 68         union {
 69                 u64 size;
 70                 u64 mode;
 71                 struct vmci_handle handle;
 72                 struct vmci_transport_waiting_info wait;
 73         } u;
 74 };
 75 
 76 struct vmci_transport_notify_pkt {
 77         u64 write_notify_window;
 78         u64 write_notify_min_window;
 79         bool peer_waiting_read;
 80         bool peer_waiting_write;
 81         bool peer_waiting_write_detected;
 82         bool sent_waiting_read;
 83         bool sent_waiting_write;
 84         struct vmci_transport_waiting_info peer_waiting_read_info;
 85         struct vmci_transport_waiting_info peer_waiting_write_info;
 86         u64 produce_q_generation;
 87         u64 consume_q_generation;
 88 };
 89 
 90 struct vmci_transport_notify_pkt_q_state {
 91         u64 write_notify_window;
 92         u64 write_notify_min_window;
 93         bool peer_waiting_write;
 94         bool peer_waiting_write_detected;
 95 };
 96 
 97 union vmci_transport_notify {
 98         struct vmci_transport_notify_pkt pkt;
 99         struct vmci_transport_notify_pkt_q_state pkt_q_state;
100 };
101 
102 /* Our transport-specific data. */
103 struct vmci_transport {
104         /* For DGRAMs. */
105         struct vmci_handle dg_handle;
106         /* For STREAMs. */
107         struct vmci_handle qp_handle;
108         struct vmci_qp *qpair;
109         u64 produce_size;
110         u64 consume_size;
111         u32 detach_sub_id;
112         union vmci_transport_notify notify;
113         const struct vmci_transport_notify_ops *notify_ops;
114         struct list_head elem;
115         struct sock *sk;
116         spinlock_t lock; /* protects sk. */
117 };
118 
119 int vmci_transport_send_wrote_bh(struct sockaddr_vm *dst,
120                                  struct sockaddr_vm *src);
121 int vmci_transport_send_read_bh(struct sockaddr_vm *dst,
122                                 struct sockaddr_vm *src);
123 int vmci_transport_send_wrote(struct sock *sk);
124 int vmci_transport_send_read(struct sock *sk);
125 int vmci_transport_send_waiting_write(struct sock *sk,
126                                       struct vmci_transport_waiting_info *wait);
127 int vmci_transport_send_waiting_read(struct sock *sk,
128                                      struct vmci_transport_waiting_info *wait);
129 
130 #endif
131 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php