| 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 | */ |
| 133 | struct 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 | */ |
| 180 | struct 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 | */ |
| 223 | struct 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 | */ |
| 240 | struct 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 | */ |
| 266 | struct 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 | */ |
| 310 | struct 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 | */ |
| 383 | struct 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 | */ |
| 429 | struct 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 | */ |
| 443 | struct 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 | */ |
| 458 | struct 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 | */ |
| 474 | struct 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 | */ |
| 495 | struct 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 | */ |
| 516 | struct 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 */ |
| 525 | |