1e2be04c7SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 25267cf02SBjarke Istrup Pedersen /* 35267cf02SBjarke Istrup Pedersen * 45267cf02SBjarke Istrup Pedersen * Copyright (c) 2011, Microsoft Corporation. 55267cf02SBjarke Istrup Pedersen * 65267cf02SBjarke Istrup Pedersen * This program is free software; you can redistribute it and/or modify it 75267cf02SBjarke Istrup Pedersen * under the terms and conditions of the GNU General Public License, 85267cf02SBjarke Istrup Pedersen * version 2, as published by the Free Software Foundation. 95267cf02SBjarke Istrup Pedersen * 105267cf02SBjarke Istrup Pedersen * This program is distributed in the hope it will be useful, but WITHOUT 115267cf02SBjarke Istrup Pedersen * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 125267cf02SBjarke Istrup Pedersen * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 135267cf02SBjarke Istrup Pedersen * more details. 145267cf02SBjarke Istrup Pedersen * 155267cf02SBjarke Istrup Pedersen * You should have received a copy of the GNU General Public License along with 165267cf02SBjarke Istrup Pedersen * this program; if not, write to the Free Software Foundation, Inc., 59 Temple 175267cf02SBjarke Istrup Pedersen * Place - Suite 330, Boston, MA 02111-1307 USA. 185267cf02SBjarke Istrup Pedersen * 195267cf02SBjarke Istrup Pedersen * Authors: 205267cf02SBjarke Istrup Pedersen * Haiyang Zhang <haiyangz@microsoft.com> 215267cf02SBjarke Istrup Pedersen * Hank Janssen <hjanssen@microsoft.com> 225267cf02SBjarke Istrup Pedersen * K. Y. Srinivasan <kys@microsoft.com> 235267cf02SBjarke Istrup Pedersen * 245267cf02SBjarke Istrup Pedersen */ 255267cf02SBjarke Istrup Pedersen 265267cf02SBjarke Istrup Pedersen #ifndef _UAPI_HYPERV_H 275267cf02SBjarke Istrup Pedersen #define _UAPI_HYPERV_H 285267cf02SBjarke Istrup Pedersen 2995a13ee8SAndy Shevchenko #include <linux/types.h> 3001325476SK. Y. Srinivasan 315267cf02SBjarke Istrup Pedersen /* 325267cf02SBjarke Istrup Pedersen * Framework version for util services. 335267cf02SBjarke Istrup Pedersen */ 345267cf02SBjarke Istrup Pedersen #define UTIL_FW_MINOR 0 355267cf02SBjarke Istrup Pedersen 365267cf02SBjarke Istrup Pedersen #define UTIL_WS2K8_FW_MAJOR 1 375267cf02SBjarke Istrup Pedersen #define UTIL_WS2K8_FW_VERSION (UTIL_WS2K8_FW_MAJOR << 16 | UTIL_FW_MINOR) 385267cf02SBjarke Istrup Pedersen 395267cf02SBjarke Istrup Pedersen #define UTIL_FW_MAJOR 3 405267cf02SBjarke Istrup Pedersen #define UTIL_FW_VERSION (UTIL_FW_MAJOR << 16 | UTIL_FW_MINOR) 415267cf02SBjarke Istrup Pedersen 425267cf02SBjarke Istrup Pedersen 435267cf02SBjarke Istrup Pedersen /* 445267cf02SBjarke Istrup Pedersen * Implementation of host controlled snapshot of the guest. 455267cf02SBjarke Istrup Pedersen */ 465267cf02SBjarke Istrup Pedersen 475267cf02SBjarke Istrup Pedersen #define VSS_OP_REGISTER 128 485267cf02SBjarke Istrup Pedersen 49cd8dc054SVitaly Kuznetsov /* 50cd8dc054SVitaly Kuznetsov Daemon code with full handshake support. 51cd8dc054SVitaly Kuznetsov */ 52cd8dc054SVitaly Kuznetsov #define VSS_OP_REGISTER1 129 53cd8dc054SVitaly Kuznetsov 545267cf02SBjarke Istrup Pedersen enum hv_vss_op { 555267cf02SBjarke Istrup Pedersen VSS_OP_CREATE = 0, 565267cf02SBjarke Istrup Pedersen VSS_OP_DELETE, 575267cf02SBjarke Istrup Pedersen VSS_OP_HOT_BACKUP, 585267cf02SBjarke Istrup Pedersen VSS_OP_GET_DM_INFO, 595267cf02SBjarke Istrup Pedersen VSS_OP_BU_COMPLETE, 605267cf02SBjarke Istrup Pedersen /* 615267cf02SBjarke Istrup Pedersen * Following operations are only supported with IC version >= 5.0 625267cf02SBjarke Istrup Pedersen */ 635267cf02SBjarke Istrup Pedersen VSS_OP_FREEZE, /* Freeze the file systems in the VM */ 645267cf02SBjarke Istrup Pedersen VSS_OP_THAW, /* Unfreeze the file systems */ 655267cf02SBjarke Istrup Pedersen VSS_OP_AUTO_RECOVER, 665267cf02SBjarke Istrup Pedersen VSS_OP_COUNT /* Number of operations, must be last */ 675267cf02SBjarke Istrup Pedersen }; 685267cf02SBjarke Istrup Pedersen 695267cf02SBjarke Istrup Pedersen 705267cf02SBjarke Istrup Pedersen /* 715267cf02SBjarke Istrup Pedersen * Header for all VSS messages. 725267cf02SBjarke Istrup Pedersen */ 735267cf02SBjarke Istrup Pedersen struct hv_vss_hdr { 745267cf02SBjarke Istrup Pedersen __u8 operation; 755267cf02SBjarke Istrup Pedersen __u8 reserved[7]; 765267cf02SBjarke Istrup Pedersen } __attribute__((packed)); 775267cf02SBjarke Istrup Pedersen 785267cf02SBjarke Istrup Pedersen 795267cf02SBjarke Istrup Pedersen /* 805267cf02SBjarke Istrup Pedersen * Flag values for the hv_vss_check_feature. Linux supports only 815267cf02SBjarke Istrup Pedersen * one value. 825267cf02SBjarke Istrup Pedersen */ 835267cf02SBjarke Istrup Pedersen #define VSS_HBU_NO_AUTO_RECOVERY 0x00000005 845267cf02SBjarke Istrup Pedersen 855267cf02SBjarke Istrup Pedersen struct hv_vss_check_feature { 865267cf02SBjarke Istrup Pedersen __u32 flags; 875267cf02SBjarke Istrup Pedersen } __attribute__((packed)); 885267cf02SBjarke Istrup Pedersen 895267cf02SBjarke Istrup Pedersen struct hv_vss_check_dm_info { 905267cf02SBjarke Istrup Pedersen __u32 flags; 915267cf02SBjarke Istrup Pedersen } __attribute__((packed)); 925267cf02SBjarke Istrup Pedersen 93*6de74d10SMichael Kelley /* 94*6de74d10SMichael Kelley * struct hv_vss_msg encodes the fields that the Linux VSS 95*6de74d10SMichael Kelley * driver accesses. However, FREEZE messages from Hyper-V contain 96*6de74d10SMichael Kelley * additional LUN information that Linux doesn't use and are not 97*6de74d10SMichael Kelley * represented in struct hv_vss_msg. A received FREEZE message may 98*6de74d10SMichael Kelley * be as large as 6,260 bytes, so the driver must allocate at least 99*6de74d10SMichael Kelley * that much space, not sizeof(struct hv_vss_msg). Other messages 100*6de74d10SMichael Kelley * such as AUTO_RECOVER may be as large as 12,500 bytes. However, 101*6de74d10SMichael Kelley * because the Linux VSS driver responds that it doesn't support 102*6de74d10SMichael Kelley * auto-recovery, it should not receive such messages. 103*6de74d10SMichael Kelley */ 1045267cf02SBjarke Istrup Pedersen struct hv_vss_msg { 1055267cf02SBjarke Istrup Pedersen union { 1065267cf02SBjarke Istrup Pedersen struct hv_vss_hdr vss_hdr; 1075267cf02SBjarke Istrup Pedersen int error; 1085267cf02SBjarke Istrup Pedersen }; 1095267cf02SBjarke Istrup Pedersen union { 1105267cf02SBjarke Istrup Pedersen struct hv_vss_check_feature vss_cf; 1115267cf02SBjarke Istrup Pedersen struct hv_vss_check_dm_info dm_info; 1125267cf02SBjarke Istrup Pedersen }; 1135267cf02SBjarke Istrup Pedersen } __attribute__((packed)); 1145267cf02SBjarke Istrup Pedersen 1155267cf02SBjarke Istrup Pedersen /* 11601325476SK. Y. Srinivasan * Implementation of a host to guest copy facility. 11701325476SK. Y. Srinivasan */ 11801325476SK. Y. Srinivasan 11901325476SK. Y. Srinivasan #define FCOPY_VERSION_0 0 120a4d1ee5bSVitaly Kuznetsov #define FCOPY_VERSION_1 1 121a4d1ee5bSVitaly Kuznetsov #define FCOPY_CURRENT_VERSION FCOPY_VERSION_1 12201325476SK. Y. Srinivasan #define W_MAX_PATH 260 12301325476SK. Y. Srinivasan 12401325476SK. Y. Srinivasan enum hv_fcopy_op { 12501325476SK. Y. Srinivasan START_FILE_COPY = 0, 12601325476SK. Y. Srinivasan WRITE_TO_FILE, 12701325476SK. Y. Srinivasan COMPLETE_FCOPY, 12801325476SK. Y. Srinivasan CANCEL_FCOPY, 12901325476SK. Y. Srinivasan }; 13001325476SK. Y. Srinivasan 13101325476SK. Y. Srinivasan struct hv_fcopy_hdr { 13201325476SK. Y. Srinivasan __u32 operation; 133f081bbb3SAndy Shevchenko __u8 service_id0[16]; /* currently unused */ 134f081bbb3SAndy Shevchenko __u8 service_id1[16]; /* currently unused */ 13501325476SK. Y. Srinivasan } __attribute__((packed)); 13601325476SK. Y. Srinivasan 13701325476SK. Y. Srinivasan #define OVER_WRITE 0x1 13801325476SK. Y. Srinivasan #define CREATE_PATH 0x2 13901325476SK. Y. Srinivasan 14001325476SK. Y. Srinivasan struct hv_start_fcopy { 14101325476SK. Y. Srinivasan struct hv_fcopy_hdr hdr; 14201325476SK. Y. Srinivasan __u16 file_name[W_MAX_PATH]; 14301325476SK. Y. Srinivasan __u16 path_name[W_MAX_PATH]; 14401325476SK. Y. Srinivasan __u32 copy_flags; 14501325476SK. Y. Srinivasan __u64 file_size; 14601325476SK. Y. Srinivasan } __attribute__((packed)); 14701325476SK. Y. Srinivasan 14801325476SK. Y. Srinivasan /* 14901325476SK. Y. Srinivasan * The file is chunked into fragments. 15001325476SK. Y. Srinivasan */ 15101325476SK. Y. Srinivasan #define DATA_FRAGMENT (6 * 1024) 15201325476SK. Y. Srinivasan 15301325476SK. Y. Srinivasan struct hv_do_fcopy { 15401325476SK. Y. Srinivasan struct hv_fcopy_hdr hdr; 15531d4ea1aSVitaly Kuznetsov __u32 pad; 15601325476SK. Y. Srinivasan __u64 offset; 15701325476SK. Y. Srinivasan __u32 size; 15801325476SK. Y. Srinivasan __u8 data[DATA_FRAGMENT]; 159bc5a5b02SK. Y. Srinivasan } __attribute__((packed)); 16001325476SK. Y. Srinivasan 16101325476SK. Y. Srinivasan /* 1625267cf02SBjarke Istrup Pedersen * An implementation of HyperV key value pair (KVP) functionality for Linux. 1635267cf02SBjarke Istrup Pedersen * 1645267cf02SBjarke Istrup Pedersen * 1655267cf02SBjarke Istrup Pedersen * Copyright (C) 2010, Novell, Inc. 1665267cf02SBjarke Istrup Pedersen * Author : K. Y. Srinivasan <ksrinivasan@novell.com> 1675267cf02SBjarke Istrup Pedersen * 1685267cf02SBjarke Istrup Pedersen */ 1695267cf02SBjarke Istrup Pedersen 1705267cf02SBjarke Istrup Pedersen /* 1715267cf02SBjarke Istrup Pedersen * Maximum value size - used for both key names and value data, and includes 1725267cf02SBjarke Istrup Pedersen * any applicable NULL terminators. 1735267cf02SBjarke Istrup Pedersen * 1745267cf02SBjarke Istrup Pedersen * Note: This limit is somewhat arbitrary, but falls easily within what is 1755267cf02SBjarke Istrup Pedersen * supported for all native guests (back to Win 2000) and what is reasonable 1765267cf02SBjarke Istrup Pedersen * for the IC KVP exchange functionality. Note that Windows Me/98/95 are 1775267cf02SBjarke Istrup Pedersen * limited to 255 character key names. 1785267cf02SBjarke Istrup Pedersen * 1795267cf02SBjarke Istrup Pedersen * MSDN recommends not storing data values larger than 2048 bytes in the 1805267cf02SBjarke Istrup Pedersen * registry. 1815267cf02SBjarke Istrup Pedersen * 1825267cf02SBjarke Istrup Pedersen * Note: This value is used in defining the KVP exchange message - this value 1835267cf02SBjarke Istrup Pedersen * cannot be modified without affecting the message size and compatibility. 1845267cf02SBjarke Istrup Pedersen */ 1855267cf02SBjarke Istrup Pedersen 1865267cf02SBjarke Istrup Pedersen /* 1875267cf02SBjarke Istrup Pedersen * bytes, including any null terminators 1885267cf02SBjarke Istrup Pedersen */ 1895267cf02SBjarke Istrup Pedersen #define HV_KVP_EXCHANGE_MAX_VALUE_SIZE (2048) 1905267cf02SBjarke Istrup Pedersen 1915267cf02SBjarke Istrup Pedersen 1925267cf02SBjarke Istrup Pedersen /* 1935267cf02SBjarke Istrup Pedersen * Maximum key size - the registry limit for the length of an entry name 1945267cf02SBjarke Istrup Pedersen * is 256 characters, including the null terminator 1955267cf02SBjarke Istrup Pedersen */ 1965267cf02SBjarke Istrup Pedersen 1975267cf02SBjarke Istrup Pedersen #define HV_KVP_EXCHANGE_MAX_KEY_SIZE (512) 1985267cf02SBjarke Istrup Pedersen 1995267cf02SBjarke Istrup Pedersen /* 2005267cf02SBjarke Istrup Pedersen * In Linux, we implement the KVP functionality in two components: 2015267cf02SBjarke Istrup Pedersen * 1) The kernel component which is packaged as part of the hv_utils driver 2025267cf02SBjarke Istrup Pedersen * is responsible for communicating with the host and responsible for 2035267cf02SBjarke Istrup Pedersen * implementing the host/guest protocol. 2) A user level daemon that is 2045267cf02SBjarke Istrup Pedersen * responsible for data gathering. 2055267cf02SBjarke Istrup Pedersen * 2065267cf02SBjarke Istrup Pedersen * Host/Guest Protocol: The host iterates over an index and expects the guest 2075267cf02SBjarke Istrup Pedersen * to assign a key name to the index and also return the value corresponding to 2085267cf02SBjarke Istrup Pedersen * the key. The host will have atmost one KVP transaction outstanding at any 2095267cf02SBjarke Istrup Pedersen * given point in time. The host side iteration stops when the guest returns 2105267cf02SBjarke Istrup Pedersen * an error. Microsoft has specified the following mapping of key names to 2115267cf02SBjarke Istrup Pedersen * host specified index: 2125267cf02SBjarke Istrup Pedersen * 2135267cf02SBjarke Istrup Pedersen * Index Key Name 2145267cf02SBjarke Istrup Pedersen * 0 FullyQualifiedDomainName 2155267cf02SBjarke Istrup Pedersen * 1 IntegrationServicesVersion 2165267cf02SBjarke Istrup Pedersen * 2 NetworkAddressIPv4 2175267cf02SBjarke Istrup Pedersen * 3 NetworkAddressIPv6 2185267cf02SBjarke Istrup Pedersen * 4 OSBuildNumber 2195267cf02SBjarke Istrup Pedersen * 5 OSName 2205267cf02SBjarke Istrup Pedersen * 6 OSMajorVersion 2215267cf02SBjarke Istrup Pedersen * 7 OSMinorVersion 2225267cf02SBjarke Istrup Pedersen * 8 OSVersion 2235267cf02SBjarke Istrup Pedersen * 9 ProcessorArchitecture 2245267cf02SBjarke Istrup Pedersen * 2255267cf02SBjarke Istrup Pedersen * The Windows host expects the Key Name and Key Value to be encoded in utf16. 2265267cf02SBjarke Istrup Pedersen * 2275267cf02SBjarke Istrup Pedersen * Guest Kernel/KVP Daemon Protocol: As noted earlier, we implement all of the 2285267cf02SBjarke Istrup Pedersen * data gathering functionality in a user mode daemon. The user level daemon 2295267cf02SBjarke Istrup Pedersen * is also responsible for binding the key name to the index as well. The 2305267cf02SBjarke Istrup Pedersen * kernel and user-level daemon communicate using a connector channel. 2315267cf02SBjarke Istrup Pedersen * 2325267cf02SBjarke Istrup Pedersen * The user mode component first registers with the 2337deff7b5SRandy Dunlap * kernel component. Subsequently, the kernel component requests, data 2345267cf02SBjarke Istrup Pedersen * for the specified keys. In response to this message the user mode component 2355267cf02SBjarke Istrup Pedersen * fills in the value corresponding to the specified key. We overload the 2365267cf02SBjarke Istrup Pedersen * sequence field in the cn_msg header to define our KVP message types. 2375267cf02SBjarke Istrup Pedersen * 2385267cf02SBjarke Istrup Pedersen * 2395267cf02SBjarke Istrup Pedersen * The kernel component simply acts as a conduit for communication between the 2405267cf02SBjarke Istrup Pedersen * Windows host and the user-level daemon. The kernel component passes up the 2415267cf02SBjarke Istrup Pedersen * index received from the Host to the user-level daemon. If the index is 2425267cf02SBjarke Istrup Pedersen * valid (supported), the corresponding key as well as its 2435267cf02SBjarke Istrup Pedersen * value (both are strings) is returned. If the index is invalid 2445267cf02SBjarke Istrup Pedersen * (not supported), a NULL key string is returned. 2455267cf02SBjarke Istrup Pedersen */ 2465267cf02SBjarke Istrup Pedersen 2475267cf02SBjarke Istrup Pedersen 2485267cf02SBjarke Istrup Pedersen /* 2495267cf02SBjarke Istrup Pedersen * Registry value types. 2505267cf02SBjarke Istrup Pedersen */ 2515267cf02SBjarke Istrup Pedersen 2525267cf02SBjarke Istrup Pedersen #define REG_SZ 1 2535267cf02SBjarke Istrup Pedersen #define REG_U32 4 2545267cf02SBjarke Istrup Pedersen #define REG_U64 8 2555267cf02SBjarke Istrup Pedersen 2565267cf02SBjarke Istrup Pedersen /* 2575267cf02SBjarke Istrup Pedersen * As we look at expanding the KVP functionality to include 2585267cf02SBjarke Istrup Pedersen * IP injection functionality, we need to maintain binary 2595267cf02SBjarke Istrup Pedersen * compatibility with older daemons. 2605267cf02SBjarke Istrup Pedersen * 2615267cf02SBjarke Istrup Pedersen * The KVP opcodes are defined by the host and it was unfortunate 2625267cf02SBjarke Istrup Pedersen * that I chose to treat the registration operation as part of the 2635267cf02SBjarke Istrup Pedersen * KVP operations defined by the host. 2645267cf02SBjarke Istrup Pedersen * Here is the level of compatibility 2655267cf02SBjarke Istrup Pedersen * (between the user level daemon and the kernel KVP driver) that we 2665267cf02SBjarke Istrup Pedersen * will implement: 2675267cf02SBjarke Istrup Pedersen * 2685267cf02SBjarke Istrup Pedersen * An older daemon will always be supported on a newer driver. 2695267cf02SBjarke Istrup Pedersen * A given user level daemon will require a minimal version of the 2705267cf02SBjarke Istrup Pedersen * kernel driver. 2715267cf02SBjarke Istrup Pedersen * If we cannot handle the version differences, we will fail gracefully 2725267cf02SBjarke Istrup Pedersen * (this can happen when we have a user level daemon that is more 2735267cf02SBjarke Istrup Pedersen * advanced than the KVP driver. 2745267cf02SBjarke Istrup Pedersen * 2755267cf02SBjarke Istrup Pedersen * We will use values used in this handshake for determining if we have 2765267cf02SBjarke Istrup Pedersen * workable user level daemon and the kernel driver. We begin by taking the 2775267cf02SBjarke Istrup Pedersen * registration opcode out of the KVP opcode namespace. We will however, 2785267cf02SBjarke Istrup Pedersen * maintain compatibility with the existing user-level daemon code. 2795267cf02SBjarke Istrup Pedersen */ 2805267cf02SBjarke Istrup Pedersen 2815267cf02SBjarke Istrup Pedersen /* 2825267cf02SBjarke Istrup Pedersen * Daemon code not supporting IP injection (legacy daemon). 2835267cf02SBjarke Istrup Pedersen */ 2845267cf02SBjarke Istrup Pedersen 2855267cf02SBjarke Istrup Pedersen #define KVP_OP_REGISTER 4 2865267cf02SBjarke Istrup Pedersen 2875267cf02SBjarke Istrup Pedersen /* 2885267cf02SBjarke Istrup Pedersen * Daemon code supporting IP injection. 2895267cf02SBjarke Istrup Pedersen * The KVP opcode field is used to communicate the 2905267cf02SBjarke Istrup Pedersen * registration information; so define a namespace that 2915267cf02SBjarke Istrup Pedersen * will be distinct from the host defined KVP opcode. 2925267cf02SBjarke Istrup Pedersen */ 2935267cf02SBjarke Istrup Pedersen 2945267cf02SBjarke Istrup Pedersen #define KVP_OP_REGISTER1 100 2955267cf02SBjarke Istrup Pedersen 2965267cf02SBjarke Istrup Pedersen enum hv_kvp_exchg_op { 2975267cf02SBjarke Istrup Pedersen KVP_OP_GET = 0, 2985267cf02SBjarke Istrup Pedersen KVP_OP_SET, 2995267cf02SBjarke Istrup Pedersen KVP_OP_DELETE, 3005267cf02SBjarke Istrup Pedersen KVP_OP_ENUMERATE, 3015267cf02SBjarke Istrup Pedersen KVP_OP_GET_IP_INFO, 3025267cf02SBjarke Istrup Pedersen KVP_OP_SET_IP_INFO, 3035267cf02SBjarke Istrup Pedersen KVP_OP_COUNT /* Number of operations, must be last. */ 3045267cf02SBjarke Istrup Pedersen }; 3055267cf02SBjarke Istrup Pedersen 3065267cf02SBjarke Istrup Pedersen enum hv_kvp_exchg_pool { 3075267cf02SBjarke Istrup Pedersen KVP_POOL_EXTERNAL = 0, 3085267cf02SBjarke Istrup Pedersen KVP_POOL_GUEST, 3095267cf02SBjarke Istrup Pedersen KVP_POOL_AUTO, 3105267cf02SBjarke Istrup Pedersen KVP_POOL_AUTO_EXTERNAL, 3115267cf02SBjarke Istrup Pedersen KVP_POOL_AUTO_INTERNAL, 3125267cf02SBjarke Istrup Pedersen KVP_POOL_COUNT /* Number of pools, must be last. */ 3135267cf02SBjarke Istrup Pedersen }; 3145267cf02SBjarke Istrup Pedersen 3155267cf02SBjarke Istrup Pedersen /* 3165267cf02SBjarke Istrup Pedersen * Some Hyper-V status codes. 3175267cf02SBjarke Istrup Pedersen */ 3185267cf02SBjarke Istrup Pedersen 3195267cf02SBjarke Istrup Pedersen #define HV_S_OK 0x00000000 3205267cf02SBjarke Istrup Pedersen #define HV_E_FAIL 0x80004005 3215267cf02SBjarke Istrup Pedersen #define HV_S_CONT 0x80070103 3225267cf02SBjarke Istrup Pedersen #define HV_ERROR_NOT_SUPPORTED 0x80070032 3235267cf02SBjarke Istrup Pedersen #define HV_ERROR_MACHINE_LOCKED 0x800704F7 3245267cf02SBjarke Istrup Pedersen #define HV_ERROR_DEVICE_NOT_CONNECTED 0x8007048F 3255267cf02SBjarke Istrup Pedersen #define HV_INVALIDARG 0x80070057 3265267cf02SBjarke Istrup Pedersen #define HV_GUID_NOTFOUND 0x80041002 327314672a2SK. Y. Srinivasan #define HV_ERROR_ALREADY_EXISTS 0x80070050 328b4ed5d16SOlaf Hering #define HV_ERROR_DISK_FULL 0x80070070 3295267cf02SBjarke Istrup Pedersen 3305267cf02SBjarke Istrup Pedersen #define ADDR_FAMILY_NONE 0x00 3315267cf02SBjarke Istrup Pedersen #define ADDR_FAMILY_IPV4 0x01 3325267cf02SBjarke Istrup Pedersen #define ADDR_FAMILY_IPV6 0x02 3335267cf02SBjarke Istrup Pedersen 3345267cf02SBjarke Istrup Pedersen #define MAX_ADAPTER_ID_SIZE 128 3355267cf02SBjarke Istrup Pedersen #define MAX_IP_ADDR_SIZE 1024 3365267cf02SBjarke Istrup Pedersen #define MAX_GATEWAY_SIZE 512 3375267cf02SBjarke Istrup Pedersen 3385267cf02SBjarke Istrup Pedersen 3395267cf02SBjarke Istrup Pedersen struct hv_kvp_ipaddr_value { 3405267cf02SBjarke Istrup Pedersen __u16 adapter_id[MAX_ADAPTER_ID_SIZE]; 3415267cf02SBjarke Istrup Pedersen __u8 addr_family; 3425267cf02SBjarke Istrup Pedersen __u8 dhcp_enabled; 3435267cf02SBjarke Istrup Pedersen __u16 ip_addr[MAX_IP_ADDR_SIZE]; 3445267cf02SBjarke Istrup Pedersen __u16 sub_net[MAX_IP_ADDR_SIZE]; 3455267cf02SBjarke Istrup Pedersen __u16 gate_way[MAX_GATEWAY_SIZE]; 3465267cf02SBjarke Istrup Pedersen __u16 dns_addr[MAX_IP_ADDR_SIZE]; 3475267cf02SBjarke Istrup Pedersen } __attribute__((packed)); 3485267cf02SBjarke Istrup Pedersen 3495267cf02SBjarke Istrup Pedersen 3505267cf02SBjarke Istrup Pedersen struct hv_kvp_hdr { 3515267cf02SBjarke Istrup Pedersen __u8 operation; 3525267cf02SBjarke Istrup Pedersen __u8 pool; 3535267cf02SBjarke Istrup Pedersen __u16 pad; 3545267cf02SBjarke Istrup Pedersen } __attribute__((packed)); 3555267cf02SBjarke Istrup Pedersen 3565267cf02SBjarke Istrup Pedersen struct hv_kvp_exchg_msg_value { 3575267cf02SBjarke Istrup Pedersen __u32 value_type; 3585267cf02SBjarke Istrup Pedersen __u32 key_size; 3595267cf02SBjarke Istrup Pedersen __u32 value_size; 3605267cf02SBjarke Istrup Pedersen __u8 key[HV_KVP_EXCHANGE_MAX_KEY_SIZE]; 3615267cf02SBjarke Istrup Pedersen union { 3625267cf02SBjarke Istrup Pedersen __u8 value[HV_KVP_EXCHANGE_MAX_VALUE_SIZE]; 3635267cf02SBjarke Istrup Pedersen __u32 value_u32; 3645267cf02SBjarke Istrup Pedersen __u64 value_u64; 3655267cf02SBjarke Istrup Pedersen }; 3665267cf02SBjarke Istrup Pedersen } __attribute__((packed)); 3675267cf02SBjarke Istrup Pedersen 3685267cf02SBjarke Istrup Pedersen struct hv_kvp_msg_enumerate { 3695267cf02SBjarke Istrup Pedersen __u32 index; 3705267cf02SBjarke Istrup Pedersen struct hv_kvp_exchg_msg_value data; 3715267cf02SBjarke Istrup Pedersen } __attribute__((packed)); 3725267cf02SBjarke Istrup Pedersen 3735267cf02SBjarke Istrup Pedersen struct hv_kvp_msg_get { 3745267cf02SBjarke Istrup Pedersen struct hv_kvp_exchg_msg_value data; 3755267cf02SBjarke Istrup Pedersen }; 3765267cf02SBjarke Istrup Pedersen 3775267cf02SBjarke Istrup Pedersen struct hv_kvp_msg_set { 3785267cf02SBjarke Istrup Pedersen struct hv_kvp_exchg_msg_value data; 3795267cf02SBjarke Istrup Pedersen }; 3805267cf02SBjarke Istrup Pedersen 3815267cf02SBjarke Istrup Pedersen struct hv_kvp_msg_delete { 3825267cf02SBjarke Istrup Pedersen __u32 key_size; 3835267cf02SBjarke Istrup Pedersen __u8 key[HV_KVP_EXCHANGE_MAX_KEY_SIZE]; 3845267cf02SBjarke Istrup Pedersen }; 3855267cf02SBjarke Istrup Pedersen 3865267cf02SBjarke Istrup Pedersen struct hv_kvp_register { 3875267cf02SBjarke Istrup Pedersen __u8 version[HV_KVP_EXCHANGE_MAX_KEY_SIZE]; 3885267cf02SBjarke Istrup Pedersen }; 3895267cf02SBjarke Istrup Pedersen 3905267cf02SBjarke Istrup Pedersen struct hv_kvp_msg { 3915267cf02SBjarke Istrup Pedersen union { 3925267cf02SBjarke Istrup Pedersen struct hv_kvp_hdr kvp_hdr; 3935267cf02SBjarke Istrup Pedersen int error; 3945267cf02SBjarke Istrup Pedersen }; 3955267cf02SBjarke Istrup Pedersen union { 3965267cf02SBjarke Istrup Pedersen struct hv_kvp_msg_get kvp_get; 3975267cf02SBjarke Istrup Pedersen struct hv_kvp_msg_set kvp_set; 3985267cf02SBjarke Istrup Pedersen struct hv_kvp_msg_delete kvp_delete; 3995267cf02SBjarke Istrup Pedersen struct hv_kvp_msg_enumerate kvp_enum_data; 4005267cf02SBjarke Istrup Pedersen struct hv_kvp_ipaddr_value kvp_ip_val; 4015267cf02SBjarke Istrup Pedersen struct hv_kvp_register kvp_register; 4025267cf02SBjarke Istrup Pedersen } body; 4035267cf02SBjarke Istrup Pedersen } __attribute__((packed)); 4045267cf02SBjarke Istrup Pedersen 4055267cf02SBjarke Istrup Pedersen struct hv_kvp_ip_msg { 4065267cf02SBjarke Istrup Pedersen __u8 operation; 4075267cf02SBjarke Istrup Pedersen __u8 pool; 4085267cf02SBjarke Istrup Pedersen struct hv_kvp_ipaddr_value kvp_ip_val; 4095267cf02SBjarke Istrup Pedersen } __attribute__((packed)); 4105267cf02SBjarke Istrup Pedersen 4115267cf02SBjarke Istrup Pedersen #endif /* _UAPI_HYPERV_H */ 412