forked from gregkh/ndas
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlsp_binparm.h
More file actions
176 lines (139 loc) · 5.4 KB
/
lsp_binparm.h
File metadata and controls
176 lines (139 loc) · 5.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#ifndef _LSP_BINPARM_H_
#define _LSP_BINPARM_H_
#include "inc/lspx/pshpack4.h"
#include "inc/lspx/lsp_type.h"
/* Parameter Types */
typedef enum _lsp_binparam_version_t {
LSP_BINPARM_CURRENT_VERSION = 0
} lsp_binparam_version_t;
typedef enum _lsp_binparam_type_t {
LSP_BINPARM_TYPE_SECURITY = 0x1,
LSP_BINPARM_TYPE_NEGOTIATION = 0x2,
LSP_BINPARM_TYPE_TARGET_LIST = 0x3,
LSP_BINPARM_TYPE_TARGET_DATA = 0x4
} lsp_binparam_type_t;
#define LSP_BINPARM_SIZE_LOGIN_FIRST_REQUEST 4
#define LSP_BINPARM_SIZE_LOGIN_SECOND_REQUEST 8
#define LSP_BINPARM_SIZE_LOGIN_THIRD_REQUEST 32
#define LSP_BINPARM_SIZE_LOGIN_FOURTH_REQUEST 28
#define LSP_BINPARM_SIZE_TEXT_TARGET_LIST_REQUEST 4
#define LSP_BINPARM_SIZE_TEXT_TARGET_DATA_REQUEST 16
#define LSP_BINPARM_SIZE_LOGIN_FIRST_REPLY 4
#define LSP_BINPARM_SIZE_LOGIN_SECOND_REPLY 36
#define LSP_BINPARM_SIZE_LOGIN_THIRD_REPLY 4
#define LSP_BINPARM_SIZE_LOGIN_FOURTH_REPLY 28
#define LSP_BINPARM_SIZE_TEXT_TARGET_LIST_REPLY 36
#define LSP_BINPARM_SIZE_TEXT_TARGET_DATA_REPLY 16
#define LSP_BINPARM_SIZE_MAX_REPLY 36
typedef struct _lsp_binparm_t {
lsp_uint8_t parm_type;
lsp_uint8_t _reserved_1;
lsp_uint16_t _reserved_2;
} __lsp_attr_packed__ lsp_binparm_t;
LSP_C_ASSERT_SIZEOF(lsp_binparm_t, 4);
/* LSP_BINPARM_TYPE_SECURITY. */
/* CHAP authentication parameters. */
typedef enum _lsp_auth_method_t {
LSP_AUTH_METHOD_NONE = 0x0000, /* 1.1 or later only */
LSP_AUTH_METHOD_CHAP = 0x0001
} lsp_auth_method_t;
typedef enum _lsp_user_t {
LSP_FIRST_TARGET_RO_USER = 0x00000001,
LSP_FIRST_TARGET_RW_USER = 0x00010001,
LSP_SECOND_TARGET_RO_USER = 0x00000002,
LSP_SECOND_TARGET_RW_USER = 0x00020002,
LSP_NDAS_SUPERVISOR = 0xFFFFFFFF
} lsp_user_t;
typedef struct _lsp_authparm_chap_t {
lsp_uint32_t chap_a;
lsp_uint32_t chap_i;
lsp_uint32_t chap_n;
lsp_uint32_t chap_r[4];
lsp_uint32_t chap_c[1]; /* variable length */
} __lsp_attr_packed__ lsp_authparm_chap_t;
LSP_C_ASSERT_SIZEOF(lsp_authparm_chap_t, 32);
typedef enum _lsp_hash_algorithm_t {
LSP_HASH_ALGORITHM_MD5 = 0x00000005
} lsp_hash_algorithm_t;
#define LSP_CHAP_MAX_CHALLENGE_LENGTH 4
typedef struct _lsp_binparm_security_t {
lsp_uint8_t parm_type; /* parameter type */
lsp_uint8_t login_type; /* login type */
lsp_uint16_t auth_method; /* authentication method */
union {
lsp_uint8_t auth_parm[1]; // Variable Length.
lsp_authparm_chap_t auth_chap;
} __lsp_attr_packed__ u;
} __lsp_attr_packed__ lsp_binparm_security_t;
LSP_C_ASSERT_SIZEOF(lsp_binparm_security_t, 36);
/* LSP_BINPARM_TYPE_NEGOTIATION */
typedef enum _lsp_hardware_type_t {
LSP_HARDWARE_TYPE_ASIC = 0x00,
LSP_HARDWARE_TYPE_UNSPECIFIED = 0xFF
} lsp_hardware_type_t;
typedef enum _lsp_encryption_algorithm_t {
LSP_ENCRYPT_ALG_NONE = 0x00,
LSP_ENCRYPT_ALG_NKCDE_1 = 0x01, /* lsp_enc/lsp_dec */
LSP_ENCRYPT_ALG_AES128 = 0x02 /* AES32 */
} lsp_encryption_algorithm_t;
typedef enum _lsp_digest_algorithm_t {
LSP_DIGEST_ALG_NONE = 0x00, /* 1.0, 1.1 and 2.0 */
LSP_DIGEST_ALG_CRC32 = 0x02
} lsp_digest_algorithm_t;
typedef struct _lsp_binparm_negotiation_t {
lsp_uint8_t parm_type; /* parameter type */
lsp_uint8_t hw_type; /* hardware type */
lsp_uint8_t hw_ver; /* hardware version */
lsp_uint8_t _reserved_;
lsp_uint32_t slot_cnt; /* number of slots */
lsp_uint32_t max_blocks; /* maximum blocks */
lsp_uint32_t max_target_id; /* maximum number of Target ID */
lsp_uint32_t max_lun; /* maximum number of LUN ID */
#if 1
lsp_uint8_t options; /* reserved prior to 2.0g, options in 2.0g */
lsp_uint8_t hdr_enc_alg; /* header encryption algorithm */
lsp_uint8_t _reserved12_;
lsp_uint8_t hdr_dig_alg; /* header digest algorithm */
lsp_uint8_t _reserved13_;
lsp_uint8_t dat_enc_alg; /* data encryption algorithm */
lsp_uint8_t _reserved14_;
lsp_uint8_t dat_dig_alg; /* data digest algorithm */
#else
lsp_uint16_t hdr_enc_alg; /* header encryption algorithm */
lsp_uint16_t hdr_dig_alg; /* header digest algorithm */
lsp_uint16_t dat_enc_alg; /* data encryption algorithm */
lsp_uint16_t dat_dig_alg; /* data digest algorithm */
#endif
} __lsp_attr_packed__ lsp_binparm_negotiation_t;
LSP_C_ASSERT_SIZEOF(lsp_binparm_negotiation_t, 28);
/* LSP_BINPARM_TYPE_TARGET_LIST */
typedef struct _lsp_binparm_target_list_elem {
lsp_uint32_t target_id;
lsp_uint8_t rw_hosts_cnt;
lsp_uint8_t ro_hosts_cnt;
lsp_uint16_t _reserved_;
lsp_uint64_t target_data;
} __lsp_attr_packed__ lsp_binparm_target_list_elem_t;
LSP_C_ASSERT_SIZEOF(lsp_binparm_target_list_elem_t, 16);
typedef struct _lsp_binparm_target_list_t {
lsp_uint8_t parm_type;
lsp_uint8_t target_cnt;
lsp_uint16_t _reserved_;
/* lsp_binparm_target_list_elem targets[1]; */
} __lsp_attr_packed__ lsp_binparm_target_list_t;
LSP_C_ASSERT_SIZEOF(lsp_binparm_target_list_t, 4);
/* LSP_BINPARM_TYPE_TARGET_DATA */
typedef enum _lsp_binparam_op_t {
LSP_BINPARM_OP_GET = 0x00,
LSP_BINPARM_OP_SET = 0xFF
} lsp_binparam_op_t;
typedef struct _lsp_binparm_target_data_t {
lsp_uint8_t parm_type;
lsp_uint8_t op_get_or_set;
lsp_uint16_t _reserved_;
lsp_uint32_t target_id;
lsp_uint64_t target_data;
} __lsp_attr_packed__ lsp_binparm_target_data_t;
LSP_C_ASSERT_SIZEOF(lsp_binparm_target_data_t, 16);
#include "inc/lspx/poppack.h"
#endif /* _LSP_BINPARM_H_ */