示例#1
0
文件: hv_kvp.c 项目: 020gzh/linux
static int kvp_handle_handshake(struct hv_kvp_msg *msg)
{
	switch (msg->kvp_hdr.operation) {
	case KVP_OP_REGISTER:
		dm_reg_value = KVP_OP_REGISTER;
		pr_info("KVP: IP injection functionality not available\n");
		pr_info("KVP: Upgrade the KVP daemon\n");
		break;
	case KVP_OP_REGISTER1:
		dm_reg_value = KVP_OP_REGISTER1;
		break;
	default:
		pr_info("KVP: incompatible daemon\n");
		pr_info("KVP: KVP version: %d, Daemon version: %d\n",
			KVP_OP_REGISTER1, msg->kvp_hdr.operation);
		return -EINVAL;
	}

	/*
	 * We have a compatible daemon; complete the handshake.
	 */
	pr_debug("KVP: userspace daemon ver. %d registered\n",
		 KVP_OP_REGISTER);
	kvp_register(dm_reg_value);
	hv_poll_channel(kvp_transaction.recv_channel, kvp_poll_wrapper);

	return 0;
}
示例#2
0
static int kvp_handle_handshake(struct hv_kvp_msg *msg)
{
    int ret = 1;

    switch (msg->kvp_hdr.operation) {
    case KVP_OP_REGISTER:
        dm_reg_value = KVP_OP_REGISTER;
        pr_info("KVP: IP injection functionality not available\n");
        pr_info("KVP: Upgrade the KVP daemon\n");
        break;
    case KVP_OP_REGISTER1:
        dm_reg_value = KVP_OP_REGISTER1;
        break;
    default:
        pr_info("KVP: incompatible daemon\n");
        pr_info("KVP: KVP version: %d, Daemon version: %d\n",
                KVP_OP_REGISTER1, msg->kvp_hdr.operation);
        ret = 0;
    }

    if (ret) {
        /*
         * We have a compatible daemon; complete the handshake.
         */
        pr_info("KVP: user-mode registering done.\n");
        kvp_register(dm_reg_value);
        kvp_transaction.active = false;
        if (kvp_transaction.kvp_context)
            poll_channel(kvp_transaction.kvp_context);
    }
    return ret;
}
示例#3
0
static void
kvp_cn_callback(struct cn_msg *msg, struct netlink_skb_parms *nsp)
{
	struct hv_ku_msg *message;

	message = (struct hv_ku_msg *)msg->data;
	if (msg->seq == KVP_REGISTER) {
		pr_info("KVP: user-mode registering done.\n");
		kvp_register();
	}

	if (msg->seq == KVP_USER_SET) {
		/*
		 * Complete the transaction by forwarding the key value
		 * to the host. But first, cancel the timeout.
		 */
		if (cancel_delayed_work_sync(&kvp_work))
			kvp_respond_to_host(message->kvp_key,
						message->kvp_value,
						!strlen(message->kvp_key));
	}
}