mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 06:31:49 +00:00
Drivers: hv: Add new message types to enhance KVP
Add additional KVP (Key Value Pair) protocol messages to enhance KVP functionality for Linux guests on Hyper-V. As part of this, patch define an explicit version negoitiation message. Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com> Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
04bf30115f
commit
e485ceac9e
@ -78,7 +78,7 @@ kvp_register(void)
|
|||||||
|
|
||||||
if (msg) {
|
if (msg) {
|
||||||
kvp_msg = (struct hv_kvp_msg *)msg->data;
|
kvp_msg = (struct hv_kvp_msg *)msg->data;
|
||||||
version = kvp_msg->body.kvp_version;
|
version = kvp_msg->body.kvp_register.version;
|
||||||
msg->id.idx = CN_KVP_IDX;
|
msg->id.idx = CN_KVP_IDX;
|
||||||
msg->id.val = CN_KVP_VAL;
|
msg->id.val = CN_KVP_VAL;
|
||||||
|
|
||||||
@ -122,7 +122,8 @@ kvp_cn_callback(struct cn_msg *msg, struct netlink_skb_parms *nsp)
|
|||||||
* to the host. But first, cancel the timeout.
|
* to the host. But first, cancel the timeout.
|
||||||
*/
|
*/
|
||||||
if (cancel_delayed_work_sync(&kvp_work))
|
if (cancel_delayed_work_sync(&kvp_work))
|
||||||
kvp_respond_to_host(data->data.key, data->data.value,
|
kvp_respond_to_host(data->data.key,
|
||||||
|
data->data.value,
|
||||||
!strlen(data->data.key));
|
!strlen(data->data.key));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -149,7 +149,11 @@ struct hv_kvp_exchg_msg_value {
|
|||||||
__u32 key_size;
|
__u32 key_size;
|
||||||
__u32 value_size;
|
__u32 value_size;
|
||||||
__u8 key[HV_KVP_EXCHANGE_MAX_KEY_SIZE];
|
__u8 key[HV_KVP_EXCHANGE_MAX_KEY_SIZE];
|
||||||
__u8 value[HV_KVP_EXCHANGE_MAX_VALUE_SIZE];
|
union {
|
||||||
|
__u8 value[HV_KVP_EXCHANGE_MAX_VALUE_SIZE];
|
||||||
|
__u32 value_u32;
|
||||||
|
__u64 value_u64;
|
||||||
|
};
|
||||||
} __attribute__((packed));
|
} __attribute__((packed));
|
||||||
|
|
||||||
struct hv_kvp_msg_enumerate {
|
struct hv_kvp_msg_enumerate {
|
||||||
@ -157,11 +161,31 @@ struct hv_kvp_msg_enumerate {
|
|||||||
struct hv_kvp_exchg_msg_value data;
|
struct hv_kvp_exchg_msg_value data;
|
||||||
} __attribute__((packed));
|
} __attribute__((packed));
|
||||||
|
|
||||||
|
struct hv_kvp_msg_get {
|
||||||
|
struct hv_kvp_exchg_msg_value data;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct hv_kvp_msg_set {
|
||||||
|
struct hv_kvp_exchg_msg_value data;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct hv_kvp_msg_delete {
|
||||||
|
__u32 key_size;
|
||||||
|
__u8 key[HV_KVP_EXCHANGE_MAX_KEY_SIZE];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct hv_kvp_register {
|
||||||
|
__u8 version[HV_KVP_EXCHANGE_MAX_KEY_SIZE];
|
||||||
|
};
|
||||||
|
|
||||||
struct hv_kvp_msg {
|
struct hv_kvp_msg {
|
||||||
struct hv_kvp_hdr kvp_hdr;
|
struct hv_kvp_hdr kvp_hdr;
|
||||||
union {
|
union {
|
||||||
struct hv_kvp_msg_enumerate kvp_enum_data;
|
struct hv_kvp_msg_get kvp_get;
|
||||||
char kvp_version[HV_KVP_EXCHANGE_MAX_KEY_SIZE];
|
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_register kvp_register;
|
||||||
} body;
|
} body;
|
||||||
} __attribute__((packed));
|
} __attribute__((packed));
|
||||||
|
|
||||||
|
@ -378,7 +378,7 @@ int main(void)
|
|||||||
* Driver is registering with us; stash away the version
|
* Driver is registering with us; stash away the version
|
||||||
* information.
|
* information.
|
||||||
*/
|
*/
|
||||||
p = (char *)hv_msg->body.kvp_version;
|
p = (char *)hv_msg->body.kvp_register.version;
|
||||||
lic_version = malloc(strlen(p) + 1);
|
lic_version = malloc(strlen(p) + 1);
|
||||||
if (lic_version) {
|
if (lic_version) {
|
||||||
strcpy(lic_version, p);
|
strcpy(lic_version, p);
|
||||||
|
Loading…
Reference in New Issue
Block a user