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