1a6a5580cSJeff Kirsher /* 2a6a5580cSJeff Kirsher * Copyright 2010 Cisco Systems, Inc. All rights reserved. 3a6a5580cSJeff Kirsher * 4a6a5580cSJeff Kirsher * This program is free software; you may redistribute it and/or modify 5a6a5580cSJeff Kirsher * it under the terms of the GNU General Public License as published by 6a6a5580cSJeff Kirsher * the Free Software Foundation; version 2 of the License. 7a6a5580cSJeff Kirsher * 8a6a5580cSJeff Kirsher * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 9a6a5580cSJeff Kirsher * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 10a6a5580cSJeff Kirsher * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 11a6a5580cSJeff Kirsher * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 12a6a5580cSJeff Kirsher * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 13a6a5580cSJeff Kirsher * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 14a6a5580cSJeff Kirsher * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 15a6a5580cSJeff Kirsher * SOFTWARE. 16a6a5580cSJeff Kirsher * 17a6a5580cSJeff Kirsher */ 18a6a5580cSJeff Kirsher 19a6a5580cSJeff Kirsher #ifndef _VNIC_VIC_H_ 20a6a5580cSJeff Kirsher #define _VNIC_VIC_H_ 21a6a5580cSJeff Kirsher 22a6a5580cSJeff Kirsher /* Note: All integer fields in NETWORK byte order */ 23a6a5580cSJeff Kirsher 24a6a5580cSJeff Kirsher /* Note: String field lengths include null char */ 25a6a5580cSJeff Kirsher 26a6a5580cSJeff Kirsher #define VIC_PROVINFO_CISCO_OUI { 0x00, 0x00, 0x0c } 27a6a5580cSJeff Kirsher #define VIC_PROVINFO_GENERIC_TYPE 0x4 28a6a5580cSJeff Kirsher 29a6a5580cSJeff Kirsher enum vic_generic_prov_tlv_type { 30a6a5580cSJeff Kirsher VIC_GENERIC_PROV_TLV_PORT_PROFILE_NAME_STR = 0, 31a6a5580cSJeff Kirsher VIC_GENERIC_PROV_TLV_CLIENT_MAC_ADDR = 1, 32a6a5580cSJeff Kirsher VIC_GENERIC_PROV_TLV_CLIENT_NAME_STR = 2, 33a6a5580cSJeff Kirsher VIC_GENERIC_PROV_TLV_CLUSTER_PORT_NAME_STR = 3, 34a6a5580cSJeff Kirsher VIC_GENERIC_PROV_TLV_CLUSTER_PORT_UUID_STR = 4, 35a6a5580cSJeff Kirsher VIC_GENERIC_PROV_TLV_CLUSTER_UUID_STR = 5, 36a6a5580cSJeff Kirsher VIC_GENERIC_PROV_TLV_CLUSTER_NAME_STR = 7, 37a6a5580cSJeff Kirsher VIC_GENERIC_PROV_TLV_HOST_UUID_STR = 8, 38a6a5580cSJeff Kirsher VIC_GENERIC_PROV_TLV_CLIENT_UUID_STR = 9, 39a6a5580cSJeff Kirsher VIC_GENERIC_PROV_TLV_INCARNATION_NUMBER = 10, 40a6a5580cSJeff Kirsher VIC_GENERIC_PROV_TLV_OS_TYPE = 11, 41a6a5580cSJeff Kirsher VIC_GENERIC_PROV_TLV_OS_VENDOR = 12, 42a6a5580cSJeff Kirsher VIC_GENERIC_PROV_TLV_CLIENT_TYPE = 15, 43a6a5580cSJeff Kirsher }; 44a6a5580cSJeff Kirsher 45a6a5580cSJeff Kirsher enum vic_generic_prov_os_type { 46a6a5580cSJeff Kirsher VIC_GENERIC_PROV_OS_TYPE_UNKNOWN = 0, 47a6a5580cSJeff Kirsher VIC_GENERIC_PROV_OS_TYPE_ESX = 1, 48a6a5580cSJeff Kirsher VIC_GENERIC_PROV_OS_TYPE_LINUX = 2, 49a6a5580cSJeff Kirsher VIC_GENERIC_PROV_OS_TYPE_WINDOWS = 3, 50a6a5580cSJeff Kirsher VIC_GENERIC_PROV_OS_TYPE_SOLARIS = 4, 51a6a5580cSJeff Kirsher }; 52a6a5580cSJeff Kirsher 53a6a5580cSJeff Kirsher struct vic_provinfo { 54a6a5580cSJeff Kirsher u8 oui[3]; /* OUI of data provider */ 55a6a5580cSJeff Kirsher u8 type; /* provider-specific type */ 56a6a5580cSJeff Kirsher u32 length; /* length of data below */ 57a6a5580cSJeff Kirsher u32 num_tlvs; /* number of tlvs */ 58a6a5580cSJeff Kirsher struct vic_provinfo_tlv { 59a6a5580cSJeff Kirsher u16 type; 60a6a5580cSJeff Kirsher u16 length; 61a6a5580cSJeff Kirsher u8 value[0]; 62a6a5580cSJeff Kirsher } tlv[0]; 63a6a5580cSJeff Kirsher } __packed; 64a6a5580cSJeff Kirsher 65a6a5580cSJeff Kirsher #define VIC_PROVINFO_ADD_TLV(vp, tlvtype, tlvlen, data) \ 66a6a5580cSJeff Kirsher do { \ 67a6a5580cSJeff Kirsher err = vic_provinfo_add_tlv(vp, tlvtype, tlvlen, data); \ 68a6a5580cSJeff Kirsher if (err) \ 69a6a5580cSJeff Kirsher goto add_tlv_failure; \ 70a6a5580cSJeff Kirsher } while (0) 71a6a5580cSJeff Kirsher 72a6a5580cSJeff Kirsher #define VIC_PROVINFO_MAX_DATA 1385 73a6a5580cSJeff Kirsher #define VIC_PROVINFO_MAX_TLV_DATA (VIC_PROVINFO_MAX_DATA - \ 74a6a5580cSJeff Kirsher sizeof(struct vic_provinfo)) 75a6a5580cSJeff Kirsher 76a6a5580cSJeff Kirsher struct vic_provinfo *vic_provinfo_alloc(gfp_t flags, const u8 *oui, 77a6a5580cSJeff Kirsher const u8 type); 78a6a5580cSJeff Kirsher void vic_provinfo_free(struct vic_provinfo *vp); 79a6a5580cSJeff Kirsher int vic_provinfo_add_tlv(struct vic_provinfo *vp, u16 type, u16 length, 80a6a5580cSJeff Kirsher const void *value); 81a6a5580cSJeff Kirsher size_t vic_provinfo_size(struct vic_provinfo *vp); 82a6a5580cSJeff Kirsher 83a6a5580cSJeff Kirsher #endif /* _VNIC_VIC_H_ */ 84