1 /** @file
2   Define NVData structures used by the iSCSI configuration component.
3 
4 Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6 
7 **/
8 
9 #ifndef _ISCSI_NVDATASTRUC_H_
10 #define _ISCSI_NVDATASTRUC_H_
11 
12 #include <Guid/IScsiConfigHii.h>
13 
14 #define VAR_EQ_TEST_NAME          0x100
15 #define CONFIGURATION_VARSTORE_ID 0x6666
16 
17 #define FORMID_MAIN_FORM          1
18 #define FORMID_MAC_FORM           2
19 #define FORMID_ATTEMPT_FORM       3
20 #define FORMID_ORDER_FORM         4
21 #define FORMID_DELETE_FORM        5
22 
23 #define ISCSI_MAX_ATTEMPTS_NUM    FixedPcdGet8 (PcdMaxIScsiAttemptNumber)
24 
25 #define ISCSI_NAME_IFR_MIN_SIZE   4
26 #define ISCSI_NAME_IFR_MAX_SIZE   223
27 #define ISCSI_NAME_MAX_SIZE       224
28 
29 #define ATTEMPT_NAME_LIST_SIZE    96
30 #define ATTEMPT_NAME_SIZE         12
31 
32 #define CONNECT_MIN_RETRY         0
33 #define CONNECT_MAX_RETRY         16
34 
35 #define CONNECT_MIN_TIMEOUT       100
36 #define CONNECT_MAX_TIMEOUT       20000
37 #define CONNECT_DEFAULT_TIMEOUT   1000
38 
39 #define ISCSI_ACTIVE_DISABLED     0
40 #define ISCSI_ACTIVE_ENABLED      1
41 
42 #define ISCSI_DISABLED            0
43 #define ISCSI_ENABLED             1
44 #define ISCSI_ENABLED_FOR_MPIO    2
45 
46 #define IP_MODE_IP4               0
47 #define IP_MODE_IP6               1
48 #define IP_MODE_AUTOCONFIG        2
49 
50 #define ISCSI_AUTH_TYPE_NONE      0
51 #define ISCSI_AUTH_TYPE_CHAP      1
52 #define ISCSI_AUTH_TYPE_KRB       2
53 
54 #define IP4_MIN_SIZE              7
55 #define IP4_MAX_SIZE              15
56 #define IP4_STR_MAX_SIZE          16
57 
58 //
59 // Macros used for an IPv4 or an IPv6 address.
60 //
61 #define IP_MIN_SIZE               2
62 #define IP_MAX_SIZE               39
63 #define IP_STR_MAX_SIZE           40
64 
65 #define LUN_MIN_SIZE              1
66 #define LUN_MAX_SIZE              20
67 #define ISCSI_LUN_STR_MAX_LEN     21
68 
69 #define ISCSI_CHAP_UNI            0
70 #define ISCSI_CHAP_MUTUAL         1
71 
72 #define TARGET_PORT_MIN_NUM       0
73 #define TARGET_PORT_MAX_NUM       65535
74 #define LABEL_END                 0xffff
75 
76 #define KEY_INITIATOR_NAME        0x101
77 #define KEY_DHCP_ENABLE           0x102
78 #define KEY_LOCAL_IP              0x103
79 #define KEY_SUBNET_MASK           0x104
80 #define KEY_GATE_WAY              0x105
81 #define KEY_TARGET_IP             0x106
82 #define KEY_CHAP_NAME             0x107
83 #define KEY_CHAP_SECRET           0x108
84 #define KEY_REVERSE_CHAP_NAME     0x109
85 #define KEY_REVERSE_CHAP_SECRET   0x10a
86 #define KEY_SAVE_CHANGES          0x10b
87 #define KEY_TARGET_NAME           0x10c
88 #define KEY_BOOT_LUN              0x10d
89 
90 #define KEY_ADD_ATTEMPT           0x10e
91 #define KEY_SAVE_ATTEMPT_CONFIG   0x10f
92 #define KEY_ORDER_ATTEMPT_CONFIG  0x110
93 #define KEY_SAVE_ORDER_CHANGES    0x111
94 #define KEY_IGNORE_ORDER_CHANGES  0x112
95 #define KEY_ATTEMPT_NAME          0x113
96 #define KEY_SAVE_DELETE_ATTEMPT   0x114
97 #define KEY_IGNORE_DELETE_ATTEMPT 0x115
98 #define KEY_DELETE_ATTEMPT        0x116
99 
100 #define KEY_IP_MODE               0x11c
101 #define KEY_AUTH_TYPE             0x11d
102 #define KEY_CONFIG_ISID           0x11e
103 
104 #define ATTEMPT_ENTRY_LABEL       0x9000
105 #define KEY_ATTEMPT_ENTRY_BASE    0xa000
106 #define KEY_DE_ATTEMPT_ENTRY_BASE 0xb000
107 
108 #define KEY_DEVICE_ENTRY_BASE     0x1000
109 #define KEY_MAC_ENTRY_BASE        0x2000
110 #define MAC_ENTRY_LABEL           0x3000
111 #define ORDER_ENTRY_LABEL         0x4000
112 #define DELETE_ENTRY_LABEL        0x5000
113 #define KEYWORD_ENTRY_LABEL       0x6000
114 #define CONFIG_OPTION_OFFSET      0x9000
115 
116 #define ISCSI_CHAP_SECRET_MIN_LEN 12
117 #define ISCSI_CHAP_SECRET_MAX_LEN 16
118 //
119 // ISCSI_CHAP_SECRET_STORAGE = ISCSI_CHAP_SECRET_MAX_LEN + sizeof (NULL-Terminator)
120 //
121 #define ISCSI_CHAP_SECRET_STORAGE  17
122 
123 #define ISCSI_CHAP_NAME_MAX_LEN    126
124 #define ISCSI_CHAP_NAME_STORAGE    127
125 
126 #define KERBEROS_SECRET_MIN_LEN   12
127 #define KERBEROS_SECRET_MAX_LEN   16
128 #define KERBEROS_SECRET_STORAGE   17
129 #define KERBEROS_NAME_MAX_LEN     96
130 #define KERBEROS_KDC_PORT_MIN_NUM 0
131 #define KERBEROS_KDC_PORT_MAX_NUM 65535
132 
133 #define ISID_CONFIGURABLE_MIN_LEN 6
134 #define ISID_CONFIGURABLE_MAX_LEN 12
135 #define ISID_CONFIGURABLE_STORAGE 13
136 
137 //
138 // sizeof (EFI_MAC_ADDRESS) * 3
139 //
140 #define ISCSI_MAX_MAC_STRING_LEN            96
141 
142 ///
143 /// Macro used for target Url.
144 ///
145 #define ISCSI_TARGET_URI_MIN_SIZE     0
146 #define ISCSI_TARGET_URI_MAX_SIZE     255
147 
148 #pragma pack(1)
149 
150 //
151 // Used by keyword.
152 //
153 typedef struct {
154   CHAR16  ISCSIIsId[ISID_CONFIGURABLE_STORAGE];
155   CHAR16  ISCSIInitiatorIpAddress[IP4_STR_MAX_SIZE];
156   CHAR16  ISCSIInitiatorNetmask[IP4_STR_MAX_SIZE];
157   CHAR16  ISCSIInitiatorGateway[IP4_STR_MAX_SIZE];
158   CHAR16  ISCSITargetName[ISCSI_NAME_MAX_SIZE];
159   CHAR16  ISCSITargetIpAddress[ISCSI_TARGET_URI_MAX_SIZE];
160   CHAR16  ISCSILun[ISCSI_LUN_STR_MAX_LEN];
161   CHAR16  ISCSIChapUsername[ISCSI_CHAP_NAME_STORAGE];
162   CHAR16  ISCSIChapSecret[ISCSI_CHAP_SECRET_STORAGE];
163   CHAR16  ISCSIReverseChapUsername[ISCSI_CHAP_NAME_STORAGE];
164   CHAR16  ISCSIReverseChapSecret[ISCSI_CHAP_SECRET_STORAGE];
165 } KEYWORD_STR;
166 
167 typedef struct _ISCSI_CONFIG_IFR_NVDATA {
168   CHAR16  InitiatorName[ISCSI_NAME_MAX_SIZE];
169   CHAR16  AttemptName[ATTEMPT_NAME_SIZE];
170   UINT8   Enabled;
171   UINT8   IpMode;
172 
173   UINT8   ConnectRetryCount;
174   UINT8   Padding1;
175   UINT16  ConnectTimeout; // Timeout value in milliseconds.
176 
177   UINT8   InitiatorInfoFromDhcp;
178   UINT8   TargetInfoFromDhcp;
179   CHAR16  LocalIp[IP4_STR_MAX_SIZE];
180   CHAR16  SubnetMask[IP4_STR_MAX_SIZE];
181   CHAR16  Gateway[IP4_STR_MAX_SIZE];
182 
183   CHAR16  TargetName[ISCSI_NAME_MAX_SIZE];
184   CHAR16  TargetIp[ISCSI_TARGET_URI_MAX_SIZE];
185   UINT16  TargetPort;
186   CHAR16  BootLun[ISCSI_LUN_STR_MAX_LEN];
187 
188   UINT8   AuthenticationType;
189 
190   UINT8   CHAPType;
191   CHAR16  CHAPName[ISCSI_CHAP_NAME_STORAGE];
192   CHAR16  CHAPSecret[ISCSI_CHAP_SECRET_STORAGE];
193   CHAR16  ReverseCHAPName[ISCSI_CHAP_NAME_STORAGE];
194   CHAR16  ReverseCHAPSecret[ISCSI_CHAP_SECRET_STORAGE];
195 
196   BOOLEAN MutualRequired;
197   UINT8   Padding2;
198   CHAR16  KerberosUserName[KERBEROS_NAME_MAX_LEN];
199   CHAR16  KerberosUserSecret[KERBEROS_SECRET_STORAGE];
200   CHAR16  KerberosKDCName[KERBEROS_NAME_MAX_LEN];
201   CHAR16  KerberosKDCRealm[KERBEROS_NAME_MAX_LEN];
202   CHAR16  KerberosKDCIp[IP_STR_MAX_SIZE];
203   UINT16  KerberosKDCPort;
204 
205   UINT8   DynamicOrderedList[ISCSI_MAX_ATTEMPTS_NUM];
206   UINT8   DeleteAttemptList[ISCSI_MAX_ATTEMPTS_NUM];
207   UINT8   AddAttemptList[ISCSI_MAX_ATTEMPTS_NUM];
208   CHAR16  IsId[ISID_CONFIGURABLE_STORAGE];
209 
210   //
211   // This will be used by keywords.
212   //
213   CHAR16  ISCSIMacAddr[ISCSI_MAX_MAC_STRING_LEN];
214   CHAR16  ISCSIAttemptOrder[ATTEMPT_NAME_LIST_SIZE];
215   CHAR16  ISCSIAddAttemptList[ATTEMPT_NAME_LIST_SIZE];
216   CHAR16  ISCSIDeleteAttemptList[ATTEMPT_NAME_LIST_SIZE];
217   CHAR16  ISCSIDisplayAttemptList[ATTEMPT_NAME_LIST_SIZE];
218   CHAR16  ISCSIAttemptName[ATTEMPT_NAME_LIST_SIZE];
219   UINT8   ISCSIBootEnableList[ISCSI_MAX_ATTEMPTS_NUM];
220   UINT8   ISCSIIpAddressTypeList[ISCSI_MAX_ATTEMPTS_NUM];
221   UINT8   ISCSIConnectRetry[ISCSI_MAX_ATTEMPTS_NUM];
222   UINT16  ISCSIConnectTimeout[ISCSI_MAX_ATTEMPTS_NUM];
223   UINT8   ISCSIInitiatorInfoViaDHCP[ISCSI_MAX_ATTEMPTS_NUM];
224   UINT8   ISCSITargetInfoViaDHCP[ISCSI_MAX_ATTEMPTS_NUM];
225   UINT16  ISCSITargetTcpPort[ISCSI_MAX_ATTEMPTS_NUM];
226   UINT8   ISCSIAuthenticationMethod[ISCSI_MAX_ATTEMPTS_NUM];
227   UINT8   ISCSIChapType[ISCSI_MAX_ATTEMPTS_NUM];
228   KEYWORD_STR Keyword[ISCSI_MAX_ATTEMPTS_NUM];
229 } ISCSI_CONFIG_IFR_NVDATA;
230 #pragma pack()
231 
232 #endif
233