cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

opa_vnic_encap.h (16351B)


      1#ifndef _OPA_VNIC_ENCAP_H
      2#define _OPA_VNIC_ENCAP_H
      3/*
      4 * Copyright(c) 2017 Intel Corporation.
      5 *
      6 * This file is provided under a dual BSD/GPLv2 license.  When using or
      7 * redistributing this file, you may do so under either license.
      8 *
      9 * GPL LICENSE SUMMARY
     10 *
     11 * This program is free software; you can redistribute it and/or modify
     12 * it under the terms of version 2 of the GNU General Public License as
     13 * published by the Free Software Foundation.
     14 *
     15 * This program is distributed in the hope that it will be useful, but
     16 * WITHOUT ANY WARRANTY; without even the implied warranty of
     17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     18 * General Public License for more details.
     19 *
     20 * BSD LICENSE
     21 *
     22 * Redistribution and use in source and binary forms, with or without
     23 * modification, are permitted provided that the following conditions
     24 * are met:
     25 *
     26 *  - Redistributions of source code must retain the above copyright
     27 *    notice, this list of conditions and the following disclaimer.
     28 *  - Redistributions in binary form must reproduce the above copyright
     29 *    notice, this list of conditions and the following disclaimer in
     30 *    the documentation and/or other materials provided with the
     31 *    distribution.
     32 *  - Neither the name of Intel Corporation nor the names of its
     33 *    contributors may be used to endorse or promote products derived
     34 *    from this software without specific prior written permission.
     35 *
     36 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     37 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     38 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     39 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     40 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     42 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     43 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     44 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     45 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     46 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     47 *
     48 */
     49
     50/*
     51 * This file contains all OPA VNIC declaration required for encapsulation
     52 * and decapsulation of Ethernet packets
     53 */
     54
     55#include <linux/types.h>
     56#include <rdma/ib_mad.h>
     57
     58/* EMA class version */
     59#define OPA_EMA_CLASS_VERSION               0x80
     60
     61/*
     62 * Define the Intel vendor management class for OPA
     63 * ETHERNET MANAGEMENT
     64 */
     65#define OPA_MGMT_CLASS_INTEL_EMA            0x34
     66
     67/* EM attribute IDs */
     68#define OPA_EM_ATTR_CLASS_PORT_INFO                 0x0001
     69#define OPA_EM_ATTR_VESWPORT_INFO                   0x0011
     70#define OPA_EM_ATTR_VESWPORT_MAC_ENTRIES            0x0012
     71#define OPA_EM_ATTR_IFACE_UCAST_MACS                0x0013
     72#define OPA_EM_ATTR_IFACE_MCAST_MACS                0x0014
     73#define OPA_EM_ATTR_DELETE_VESW                     0x0015
     74#define OPA_EM_ATTR_VESWPORT_SUMMARY_COUNTERS       0x0020
     75#define OPA_EM_ATTR_VESWPORT_ERROR_COUNTERS         0x0022
     76
     77/* VNIC configured and operational state values */
     78#define OPA_VNIC_STATE_DROP_ALL        0x1
     79#define OPA_VNIC_STATE_FORWARDING      0x3
     80
     81#define OPA_VESW_MAX_NUM_DEF_PORT   16
     82#define OPA_VNIC_MAX_NUM_PCP        8
     83
     84#define OPA_VNIC_EMA_DATA    (OPA_MGMT_MAD_SIZE - IB_MGMT_VENDOR_HDR)
     85
     86/* Defines for vendor specific notice(trap) attributes */
     87#define OPA_INTEL_EMA_NOTICE_TYPE_INFO 0x04
     88
     89/* INTEL OUI */
     90#define INTEL_OUI_1 0x00
     91#define INTEL_OUI_2 0x06
     92#define INTEL_OUI_3 0x6a
     93
     94/* Trap opcodes sent from VNIC */
     95#define OPA_VESWPORT_TRAP_IFACE_UCAST_MAC_CHANGE 0x1
     96#define OPA_VESWPORT_TRAP_IFACE_MCAST_MAC_CHANGE 0x2
     97#define OPA_VESWPORT_TRAP_ETH_LINK_STATUS_CHANGE 0x3
     98
     99#define OPA_VNIC_DLID_SD_IS_SRC_MAC(dlid_sd)  (!!((dlid_sd) & 0x20))
    100#define OPA_VNIC_DLID_SD_GET_DLID(dlid_sd)    ((dlid_sd) >> 8)
    101
    102/* VNIC Ethernet link status */
    103#define OPA_VNIC_ETH_LINK_UP     1
    104#define OPA_VNIC_ETH_LINK_DOWN   2
    105
    106/* routing control */
    107#define OPA_VNIC_ENCAP_RC_DEFAULT   0
    108#define OPA_VNIC_ENCAP_RC_IPV4      4
    109#define OPA_VNIC_ENCAP_RC_IPV4_UDP  8
    110#define OPA_VNIC_ENCAP_RC_IPV4_TCP  12
    111#define OPA_VNIC_ENCAP_RC_IPV6      16
    112#define OPA_VNIC_ENCAP_RC_IPV6_TCP  20
    113#define OPA_VNIC_ENCAP_RC_IPV6_UDP  24
    114
    115#define OPA_VNIC_ENCAP_RC_EXT(w, b) (((w) >> OPA_VNIC_ENCAP_RC_ ## b) & 0x7)
    116
    117/**
    118 * struct opa_vesw_info - OPA vnic switch information
    119 * @fabric_id: 10-bit fabric id
    120 * @vesw_id: 12-bit virtual ethernet switch id
    121 * @rsvd0: reserved bytes
    122 * @def_port_mask: bitmask of default ports
    123 * @rsvd1: reserved bytes
    124 * @pkey: partition key
    125 * @rsvd2: reserved bytes
    126 * @u_mcast_dlid: unknown multicast dlid
    127 * @u_ucast_dlid: array of unknown unicast dlids
    128 * @rsvd3: reserved bytes
    129 * @rc: routing control
    130 * @eth_mtu: Ethernet MTU
    131 * @rsvd4: reserved bytes
    132 */
    133struct opa_vesw_info {
    134	__be16  fabric_id;
    135	__be16  vesw_id;
    136
    137	u8      rsvd0[6];
    138	__be16  def_port_mask;
    139
    140	u8      rsvd1[2];
    141	__be16  pkey;
    142
    143	u8      rsvd2[4];
    144	__be32  u_mcast_dlid;
    145	__be32  u_ucast_dlid[OPA_VESW_MAX_NUM_DEF_PORT];
    146
    147	__be32  rc;
    148
    149	u8      rsvd3[56];
    150	__be16  eth_mtu;
    151	u8      rsvd4[2];
    152} __packed;
    153
    154/**
    155 * struct opa_per_veswport_info - OPA vnic per port information
    156 * @port_num: port number
    157 * @eth_link_status: current ethernet link state
    158 * @rsvd0: reserved bytes
    159 * @base_mac_addr: base mac address
    160 * @config_state: configured port state
    161 * @oper_state: operational port state
    162 * @max_mac_tbl_ent: max number of mac table entries
    163 * @max_smac_ent: max smac entries in mac table
    164 * @mac_tbl_digest: mac table digest
    165 * @rsvd1: reserved bytes
    166 * @encap_slid: base slid for the port
    167 * @pcp_to_sc_uc: sc by pcp index for unicast ethernet packets
    168 * @pcp_to_vl_uc: vl by pcp index for unicast ethernet packets
    169 * @pcp_to_sc_mc: sc by pcp index for multicast ethernet packets
    170 * @pcp_to_vl_mc: vl by pcp index for multicast ethernet packets
    171 * @non_vlan_sc_uc: sc for non-vlan unicast ethernet packets
    172 * @non_vlan_vl_uc: vl for non-vlan unicast ethernet packets
    173 * @non_vlan_sc_mc: sc for non-vlan multicast ethernet packets
    174 * @non_vlan_vl_mc: vl for non-vlan multicast ethernet packets
    175 * @rsvd2: reserved bytes
    176 * @uc_macs_gen_count: generation count for unicast macs list
    177 * @mc_macs_gen_count: generation count for multicast macs list
    178 * @rsvd3: reserved bytes
    179 */
    180struct opa_per_veswport_info {
    181	__be32  port_num;
    182
    183	u8      eth_link_status;
    184	u8      rsvd0[3];
    185
    186	u8      base_mac_addr[ETH_ALEN];
    187	u8      config_state;
    188	u8      oper_state;
    189
    190	__be16  max_mac_tbl_ent;
    191	__be16  max_smac_ent;
    192	__be32  mac_tbl_digest;
    193	u8      rsvd1[4];
    194
    195	__be32  encap_slid;
    196
    197	u8      pcp_to_sc_uc[OPA_VNIC_MAX_NUM_PCP];
    198	u8      pcp_to_vl_uc[OPA_VNIC_MAX_NUM_PCP];
    199	u8      pcp_to_sc_mc[OPA_VNIC_MAX_NUM_PCP];
    200	u8      pcp_to_vl_mc[OPA_VNIC_MAX_NUM_PCP];
    201
    202	u8      non_vlan_sc_uc;
    203	u8      non_vlan_vl_uc;
    204	u8      non_vlan_sc_mc;
    205	u8      non_vlan_vl_mc;
    206
    207	u8      rsvd2[48];
    208
    209	__be16  uc_macs_gen_count;
    210	__be16  mc_macs_gen_count;
    211
    212	u8      rsvd3[8];
    213} __packed;
    214
    215/**
    216 * struct opa_veswport_info - OPA vnic port information
    217 * @vesw: OPA vnic switch information
    218 * @vport: OPA vnic per port information
    219 *
    220 * On host, each of the virtual ethernet ports belongs
    221 * to a different virtual ethernet switches.
    222 */
    223struct opa_veswport_info {
    224	struct opa_vesw_info          vesw;
    225	struct opa_per_veswport_info  vport;
    226};
    227
    228/**
    229 * struct opa_veswport_mactable_entry - single entry in the forwarding table
    230 * @mac_addr: MAC address
    231 * @mac_addr_mask: MAC address bit mask
    232 * @dlid_sd: Matching DLID and side data
    233 *
    234 * On the host each virtual ethernet port will have
    235 * a forwarding table. These tables are used to
    236 * map a MAC to a LID and other data. For more
    237 * details see struct opa_veswport_mactable_entries.
    238 * This is the structure of a single mactable entry
    239 */
    240struct opa_veswport_mactable_entry {
    241	u8      mac_addr[ETH_ALEN];
    242	u8      mac_addr_mask[ETH_ALEN];
    243	__be32  dlid_sd;
    244} __packed;
    245
    246/**
    247 * struct opa_veswport_mactable - Forwarding table array
    248 * @offset: mac table starting offset
    249 * @num_entries: Number of entries to get or set
    250 * @mac_tbl_digest: mac table digest
    251 * @tbl_entries: Array of table entries
    252 *
    253 * The EM sends down this structure in a MAD indicating
    254 * the starting offset in the forwarding table that this
    255 * entry is to be loaded into and the number of entries
    256 * that that this MAD instance contains
    257 * The mac_tbl_digest has been added to this MAD structure. It will be set by
    258 * the EM and it will be used by the EM to check if there are any
    259 * discrepancies with this value and the value
    260 * maintained by the EM in the case of VNIC port being deleted or unloaded
    261 * A new instantiation of a VNIC will always have a value of zero.
    262 * This value is stored as part of the vnic adapter structure and will be
    263 * accessed by the GET and SET routines for both the mactable entries and the
    264 * veswport info.
    265 */
    266struct opa_veswport_mactable {
    267	__be16                              offset;
    268	__be16                              num_entries;
    269	__be32                              mac_tbl_digest;
    270	struct opa_veswport_mactable_entry  tbl_entries[];
    271} __packed;
    272
    273/**
    274 * struct opa_veswport_summary_counters - summary counters
    275 * @vp_instance: vport instance on the OPA port
    276 * @vesw_id: virtual ethernet switch id
    277 * @veswport_num: virtual ethernet switch port number
    278 * @tx_errors: transmit errors
    279 * @rx_errors: receive errors
    280 * @tx_packets: transmit packets
    281 * @rx_packets: receive packets
    282 * @tx_bytes: transmit bytes
    283 * @rx_bytes: receive bytes
    284 * @tx_unicast: unicast packets transmitted
    285 * @tx_mcastbcast: multicast/broadcast packets transmitted
    286 * @tx_untagged: non-vlan packets transmitted
    287 * @tx_vlan: vlan packets transmitted
    288 * @tx_64_size: transmit packet length is 64 bytes
    289 * @tx_65_127: transmit packet length is >=65 and < 127 bytes
    290 * @tx_128_255: transmit packet length is >=128 and < 255 bytes
    291 * @tx_256_511: transmit packet length is >=256 and < 511 bytes
    292 * @tx_512_1023: transmit packet length is >=512 and < 1023 bytes
    293 * @tx_1024_1518: transmit packet length is >=1024 and < 1518 bytes
    294 * @tx_1519_max: transmit packet length >= 1519 bytes
    295 * @rx_unicast: unicast packets received
    296 * @rx_mcastbcast: multicast/broadcast packets received
    297 * @rx_untagged: non-vlan packets received
    298 * @rx_vlan: vlan packets received
    299 * @rx_64_size: received packet length is 64 bytes
    300 * @rx_65_127: received packet length is >=65 and < 127 bytes
    301 * @rx_128_255: received packet length is >=128 and < 255 bytes
    302 * @rx_256_511: received packet length is >=256 and < 511 bytes
    303 * @rx_512_1023: received packet length is >=512 and < 1023 bytes
    304 * @rx_1024_1518: received packet length is >=1024 and < 1518 bytes
    305 * @rx_1519_max: received packet length >= 1519 bytes
    306 * @reserved: reserved bytes
    307 *
    308 * All the above are counters of corresponding conditions.
    309 */
    310struct opa_veswport_summary_counters {
    311	__be16  vp_instance;
    312	__be16  vesw_id;
    313	__be32  veswport_num;
    314
    315	__be64  tx_errors;
    316	__be64  rx_errors;
    317	__be64  tx_packets;
    318	__be64  rx_packets;
    319	__be64  tx_bytes;
    320	__be64  rx_bytes;
    321
    322	__be64  tx_unicast;
    323	__be64  tx_mcastbcast;
    324
    325	__be64  tx_untagged;
    326	__be64  tx_vlan;
    327
    328	__be64  tx_64_size;
    329	__be64  tx_65_127;
    330	__be64  tx_128_255;
    331	__be64  tx_256_511;
    332	__be64  tx_512_1023;
    333	__be64  tx_1024_1518;
    334	__be64  tx_1519_max;
    335
    336	__be64  rx_unicast;
    337	__be64  rx_mcastbcast;
    338
    339	__be64  rx_untagged;
    340	__be64  rx_vlan;
    341
    342	__be64  rx_64_size;
    343	__be64  rx_65_127;
    344	__be64  rx_128_255;
    345	__be64  rx_256_511;
    346	__be64  rx_512_1023;
    347	__be64  rx_1024_1518;
    348	__be64  rx_1519_max;
    349
    350	__be64  reserved[16];
    351} __packed;
    352
    353/**
    354 * struct opa_veswport_error_counters - error counters
    355 * @vp_instance: vport instance on the OPA port
    356 * @vesw_id: virtual ethernet switch id
    357 * @veswport_num: virtual ethernet switch port number
    358 * @tx_errors: transmit errors
    359 * @rx_errors: receive errors
    360 * @rsvd0: reserved bytes
    361 * @tx_smac_filt: smac filter errors
    362 * @rsvd1: reserved bytes
    363 * @rsvd2: reserved bytes
    364 * @rsvd3: reserved bytes
    365 * @tx_dlid_zero: transmit packets with invalid dlid
    366 * @rsvd4: reserved bytes
    367 * @tx_logic: other transmit errors
    368 * @rsvd5: reserved bytes
    369 * @tx_drop_state: packet tansmission in non-forward port state
    370 * @rx_bad_veswid: received packet with invalid vesw id
    371 * @rsvd6: reserved bytes
    372 * @rx_runt: received ethernet packet with length < 64 bytes
    373 * @rx_oversize: received ethernet packet with length > MTU size
    374 * @rsvd7: reserved bytes
    375 * @rx_eth_down: received packets when interface is down
    376 * @rx_drop_state: received packets in non-forwarding port state
    377 * @rx_logic: other receive errors
    378 * @rsvd8: reserved bytes
    379 * @rsvd9: reserved bytes
    380 *
    381 * All the above are counters of corresponding error conditions.
    382 */
    383struct opa_veswport_error_counters {
    384	__be16  vp_instance;
    385	__be16  vesw_id;
    386	__be32  veswport_num;
    387
    388	__be64  tx_errors;
    389	__be64  rx_errors;
    390
    391	__be64  rsvd0;
    392	__be64  tx_smac_filt;
    393	__be64  rsvd1;
    394	__be64  rsvd2;
    395	__be64  rsvd3;
    396	__be64  tx_dlid_zero;
    397	__be64  rsvd4;
    398	__be64  tx_logic;
    399	__be64  rsvd5;
    400	__be64  tx_drop_state;
    401
    402	__be64  rx_bad_veswid;
    403	__be64  rsvd6;
    404	__be64  rx_runt;
    405	__be64  rx_oversize;
    406	__be64  rsvd7;
    407	__be64  rx_eth_down;
    408	__be64  rx_drop_state;
    409	__be64  rx_logic;
    410	__be64  rsvd8;
    411
    412	__be64  rsvd9[16];
    413} __packed;
    414
    415/**
    416 * struct opa_veswport_trap - Trap message sent to EM by VNIC
    417 * @fabric_id: 10 bit fabric id
    418 * @veswid: 12 bit virtual ethernet switch id
    419 * @veswportnum: logical port number on the Virtual switch
    420 * @opaportnum: physical port num (redundant on host)
    421 * @veswportindex: switch port index on opa port 0 based
    422 * @opcode: operation
    423 * @reserved: 32 bit for alignment
    424 *
    425 * The VNIC will send trap messages to the Ethernet manager to
    426 * inform it about changes to the VNIC config, behaviour etc.
    427 * This is the format of the trap payload.
    428 */
    429struct opa_veswport_trap {
    430	__be16  fabric_id;
    431	__be16  veswid;
    432	__be32  veswportnum;
    433	__be16  opaportnum;
    434	u8      veswportindex;
    435	u8      opcode;
    436	__be32  reserved;
    437} __packed;
    438
    439/**
    440 * struct opa_vnic_iface_mac_entry - single entry in the mac list
    441 * @mac_addr: MAC address
    442 */
    443struct opa_vnic_iface_mac_entry {
    444	u8 mac_addr[ETH_ALEN];
    445};
    446
    447/**
    448 * struct opa_veswport_iface_macs - Msg to set globally administered MAC
    449 * @start_idx: position of first entry (0 based)
    450 * @num_macs_in_msg: number of MACs in this message
    451 * @tot_macs_in_lst: The total number of MACs the agent has
    452 * @gen_count: gen_count to indicate change
    453 * @entry: The mac list entry
    454 *
    455 * Same attribute IDS and attribute modifiers as in locally administered
    456 * addresses used to set globally administered addresses
    457 */
    458struct opa_veswport_iface_macs {
    459	__be16 start_idx;
    460	__be16 num_macs_in_msg;
    461	__be16 tot_macs_in_lst;
    462	__be16 gen_count;
    463	struct opa_vnic_iface_mac_entry entry[];
    464} __packed;
    465
    466/**
    467 * struct opa_vnic_vema_mad - Generic VEMA MAD
    468 * @mad_hdr: Generic MAD header
    469 * @rmpp_hdr: RMPP header for vendor specific MADs
    470 * @reserved: reserved bytes
    471 * @oui: Unique org identifier
    472 * @data: MAD data
    473 */
    474struct opa_vnic_vema_mad {
    475	struct ib_mad_hdr  mad_hdr;
    476	struct ib_rmpp_hdr rmpp_hdr;
    477	u8                 reserved;
    478	u8                 oui[3];
    479	u8                 data[OPA_VNIC_EMA_DATA];
    480};
    481
    482/**
    483 * struct opa_vnic_notice_attr - Generic Notice MAD
    484 * @gen_type: Generic/Specific bit and type of notice
    485 * @oui_1: Vendor ID byte 1
    486 * @oui_2: Vendor ID byte 2
    487 * @oui_3: Vendor ID byte 3
    488 * @trap_num: Trap number
    489 * @toggle_count: Notice toggle bit and count value
    490 * @issuer_lid: Trap issuer's lid
    491 * @reserved: reserved bytes
    492 * @issuer_gid: Issuer GID (only if Report method)
    493 * @raw_data: Trap message body
    494 */
    495struct opa_vnic_notice_attr {
    496	u8     gen_type;
    497	u8     oui_1;
    498	u8     oui_2;
    499	u8     oui_3;
    500	__be16 trap_num;
    501	__be16 toggle_count;
    502	__be32 issuer_lid;
    503	__be32 reserved;
    504	u8     issuer_gid[16];
    505	u8     raw_data[64];
    506} __packed;
    507
    508/**
    509 * struct opa_vnic_vema_mad_trap - Generic VEMA MAD Trap
    510 * @mad_hdr: Generic MAD header
    511 * @rmpp_hdr: RMPP header for vendor specific MADs
    512 * @reserved: reserved bytes
    513 * @oui: Unique org identifier
    514 * @notice: Notice structure
    515 */
    516struct opa_vnic_vema_mad_trap {
    517	struct ib_mad_hdr            mad_hdr;
    518	struct ib_rmpp_hdr           rmpp_hdr;
    519	u8                           reserved;
    520	u8                           oui[3];
    521	struct opa_vnic_notice_attr  notice;
    522};
    523
    524#endif /* _OPA_VNIC_ENCAP_H */