Drivers: hv: vmbus: define a new VMBus message type for hvsock
authorDexuan Cui <decui@microsoft.com>
Thu, 28 Jan 2016 06:29:40 +0000 (22:29 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 8 Feb 2016 05:34:12 +0000 (21:34 -0800)
A function to send the type of message is also added.

The coming net/hvsock driver will use this function to proactively request
the host to offer a VMBus channel for a new hvsock connection.

Signed-off-by: Dexuan Cui <decui@microsoft.com>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hv/channel.c
drivers/hv/channel_mgmt.c
include/linux/hyperv.h

index 3f04533021468666e102a65a3692f0aec3824e1c..fcab234796ef9f2807ae7a977856924551a3d725 100644 (file)
@@ -219,6 +219,21 @@ error0:
 }
 EXPORT_SYMBOL_GPL(vmbus_open);
 
+/* Used for Hyper-V Socket: a guest client's connect() to the host */
+int vmbus_send_tl_connect_request(const uuid_le *shv_guest_servie_id,
+                                 const uuid_le *shv_host_servie_id)
+{
+       struct vmbus_channel_tl_connect_request conn_msg;
+
+       memset(&conn_msg, 0, sizeof(conn_msg));
+       conn_msg.header.msgtype = CHANNELMSG_TL_CONNECT_REQUEST;
+       conn_msg.guest_endpoint_id = *shv_guest_servie_id;
+       conn_msg.host_service_id = *shv_host_servie_id;
+
+       return vmbus_post_msg(&conn_msg, sizeof(conn_msg));
+}
+EXPORT_SYMBOL_GPL(vmbus_send_tl_connect_request);
+
 /*
  * create_gpadl_header - Creates a gpadl for the specified buffer
  */
index d6c61145760191579e96aac9847378ec48b2476e..60ca25b93b4c9d89955d33cea9a69b21490e0487 100644 (file)
@@ -958,6 +958,10 @@ struct vmbus_channel_message_table_entry
        {CHANNELMSG_VERSION_RESPONSE,           1, vmbus_onversion_response},
        {CHANNELMSG_UNLOAD,                     0, NULL},
        {CHANNELMSG_UNLOAD_RESPONSE,            1, vmbus_unload_response},
+       {CHANNELMSG_18,                         0, NULL},
+       {CHANNELMSG_19,                         0, NULL},
+       {CHANNELMSG_20,                         0, NULL},
+       {CHANNELMSG_TL_CONNECT_REQUEST,         0, NULL},
 };
 
 /*
index 79c4aa70eff3d95d051eda73cd40d9c0320f69bf..898eac9e8c13ea2f36aef6b2c46af666d0b68311 100644 (file)
@@ -392,6 +392,10 @@ enum vmbus_channel_message_type {
        CHANNELMSG_VERSION_RESPONSE             = 15,
        CHANNELMSG_UNLOAD                       = 16,
        CHANNELMSG_UNLOAD_RESPONSE              = 17,
+       CHANNELMSG_18                           = 18,
+       CHANNELMSG_19                           = 19,
+       CHANNELMSG_20                           = 20,
+       CHANNELMSG_TL_CONNECT_REQUEST           = 21,
        CHANNELMSG_COUNT
 };
 
@@ -562,6 +566,13 @@ struct vmbus_channel_initiate_contact {
        u64 monitor_page2;
 } __packed;
 
+/* Hyper-V socket: guest's connect()-ing to host */
+struct vmbus_channel_tl_connect_request {
+       struct vmbus_channel_message_header header;
+       uuid_le guest_endpoint_id;
+       uuid_le host_service_id;
+} __packed;
+
 struct vmbus_channel_version_response {
        struct vmbus_channel_message_header header;
        u8 version_supported;
@@ -1283,4 +1294,6 @@ void hv_process_channel_removal(struct vmbus_channel *channel, u32 relid);
 
 extern __u32 vmbus_proto_version;
 
+int vmbus_send_tl_connect_request(const uuid_le *shv_guest_servie_id,
+                                 const uuid_le *shv_host_servie_id);
 #endif /* _HYPERV_H */