root/include/scsi/fc/fc_fcoe.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. fc_fcoe_set_mac

   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * Copyright(c) 2007 Intel Corporation. All rights reserved.
   4  *
   5  * Maintained at www.Open-FCoE.org
   6  */
   7 
   8 #ifndef _FC_FCOE_H_
   9 #define _FC_FCOE_H_
  10 
  11 /*
  12  * FCoE - Fibre Channel over Ethernet.
  13  * See T11 FC-BB-5 Rev 2.00 (09-056v5.pdf)
  14  */
  15 
  16 /*
  17  * Default FC_FCOE_OUI / FC-MAP value.
  18  */
  19 #define FC_FCOE_OUI     0x0efc00        /* upper 24 bits of FCOE MAC */
  20 
  21 /*
  22  * Fabric Login (FLOGI) MAC for non-FIP use.  Non-FIP use is deprecated.
  23  */
  24 #define FC_FCOE_FLOGI_MAC { 0x0e, 0xfc, 0x00, 0xff, 0xff, 0xfe }
  25 
  26 #define FC_FCOE_VER     0                       /* version */
  27 
  28 /*
  29  * Ethernet Addresses based on FC S_ID and D_ID.
  30  * Generated by FC_FCOE_OUI | S_ID/D_ID
  31  */
  32 #define FC_FCOE_ENCAPS_ID(n)    (((u64) FC_FCOE_OUI << 24) | (n))
  33 #define FC_FCOE_DECAPS_ID(n)    ((n) >> 24)
  34 
  35 /*
  36  * FCoE frame header - 14 bytes
  37  * This follows the VLAN header, which includes the ethertype.
  38  */
  39 struct fcoe_hdr {
  40         __u8            fcoe_ver;       /* version field - upper 4 bits */
  41         __u8            fcoe_resvd[12]; /* reserved - send zero and ignore */
  42         __u8            fcoe_sof;       /* start of frame per RFC 3643 */
  43 };
  44 
  45 #define FC_FCOE_DECAPS_VER(hp)      ((hp)->fcoe_ver >> 4)
  46 #define FC_FCOE_ENCAPS_VER(hp, ver) ((hp)->fcoe_ver = (ver) << 4)
  47 
  48 /*
  49  * FCoE CRC & EOF - 8 bytes.
  50  */
  51 struct fcoe_crc_eof {
  52         __le32          fcoe_crc32;     /* CRC for FC packet */
  53         __u8            fcoe_eof;       /* EOF from RFC 3643 */
  54         __u8            fcoe_resvd[3];  /* reserved - send zero and ignore */
  55 } __attribute__((packed));
  56 
  57 /*
  58  * Minimum FCoE + FC header length
  59  * 14 bytes FCoE header + 24 byte FC header = 38 bytes
  60  */
  61 #define FCOE_HEADER_LEN 38
  62 
  63 /*
  64  * Minimum FCoE frame size
  65  * 14 bytes FCoE header + 24 byte FC header + 8 byte FCoE trailer = 46 bytes
  66  */
  67 #define FCOE_MIN_FRAME 46
  68 
  69 /*
  70  * FCoE Link Error Status Block: T11 FC-BB-5 Rev2.0, Clause 7.10.
  71  */
  72 struct fcoe_fc_els_lesb {
  73         __be32          lesb_link_fail; /* link failure count */
  74         __be32          lesb_vlink_fail; /* virtual link failure count */
  75         __be32          lesb_miss_fka;  /* missing FIP keep-alive count */
  76         __be32          lesb_symb_err;  /* symbol error during carrier count */
  77         __be32          lesb_err_block; /* errored block count */
  78         __be32          lesb_fcs_error; /* frame check sequence error count */
  79 };
  80 
  81 /*
  82  * fc_fcoe_set_mac - Store OUI + DID into MAC address field.
  83  * @mac: mac address to be set
  84  * @did: fc dest id to use
  85  */
  86 static inline void fc_fcoe_set_mac(u8 *mac, u8 *did)
  87 {
  88         mac[0] = (u8) (FC_FCOE_OUI >> 16);
  89         mac[1] = (u8) (FC_FCOE_OUI >> 8);
  90         mac[2] = (u8) FC_FCOE_OUI;
  91         mac[3] = did[0];
  92         mac[4] = did[1];
  93         mac[5] = did[2];
  94 }
  95 
  96 #endif /* _FC_FCOE_H_ */

/* [<][>][^][v][top][bottom][index][help] */