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

~ [ 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