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

TOMOYO Linux Cross Reference
Linux/include/net/af_vsock.h

Version: ~ [ linux-5.5-rc7 ] ~ [ linux-5.4.13 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.97 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.166 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.210 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.210 ] ~ [ 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.81 ] ~ [ 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) 2007-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 __AF_VSOCK_H__
 17 #define __AF_VSOCK_H__
 18 
 19 #include <linux/kernel.h>
 20 #include <linux/workqueue.h>
 21 #include <linux/vm_sockets.h>
 22 
 23 #include "vsock_addr.h"
 24 
 25 /* vsock-specific sock->sk_state constants */
 26 #define VSOCK_SS_LISTEN 255
 27 
 28 #define LAST_RESERVED_PORT 1023
 29 
 30 #define vsock_sk(__sk)    ((struct vsock_sock *)__sk)
 31 #define sk_vsock(__vsk)   (&(__vsk)->sk)
 32 
 33 struct vsock_sock {
 34         /* sk must be the first member. */
 35         struct sock sk;
 36         struct sockaddr_vm local_addr;
 37         struct sockaddr_vm remote_addr;
 38         /* Links for the global tables of bound and connected sockets. */
 39         struct list_head bound_table;
 40         struct list_head connected_table;
 41         /* Accessed without the socket lock held. This means it can never be
 42          * modified outsided of socket create or destruct.
 43          */
 44         bool trusted;
 45         bool cached_peer_allow_dgram;   /* Dgram communication allowed to
 46                                          * cached peer?
 47                                          */
 48         u32 cached_peer;  /* Context ID of last dgram destination check. */
 49         const struct cred *owner;
 50         /* Rest are SOCK_STREAM only. */
 51         long connect_timeout;
 52         /* Listening socket that this came from. */
 53         struct sock *listener;
 54         /* Used for pending list and accept queue during connection handshake.
 55          * The listening socket is the head for both lists.  Sockets created
 56          * for connection requests are placed in the pending list until they
 57          * are connected, at which point they are put in the accept queue list
 58          * so they can be accepted in accept().  If accept() cannot accept the
 59          * connection, it is marked as rejected so the cleanup function knows
 60          * to clean up the socket.
 61          */
 62         struct list_head pending_links;
 63         struct list_head accept_queue;
 64         bool rejected;
 65         struct delayed_work dwork;
 66         u32 peer_shutdown;
 67         bool sent_request;
 68         bool ignore_connecting_rst;
 69 
 70         /* Private to transport. */
 71         void *trans;
 72 };
 73 
 74 s64 vsock_stream_has_data(struct vsock_sock *vsk);
 75 s64 vsock_stream_has_space(struct vsock_sock *vsk);
 76 void vsock_pending_work(struct work_struct *work);
 77 struct sock *__vsock_create(struct net *net,
 78                             struct socket *sock,
 79                             struct sock *parent,
 80                             gfp_t priority, unsigned short type, int kern);
 81 
 82 /**** TRANSPORT ****/
 83 
 84 struct vsock_transport_recv_notify_data {
 85         u64 data1; /* Transport-defined. */
 86         u64 data2; /* Transport-defined. */
 87         bool notify_on_block;
 88 };
 89 
 90 struct vsock_transport_send_notify_data {
 91         u64 data1; /* Transport-defined. */
 92         u64 data2; /* Transport-defined. */
 93 };
 94 
 95 struct vsock_transport {
 96         /* Initialize/tear-down socket. */
 97         int (*init)(struct vsock_sock *, struct vsock_sock *);
 98         void (*destruct)(struct vsock_sock *);
 99         void (*release)(struct vsock_sock *);
100 
101         /* Connections. */
102         int (*connect)(struct vsock_sock *);
103 
104         /* DGRAM. */
105         int (*dgram_bind)(struct vsock_sock *, struct sockaddr_vm *);
106         int (*dgram_dequeue)(struct vsock_sock *vsk, struct msghdr *msg,
107                              size_t len, int flags);
108         int (*dgram_enqueue)(struct vsock_sock *, struct sockaddr_vm *,
109                              struct msghdr *, size_t len);
110         bool (*dgram_allow)(u32 cid, u32 port);
111 
112         /* STREAM. */
113         /* TODO: stream_bind() */
114         ssize_t (*stream_dequeue)(struct vsock_sock *, struct msghdr *,
115                                   size_t len, int flags);
116         ssize_t (*stream_enqueue)(struct vsock_sock *, struct msghdr *,
117                                   size_t len);
118         s64 (*stream_has_data)(struct vsock_sock *);
119         s64 (*stream_has_space)(struct vsock_sock *);
120         u64 (*stream_rcvhiwat)(struct vsock_sock *);
121         bool (*stream_is_active)(struct vsock_sock *);
122         bool (*stream_allow)(u32 cid, u32 port);
123 
124         /* Notification. */
125         int (*notify_poll_in)(struct vsock_sock *, size_t, bool *);
126         int (*notify_poll_out)(struct vsock_sock *, size_t, bool *);
127         int (*notify_recv_init)(struct vsock_sock *, size_t,
128                 struct vsock_transport_recv_notify_data *);
129         int (*notify_recv_pre_block)(struct vsock_sock *, size_t,
130                 struct vsock_transport_recv_notify_data *);
131         int (*notify_recv_pre_dequeue)(struct vsock_sock *, size_t,
132                 struct vsock_transport_recv_notify_data *);
133         int (*notify_recv_post_dequeue)(struct vsock_sock *, size_t,
134                 ssize_t, bool, struct vsock_transport_recv_notify_data *);
135         int (*notify_send_init)(struct vsock_sock *,
136                 struct vsock_transport_send_notify_data *);
137         int (*notify_send_pre_block)(struct vsock_sock *,
138                 struct vsock_transport_send_notify_data *);
139         int (*notify_send_pre_enqueue)(struct vsock_sock *,
140                 struct vsock_transport_send_notify_data *);
141         int (*notify_send_post_enqueue)(struct vsock_sock *, ssize_t,
142                 struct vsock_transport_send_notify_data *);
143 
144         /* Shutdown. */
145         int (*shutdown)(struct vsock_sock *, int);
146 
147         /* Buffer sizes. */
148         void (*set_buffer_size)(struct vsock_sock *, u64);
149         void (*set_min_buffer_size)(struct vsock_sock *, u64);
150         void (*set_max_buffer_size)(struct vsock_sock *, u64);
151         u64 (*get_buffer_size)(struct vsock_sock *);
152         u64 (*get_min_buffer_size)(struct vsock_sock *);
153         u64 (*get_max_buffer_size)(struct vsock_sock *);
154 
155         /* Addressing. */
156         u32 (*get_local_cid)(void);
157 };
158 
159 /**** CORE ****/
160 
161 int __vsock_core_init(const struct vsock_transport *t, struct module *owner);
162 static inline int vsock_core_init(const struct vsock_transport *t)
163 {
164         return __vsock_core_init(t, THIS_MODULE);
165 }
166 void vsock_core_exit(void);
167 
168 /**** UTILS ****/
169 
170 void vsock_release_pending(struct sock *pending);
171 void vsock_add_pending(struct sock *listener, struct sock *pending);
172 void vsock_remove_pending(struct sock *listener, struct sock *pending);
173 void vsock_enqueue_accept(struct sock *listener, struct sock *connected);
174 void vsock_insert_connected(struct vsock_sock *vsk);
175 void vsock_remove_bound(struct vsock_sock *vsk);
176 void vsock_remove_connected(struct vsock_sock *vsk);
177 struct sock *vsock_find_bound_socket(struct sockaddr_vm *addr);
178 struct sock *vsock_find_connected_socket(struct sockaddr_vm *src,
179                                          struct sockaddr_vm *dst);
180 void vsock_for_each_connected_socket(void (*fn)(struct sock *sk));
181 
182 #endif /* __AF_VSOCK_H__ */
183 

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