1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* Copyright 2010 Cisco Systems, Inc. All rights reserved. */ |
3 | |
4 | #ifndef _VNIC_VIC_H_ |
5 | #define _VNIC_VIC_H_ |
6 | |
7 | /* Note: All integer fields in NETWORK byte order */ |
8 | |
9 | /* Note: String field lengths include null char */ |
10 | |
11 | #define VIC_PROVINFO_CISCO_OUI { 0x00, 0x00, 0x0c } |
12 | #define VIC_PROVINFO_GENERIC_TYPE 0x4 |
13 | |
14 | enum vic_generic_prov_tlv_type { |
15 | VIC_GENERIC_PROV_TLV_PORT_PROFILE_NAME_STR = 0, |
16 | VIC_GENERIC_PROV_TLV_CLIENT_MAC_ADDR = 1, |
17 | VIC_GENERIC_PROV_TLV_CLIENT_NAME_STR = 2, |
18 | VIC_GENERIC_PROV_TLV_CLUSTER_PORT_NAME_STR = 3, |
19 | VIC_GENERIC_PROV_TLV_CLUSTER_PORT_UUID_STR = 4, |
20 | VIC_GENERIC_PROV_TLV_CLUSTER_UUID_STR = 5, |
21 | VIC_GENERIC_PROV_TLV_CLUSTER_NAME_STR = 7, |
22 | VIC_GENERIC_PROV_TLV_HOST_UUID_STR = 8, |
23 | VIC_GENERIC_PROV_TLV_CLIENT_UUID_STR = 9, |
24 | VIC_GENERIC_PROV_TLV_INCARNATION_NUMBER = 10, |
25 | VIC_GENERIC_PROV_TLV_OS_TYPE = 11, |
26 | VIC_GENERIC_PROV_TLV_OS_VENDOR = 12, |
27 | VIC_GENERIC_PROV_TLV_CLIENT_TYPE = 15, |
28 | }; |
29 | |
30 | enum vic_generic_prov_os_type { |
31 | VIC_GENERIC_PROV_OS_TYPE_UNKNOWN = 0, |
32 | VIC_GENERIC_PROV_OS_TYPE_ESX = 1, |
33 | VIC_GENERIC_PROV_OS_TYPE_LINUX = 2, |
34 | VIC_GENERIC_PROV_OS_TYPE_WINDOWS = 3, |
35 | VIC_GENERIC_PROV_OS_TYPE_SOLARIS = 4, |
36 | }; |
37 | |
38 | struct vic_provinfo { |
39 | u8 oui[3]; /* OUI of data provider */ |
40 | u8 type; /* provider-specific type */ |
41 | u32 length; /* length of data below */ |
42 | u32 num_tlvs; /* number of tlvs */ |
43 | struct vic_provinfo_tlv { |
44 | u16 type; |
45 | u16 length; |
46 | u8 value[0]; |
47 | } tlv[]; |
48 | } __packed; |
49 | |
50 | #define VIC_PROVINFO_ADD_TLV(vp, tlvtype, tlvlen, data) \ |
51 | do { \ |
52 | err = vic_provinfo_add_tlv(vp, tlvtype, tlvlen, data); \ |
53 | if (err) \ |
54 | goto add_tlv_failure; \ |
55 | } while (0) |
56 | |
57 | #define VIC_PROVINFO_MAX_DATA 1385 |
58 | #define VIC_PROVINFO_MAX_TLV_DATA (VIC_PROVINFO_MAX_DATA - \ |
59 | sizeof(struct vic_provinfo)) |
60 | |
61 | struct vic_provinfo *vic_provinfo_alloc(gfp_t flags, const u8 *oui, |
62 | const u8 type); |
63 | void vic_provinfo_free(struct vic_provinfo *vp); |
64 | int vic_provinfo_add_tlv(struct vic_provinfo *vp, u16 type, u16 length, |
65 | const void *value); |
66 | size_t vic_provinfo_size(struct vic_provinfo *vp); |
67 | |
68 | #endif /* _VNIC_VIC_H_ */ |
69 | |