162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* Copyright 2010 Cisco Systems, Inc. All rights reserved. */ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#ifndef _VNIC_VIC_H_ 562306a36Sopenharmony_ci#define _VNIC_VIC_H_ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci/* Note: All integer fields in NETWORK byte order */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci/* Note: String field lengths include null char */ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#define VIC_PROVINFO_CISCO_OUI { 0x00, 0x00, 0x0c } 1262306a36Sopenharmony_ci#define VIC_PROVINFO_GENERIC_TYPE 0x4 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cienum vic_generic_prov_tlv_type { 1562306a36Sopenharmony_ci VIC_GENERIC_PROV_TLV_PORT_PROFILE_NAME_STR = 0, 1662306a36Sopenharmony_ci VIC_GENERIC_PROV_TLV_CLIENT_MAC_ADDR = 1, 1762306a36Sopenharmony_ci VIC_GENERIC_PROV_TLV_CLIENT_NAME_STR = 2, 1862306a36Sopenharmony_ci VIC_GENERIC_PROV_TLV_CLUSTER_PORT_NAME_STR = 3, 1962306a36Sopenharmony_ci VIC_GENERIC_PROV_TLV_CLUSTER_PORT_UUID_STR = 4, 2062306a36Sopenharmony_ci VIC_GENERIC_PROV_TLV_CLUSTER_UUID_STR = 5, 2162306a36Sopenharmony_ci VIC_GENERIC_PROV_TLV_CLUSTER_NAME_STR = 7, 2262306a36Sopenharmony_ci VIC_GENERIC_PROV_TLV_HOST_UUID_STR = 8, 2362306a36Sopenharmony_ci VIC_GENERIC_PROV_TLV_CLIENT_UUID_STR = 9, 2462306a36Sopenharmony_ci VIC_GENERIC_PROV_TLV_INCARNATION_NUMBER = 10, 2562306a36Sopenharmony_ci VIC_GENERIC_PROV_TLV_OS_TYPE = 11, 2662306a36Sopenharmony_ci VIC_GENERIC_PROV_TLV_OS_VENDOR = 12, 2762306a36Sopenharmony_ci VIC_GENERIC_PROV_TLV_CLIENT_TYPE = 15, 2862306a36Sopenharmony_ci}; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_cienum vic_generic_prov_os_type { 3162306a36Sopenharmony_ci VIC_GENERIC_PROV_OS_TYPE_UNKNOWN = 0, 3262306a36Sopenharmony_ci VIC_GENERIC_PROV_OS_TYPE_ESX = 1, 3362306a36Sopenharmony_ci VIC_GENERIC_PROV_OS_TYPE_LINUX = 2, 3462306a36Sopenharmony_ci VIC_GENERIC_PROV_OS_TYPE_WINDOWS = 3, 3562306a36Sopenharmony_ci VIC_GENERIC_PROV_OS_TYPE_SOLARIS = 4, 3662306a36Sopenharmony_ci}; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_cistruct vic_provinfo { 3962306a36Sopenharmony_ci u8 oui[3]; /* OUI of data provider */ 4062306a36Sopenharmony_ci u8 type; /* provider-specific type */ 4162306a36Sopenharmony_ci u32 length; /* length of data below */ 4262306a36Sopenharmony_ci u32 num_tlvs; /* number of tlvs */ 4362306a36Sopenharmony_ci struct vic_provinfo_tlv { 4462306a36Sopenharmony_ci u16 type; 4562306a36Sopenharmony_ci u16 length; 4662306a36Sopenharmony_ci u8 value[0]; 4762306a36Sopenharmony_ci } tlv[]; 4862306a36Sopenharmony_ci} __packed; 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci#define VIC_PROVINFO_ADD_TLV(vp, tlvtype, tlvlen, data) \ 5162306a36Sopenharmony_ci do { \ 5262306a36Sopenharmony_ci err = vic_provinfo_add_tlv(vp, tlvtype, tlvlen, data); \ 5362306a36Sopenharmony_ci if (err) \ 5462306a36Sopenharmony_ci goto add_tlv_failure; \ 5562306a36Sopenharmony_ci } while (0) 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci#define VIC_PROVINFO_MAX_DATA 1385 5862306a36Sopenharmony_ci#define VIC_PROVINFO_MAX_TLV_DATA (VIC_PROVINFO_MAX_DATA - \ 5962306a36Sopenharmony_ci sizeof(struct vic_provinfo)) 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_cistruct vic_provinfo *vic_provinfo_alloc(gfp_t flags, const u8 *oui, 6262306a36Sopenharmony_ci const u8 type); 6362306a36Sopenharmony_civoid vic_provinfo_free(struct vic_provinfo *vp); 6462306a36Sopenharmony_ciint vic_provinfo_add_tlv(struct vic_provinfo *vp, u16 type, u16 length, 6562306a36Sopenharmony_ci const void *value); 6662306a36Sopenharmony_cisize_t vic_provinfo_size(struct vic_provinfo *vp); 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci#endif /* _VNIC_VIC_H_ */ 69