0001
0002
0003
0004 #ifndef _VNIC_VIC_H_
0005 #define _VNIC_VIC_H_
0006
0007
0008
0009
0010
0011 #define VIC_PROVINFO_CISCO_OUI { 0x00, 0x00, 0x0c }
0012 #define VIC_PROVINFO_GENERIC_TYPE 0x4
0013
0014 enum vic_generic_prov_tlv_type {
0015 VIC_GENERIC_PROV_TLV_PORT_PROFILE_NAME_STR = 0,
0016 VIC_GENERIC_PROV_TLV_CLIENT_MAC_ADDR = 1,
0017 VIC_GENERIC_PROV_TLV_CLIENT_NAME_STR = 2,
0018 VIC_GENERIC_PROV_TLV_CLUSTER_PORT_NAME_STR = 3,
0019 VIC_GENERIC_PROV_TLV_CLUSTER_PORT_UUID_STR = 4,
0020 VIC_GENERIC_PROV_TLV_CLUSTER_UUID_STR = 5,
0021 VIC_GENERIC_PROV_TLV_CLUSTER_NAME_STR = 7,
0022 VIC_GENERIC_PROV_TLV_HOST_UUID_STR = 8,
0023 VIC_GENERIC_PROV_TLV_CLIENT_UUID_STR = 9,
0024 VIC_GENERIC_PROV_TLV_INCARNATION_NUMBER = 10,
0025 VIC_GENERIC_PROV_TLV_OS_TYPE = 11,
0026 VIC_GENERIC_PROV_TLV_OS_VENDOR = 12,
0027 VIC_GENERIC_PROV_TLV_CLIENT_TYPE = 15,
0028 };
0029
0030 enum vic_generic_prov_os_type {
0031 VIC_GENERIC_PROV_OS_TYPE_UNKNOWN = 0,
0032 VIC_GENERIC_PROV_OS_TYPE_ESX = 1,
0033 VIC_GENERIC_PROV_OS_TYPE_LINUX = 2,
0034 VIC_GENERIC_PROV_OS_TYPE_WINDOWS = 3,
0035 VIC_GENERIC_PROV_OS_TYPE_SOLARIS = 4,
0036 };
0037
0038 struct vic_provinfo {
0039 u8 oui[3];
0040 u8 type;
0041 u32 length;
0042 u32 num_tlvs;
0043 struct vic_provinfo_tlv {
0044 u16 type;
0045 u16 length;
0046 u8 value[0];
0047 } tlv[];
0048 } __packed;
0049
0050 #define VIC_PROVINFO_ADD_TLV(vp, tlvtype, tlvlen, data) \
0051 do { \
0052 err = vic_provinfo_add_tlv(vp, tlvtype, tlvlen, data); \
0053 if (err) \
0054 goto add_tlv_failure; \
0055 } while (0)
0056
0057 #define VIC_PROVINFO_MAX_DATA 1385
0058 #define VIC_PROVINFO_MAX_TLV_DATA (VIC_PROVINFO_MAX_DATA - \
0059 sizeof(struct vic_provinfo))
0060
0061 struct vic_provinfo *vic_provinfo_alloc(gfp_t flags, const u8 *oui,
0062 const u8 type);
0063 void vic_provinfo_free(struct vic_provinfo *vp);
0064 int vic_provinfo_add_tlv(struct vic_provinfo *vp, u16 type, u16 length,
0065 const void *value);
0066 size_t vic_provinfo_size(struct vic_provinfo *vp);
0067
0068 #endif