All of lore.kernel.org
 help / color / mirror / Atom feed
From: "K. Y. Srinivasan" <kys@microsoft.com>
To: gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
	devel@linuxdriverproject.org, virtualization@lists.osdl.org,
	olaf@aepfle.de, apw@canonical.com, ben@decadent.org.uk
Cc: "K. Y. Srinivasan" <kys@microsoft.com>
Subject: [PATCH V2 02/18] Drivers: hv: Add KVP definitions for IP address injection
Date: Mon, 13 Aug 2012 10:06:51 -0700	[thread overview]
Message-ID: <1344877627-21779-2-git-send-email-kys@microsoft.com> (raw)
In-Reply-To: <1344877627-21779-1-git-send-email-kys@microsoft.com>

Add the necessary definitions for supporting the IP injection functionality.

Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
Reviewed-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/hv/hv_util.c     |    4 +-
 include/linux/hyperv.h   |   76 ++++++++++++++++++++++++++++++++++++++++++++-
 tools/hv/hv_kvp_daemon.c |    2 +-
 3 files changed, 77 insertions(+), 5 deletions(-)

diff --git a/drivers/hv/hv_util.c b/drivers/hv/hv_util.c
index d3ac6a4..a0667de 100644
--- a/drivers/hv/hv_util.c
+++ b/drivers/hv/hv_util.c
@@ -263,7 +263,7 @@ static int util_probe(struct hv_device *dev,
 		(struct hv_util_service *)dev_id->driver_data;
 	int ret;
 
-	srv->recv_buffer = kmalloc(PAGE_SIZE, GFP_KERNEL);
+	srv->recv_buffer = kmalloc(PAGE_SIZE * 2, GFP_KERNEL);
 	if (!srv->recv_buffer)
 		return -ENOMEM;
 	if (srv->util_init) {
@@ -274,7 +274,7 @@ static int util_probe(struct hv_device *dev,
 		}
 	}
 
-	ret = vmbus_open(dev->channel, 2 * PAGE_SIZE, 2 * PAGE_SIZE, NULL, 0,
+	ret = vmbus_open(dev->channel, 4 * PAGE_SIZE, 4 * PAGE_SIZE, NULL, 0,
 			srv->util_cb, dev->channel);
 	if (ret)
 		goto error;
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
index 68ed7f7..11afc4e 100644
--- a/include/linux/hyperv.h
+++ b/include/linux/hyperv.h
@@ -122,12 +122,53 @@
 #define REG_U32 4
 #define REG_U64 8
 
+/*
+ * As we look at expanding the KVP functionality to include
+ * IP injection functionality, we need to maintain binary
+ * compatibility with older daemons.
+ *
+ * The KVP opcodes are defined by the host and it was unfortunate
+ * that I chose to treat the registration operation as part of the
+ * KVP operations defined by the host.
+ * Here is the level of compatibility
+ * (between the user level daemon and the kernel KVP driver) that we
+ * will implement:
+ *
+ * An older daemon will always be supported on a newer driver.
+ * A given user level daemon will require a minimal version of the
+ * kernel driver.
+ * If we cannot handle the version differences, we will fail gracefully
+ * (this can happen when we have a user level daemon that is more
+ * advanced than the KVP driver.
+ *
+ * We will use values used in this handshake for determining if we have
+ * workable user level daemon and the kernel driver. We begin by taking the
+ * registration opcode out of the KVP opcode namespace. We will however,
+ * maintain compatibility with the existing user-level daemon code.
+ */
+
+/*
+ * Daemon code not supporting IP injection (legacy daemon).
+ */
+
+#define KVP_OP_REGISTER	4
+
+/*
+ * Daemon code supporting IP injection.
+ * The KVP opcode field is used to communicate the
+ * registration information; so define a namespace that
+ * will be distinct from the host defined KVP opcode.
+ */
+
+#define KVP_OP_REGISTER1 100
+
 enum hv_kvp_exchg_op {
 	KVP_OP_GET = 0,
 	KVP_OP_SET,
 	KVP_OP_DELETE,
 	KVP_OP_ENUMERATE,
-	KVP_OP_REGISTER,
+	KVP_OP_GET_IP_INFO,
+	KVP_OP_SET_IP_INFO,
 	KVP_OP_COUNT /* Number of operations, must be last. */
 };
 
@@ -140,6 +181,26 @@ enum hv_kvp_exchg_pool {
 	KVP_POOL_COUNT /* Number of pools, must be last. */
 };
 
+#define ADDR_FAMILY_NONE	0x00
+#define ADDR_FAMILY_IPV4	0x01
+#define ADDR_FAMILY_IPV6	0x02
+
+#define MAX_ADAPTER_ID_SIZE	128
+#define MAX_IP_ADDR_SIZE	1024
+#define MAX_GATEWAY_SIZE	512
+
+
+struct hv_kvp_ipaddr_value {
+	__u16	adapter_id[MAX_ADAPTER_ID_SIZE];
+	__u8	addr_family;
+	__u8	dhcp_enabled;
+	__u16	ip_addr[MAX_IP_ADDR_SIZE];
+	__u16	sub_net[MAX_IP_ADDR_SIZE];
+	__u16	gate_way[MAX_GATEWAY_SIZE];
+	__u16	dns_addr[MAX_IP_ADDR_SIZE];
+} __attribute__((packed));
+
+
 struct hv_kvp_hdr {
 	__u8 operation;
 	__u8 pool;
@@ -181,16 +242,26 @@ struct hv_kvp_register {
 };
 
 struct hv_kvp_msg {
-	struct hv_kvp_hdr	kvp_hdr;
+	union {
+		struct hv_kvp_hdr	kvp_hdr;
+		int error;
+	};
 	union {
 		struct hv_kvp_msg_get		kvp_get;
 		struct hv_kvp_msg_set		kvp_set;
 		struct hv_kvp_msg_delete	kvp_delete;
 		struct hv_kvp_msg_enumerate	kvp_enum_data;
+		struct hv_kvp_ipaddr_value      kvp_ip_val;
 		struct hv_kvp_register		kvp_register;
 	} body;
 } __attribute__((packed));
 
+struct hv_kvp_ip_msg {
+	__u8 operation;
+	__u8 pool;
+	struct hv_kvp_ipaddr_value      kvp_ip_val;
+} __attribute__((packed));
+
 #ifdef __KERNEL__
 #include <linux/scatterlist.h>
 #include <linux/list.h>
@@ -982,6 +1053,7 @@ void vmbus_driver_unregister(struct hv_driver *hv_driver);
 #define HV_S_CONT			0x80070103
 #define HV_ERROR_NOT_SUPPORTED		0x80070032
 #define HV_ERROR_MACHINE_LOCKED		0x800704F7
+#define HV_ERROR_DEVICE_NOT_CONNECTED	0x8007048F
 
 /*
  * While we want to handle util services as regular devices,
diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
index d9834b3..8fbcf7b 100644
--- a/tools/hv/hv_kvp_daemon.c
+++ b/tools/hv/hv_kvp_daemon.c
@@ -69,7 +69,7 @@ enum key_index {
 };
 
 static char kvp_send_buffer[4096];
-static char kvp_recv_buffer[4096];
+static char kvp_recv_buffer[4096 * 2];
 static struct sockaddr_nl addr;
 
 static char *os_name = "";
-- 
1.7.4.1

  reply	other threads:[~2012-08-13 17:06 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-13 17:06 [PATCH V2 00/18] drivers: hv: kvp K. Y. Srinivasan
2012-08-13 17:06 ` K. Y. Srinivasan
2012-08-13 17:06 ` [PATCH V2 01/18] Drivers: hv: vmbus: Use the standard format string to format GUIDs K. Y. Srinivasan
2012-08-13 17:06   ` K. Y. Srinivasan [this message]
2012-08-14  1:38     ` [PATCH V2 02/18] Drivers: hv: Add KVP definitions for IP address injection Greg KH
2012-08-14  1:38       ` Greg KH
2012-08-14  1:56       ` Ben Hutchings
2012-08-14  2:56       ` KY Srinivasan
2012-08-14  2:56         ` KY Srinivasan
2012-08-15 12:39         ` KY Srinivasan
2012-08-13 17:06   ` [PATCH V2 03/18] Drivers: hv: kvp: Cleanup error handling in KVP K. Y. Srinivasan
2012-08-13 17:06   ` [PATCH V2 04/18] Drivers: hv: kvp: Support the new IP injection messages K. Y. Srinivasan
2012-08-13 17:06     ` K. Y. Srinivasan
2012-08-16 20:50     ` Greg KH
2012-08-13 17:06   ` [PATCH V2 05/18] Tools: hv: Prepare to expand kvp_get_ip_address() functionality K. Y. Srinivasan
2012-08-13 17:06   ` [PATCH V2 06/18] Tools: hv: Further refactor kvp_get_ip_address() K. Y. Srinivasan
2012-08-14  1:46     ` Ben Hutchings
2012-08-14  3:01       ` KY Srinivasan
2012-08-14  3:01         ` KY Srinivasan
2012-08-13 17:06   ` [PATCH V2 07/18] Tools: hv: Gather address family information K. Y. Srinivasan
2012-08-13 17:06   ` [PATCH V2 08/18] Tools: hv: Gather subnet information K. Y. Srinivasan
2012-08-13 17:06     ` K. Y. Srinivasan
2012-08-13 17:06   ` [PATCH V2 09/18] Tools: hv: Represent the ipv6 mask using CIDR notation K. Y. Srinivasan
2012-08-13 17:06     ` K. Y. Srinivasan
2012-08-13 17:06   ` [PATCH V2 10/18] Tools: hv: Gather ipv[4,6] gateway information K. Y. Srinivasan
2012-08-13 17:06     ` K. Y. Srinivasan
2012-08-13 17:07   ` [PATCH V2 11/18] Tools: hv: Gather DNS information K. Y. Srinivasan
2012-08-13 17:07     ` K. Y. Srinivasan
2012-08-13 17:07   ` [PATCH V2 12/18] Tools: hv: Gather DHCP information K. Y. Srinivasan
2012-08-13 17:07     ` K. Y. Srinivasan
2012-08-13 17:07   ` [PATCH V2 13/18] Tools: hv: Implement the KVP verb - KVP_OP_SET_IP_INFO K. Y. Srinivasan
2012-08-13 17:07     ` K. Y. Srinivasan
2012-08-13 17:07   ` [PATCH V2 14/18] Tools: hv: Rename the function kvp_get_ip_address() K. Y. Srinivasan
2012-08-13 17:07   ` [PATCH V2 15/18] Tools: hv: Implement the KVP verb - KVP_OP_GET_IP_INFO K. Y. Srinivasan
2012-08-13 17:07   ` [PATCH V2 16/18] Tools: hv: Get rid of some unused variables K. Y. Srinivasan
2012-08-13 17:07   ` [PATCH V2 17/18] Tools: hv: Correctly type string variables K. Y. Srinivasan
2012-08-13 17:07   ` [PATCH V2 18/18] Tools: hv: Properly manage open streams K. Y. Srinivasan
2012-08-14  1:57     ` Ben Hutchings
2012-08-14  3:17       ` KY Srinivasan
2012-08-14  3:17         ` KY Srinivasan
2012-08-16 20:55 ` [PATCH V2 00/18] drivers: hv: kvp Greg KH
2012-08-16 22:40   ` KY Srinivasan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1344877627-21779-2-git-send-email-kys@microsoft.com \
    --to=kys@microsoft.com \
    --cc=apw@canonical.com \
    --cc=ben@decadent.org.uk \
    --cc=devel@linuxdriverproject.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=olaf@aepfle.de \
    --cc=virtualization@lists.osdl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.