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