Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /* Copyright 2010 Cisco Systems, Inc.  All rights reserved. */
0003 
0004 #ifndef _VNIC_VIC_H_
0005 #define _VNIC_VIC_H_
0006 
0007 /* Note: All integer fields in NETWORK byte order */
0008 
0009 /* Note: String field lengths include null char */
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];      /* OUI of data provider */
0040     u8 type;        /* provider-specific type */
0041     u32 length;     /* length of data below */
0042     u32 num_tlvs;       /* number of 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  /* _VNIC_VIC_H_ */