#include <linux/module.h>
#include <linux/vmalloc.h>
#include <linux/hyperv.h>
#include <net/sock.h>
#include <net/af_vsock.h>
#include <asm/hyperv-tlfs.h>
#define RINGBUFFER_HVS_RCV_SIZE …
#define RINGBUFFER_HVS_SND_SIZE …
#define RINGBUFFER_HVS_MAX_SIZE …
#define HVS_MTU_SIZE …
#define HVS_CLOSE_TIMEOUT …
struct vmpipe_proto_header { … };
struct hvs_recv_buf { … };
#define HVS_SEND_BUF_SIZE …
struct hvs_send_buf { … };
#define HVS_HEADER_LEN …
#define VMBUS_PKT_TRAILER_SIZE …
#define HVS_PKT_LEN(payload_len) …
#define HVS_MAX_PKT_SIZE …
hvs_service_id;
struct hvsock { … };
static const guid_t srv_id_template = …;
static bool hvs_check_transport(struct vsock_sock *vsk);
static bool is_valid_srv_id(const guid_t *id)
{ … }
static unsigned int get_port_by_srv_id(const guid_t *svr_id)
{ … }
static void hvs_addr_init(struct sockaddr_vm *addr, const guid_t *svr_id)
{ … }
static void hvs_set_channel_pending_send_size(struct vmbus_channel *chan)
{ … }
static bool hvs_channel_readable(struct vmbus_channel *chan)
{ … }
static int hvs_channel_readable_payload(struct vmbus_channel *chan)
{ … }
static size_t hvs_channel_writable_bytes(struct vmbus_channel *chan)
{ … }
static int __hvs_send_data(struct vmbus_channel *chan,
struct vmpipe_proto_header *hdr,
size_t to_write)
{ … }
static int hvs_send_data(struct vmbus_channel *chan,
struct hvs_send_buf *send_buf, size_t to_write)
{ … }
static void hvs_channel_cb(void *ctx)
{ … }
static void hvs_do_close_lock_held(struct vsock_sock *vsk,
bool cancel_timeout)
{ … }
static void hvs_close_connection(struct vmbus_channel *chan)
{ … }
static void hvs_open_connection(struct vmbus_channel *chan)
{ … }
static u32 hvs_get_local_cid(void)
{ … }
static int hvs_sock_init(struct vsock_sock *vsk, struct vsock_sock *psk)
{ … }
static int hvs_connect(struct vsock_sock *vsk)
{ … }
static void hvs_shutdown_lock_held(struct hvsock *hvs, int mode)
{ … }
static int hvs_shutdown(struct vsock_sock *vsk, int mode)
{ … }
static void hvs_close_timeout(struct work_struct *work)
{ … }
static bool hvs_close_lock_held(struct vsock_sock *vsk)
{ … }
static void hvs_release(struct vsock_sock *vsk)
{ … }
static void hvs_destruct(struct vsock_sock *vsk)
{ … }
static int hvs_dgram_bind(struct vsock_sock *vsk, struct sockaddr_vm *addr)
{ … }
static int hvs_dgram_dequeue(struct vsock_sock *vsk, struct msghdr *msg,
size_t len, int flags)
{ … }
static int hvs_dgram_enqueue(struct vsock_sock *vsk,
struct sockaddr_vm *remote, struct msghdr *msg,
size_t dgram_len)
{ … }
static bool hvs_dgram_allow(u32 cid, u32 port)
{ … }
static int hvs_update_recv_data(struct hvsock *hvs)
{ … }
static ssize_t hvs_stream_dequeue(struct vsock_sock *vsk, struct msghdr *msg,
size_t len, int flags)
{ … }
static ssize_t hvs_stream_enqueue(struct vsock_sock *vsk, struct msghdr *msg,
size_t len)
{ … }
static s64 hvs_stream_has_data(struct vsock_sock *vsk)
{ … }
static s64 hvs_stream_has_space(struct vsock_sock *vsk)
{ … }
static u64 hvs_stream_rcvhiwat(struct vsock_sock *vsk)
{ … }
static bool hvs_stream_is_active(struct vsock_sock *vsk)
{ … }
static bool hvs_stream_allow(u32 cid, u32 port)
{ … }
static
int hvs_notify_poll_in(struct vsock_sock *vsk, size_t target, bool *readable)
{ … }
static
int hvs_notify_poll_out(struct vsock_sock *vsk, size_t target, bool *writable)
{ … }
static
int hvs_notify_recv_init(struct vsock_sock *vsk, size_t target,
struct vsock_transport_recv_notify_data *d)
{ … }
static
int hvs_notify_recv_pre_block(struct vsock_sock *vsk, size_t target,
struct vsock_transport_recv_notify_data *d)
{ … }
static
int hvs_notify_recv_pre_dequeue(struct vsock_sock *vsk, size_t target,
struct vsock_transport_recv_notify_data *d)
{ … }
static
int hvs_notify_recv_post_dequeue(struct vsock_sock *vsk, size_t target,
ssize_t copied, bool data_read,
struct vsock_transport_recv_notify_data *d)
{ … }
static
int hvs_notify_send_init(struct vsock_sock *vsk,
struct vsock_transport_send_notify_data *d)
{ … }
static
int hvs_notify_send_pre_block(struct vsock_sock *vsk,
struct vsock_transport_send_notify_data *d)
{ … }
static
int hvs_notify_send_pre_enqueue(struct vsock_sock *vsk,
struct vsock_transport_send_notify_data *d)
{ … }
static
int hvs_notify_send_post_enqueue(struct vsock_sock *vsk, ssize_t written,
struct vsock_transport_send_notify_data *d)
{ … }
static
int hvs_notify_set_rcvlowat(struct vsock_sock *vsk, int val)
{ … }
static struct vsock_transport hvs_transport = …;
static bool hvs_check_transport(struct vsock_sock *vsk)
{ … }
static int hvs_probe(struct hv_device *hdev,
const struct hv_vmbus_device_id *dev_id)
{ … }
static void hvs_remove(struct hv_device *hdev)
{ … }
static int hvs_suspend(struct hv_device *hv_dev)
{ … }
static int hvs_resume(struct hv_device *dev)
{ … }
static const struct hv_vmbus_device_id id_table[] = …;
static struct hv_driver hvs_drv = …;
static int __init hvs_init(void)
{ … }
static void __exit hvs_exit(void)
{ … }
module_init(…) …;
module_exit(hvs_exit);
MODULE_DESCRIPTION(…) …;
MODULE_VERSION(…) …;
MODULE_LICENSE(…) …;
MODULE_ALIAS_NETPROTO(…);