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

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

Version: ~ [ linux-5.4-rc7 ] ~ [ linux-5.3.11 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.84 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.154 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.201 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.201 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.77 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ 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         u64 queue_pair_size;
112         u64 queue_pair_min_size;
113         u64 queue_pair_max_size;
114         u32 detach_sub_id;
115         union vmci_transport_notify notify;
116         const struct vmci_transport_notify_ops *notify_ops;
117         struct list_head elem;
118         struct sock *sk;
119         spinlock_t lock; /* protects sk. */
120 };
121 
122 int vmci_transport_register(void);
123 void vmci_transport_unregister(void);
124 
125 int vmci_transport_send_wrote_bh(struct sockaddr_vm *dst,
126                                  struct sockaddr_vm *src);
127 int vmci_transport_send_read_bh(struct sockaddr_vm *dst,
128                                 struct sockaddr_vm *src);
129 int vmci_transport_send_wrote(struct sock *sk);
130 int vmci_transport_send_read(struct sock *sk);
131 int vmci_transport_send_waiting_write(struct sock *sk,
132                                       struct vmci_transport_waiting_info *wait);
133 int vmci_transport_send_waiting_read(struct sock *sk,
134                                      struct vmci_transport_waiting_info *wait);
135 
136 #endif
137 

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

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | 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.

osdn.jp