emlxs_dhchap.c (a9800beb) emlxs_dhchap.c (8f23e9fa)
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
8 * You can obtain a copy of the license at
9 * http://www.opensource.org/licenses/cddl1.txt.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22/*
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22/*
23 * Copyright 2010 Emulex. All rights reserved.
23 * Copyright (c) 2004-2011 Emulex. All rights reserved.
24 * Use is subject to license terms.
25 */
26
24 * Use is subject to license terms.
25 */
26
27
28#include <emlxs.h>
29
30#ifdef DHCHAP_SUPPORT
31
32#include <md5.h>
33#include <sha1.h>
27#include <emlxs.h>
28
29#ifdef DHCHAP_SUPPORT
30
31#include <md5.h>
32#include <sha1.h>
34#ifdef S10
35#include <sha1_consts.h>
36#else
37#include <sys/sha1_consts.h>
33#include <sys/sha1_consts.h>
38#endif /* S10 */
39#include <bignum.h>
40#include <sys/time.h>
41
34#include <bignum.h>
35#include <sys/time.h>
36
42#ifdef S10
43#define BIGNUM_CHUNK_32
44#define BIG_CHUNK_TYPE uint32_t
45#define CHARLEN2BIGNUMLEN(_val) (_val/4)
46#endif /* S10 */
47
48#define RAND
49
50#ifndef ENABLE
51#define ENABLE 1
52#endif /* ENABLE */
53
54#ifndef DISABLE

--- 345 unchanged lines hidden (view full) ---

400
401 count = sizeof (emlxs_event_table) / sizeof (emlxs_table_t);
402 for (i = 0; i < count; i++) {
403 if (state == emlxs_event_table[i].code) {
404 return (emlxs_event_table[i].string);
405 }
406 }
407
37
38#define RAND
39
40#ifndef ENABLE
41#define ENABLE 1
42#endif /* ENABLE */
43
44#ifndef DISABLE

--- 345 unchanged lines hidden (view full) ---

390
391 count = sizeof (emlxs_event_table) / sizeof (emlxs_table_t);
392 for (i = 0; i < count; i++) {
393 if (state == emlxs_event_table[i].code) {
394 return (emlxs_event_table[i].string);
395 }
396 }
397
408 (void) sprintf(buffer, "event=0x%x", state);
398 (void) snprintf(buffer, sizeof (buffer), "event=0x%x", state);
409 return (buffer);
410
411} /* emlxs_dhc_event_xlate() */
412
413
414extern void
415emlxs_dhc_state(emlxs_port_t *port, emlxs_node_t *ndlp, uint32_t state,
416 uint32_t reason, uint32_t explaination)

--- 338 unchanged lines hidden (view full) ---

755
756 count = sizeof (emlxs_pstate_table) / sizeof (emlxs_table_t);
757 for (i = 0; i < count; i++) {
758 if (state == emlxs_pstate_table[i].code) {
759 return (emlxs_pstate_table[i].string);
760 }
761 }
762
399 return (buffer);
400
401} /* emlxs_dhc_event_xlate() */
402
403
404extern void
405emlxs_dhc_state(emlxs_port_t *port, emlxs_node_t *ndlp, uint32_t state,
406 uint32_t reason, uint32_t explaination)

--- 338 unchanged lines hidden (view full) ---

745
746 count = sizeof (emlxs_pstate_table) / sizeof (emlxs_table_t);
747 for (i = 0; i < count; i++) {
748 if (state == emlxs_pstate_table[i].code) {
749 return (emlxs_pstate_table[i].string);
750 }
751 }
752
763 (void) sprintf(buffer, "state=0x%x", state);
753 (void) snprintf(buffer, sizeof (buffer), "state=0x%x", state);
764 return (buffer);
765
766} /* emlxs_dhc_pstate_xlate() */
767
768
769static char *
770emlxs_dhc_nstate_xlate(uint32_t state)
771{
772 static char buffer[32];
773 uint32_t i;
774 uint32_t count;
775
776 count = sizeof (emlxs_nstate_table) / sizeof (emlxs_table_t);
777 for (i = 0; i < count; i++) {
778 if (state == emlxs_nstate_table[i].code) {
779 return (emlxs_nstate_table[i].string);
780 }
781 }
782
754 return (buffer);
755
756} /* emlxs_dhc_pstate_xlate() */
757
758
759static char *
760emlxs_dhc_nstate_xlate(uint32_t state)
761{
762 static char buffer[32];
763 uint32_t i;
764 uint32_t count;
765
766 count = sizeof (emlxs_nstate_table) / sizeof (emlxs_table_t);
767 for (i = 0; i < count; i++) {
768 if (state == emlxs_nstate_table[i].code) {
769 return (emlxs_nstate_table[i].string);
770 }
771 }
772
783 (void) sprintf(buffer, "state=0x%x", state);
773 (void) snprintf(buffer, sizeof (buffer), "state=0x%x", state);
784 return (buffer);
785
786} /* emlxs_dhc_nstate_xlate() */
787
788
789static uint32_t
790emlxs_check_dhgp(
791 emlxs_port_t *port,

--- 69 unchanged lines hidden (view full) ---

861
862 if (i == wnt) {
863 /* no match */
864 rc = 1;
865 return (1);
866 }
867
868 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
774 return (buffer);
775
776} /* emlxs_dhc_nstate_xlate() */
777
778
779static uint32_t
780emlxs_check_dhgp(
781 emlxs_port_t *port,

--- 69 unchanged lines hidden (view full) ---

851
852 if (i == wnt) {
853 /* no match */
854 rc = 1;
855 return (1);
856 }
857
858 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
869 "emlxs_check_dhgp: dhgp_id=0x%x", *dhgp_id);
859 "check_dhgp: dhgp_id=0x%x", *dhgp_id);
870
871 return (rc);
872} /* emlxs_check_dhgp */
873
874
875static void
876emlxs_get_random_bytes(
877 NODELIST *ndlp,

--- 167 unchanged lines hidden (view full) ---

1045/* MATCHMAP * mp, */ void *arg3,
1046/* NODELIST * ndlp */ void *arg4,
1047uint32_t evt)
1048{
1049 NODELIST *ndlp = (NODELIST *) arg4;
1050 emlxs_node_dhc_t *node_dhc = &ndlp->node_dhc;
1051
1052 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
860
861 return (rc);
862} /* emlxs_check_dhgp */
863
864
865static void
866emlxs_get_random_bytes(
867 NODELIST *ndlp,

--- 167 unchanged lines hidden (view full) ---

1035/* MATCHMAP * mp, */ void *arg3,
1036/* NODELIST * ndlp */ void *arg4,
1037uint32_t evt)
1038{
1039 NODELIST *ndlp = (NODELIST *) arg4;
1040 emlxs_node_dhc_t *node_dhc = &ndlp->node_dhc;
1041
1042 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1053 "emlxs_disc_neverdev: did=0x%x.",
1043 "disc_neverdev: did=0x%x.",
1054 ndlp->nlp_DID);
1055
1056 emlxs_dhc_state(port, ndlp, NODE_STATE_UNKNOWN, 0, 0);
1057
1058 return (node_dhc->state);
1059
1060} /* emlxs_disc_neverdev() */
1061

--- 15 unchanged lines hidden (view full) ---

1077 NODELIST *ndlp;
1078 uint32_t did;
1079
1080 did = pkt->pkt_cmd_fhdr.d_id;
1081 sbp = (emlxs_buf_t *)pkt->pkt_fca_private;
1082 ndlp = sbp->node;
1083
1084 if (!ndlp) {
1044 ndlp->nlp_DID);
1045
1046 emlxs_dhc_state(port, ndlp, NODE_STATE_UNKNOWN, 0, 0);
1047
1048 return (node_dhc->state);
1049
1050} /* emlxs_disc_neverdev() */
1051

--- 15 unchanged lines hidden (view full) ---

1067 NODELIST *ndlp;
1068 uint32_t did;
1069
1070 did = pkt->pkt_cmd_fhdr.d_id;
1071 sbp = (emlxs_buf_t *)pkt->pkt_fca_private;
1072 ndlp = sbp->node;
1073
1074 if (!ndlp) {
1085 ndlp = emlxs_node_find_did(port, did);
1075 ndlp = emlxs_node_find_did(port, did, 1);
1086 }
1087 if (pkt->pkt_state != FC_PKT_SUCCESS) {
1088 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1076 }
1077 if (pkt->pkt_state != FC_PKT_SUCCESS) {
1078 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1089 "emlxs_cmpl_dhchap_challenge_issue: did=0x%x state=%x",
1079 "cmpl_dhchap_challenge_issue: did=0x%x state=%x",
1090 did, pkt->pkt_state);
1091 } else {
1092 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1080 did, pkt->pkt_state);
1081 } else {
1082 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1093 "emlxs_cmpl_dhchap_challenge_issue: did=0x%x. Succcess.",
1083 "cmpl_dhchap_challenge_issue: did=0x%x. Succcess.",
1094 did);
1095 }
1096
1097 if (ndlp) {
1098 if (pkt->pkt_state == FC_PKT_SUCCESS) {
1099 (void) emlxs_dhchap_state_machine(port, NULL, NULL,
1100 NULL, ndlp, NODE_EVENT_CMPL_AUTH_MSG);
1101 }

--- 23 unchanged lines hidden (view full) ---

1125 uint32_t did;
1126 emlxs_buf_t *sbp;
1127
1128 did = pkt->pkt_cmd_fhdr.d_id;
1129 sbp = (emlxs_buf_t *)pkt->pkt_fca_private;
1130 ndlp = sbp->node;
1131
1132 if (!ndlp) {
1084 did);
1085 }
1086
1087 if (ndlp) {
1088 if (pkt->pkt_state == FC_PKT_SUCCESS) {
1089 (void) emlxs_dhchap_state_machine(port, NULL, NULL,
1090 NULL, ndlp, NODE_EVENT_CMPL_AUTH_MSG);
1091 }

--- 23 unchanged lines hidden (view full) ---

1115 uint32_t did;
1116 emlxs_buf_t *sbp;
1117
1118 did = pkt->pkt_cmd_fhdr.d_id;
1119 sbp = (emlxs_buf_t *)pkt->pkt_fca_private;
1120 ndlp = sbp->node;
1121
1122 if (!ndlp) {
1133 ndlp = emlxs_node_find_did(port, did);
1123 ndlp = emlxs_node_find_did(port, did, 1);
1134 }
1135 if (pkt->pkt_state != FC_PKT_SUCCESS) {
1136 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1124 }
1125 if (pkt->pkt_state != FC_PKT_SUCCESS) {
1126 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1137 "emlxs_cmpl_dhchap_success_issue: 0x%x %x. No retry.",
1127 "cmpl_dhchap_success_issue: 0x%x %x. No retry.",
1138 did, pkt->pkt_state);
1139 } else {
1140 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1128 did, pkt->pkt_state);
1129 } else {
1130 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1141 "emlxs_cmpl_dhchap_success_issue: did=0x%x. Succcess.",
1131 "cmpl_dhchap_success_issue: did=0x%x. Succcess.",
1142 did);
1143 }
1144
1145 if (ndlp) {
1146 if (pkt->pkt_state == FC_PKT_SUCCESS) {
1147 (void) emlxs_dhchap_state_machine(port, NULL, NULL,
1148 NULL, ndlp, NODE_EVENT_CMPL_AUTH_MSG);
1149 }

--- 25 unchanged lines hidden (view full) ---

1175 uint8_t *pCmd;
1176 uint16_t cmdsize;
1177 DHCHAP_SUCCESS_HDR *ap;
1178 uint8_t *tmp;
1179 uint32_t len;
1180 uint32_t ret;
1181
1182 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1132 did);
1133 }
1134
1135 if (ndlp) {
1136 if (pkt->pkt_state == FC_PKT_SUCCESS) {
1137 (void) emlxs_dhchap_state_machine(port, NULL, NULL,
1138 NULL, ndlp, NODE_EVENT_CMPL_AUTH_MSG);
1139 }

--- 25 unchanged lines hidden (view full) ---

1165 uint8_t *pCmd;
1166 uint16_t cmdsize;
1167 DHCHAP_SUCCESS_HDR *ap;
1168 uint8_t *tmp;
1169 uint32_t len;
1170 uint32_t ret;
1171
1172 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1183 "emlxs_issue_dhchap_success: did=0x%x", ndlp->nlp_DID);
1173 "issue_dhchap_success: did=0x%x", ndlp->nlp_DID);
1184
1185 if (ndlp->nlp_DID == FABRIC_DID) {
1186 if (node_dhc->nlp_auth_hashid == AUTH_MD5)
1187 len = MD5_LEN;
1188 else
1189 len = SHA1_LEN;
1190 } else {
1191 len = (node_dhc->nlp_auth_hashid == AUTH_MD5) ?

--- 34 unchanged lines hidden (view full) ---

1226 * DHCHAP_Success expected.
1227 *
1228 * In case of rsp != NULL it indicates this DHCHAP_Success is issued
1229 * when host is the responder AND this DHCHAP_Success has reply
1230 * embedded therefore the host expects DHCHAP_Success from other
1231 * entity in transaction.
1232 */
1233 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1174
1175 if (ndlp->nlp_DID == FABRIC_DID) {
1176 if (node_dhc->nlp_auth_hashid == AUTH_MD5)
1177 len = MD5_LEN;
1178 else
1179 len = SHA1_LEN;
1180 } else {
1181 len = (node_dhc->nlp_auth_hashid == AUTH_MD5) ?

--- 34 unchanged lines hidden (view full) ---

1216 * DHCHAP_Success expected.
1217 *
1218 * In case of rsp != NULL it indicates this DHCHAP_Success is issued
1219 * when host is the responder AND this DHCHAP_Success has reply
1220 * embedded therefore the host expects DHCHAP_Success from other
1221 * entity in transaction.
1222 */
1223 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1234 "emlxs_issue_dhchap_success: 0x%x 0x%x 0x%x 0x%x 0x%x %p",
1224 "issue_dhchap_success: 0x%x 0x%x 0x%x 0x%x 0x%x %p",
1235 ndlp->nlp_DID, node_dhc->nlp_auth_hashid,
1236 node_dhc->nlp_auth_tranid_rsp,
1237 node_dhc->nlp_auth_tranid_ini, cmdsize, rsp);
1238
1239 if (rsp == NULL) {
1240 ap->msg_len = LE_SWAP32(0x00000004);
1241 ap->RspVal_len = 0x0;
1242

--- 15 unchanged lines hidden (view full) ---

1258 if (node_dhc->nlp_auth_flag == 2) {
1259 ap->tran_id =
1260 LE_SWAP32(node_dhc->nlp_auth_tranid_rsp);
1261 } else if (node_dhc->nlp_auth_flag == 1) {
1262 ap->tran_id =
1263 LE_SWAP32(node_dhc->nlp_auth_tranid_ini);
1264 } else {
1265 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_debug_msg,
1225 ndlp->nlp_DID, node_dhc->nlp_auth_hashid,
1226 node_dhc->nlp_auth_tranid_rsp,
1227 node_dhc->nlp_auth_tranid_ini, cmdsize, rsp);
1228
1229 if (rsp == NULL) {
1230 ap->msg_len = LE_SWAP32(0x00000004);
1231 ap->RspVal_len = 0x0;
1232

--- 15 unchanged lines hidden (view full) ---

1248 if (node_dhc->nlp_auth_flag == 2) {
1249 ap->tran_id =
1250 LE_SWAP32(node_dhc->nlp_auth_tranid_rsp);
1251 } else if (node_dhc->nlp_auth_flag == 1) {
1252 ap->tran_id =
1253 LE_SWAP32(node_dhc->nlp_auth_tranid_ini);
1254 } else {
1255 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_debug_msg,
1266 "emlxs_is_dhch_success: (1) 0x%x 0x%x 0x%x 0x%x",
1256 "is_dhch_success: (1) 0x%x 0x%x 0x%x 0x%x",
1267 ndlp->nlp_DID, node_dhc->nlp_auth_flag,
1268 node_dhc->nlp_auth_tranid_rsp,
1269 node_dhc->nlp_auth_tranid_ini);
1270
1271 return (1);
1272 }
1273 }
1274
1275 pkt->pkt_comp = emlxs_cmpl_dhchap_success_issue;
1276
1277 ret = emlxs_pkt_send(pkt, 1);
1278
1279 if (ret != FC_SUCCESS) {
1280 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1257 ndlp->nlp_DID, node_dhc->nlp_auth_flag,
1258 node_dhc->nlp_auth_tranid_rsp,
1259 node_dhc->nlp_auth_tranid_ini);
1260
1261 return (1);
1262 }
1263 }
1264
1265 pkt->pkt_comp = emlxs_cmpl_dhchap_success_issue;
1266
1267 ret = emlxs_pkt_send(pkt, 1);
1268
1269 if (ret != FC_SUCCESS) {
1270 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1281 "emlxs_issue_dhchap_success: Unable to send packet. 0x%x",
1271 "issue_dhchap_success: Unable to send packet. 0x%x",
1282 ret);
1283
1284 emlxs_pkt_free(pkt);
1285
1286 return (1);
1287 }
1288 return (0);
1289

--- 16 unchanged lines hidden (view full) ---

1306 NODELIST *ndlp;
1307 uint32_t did;
1308
1309 did = pkt->pkt_cmd_fhdr.d_id;
1310 sbp = (emlxs_buf_t *)pkt->pkt_fca_private;
1311 ndlp = sbp->node;
1312
1313 if (!ndlp) {
1272 ret);
1273
1274 emlxs_pkt_free(pkt);
1275
1276 return (1);
1277 }
1278 return (0);
1279

--- 16 unchanged lines hidden (view full) ---

1296 NODELIST *ndlp;
1297 uint32_t did;
1298
1299 did = pkt->pkt_cmd_fhdr.d_id;
1300 sbp = (emlxs_buf_t *)pkt->pkt_fca_private;
1301 ndlp = sbp->node;
1302
1303 if (!ndlp) {
1314 ndlp = emlxs_node_find_did(port, did);
1304 ndlp = emlxs_node_find_did(port, did, 1);
1315 }
1316 if (pkt->pkt_state != FC_PKT_SUCCESS) {
1317 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1305 }
1306 if (pkt->pkt_state != FC_PKT_SUCCESS) {
1307 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1318 "emlxs_cmpl_auth_reject_issue: 0x%x %x. No retry.",
1308 "cmpl_auth_reject_issue: 0x%x %x. No retry.",
1319 did, pkt->pkt_state);
1320 } else {
1321 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1309 did, pkt->pkt_state);
1310 } else {
1311 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1322 "emlxs_cmpl_auth_reject_issue: did=0x%x. Succcess.",
1312 "cmpl_auth_reject_issue: did=0x%x. Succcess.",
1323 did);
1324 }
1325
1326 if (ndlp) {
1327 /* setup the new state */
1328 emlxs_dhc_state(port, ndlp, NODE_STATE_AUTH_FAILED, 0, 0);
1329
1330 if (pkt->pkt_state == FC_PKT_SUCCESS) {

--- 82 unchanged lines hidden (view full) ---

1413 "Auth reject failed. Unable to send pkt. 0x%x %x expl=%x",
1414 ndlp->nlp_DID, node_dhc->nlp_auth_flag, ReasonCode,
1415 ReasonCodeExplanation);
1416
1417 emlxs_pkt_free(pkt);
1418
1419 return (1);
1420 }
1313 did);
1314 }
1315
1316 if (ndlp) {
1317 /* setup the new state */
1318 emlxs_dhc_state(port, ndlp, NODE_STATE_AUTH_FAILED, 0, 0);
1319
1320 if (pkt->pkt_state == FC_PKT_SUCCESS) {

--- 82 unchanged lines hidden (view full) ---

1403 "Auth reject failed. Unable to send pkt. 0x%x %x expl=%x",
1404 ndlp->nlp_DID, node_dhc->nlp_auth_flag, ReasonCode,
1405 ReasonCodeExplanation);
1406
1407 emlxs_pkt_free(pkt);
1408
1409 return (1);
1410 }
1421 (void) sprintf(info,
1411 (void) snprintf(info, sizeof (info),
1422 "Auth-Reject: ReasonCode=0x%x, ReasonCodeExplanation=0x%x",
1423 ReasonCode, ReasonCodeExplanation);
1424
1412 "Auth-Reject: ReasonCode=0x%x, ReasonCodeExplanation=0x%x",
1413 ReasonCode, ReasonCodeExplanation);
1414
1425 emlxs_log_auth_event(port, ndlp, ESC_EMLXS_28, info);
1415 emlxs_log_auth_event(port, ndlp, "issue_auth_reject", info);
1426
1427 return (0);
1428
1429} /* emlxs_issue_auth_reject */
1430
1431
1432static fc_packet_t *
1433 emlxs_prep_els_fc_pkt(

--- 46 unchanged lines hidden (view full) ---

1480 * entity ndlp. When this Auth_Negotiate command is completed, the iocb_cmpl
1481 * will get called as the solicited mbox cmd
1482 * callback. Some switch only support NULL dhchap in which case negotiate
1483 * should be modified to only have NULL DH specificed.
1484 *
1485 */
1486/* ARGSUSED */
1487static int
1416
1417 return (0);
1418
1419} /* emlxs_issue_auth_reject */
1420
1421
1422static fc_packet_t *
1423 emlxs_prep_els_fc_pkt(

--- 46 unchanged lines hidden (view full) ---

1470 * entity ndlp. When this Auth_Negotiate command is completed, the iocb_cmpl
1471 * will get called as the solicited mbox cmd
1472 * callback. Some switch only support NULL dhchap in which case negotiate
1473 * should be modified to only have NULL DH specificed.
1474 *
1475 */
1476/* ARGSUSED */
1477static int
1488 emlxs_issue_auth_negotiate(
1478emlxs_issue_auth_negotiate(
1489 emlxs_port_t *port,
1490 emlxs_node_t *ndlp,
1491 uint8_t retry)
1492{
1493 emlxs_node_dhc_t *node_dhc = &ndlp->node_dhc;
1494 fc_packet_t *pkt;
1495 uint32_t cmd_size;
1496 uint32_t rsp_size;

--- 391 unchanged lines hidden (view full) ---

1888 uint32_t did;
1889
1890 did = pkt->pkt_cmd_fhdr.d_id;
1891 sbp = (emlxs_buf_t *)pkt->pkt_fca_private;
1892 ndlp = sbp->node;
1893 node_dhc = &ndlp->node_dhc;
1894
1895 if (!ndlp) {
1479 emlxs_port_t *port,
1480 emlxs_node_t *ndlp,
1481 uint8_t retry)
1482{
1483 emlxs_node_dhc_t *node_dhc = &ndlp->node_dhc;
1484 fc_packet_t *pkt;
1485 uint32_t cmd_size;
1486 uint32_t rsp_size;

--- 391 unchanged lines hidden (view full) ---

1878 uint32_t did;
1879
1880 did = pkt->pkt_cmd_fhdr.d_id;
1881 sbp = (emlxs_buf_t *)pkt->pkt_fca_private;
1882 ndlp = sbp->node;
1883 node_dhc = &ndlp->node_dhc;
1884
1885 if (!ndlp) {
1896 ndlp = emlxs_node_find_did(port, did);
1886 ndlp = emlxs_node_find_did(port, did, 1);
1897 }
1898 if (pkt->pkt_state != FC_PKT_SUCCESS) {
1899 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1887 }
1888 if (pkt->pkt_state != FC_PKT_SUCCESS) {
1889 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1900 "emlxs_cmpl_dhchap_negotiate_issue: 0x%x %x. Noretry.",
1890 "cmpl_dhchap_negotiate_issue: 0x%x %x. Noretry.",
1901 did, pkt->pkt_state);
1902 } else {
1903 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1891 did, pkt->pkt_state);
1892 } else {
1893 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1904 "emlxs_cmpl_dhchap_negotiate_issue: did=0x%x. Succcess.",
1894 "cmpl_dhchap_negotiate_issue: did=0x%x. Succcess.",
1905 did);
1906 }
1907
1908 if (ndlp) {
1909 if (pkt->pkt_state == FC_PKT_SUCCESS) {
1910 (void) emlxs_dhchap_state_machine(port, NULL, NULL,
1911 NULL, ndlp, NODE_EVENT_CMPL_AUTH_MSG);
1912 } else {

--- 39 unchanged lines hidden (view full) ---

1952/* MATCHMAP * mp, */ void *arg3,
1953/* NODELIST * ndlp, */ void *arg4,
1954uint32_t evt)
1955{
1956 NODELIST *ndlp = (NODELIST *)arg4;
1957 emlxs_node_dhc_t *node_dhc = &ndlp->node_dhc;
1958
1959 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1895 did);
1896 }
1897
1898 if (ndlp) {
1899 if (pkt->pkt_state == FC_PKT_SUCCESS) {
1900 (void) emlxs_dhchap_state_machine(port, NULL, NULL,
1901 NULL, ndlp, NODE_EVENT_CMPL_AUTH_MSG);
1902 } else {

--- 39 unchanged lines hidden (view full) ---

1942/* MATCHMAP * mp, */ void *arg3,
1943/* NODELIST * ndlp, */ void *arg4,
1944uint32_t evt)
1945{
1946 NODELIST *ndlp = (NODELIST *)arg4;
1947 emlxs_node_dhc_t *node_dhc = &ndlp->node_dhc;
1948
1949 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1960 "emlxs_cmpl_auth_msg_auth_negotiate_issue: did=0x%x",
1950 "cmpl_auth_msg_auth_negotiate_issue: did=0x%x",
1961 ndlp->nlp_DID);
1962
1963 /* start the emlxs_dhc_authrsp_timeout timer */
1964 if (node_dhc->nlp_authrsp_tmo == 0) {
1965 node_dhc->nlp_authrsp_tmo = DRV_TIME +
1966 node_dhc->auth_cfg.authentication_timeout;
1967 }
1968 /*

--- 49 unchanged lines hidden (view full) ---

2018{
2019 NODELIST *ndlp = (NODELIST *)arg4;
2020 emlxs_node_dhc_t *node_dhc = &ndlp->node_dhc;
2021 IOCBQ *iocbq = (IOCBQ *) arg2;
2022 uint8_t ReasonCode;
2023 uint8_t ReasonCodeExplanation;
2024
2025 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
1951 ndlp->nlp_DID);
1952
1953 /* start the emlxs_dhc_authrsp_timeout timer */
1954 if (node_dhc->nlp_authrsp_tmo == 0) {
1955 node_dhc->nlp_authrsp_tmo = DRV_TIME +
1956 node_dhc->auth_cfg.authentication_timeout;
1957 }
1958 /*

--- 49 unchanged lines hidden (view full) ---

2008{
2009 NODELIST *ndlp = (NODELIST *)arg4;
2010 emlxs_node_dhc_t *node_dhc = &ndlp->node_dhc;
2011 IOCBQ *iocbq = (IOCBQ *) arg2;
2012 uint8_t ReasonCode;
2013 uint8_t ReasonCodeExplanation;
2014
2015 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2026 "emlxs_rcv_auth_msg_auth_negotiate_issue: did=0x%x",
2016 "rcv_auth_msg_auth_negotiate_issue: did=0x%x",
2027 ndlp->nlp_DID);
2028
2029 /* Anyway we accept it first and then send auth_reject */
2030 (void) emlxs_els_reply(port, iocbq, ELS_CMD_ACC, ELS_CMD_AUTH, 0, 0);
2031
2032 /* host is always the initiator and it should win */
2033 ReasonCode = AUTHRJT_LOGIC_ERR;
2034 ReasonCodeExplanation = AUTHEXP_AUTHTRAN_STARTED;

--- 24 unchanged lines hidden (view full) ---

2059 NODELIST *ndlp;
2060 uint32_t did;
2061
2062 did = pkt->pkt_cmd_fhdr.d_id;
2063 sbp = (emlxs_buf_t *)pkt->pkt_fca_private;
2064 ndlp = sbp->node;
2065
2066 if (!ndlp) {
2017 ndlp->nlp_DID);
2018
2019 /* Anyway we accept it first and then send auth_reject */
2020 (void) emlxs_els_reply(port, iocbq, ELS_CMD_ACC, ELS_CMD_AUTH, 0, 0);
2021
2022 /* host is always the initiator and it should win */
2023 ReasonCode = AUTHRJT_LOGIC_ERR;
2024 ReasonCodeExplanation = AUTHEXP_AUTHTRAN_STARTED;

--- 24 unchanged lines hidden (view full) ---

2049 NODELIST *ndlp;
2050 uint32_t did;
2051
2052 did = pkt->pkt_cmd_fhdr.d_id;
2053 sbp = (emlxs_buf_t *)pkt->pkt_fca_private;
2054 ndlp = sbp->node;
2055
2056 if (!ndlp) {
2067 ndlp = emlxs_node_find_did(port, did);
2057 ndlp = emlxs_node_find_did(port, did, 1);
2068 }
2069 if (pkt->pkt_state != FC_PKT_SUCCESS) {
2070 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2058 }
2059 if (pkt->pkt_state != FC_PKT_SUCCESS) {
2060 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2071 "emlxs_cmpl_dhchap_reply_issue: 0x%x %x. No retry.",
2061 "cmpl_dhchap_reply_issue: 0x%x %x. No retry.",
2072 did, pkt->pkt_state);
2073 } else {
2074 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2062 did, pkt->pkt_state);
2063 } else {
2064 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2075 "emlxs_cmpl_dhchap_reply_issue: did=0x%x. Succcess.",
2065 "cmpl_dhchap_reply_issue: did=0x%x. Succcess.",
2076 did);
2077 }
2078
2079 if (ndlp) {
2080 if (pkt->pkt_state == FC_PKT_SUCCESS) {
2081 (void) emlxs_dhchap_state_machine(port, NULL, NULL,
2082 NULL, ndlp, NODE_EVENT_CMPL_AUTH_MSG);
2083 }

--- 45 unchanged lines hidden (view full) ---

2129 uint32_t tran_id;
2130 BIG_ERR_CODE err = BIG_OK;
2131
2132 /*
2133 * we assume the HBAnyware should configure the driver the right
2134 * parameters for challenge. for now, we create our own challenge.
2135 */
2136 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2066 did);
2067 }
2068
2069 if (ndlp) {
2070 if (pkt->pkt_state == FC_PKT_SUCCESS) {
2071 (void) emlxs_dhchap_state_machine(port, NULL, NULL,
2072 NULL, ndlp, NODE_EVENT_CMPL_AUTH_MSG);
2073 }

--- 45 unchanged lines hidden (view full) ---

2119 uint32_t tran_id;
2120 BIG_ERR_CODE err = BIG_OK;
2121
2122 /*
2123 * we assume the HBAnyware should configure the driver the right
2124 * parameters for challenge. for now, we create our own challenge.
2125 */
2126 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2137 "emlxs_issue_dhchap_challenge: did=0x%x hashlist=[%x,%x,%x,%x]",
2127 "issue_dhchap_challenge: did=0x%x hashlist=[%x,%x,%x,%x]",
2138 ndlp->nlp_DID, node_dhc->auth_cfg.hash_priority[0],
2139 node_dhc->auth_cfg.hash_priority[1],
2140 node_dhc->auth_cfg.hash_priority[2],
2141 node_dhc->auth_cfg.hash_priority[3]);
2142
2143 /*
2144 * Here is my own challenge structure:
2145 *

--- 29 unchanged lines hidden (view full) ---

2175 break;
2176
2177 case GROUP_2048:
2178 cmdsize += 256;
2179 break;
2180
2181 default:
2182 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
2128 ndlp->nlp_DID, node_dhc->auth_cfg.hash_priority[0],
2129 node_dhc->auth_cfg.hash_priority[1],
2130 node_dhc->auth_cfg.hash_priority[2],
2131 node_dhc->auth_cfg.hash_priority[3]);
2132
2133 /*
2134 * Here is my own challenge structure:
2135 *

--- 29 unchanged lines hidden (view full) ---

2165 break;
2166
2167 case GROUP_2048:
2168 cmdsize += 256;
2169 break;
2170
2171 default:
2172 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
2183 "emlxs_issue_dhchap_challenge: Invalid dhgp_id=0x%x",
2173 "issue_dhchap_challenge: Invalid dhgp_id=0x%x",
2184 dhgp_id);
2185 return (1);
2186 }
2187
2188 cmd_size = cmdsize;
2189 rsp_size = 4;
2190
2191 if ((pkt = emlxs_prep_els_fc_pkt(port, ndlp->nlp_DID, cmd_size,

--- 4 unchanged lines hidden (view full) ---

2196 pCmd = (uint8_t *)pkt->pkt_cmd;
2197
2198 tmp = (uint8_t *)arg;
2199 tmp += 8;
2200 /* collect tran_id: this tran_id is set by the initiator */
2201 tran_id = *(uint32_t *)tmp;
2202
2203 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2174 dhgp_id);
2175 return (1);
2176 }
2177
2178 cmd_size = cmdsize;
2179 rsp_size = 4;
2180
2181 if ((pkt = emlxs_prep_els_fc_pkt(port, ndlp->nlp_DID, cmd_size,

--- 4 unchanged lines hidden (view full) ---

2186 pCmd = (uint8_t *)pkt->pkt_cmd;
2187
2188 tmp = (uint8_t *)arg;
2189 tmp += 8;
2190 /* collect tran_id: this tran_id is set by the initiator */
2191 tran_id = *(uint32_t *)tmp;
2192
2193 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2204 "emlxs_issue_dhchap_challenge: 0x%x 0x%x 0x%x %d 0x%x 0x%x 0x%x",
2194 "issue_dhchap_challenge: 0x%x 0x%x 0x%x %d 0x%x 0x%x 0x%x",
2205 ndlp->nlp_DID, node_dhc->nlp_auth_tranid_ini,
2206 node_dhc->nlp_auth_tranid_rsp,
2207 cmdsize, tran_id, hash_id, dhgp_id);
2208
2209 /* store the tran_id : ndlp is the initiator */
2210 node_dhc->nlp_auth_tranid_ini = LE_SWAP32(tran_id);
2211
2212 tmp += sizeof (uint32_t);

--- 160 unchanged lines hidden (view full) ---

2373 err = emlxs_BIGNUM_get_dhval(port, port_dhc, ndlp, dhval,
2374 &dhval_len, chal->cnul.dhgp_id,
2375 myrand, LE_SWAP32(chal->cnul.cval_len));
2376
2377 if (err != BIG_OK) {
2378 emlxs_pkt_free(pkt);
2379
2380 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
2195 ndlp->nlp_DID, node_dhc->nlp_auth_tranid_ini,
2196 node_dhc->nlp_auth_tranid_rsp,
2197 cmdsize, tran_id, hash_id, dhgp_id);
2198
2199 /* store the tran_id : ndlp is the initiator */
2200 node_dhc->nlp_auth_tranid_ini = LE_SWAP32(tran_id);
2201
2202 tmp += sizeof (uint32_t);

--- 160 unchanged lines hidden (view full) ---

2363 err = emlxs_BIGNUM_get_dhval(port, port_dhc, ndlp, dhval,
2364 &dhval_len, chal->cnul.dhgp_id,
2365 myrand, LE_SWAP32(chal->cnul.cval_len));
2366
2367 if (err != BIG_OK) {
2368 emlxs_pkt_free(pkt);
2369
2370 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
2381 "emlxs_issue_dhchap_challenge: error. 0x%x",
2371 "issue_dhchap_challenge: error. 0x%x",
2382 err);
2383
2384 return (1);
2385 }
2386 /* we are not going to use dhval and dhval_len */
2387
2388 /* *(uint32_t *)tmp = dhval_len; */
2389 if (ndlp->nlp_DID == FABRIC_DID) {
2390 *(uint32_t *)tmp =
2391 LE_SWAP32(node_dhc->hrsp_pubkey_len);
2392 } else {
2393 *(uint32_t *)tmp =
2394 LE_SWAP32(
2395 node_dhc->nlp_auth_misc.hrsp_pubkey_len);
2396 }
2397
2398 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2372 err);
2373
2374 return (1);
2375 }
2376 /* we are not going to use dhval and dhval_len */
2377
2378 /* *(uint32_t *)tmp = dhval_len; */
2379 if (ndlp->nlp_DID == FABRIC_DID) {
2380 *(uint32_t *)tmp =
2381 LE_SWAP32(node_dhc->hrsp_pubkey_len);
2382 } else {
2383 *(uint32_t *)tmp =
2384 LE_SWAP32(
2385 node_dhc->nlp_auth_misc.hrsp_pubkey_len);
2386 }
2387
2388 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2399 "emlxs_issue_dhchap_challenge: 0x%x: 0x%x 0x%x",
2389 "issue_dhchap_challenge: 0x%x: 0x%x 0x%x",
2400 ndlp->nlp_DID, *(uint32_t *)tmp, dhval_len);
2401
2402 tmp += sizeof (uint32_t);
2403
2404 if (ndlp->nlp_DID == FABRIC_DID) {
2405 bcopy((void *) node_dhc->hrsp_pub_key, (void *)tmp,
2406 node_dhc->hrsp_pubkey_len);
2407 } else {

--- 14 unchanged lines hidden (view full) ---

2422 if (dhgp_id != GROUP_NULL) {
2423
2424 err = emlxs_BIGNUM_get_dhval(port, port_dhc, ndlp, dhval,
2425 &dhval_len, chal->cnul.dhgp_id,
2426 random_number, LE_SWAP32(chal->cnul.cval_len));
2427
2428 if (err != BIG_OK) {
2429 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
2390 ndlp->nlp_DID, *(uint32_t *)tmp, dhval_len);
2391
2392 tmp += sizeof (uint32_t);
2393
2394 if (ndlp->nlp_DID == FABRIC_DID) {
2395 bcopy((void *) node_dhc->hrsp_pub_key, (void *)tmp,
2396 node_dhc->hrsp_pubkey_len);
2397 } else {

--- 14 unchanged lines hidden (view full) ---

2412 if (dhgp_id != GROUP_NULL) {
2413
2414 err = emlxs_BIGNUM_get_dhval(port, port_dhc, ndlp, dhval,
2415 &dhval_len, chal->cnul.dhgp_id,
2416 random_number, LE_SWAP32(chal->cnul.cval_len));
2417
2418 if (err != BIG_OK) {
2419 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
2430 "emlxs_issue_dhchap_challenge: error. 0x%x",
2420 "issue_dhchap_challenge: error. 0x%x",
2431 err);
2432
2433 emlxs_pkt_free(pkt);
2434 return (1);
2435 }
2436 /* we are not going to use dhval and dhval_len */
2437
2438 /* *(uint32_t *)tmp = dhval_len; */
2439 if (ndlp->nlp_DID == FABRIC_DID) {
2440 *(uint32_t *)tmp =
2441 LE_SWAP32(node_dhc->hrsp_pubkey_len);
2442 } else {
2443 *(uint32_t *)tmp =
2444 LE_SWAP32(
2445 node_dhc->nlp_auth_misc.hrsp_pubkey_len);
2446 }
2447
2448 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2421 err);
2422
2423 emlxs_pkt_free(pkt);
2424 return (1);
2425 }
2426 /* we are not going to use dhval and dhval_len */
2427
2428 /* *(uint32_t *)tmp = dhval_len; */
2429 if (ndlp->nlp_DID == FABRIC_DID) {
2430 *(uint32_t *)tmp =
2431 LE_SWAP32(node_dhc->hrsp_pubkey_len);
2432 } else {
2433 *(uint32_t *)tmp =
2434 LE_SWAP32(
2435 node_dhc->nlp_auth_misc.hrsp_pubkey_len);
2436 }
2437
2438 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2449 "emlxs_issue_dhchap_challenge: did=0x%x: pubkey_len=0x%x",
2439 "issue_dhchap_challenge: did=0x%x: pubkey_len=0x%x",
2450 ndlp->nlp_DID, *(uint32_t *)tmp);
2451
2452 tmp += sizeof (uint32_t);
2453
2454 if (ndlp->nlp_DID == FABRIC_DID) {
2455 bcopy((void *) node_dhc->hrsp_pub_key, (void *)tmp,
2456 node_dhc->hrsp_pubkey_len);
2457 } else {

--- 4 unchanged lines hidden (view full) ---

2462 } else {
2463 /* NULL DHCHAP */
2464 *(uint32_t *)tmp = 0;
2465 }
2466
2467#endif /* RAND */
2468
2469 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2440 ndlp->nlp_DID, *(uint32_t *)tmp);
2441
2442 tmp += sizeof (uint32_t);
2443
2444 if (ndlp->nlp_DID == FABRIC_DID) {
2445 bcopy((void *) node_dhc->hrsp_pub_key, (void *)tmp,
2446 node_dhc->hrsp_pubkey_len);
2447 } else {

--- 4 unchanged lines hidden (view full) ---

2452 } else {
2453 /* NULL DHCHAP */
2454 *(uint32_t *)tmp = 0;
2455 }
2456
2457#endif /* RAND */
2458
2459 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2470 "emlxs_issue_dhchap_challenge: 0x%x 0x%x 0x%x 0x%x 0x%x",
2460 "issue_dhchap_challenge: 0x%x 0x%x 0x%x 0x%x 0x%x",
2471 ndlp->nlp_DID, node_dhc->nlp_auth_tranid_ini,
2472 node_dhc->nlp_auth_tranid_rsp,
2473 chal->cnul.hash_id, chal->cnul.dhgp_id);
2474
2475 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2461 ndlp->nlp_DID, node_dhc->nlp_auth_tranid_ini,
2462 node_dhc->nlp_auth_tranid_rsp,
2463 chal->cnul.hash_id, chal->cnul.dhgp_id);
2464
2465 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2476 "emlxs_issue_dhchap_challenge: 0x%x 0x%x 0x%x 0x%x",
2466 "issue_dhchap_challenge: 0x%x 0x%x 0x%x 0x%x",
2477 ndlp->nlp_DID, tran_id, node_dhc->nlp_auth_hashid,
2478 node_dhc->nlp_auth_dhgpid);
2479
2480 pkt->pkt_comp = emlxs_cmpl_dhchap_challenge_issue;
2481
2482 if (emlxs_pkt_send(pkt, 1) != FC_SUCCESS) {
2483 emlxs_pkt_free(pkt);
2484
2485 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
2467 ndlp->nlp_DID, tran_id, node_dhc->nlp_auth_hashid,
2468 node_dhc->nlp_auth_dhgpid);
2469
2470 pkt->pkt_comp = emlxs_cmpl_dhchap_challenge_issue;
2471
2472 if (emlxs_pkt_send(pkt, 1) != FC_SUCCESS) {
2473 emlxs_pkt_free(pkt);
2474
2475 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
2486 "emlxs_issue_dhchap_challenge: Unable to send fc packet.");
2476 "issue_dhchap_challenge: Unable to send fc packet.");
2487
2488 return (1);
2489 }
2490 return (0);
2491
2492} /* emlxs_issue_dhchap_challenge */
2493
2494

--- 73 unchanged lines hidden (view full) ---

2568 }
2569
2570 cmd_size = cmdsize;
2571 rsp_size = 4;
2572
2573 if ((pkt = emlxs_prep_els_fc_pkt(port, ndlp->nlp_DID, cmd_size,
2574 rsp_size, 0, KM_NOSLEEP)) == NULL) {
2575 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
2477
2478 return (1);
2479 }
2480 return (0);
2481
2482} /* emlxs_issue_dhchap_challenge */
2483
2484

--- 73 unchanged lines hidden (view full) ---

2558 }
2559
2560 cmd_size = cmdsize;
2561 rsp_size = 4;
2562
2563 if ((pkt = emlxs_prep_els_fc_pkt(port, ndlp->nlp_DID, cmd_size,
2564 rsp_size, 0, KM_NOSLEEP)) == NULL) {
2565 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
2576 "emlxs_issue_dhchap_reply failed: did=0x%x size=%x,%x",
2566 "issue_dhchap_reply failed: did=0x%x size=%x,%x",
2577 ndlp->nlp_DID, cmd_size, rsp_size);
2578
2579 return (1);
2580 }
2581 pCmd = (uint8_t *)pkt->pkt_cmd;
2582
2583 ap = (DHCHAP_REPLY_HDR *)pCmd;
2584 ap->auth_els_code = ELS_CMD_AUTH_CODE;

--- 101 unchanged lines hidden (view full) ---

2686 bcopy((void *)arg2, (void *)pCmd, arg2_len);
2687 }
2688 }
2689 }
2690
2691 pkt->pkt_comp = emlxs_cmpl_dhchap_reply_issue;
2692
2693 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2567 ndlp->nlp_DID, cmd_size, rsp_size);
2568
2569 return (1);
2570 }
2571 pCmd = (uint8_t *)pkt->pkt_cmd;
2572
2573 ap = (DHCHAP_REPLY_HDR *)pCmd;
2574 ap->auth_els_code = ELS_CMD_AUTH_CODE;

--- 101 unchanged lines hidden (view full) ---

2676 bcopy((void *)arg2, (void *)pCmd, arg2_len);
2677 }
2678 }
2679 }
2680
2681 pkt->pkt_comp = emlxs_cmpl_dhchap_reply_issue;
2682
2683 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2694 "emlxs_issue_dhchap_reply: did=0x%x (%x,%x,%x,%x,%x,%x)",
2684 "issue_dhchap_reply: did=0x%x (%x,%x,%x,%x,%x,%x)",
2695 ndlp->nlp_DID, dhval_len, arg2_len, cmdsize,
2696 node_dhc->hash_id, node_dhc->nlp_auth_hashid,
2697 LE_SWAP32(ap->tran_id));
2698
2699 if (emlxs_pkt_send(pkt, 1) != FC_SUCCESS) {
2700 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
2685 ndlp->nlp_DID, dhval_len, arg2_len, cmdsize,
2686 node_dhc->hash_id, node_dhc->nlp_auth_hashid,
2687 LE_SWAP32(ap->tran_id));
2688
2689 if (emlxs_pkt_send(pkt, 1) != FC_SUCCESS) {
2690 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
2701 "emlxs_issue_dhchap_reply failed: Unable to send packet.");
2691 "issue_dhchap_reply failed: Unable to send packet.");
2702
2703 emlxs_pkt_free(pkt);
2704
2705 return (1);
2706 }
2707 return (0);
2708
2709} /* emlxs_issue_dhchap_reply */

--- 52 unchanged lines hidden (view full) ---

2762 uint8_t random_number[20]; /* for both SHA1 and MD5 */
2763 uint32_t *arg5 = NULL; /* response */
2764 uint32_t tran_id; /* Transaction Identifier */
2765 uint32_t arg2len = 0; /* len of new challenge for bidir auth */
2766
2767 AUTH_RJT *rjt;
2768
2769 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2692
2693 emlxs_pkt_free(pkt);
2694
2695 return (1);
2696 }
2697 return (0);
2698
2699} /* emlxs_issue_dhchap_reply */

--- 52 unchanged lines hidden (view full) ---

2752 uint8_t random_number[20]; /* for both SHA1 and MD5 */
2753 uint32_t *arg5 = NULL; /* response */
2754 uint32_t tran_id; /* Transaction Identifier */
2755 uint32_t arg2len = 0; /* len of new challenge for bidir auth */
2756
2757 AUTH_RJT *rjt;
2758
2759 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2770 "emlxs_rcv_auth_msg_auth_negotiate_cmpl_wait4next: did=0x%x",
2760 "rcv_auth_msg_auth_negotiate_cmpl_wait4next: did=0x%x",
2771 ndlp->nlp_DID);
2772
2773 emlxs_dhc_state(port, ndlp, NODE_STATE_DHCHAP_REPLY_ISSUE, 0, 0);
2774
2775 (void) emlxs_els_reply(port, iocbq, ELS_CMD_ACC, ELS_CMD_AUTH, 0, 0);
2776
2777 bp = mp->virt;
2778 lp = (uint32_t *)bp;

--- 64 unchanged lines hidden (view full) ---

2843 ReasonCodeExplanation = AUTHEXP_AUTH_FAILED;
2844 break;
2845 }
2846
2847 goto AUTH_Reject;
2848 }
2849 if (ncval->msg_hdr.auth_msg_code != DHCHAP_CHALLENGE) {
2850 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
2761 ndlp->nlp_DID);
2762
2763 emlxs_dhc_state(port, ndlp, NODE_STATE_DHCHAP_REPLY_ISSUE, 0, 0);
2764
2765 (void) emlxs_els_reply(port, iocbq, ELS_CMD_ACC, ELS_CMD_AUTH, 0, 0);
2766
2767 bp = mp->virt;
2768 lp = (uint32_t *)bp;

--- 64 unchanged lines hidden (view full) ---

2833 ReasonCodeExplanation = AUTHEXP_AUTH_FAILED;
2834 break;
2835 }
2836
2837 goto AUTH_Reject;
2838 }
2839 if (ncval->msg_hdr.auth_msg_code != DHCHAP_CHALLENGE) {
2840 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
2851 "emlxs_rcv_auth_msg_auth_negotiate_cmpl_wait4next: 0x%x.%x",
2841 "rcv_auth_msg_auth_negotiate_cmpl_wait4next: 0x%x.%x",
2852 ndlp->nlp_DID, ncval->msg_hdr.auth_msg_code);
2853
2854 ReasonCode = AUTHRJT_FAILURE;
2855 ReasonCodeExplanation = AUTHEXP_BAD_PROTOCOL;
2856 goto AUTH_Reject;
2857 }
2858 tran_id = ncval->msg_hdr.tran_id;
2859

--- 53 unchanged lines hidden (view full) ---

2913 bcopy((void *)tmp, (void *)un_cval.sha1.val,
2914 sizeof (SHA1_CVAL));
2915 tmp += sizeof (SHA1_CVAL);
2916
2917 arg2len = SHA1_LEN;
2918
2919 } else {
2920 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
2842 ndlp->nlp_DID, ncval->msg_hdr.auth_msg_code);
2843
2844 ReasonCode = AUTHRJT_FAILURE;
2845 ReasonCodeExplanation = AUTHEXP_BAD_PROTOCOL;
2846 goto AUTH_Reject;
2847 }
2848 tran_id = ncval->msg_hdr.tran_id;
2849

--- 53 unchanged lines hidden (view full) ---

2903 bcopy((void *)tmp, (void *)un_cval.sha1.val,
2904 sizeof (SHA1_CVAL));
2905 tmp += sizeof (SHA1_CVAL);
2906
2907 arg2len = SHA1_LEN;
2908
2909 } else {
2910 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
2921 "emlxs_rcv_auth_msg_auth_negotiate_cmpl_wait4next: 0x%x %x",
2911 "rcv_auth_msg_auth_negotiate_cmpl_wait4next: 0x%x %x",
2922 ndlp->nlp_DID, ncval->hash_id);
2923
2924 ReasonCode = AUTHRJT_FAILURE;
2925 ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD;
2926 goto AUTH_Reject;
2927 }
2928
2929 /*

--- 225 unchanged lines hidden (view full) ---

3155/* MATCHMAP * mp, */ void *arg3,
3156/* NODELIST * ndlp */ void *arg4,
3157uint32_t evt)
3158{
3159 NODELIST *ndlp = (NODELIST *) arg4;
3160 emlxs_node_dhc_t *node_dhc = &ndlp->node_dhc;
3161
3162 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
2912 ndlp->nlp_DID, ncval->hash_id);
2913
2914 ReasonCode = AUTHRJT_FAILURE;
2915 ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD;
2916 goto AUTH_Reject;
2917 }
2918
2919 /*

--- 225 unchanged lines hidden (view full) ---

3145/* MATCHMAP * mp, */ void *arg3,
3146/* NODELIST * ndlp */ void *arg4,
3147uint32_t evt)
3148{
3149 NODELIST *ndlp = (NODELIST *) arg4;
3150 emlxs_node_dhc_t *node_dhc = &ndlp->node_dhc;
3151
3152 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
3163 "emlxs_cmpl_auth_msg_dhchap_reply_issue: did=0x%x",
3153 "cmpl_auth_msg_dhchap_reply_issue: did=0x%x",
3164 ndlp->nlp_DID);
3165
3166 /* start the emlxs_dhc_authrsp_timeout timer now */
3167 if (node_dhc->nlp_authrsp_tmo == 0) {
3168 node_dhc->nlp_authrsp_tmo = DRV_TIME +
3169 node_dhc->auth_cfg.authentication_timeout;
3170 }
3171 /*

--- 78 unchanged lines hidden (view full) ---

3250
3251 if (dh_success->auth_msg_code == AUTH_REJECT) {
3252 /* ACC it and retry etc. */
3253 auth_rjt = (AUTH_RJT *) dh_success;
3254 ReasonCode = auth_rjt->ReasonCode;
3255 ReasonCodeExplanation = auth_rjt->ReasonCodeExplanation;
3256
3257 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
3154 ndlp->nlp_DID);
3155
3156 /* start the emlxs_dhc_authrsp_timeout timer now */
3157 if (node_dhc->nlp_authrsp_tmo == 0) {
3158 node_dhc->nlp_authrsp_tmo = DRV_TIME +
3159 node_dhc->auth_cfg.authentication_timeout;
3160 }
3161 /*

--- 78 unchanged lines hidden (view full) ---

3240
3241 if (dh_success->auth_msg_code == AUTH_REJECT) {
3242 /* ACC it and retry etc. */
3243 auth_rjt = (AUTH_RJT *) dh_success;
3244 ReasonCode = auth_rjt->ReasonCode;
3245 ReasonCodeExplanation = auth_rjt->ReasonCodeExplanation;
3246
3247 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
3258 "emlxs_rcv_auth_msg_dhchap_reply_cmpl_wait4next: 0x%x.(%x,%x)",
3248 "rcv_auth_msg_dhchap_reply_cmpl_wait4next: 0x%x.(%x,%x)",
3259 ndlp->nlp_DID, ReasonCode, ReasonCodeExplanation);
3260
3261 switch (ReasonCode) {
3262 case AUTHRJT_LOGIC_ERR:
3263 switch (ReasonCodeExplanation) {
3264 case AUTHEXP_MECH_UNUSABLE:
3265 case AUTHEXP_DHGROUP_UNUSABLE:
3266 case AUTHEXP_HASHFUNC_UNUSABLE:

--- 59 unchanged lines hidden (view full) ---

3326 goto AUTH_Reject;
3327 }
3328 if (node_dhc->auth_cfg.bidirectional == 0) {
3329 node_dhc->flag |=
3330 (NLP_REMOTE_AUTH | NLP_SET_REAUTH_TIME);
3331
3332 emlxs_dhc_state(port, ndlp,
3333 NODE_STATE_AUTH_SUCCESS, 0, 0);
3249 ndlp->nlp_DID, ReasonCode, ReasonCodeExplanation);
3250
3251 switch (ReasonCode) {
3252 case AUTHRJT_LOGIC_ERR:
3253 switch (ReasonCodeExplanation) {
3254 case AUTHEXP_MECH_UNUSABLE:
3255 case AUTHEXP_DHGROUP_UNUSABLE:
3256 case AUTHEXP_HASHFUNC_UNUSABLE:

--- 59 unchanged lines hidden (view full) ---

3316 goto AUTH_Reject;
3317 }
3318 if (node_dhc->auth_cfg.bidirectional == 0) {
3319 node_dhc->flag |=
3320 (NLP_REMOTE_AUTH | NLP_SET_REAUTH_TIME);
3321
3322 emlxs_dhc_state(port, ndlp,
3323 NODE_STATE_AUTH_SUCCESS, 0, 0);
3334 emlxs_log_auth_event(port, ndlp, ESC_EMLXS_20,
3324 emlxs_log_auth_event(port, ndlp,
3325 "rcv_auth_msg_dhchap_reply_cmpl_wait4next",
3335 "Host-initiated-unidir-auth-success");
3336 emlxs_dhc_auth_complete(port, ndlp, 0);
3337 } else {
3338 /* bidir auth needed */
3339 /* if (LE_SWAP32(dh_success->msg_len) > 4) { */
3340
3341 tmp = (uint8_t *)((uint8_t *)lp);
3342 tmp += 8;

--- 47 unchanged lines hidden (view full) ---

3390 hash_val = emlxs_hash_vrf(port, port_dhc, ndlp,
3391 tran_id, un_cval);
3392
3393 if (bcmp((void *)tmp, (void *)hash_val,
3394 LE_SWAP32(rsp_size))) {
3395 if (hash_val != NULL) {
3396 /* not identical */
3397 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
3326 "Host-initiated-unidir-auth-success");
3327 emlxs_dhc_auth_complete(port, ndlp, 0);
3328 } else {
3329 /* bidir auth needed */
3330 /* if (LE_SWAP32(dh_success->msg_len) > 4) { */
3331
3332 tmp = (uint8_t *)((uint8_t *)lp);
3333 tmp += 8;

--- 47 unchanged lines hidden (view full) ---

3381 hash_val = emlxs_hash_vrf(port, port_dhc, ndlp,
3382 tran_id, un_cval);
3383
3384 if (bcmp((void *)tmp, (void *)hash_val,
3385 LE_SWAP32(rsp_size))) {
3386 if (hash_val != NULL) {
3387 /* not identical */
3388 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
3398 "emlxs_rcv_auth_msg_dhchap_reply_cmpl_wait4next: 0x%x.failed. %x",
3389 "rcv_auth_msg_dhchap_reply_cmpl_wait4next: 0x%x.failed. %x",
3399 ndlp->nlp_DID, *(uint32_t *)hash_val);
3400 }
3401 ReasonCode = AUTHRJT_FAILURE;
3402 ReasonCodeExplanation = AUTHEXP_AUTH_FAILED;
3403 goto AUTH_Reject;
3404 }
3405 emlxs_dhc_state(port, ndlp,
3406 NODE_STATE_DHCHAP_SUCCESS_ISSUE_WAIT4NEXT, 0, 0);

--- 9 unchanged lines hidden (view full) ---

3416 emlxs_dhc_state(port, ndlp, NODE_STATE_AUTH_FAILED,
3417 ReasonCode, ReasonCodeExplanation);
3418 (void) emlxs_issue_auth_reject(port, ndlp, 0, 0, ReasonCode,
3419 ReasonCodeExplanation);
3420 emlxs_dhc_auth_complete(port, ndlp, 1);
3421
3422 return (node_dhc->state);
3423out:
3390 ndlp->nlp_DID, *(uint32_t *)hash_val);
3391 }
3392 ReasonCode = AUTHRJT_FAILURE;
3393 ReasonCodeExplanation = AUTHEXP_AUTH_FAILED;
3394 goto AUTH_Reject;
3395 }
3396 emlxs_dhc_state(port, ndlp,
3397 NODE_STATE_DHCHAP_SUCCESS_ISSUE_WAIT4NEXT, 0, 0);

--- 9 unchanged lines hidden (view full) ---

3407 emlxs_dhc_state(port, ndlp, NODE_STATE_AUTH_FAILED,
3408 ReasonCode, ReasonCodeExplanation);
3409 (void) emlxs_issue_auth_reject(port, ndlp, 0, 0, ReasonCode,
3410 ReasonCodeExplanation);
3411 emlxs_dhc_auth_complete(port, ndlp, 1);
3412
3413 return (node_dhc->state);
3414out:
3424 (void) sprintf(info,
3415 (void) snprintf(info, sizeof (info),
3425 "Auth Failed: ReasonCode=0x%x, ReasonCodeExplanation=0x%x",
3426 ReasonCode, ReasonCodeExplanation);
3427
3416 "Auth Failed: ReasonCode=0x%x, ReasonCodeExplanation=0x%x",
3417 ReasonCode, ReasonCodeExplanation);
3418
3428 emlxs_log_auth_event(port, ndlp, ESC_EMLXS_20, info);
3419 emlxs_log_auth_event(port, ndlp,
3420 "rcv_auth_msg_dhchap_reply_cmpl_wait4next", info);
3429 emlxs_dhc_auth_complete(port, ndlp, 1);
3430
3431 return (node_dhc->state);
3432
3433} /* emlxs_rcv_auth_msg_dhchap_reply_cmpl_wait4next */
3434
3435
3436

--- 97 unchanged lines hidden (view full) ---

3534 * uni-directional auth. Anyway we start host side reauth heart beat
3535 * timer now.
3536 */
3537
3538 node_dhc->flag &= ~NLP_REMOTE_AUTH;
3539 node_dhc->flag |= NLP_SET_REAUTH_TIME;
3540
3541 emlxs_dhc_state(port, ndlp, NODE_STATE_AUTH_SUCCESS, 0, 0);
3421 emlxs_dhc_auth_complete(port, ndlp, 1);
3422
3423 return (node_dhc->state);
3424
3425} /* emlxs_rcv_auth_msg_dhchap_reply_cmpl_wait4next */
3426
3427
3428

--- 97 unchanged lines hidden (view full) ---

3526 * uni-directional auth. Anyway we start host side reauth heart beat
3527 * timer now.
3528 */
3529
3530 node_dhc->flag &= ~NLP_REMOTE_AUTH;
3531 node_dhc->flag |= NLP_SET_REAUTH_TIME;
3532
3533 emlxs_dhc_state(port, ndlp, NODE_STATE_AUTH_SUCCESS, 0, 0);
3542 emlxs_log_auth_event(port, ndlp, ESC_EMLXS_25,
3534 emlxs_log_auth_event(port, ndlp,
3535 "cmpl_auth_msg_dhchap_success_issue_wait4next",
3543 "Host-initiated-bidir-auth-success");
3544 emlxs_dhc_auth_complete(port, ndlp, 0);
3545
3546 return (node_dhc->state);
3547
3548} /* emlxs_cmpl_auth_msg_dhchap_success_issue_wait4next */
3549
3550

--- 487 unchanged lines hidden (view full) ---

4038
4039 /* start the emlxs_dhc_authrsp_timeout timer */
4040 node_dhc->nlp_authrsp_tmo = DRV_TIME +
4041 node_dhc->auth_cfg.authentication_timeout;
4042 } else {
4043 node_dhc->flag &= ~NLP_REMOTE_AUTH;
4044
4045 emlxs_dhc_state(port, ndlp, NODE_STATE_AUTH_SUCCESS, 0, 0);
3536 "Host-initiated-bidir-auth-success");
3537 emlxs_dhc_auth_complete(port, ndlp, 0);
3538
3539 return (node_dhc->state);
3540
3541} /* emlxs_cmpl_auth_msg_dhchap_success_issue_wait4next */
3542
3543

--- 487 unchanged lines hidden (view full) ---

4031
4032 /* start the emlxs_dhc_authrsp_timeout timer */
4033 node_dhc->nlp_authrsp_tmo = DRV_TIME +
4034 node_dhc->auth_cfg.authentication_timeout;
4035 } else {
4036 node_dhc->flag &= ~NLP_REMOTE_AUTH;
4037
4038 emlxs_dhc_state(port, ndlp, NODE_STATE_AUTH_SUCCESS, 0, 0);
4046 emlxs_log_auth_event(port, ndlp, ESC_EMLXS_22,
4039 emlxs_log_auth_event(port, ndlp,
4040 "cmpl_auth_msg_dhchap_success_issue",
4047 "Node-initiated-unidir-reauth-success");
4048 emlxs_dhc_auth_complete(port, ndlp, 0);
4049 }
4050
4051 return (node_dhc->state);
4052
4053} /* emlxs_cmpl_auth_msg_dhchap_success_issue */
4054

--- 6 unchanged lines hidden (view full) ---

4061 void *arg2,
4062 void *arg3,
4063 void *arg4,
4064 uint32_t evt)
4065{
4066 NODELIST *ndlp = (NODELIST *)arg4;
4067
4068 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4041 "Node-initiated-unidir-reauth-success");
4042 emlxs_dhc_auth_complete(port, ndlp, 0);
4043 }
4044
4045 return (node_dhc->state);
4046
4047} /* emlxs_cmpl_auth_msg_dhchap_success_issue */
4048

--- 6 unchanged lines hidden (view full) ---

4055 void *arg2,
4056 void *arg3,
4057 void *arg4,
4058 uint32_t evt)
4059{
4060 NODELIST *ndlp = (NODELIST *)arg4;
4061
4062 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4069 "emlxs_device_recov_unmapped_node called. 0x%x. Not implemented.",
4063 "device_recov_unmapped_node called. 0x%x. Not implemented.",
4070 ndlp->nlp_DID);
4071
4072 return (0);
4073
4074} /* emlxs_device_recov_unmapped_node */
4075
4076
4077

--- 5 unchanged lines hidden (view full) ---

4083 void *arg2,
4084 void *arg3,
4085 void *arg4,
4086 uint32_t evt)
4087{
4088 NODELIST *ndlp = (NODELIST *)arg4;
4089
4090 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4064 ndlp->nlp_DID);
4065
4066 return (0);
4067
4068} /* emlxs_device_recov_unmapped_node */
4069
4070
4071

--- 5 unchanged lines hidden (view full) ---

4077 void *arg2,
4078 void *arg3,
4079 void *arg4,
4080 uint32_t evt)
4081{
4082 NODELIST *ndlp = (NODELIST *)arg4;
4083
4084 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4091 "emlxs_device_rm_npr_node called. 0x%x. Not implemented.",
4085 "device_rm_npr_node called. 0x%x. Not implemented.",
4092 ndlp->nlp_DID);
4093
4094 return (0);
4095
4096} /* emlxs_device_rm_npr_node */
4097
4098
4099/* ARGSUSED */

--- 4 unchanged lines hidden (view full) ---

4104 void *arg2,
4105 void *arg3,
4106 void *arg4,
4107 uint32_t evt)
4108{
4109 NODELIST *ndlp = (NODELIST *)arg4;
4110
4111 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4086 ndlp->nlp_DID);
4087
4088 return (0);
4089
4090} /* emlxs_device_rm_npr_node */
4091
4092
4093/* ARGSUSED */

--- 4 unchanged lines hidden (view full) ---

4098 void *arg2,
4099 void *arg3,
4100 void *arg4,
4101 uint32_t evt)
4102{
4103 NODELIST *ndlp = (NODELIST *)arg4;
4104
4105 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4112 "emlxs_device_recov_npr_node called. 0x%x. Not implemented.",
4106 "device_recov_npr_node called. 0x%x. Not implemented.",
4113 ndlp->nlp_DID);
4114
4115 return (0);
4116
4117} /* emlxs_device_recov_npr_node */
4118
4119
4120/* ARGSUSED */

--- 5 unchanged lines hidden (view full) ---

4126/* MATCHMAP * mp, */ void *arg3,
4127/* NODELIST * ndlp */ void *arg4,
4128uint32_t evt)
4129{
4130 NODELIST *ndlp = (NODELIST *)arg4;
4131 emlxs_node_dhc_t *node_dhc = &ndlp->node_dhc;
4132
4133 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4107 ndlp->nlp_DID);
4108
4109 return (0);
4110
4111} /* emlxs_device_recov_npr_node */
4112
4113
4114/* ARGSUSED */

--- 5 unchanged lines hidden (view full) ---

4120/* MATCHMAP * mp, */ void *arg3,
4121/* NODELIST * ndlp */ void *arg4,
4122uint32_t evt)
4123{
4124 NODELIST *ndlp = (NODELIST *)arg4;
4125 emlxs_node_dhc_t *node_dhc = &ndlp->node_dhc;
4126
4127 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4134 "emlxs_device_rem_auth: 0x%x.",
4128 "device_rem_auth: 0x%x.",
4135 ndlp->nlp_DID);
4136
4137 emlxs_dhc_state(port, ndlp, NODE_STATE_UNKNOWN, 0, 0);
4138
4139 return (node_dhc->state);
4140
4141} /* emlxs_device_rem_auth */
4142

--- 10 unchanged lines hidden (view full) ---

4153/* MATCHMAP * mp, */ void *arg3,
4154/* NODELIST * ndlp */ void *arg4,
4155uint32_t evt)
4156{
4157 NODELIST *ndlp = (NODELIST *)arg4;
4158 emlxs_node_dhc_t *node_dhc = &ndlp->node_dhc;
4159
4160 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4129 ndlp->nlp_DID);
4130
4131 emlxs_dhc_state(port, ndlp, NODE_STATE_UNKNOWN, 0, 0);
4132
4133 return (node_dhc->state);
4134
4135} /* emlxs_device_rem_auth */
4136

--- 10 unchanged lines hidden (view full) ---

4147/* MATCHMAP * mp, */ void *arg3,
4148/* NODELIST * ndlp */ void *arg4,
4149uint32_t evt)
4150{
4151 NODELIST *ndlp = (NODELIST *)arg4;
4152 emlxs_node_dhc_t *node_dhc = &ndlp->node_dhc;
4153
4154 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4161 "emlxs_device_recov_auth: 0x%x.",
4155 "device_recov_auth: 0x%x.",
4162 ndlp->nlp_DID);
4163
4164 node_dhc->nlp_authrsp_tmo = 0;
4165
4166 emlxs_dhc_state(port, ndlp, NODE_STATE_AUTH_FAILED, 0, 0);
4167
4168 return (node_dhc->state);
4169

--- 30 unchanged lines hidden (view full) ---

4200 AUTH_RJT *auth_rjt;
4201 uint8_t ReasonCode;
4202 uint8_t ReasonCodeExplanation;
4203
4204 bp = mp->virt;
4205 lp = (uint32_t *)bp;
4206
4207 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4156 ndlp->nlp_DID);
4157
4158 node_dhc->nlp_authrsp_tmo = 0;
4159
4160 emlxs_dhc_state(port, ndlp, NODE_STATE_AUTH_FAILED, 0, 0);
4161
4162 return (node_dhc->state);
4163

--- 30 unchanged lines hidden (view full) ---

4194 AUTH_RJT *auth_rjt;
4195 uint8_t ReasonCode;
4196 uint8_t ReasonCodeExplanation;
4197
4198 bp = mp->virt;
4199 lp = (uint32_t *)bp;
4200
4201 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4208 "emlxs_rcv_auth_msg_dhchap_success_cmpl_wait4next: did=0x%x",
4202 "rcv_auth_msg_dhchap_success_cmpl_wait4next: did=0x%x",
4209 ndlp->nlp_DID);
4210
4211 dh_success = (DHCHAP_SUCCESS_HDR *)((uint8_t *)lp);
4212
4213 (void) emlxs_els_reply(port, iocbq, ELS_CMD_ACC, ELS_CMD_AUTH, 0, 0);
4214
4215 if (dh_success->auth_msg_code == AUTH_REJECT) {
4216 /* ACC it and retry etc. */

--- 59 unchanged lines hidden (view full) ---

4276
4277 ReasonCode = AUTHRJT_FAILURE;
4278 ReasonCodeExplanation = AUTHEXP_BAD_PROTOCOL;
4279 goto Reject;
4280 }
4281 node_dhc->flag |= NLP_REMOTE_AUTH;
4282
4283 emlxs_dhc_state(port, ndlp, NODE_STATE_AUTH_SUCCESS, 0, 0);
4203 ndlp->nlp_DID);
4204
4205 dh_success = (DHCHAP_SUCCESS_HDR *)((uint8_t *)lp);
4206
4207 (void) emlxs_els_reply(port, iocbq, ELS_CMD_ACC, ELS_CMD_AUTH, 0, 0);
4208
4209 if (dh_success->auth_msg_code == AUTH_REJECT) {
4210 /* ACC it and retry etc. */

--- 59 unchanged lines hidden (view full) ---

4270
4271 ReasonCode = AUTHRJT_FAILURE;
4272 ReasonCodeExplanation = AUTHEXP_BAD_PROTOCOL;
4273 goto Reject;
4274 }
4275 node_dhc->flag |= NLP_REMOTE_AUTH;
4276
4277 emlxs_dhc_state(port, ndlp, NODE_STATE_AUTH_SUCCESS, 0, 0);
4284 emlxs_log_auth_event(port, ndlp, ESC_EMLXS_26,
4278 emlxs_log_auth_event(port, ndlp,
4279 "rcv_auth_msg_dhchap_success_cmpl_wait4next",
4285 "Node-initiated-bidir-reauth-success");
4286 emlxs_dhc_auth_complete(port, ndlp, 0);
4287 } else {
4288 ReasonCode = AUTHRJT_FAILURE;
4289 ReasonCodeExplanation = AUTHEXP_BAD_PROTOCOL;
4290 goto Reject;
4291 }
4292

--- 79 unchanged lines hidden (view full) ---

4372 uint32_t hash_id, dhgp_id; /* to be used by responder */
4373 uint16_t num_hs = 0;
4374 uint16_t num_dh = 0;
4375
4376 bp = mp->virt;
4377 lp = (uint32_t *)bp;
4378
4379 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4280 "Node-initiated-bidir-reauth-success");
4281 emlxs_dhc_auth_complete(port, ndlp, 0);
4282 } else {
4283 ReasonCode = AUTHRJT_FAILURE;
4284 ReasonCodeExplanation = AUTHEXP_BAD_PROTOCOL;
4285 goto Reject;
4286 }
4287

--- 79 unchanged lines hidden (view full) ---

4367 uint32_t hash_id, dhgp_id; /* to be used by responder */
4368 uint16_t num_hs = 0;
4369 uint16_t num_dh = 0;
4370
4371 bp = mp->virt;
4372 lp = (uint32_t *)bp;
4373
4374 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4380 "emlxs_rcv_auth_msg_npr_node:");
4375 "rcv_auth_msg_npr_node:");
4381
4382 /*
4383 * 1. process the auth msg, should acc first no matter what. 2.
4384 * return DHCHAP_Challenge for AUTH_Negotiate auth msg, AUTH_Reject
4385 * for anything else.
4386 */
4387 (void) emlxs_els_reply(port, iocbq, ELS_CMD_ACC, ELS_CMD_AUTH, 0, 0);
4388

--- 4 unchanged lines hidden (view full) ---

4393 /* temp is used for error checking */
4394 temp = (uint8_t *)((uint8_t *)lp);
4395 /* Check the auth_els_code */
4396 if (((*(uint32_t *)temp) & 0xFFFFFFFF) != LE_SWAP32(0x90000B01)) {
4397 /* ReasonCode = AUTHRJT_FAILURE; */
4398 /* ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD; */
4399
4400 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4376
4377 /*
4378 * 1. process the auth msg, should acc first no matter what. 2.
4379 * return DHCHAP_Challenge for AUTH_Negotiate auth msg, AUTH_Reject
4380 * for anything else.
4381 */
4382 (void) emlxs_els_reply(port, iocbq, ELS_CMD_ACC, ELS_CMD_AUTH, 0, 0);
4383

--- 4 unchanged lines hidden (view full) ---

4388 /* temp is used for error checking */
4389 temp = (uint8_t *)((uint8_t *)lp);
4390 /* Check the auth_els_code */
4391 if (((*(uint32_t *)temp) & 0xFFFFFFFF) != LE_SWAP32(0x90000B01)) {
4392 /* ReasonCode = AUTHRJT_FAILURE; */
4393 /* ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD; */
4394
4395 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4401 "emlxs_rcv_auth_msg_npr_node: payload(1)=0x%x",
4396 "rcv_auth_msg_npr_node: payload(1)=0x%x",
4402 (*(uint32_t *)temp));
4403
4404 goto AUTH_Reject;
4405 }
4406 temp += 3 * sizeof (uint32_t);
4407 /* Check name tag and name length */
4408 if (((*(uint32_t *)temp) & 0xFFFFFFFF) != LE_SWAP32(0x00010008)) {
4409 /* ReasonCode = AUTHRJT_FAILURE; */
4410 /* ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD; */
4411
4412 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4397 (*(uint32_t *)temp));
4398
4399 goto AUTH_Reject;
4400 }
4401 temp += 3 * sizeof (uint32_t);
4402 /* Check name tag and name length */
4403 if (((*(uint32_t *)temp) & 0xFFFFFFFF) != LE_SWAP32(0x00010008)) {
4404 /* ReasonCode = AUTHRJT_FAILURE; */
4405 /* ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD; */
4406
4407 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4413 "emlxs_rcv_auth_msg_npr_node: payload(2)=0x%x",
4408 "rcv_auth_msg_npr_node: payload(2)=0x%x",
4414 (*(uint32_t *)temp));
4415
4416 goto AUTH_Reject;
4417 }
4418 temp += sizeof (uint32_t) + 8;
4419 /* Check proto_num */
4420 if (((*(uint32_t *)temp) & 0xFFFFFFFF) != LE_SWAP32(0x00000001)) {
4421 /* ReasonCode = AUTHRJT_FAILURE; */
4422 /* ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD; */
4423
4424 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4409 (*(uint32_t *)temp));
4410
4411 goto AUTH_Reject;
4412 }
4413 temp += sizeof (uint32_t) + 8;
4414 /* Check proto_num */
4415 if (((*(uint32_t *)temp) & 0xFFFFFFFF) != LE_SWAP32(0x00000001)) {
4416 /* ReasonCode = AUTHRJT_FAILURE; */
4417 /* ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD; */
4418
4419 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4425 "emlxs_rcv_auth_msg_npr_node: payload(3)=0x%x",
4420 "rcv_auth_msg_npr_node: payload(3)=0x%x",
4426 (*(uint32_t *)temp));
4427
4428 goto AUTH_Reject;
4429 }
4430 temp += sizeof (uint32_t);
4431 /* Get para_len */
4432 /* para_len = LE_SWAP32(*(uint32_t *)temp); */
4433
4434 temp += sizeof (uint32_t);
4435 /* Check proto_id */
4436 if (((*(uint32_t *)temp) & 0xFFFFFFFF) != AUTH_DHCHAP) {
4437 /* ReasonCode = AUTHRJT_FAILURE; */
4438 /* ReasonCodeExplanation = AUTHEXP_BAD_PROTOCOL; */
4439
4440 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4421 (*(uint32_t *)temp));
4422
4423 goto AUTH_Reject;
4424 }
4425 temp += sizeof (uint32_t);
4426 /* Get para_len */
4427 /* para_len = LE_SWAP32(*(uint32_t *)temp); */
4428
4429 temp += sizeof (uint32_t);
4430 /* Check proto_id */
4431 if (((*(uint32_t *)temp) & 0xFFFFFFFF) != AUTH_DHCHAP) {
4432 /* ReasonCode = AUTHRJT_FAILURE; */
4433 /* ReasonCodeExplanation = AUTHEXP_BAD_PROTOCOL; */
4434
4435 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4441 "emlxs_rcv_auth_msg_npr_node: payload(4)=0x%x",
4436 "rcv_auth_msg_npr_node: payload(4)=0x%x",
4442 (*(uint32_t *)temp));
4443
4444 goto AUTH_Reject;
4445 }
4446 temp += sizeof (uint32_t);
4447 /* Check hashlist tag */
4448 if ((LE_SWAP32(*(uint32_t *)temp) & 0xFFFF0000) >> 16 !=
4449 LE_SWAP16(HASH_LIST_TAG)) {
4450 /* ReasonCode = AUTHRJT_FAILURE; */
4451 /* ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD; */
4452
4453 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4437 (*(uint32_t *)temp));
4438
4439 goto AUTH_Reject;
4440 }
4441 temp += sizeof (uint32_t);
4442 /* Check hashlist tag */
4443 if ((LE_SWAP32(*(uint32_t *)temp) & 0xFFFF0000) >> 16 !=
4444 LE_SWAP16(HASH_LIST_TAG)) {
4445 /* ReasonCode = AUTHRJT_FAILURE; */
4446 /* ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD; */
4447
4448 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4454 "emlxs_rcv_auth_msg_npr_node: payload(5)=0x%x",
4449 "rcv_auth_msg_npr_node: payload(5)=0x%x",
4455 (LE_SWAP32(*(uint32_t *)temp) & 0xFFFF0000) >> 16);
4456
4457 goto AUTH_Reject;
4458 }
4459 /* Get num_hs */
4460 num_hs = LE_SWAP32(*(uint32_t *)temp) & 0x0000FFFF;
4461
4462 temp += sizeof (uint32_t);
4463 /* Check HashList_value1 */
4464 hs_id[0] = *(uint32_t *)temp;
4465
4466 if ((hs_id[0] != AUTH_MD5) && (hs_id[0] != AUTH_SHA1)) {
4467 /* ReasonCode = AUTHRJT_LOGIC_ERR; */
4468 /* ReasonCodeExplanation = AUTHEXP_HASHFUNC_UNUSABLE; */
4469
4470 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4450 (LE_SWAP32(*(uint32_t *)temp) & 0xFFFF0000) >> 16);
4451
4452 goto AUTH_Reject;
4453 }
4454 /* Get num_hs */
4455 num_hs = LE_SWAP32(*(uint32_t *)temp) & 0x0000FFFF;
4456
4457 temp += sizeof (uint32_t);
4458 /* Check HashList_value1 */
4459 hs_id[0] = *(uint32_t *)temp;
4460
4461 if ((hs_id[0] != AUTH_MD5) && (hs_id[0] != AUTH_SHA1)) {
4462 /* ReasonCode = AUTHRJT_LOGIC_ERR; */
4463 /* ReasonCodeExplanation = AUTHEXP_HASHFUNC_UNUSABLE; */
4464
4465 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4471 "emlxs_rcv_auth_msg_npr_node: payload(6)=0x%x",
4466 "rcv_auth_msg_npr_node: payload(6)=0x%x",
4472 (*(uint32_t *)temp));
4473
4474 goto AUTH_Reject;
4475 }
4476 if (num_hs == 1) {
4477 hs_id[1] = 0;
4478 } else if (num_hs == 2) {
4479 temp += sizeof (uint32_t);
4480 hs_id[1] = *(uint32_t *)temp;
4481
4482 if ((hs_id[1] != AUTH_MD5) && (hs_id[1] != AUTH_SHA1)) {
4483 /* ReasonCode = AUTHRJT_LOGIC_ERR; */
4484 /* ReasonCodeExplanation = AUTHEXP_HASHFUNC_UNUSABLE; */
4485
4486 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4467 (*(uint32_t *)temp));
4468
4469 goto AUTH_Reject;
4470 }
4471 if (num_hs == 1) {
4472 hs_id[1] = 0;
4473 } else if (num_hs == 2) {
4474 temp += sizeof (uint32_t);
4475 hs_id[1] = *(uint32_t *)temp;
4476
4477 if ((hs_id[1] != AUTH_MD5) && (hs_id[1] != AUTH_SHA1)) {
4478 /* ReasonCode = AUTHRJT_LOGIC_ERR; */
4479 /* ReasonCodeExplanation = AUTHEXP_HASHFUNC_UNUSABLE; */
4480
4481 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4487 "emlxs_rcv_auth_msg_npr_node: payload(7)=0x%x",
4482 "rcv_auth_msg_npr_node: payload(7)=0x%x",
4488 (*(uint32_t *)temp));
4489
4490 goto AUTH_Reject;
4491 }
4492 if (hs_id[0] == hs_id[1]) {
4493 /* ReasonCode = AUTHRJT_FAILURE; */
4494 /* ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD; */
4495
4496 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4483 (*(uint32_t *)temp));
4484
4485 goto AUTH_Reject;
4486 }
4487 if (hs_id[0] == hs_id[1]) {
4488 /* ReasonCode = AUTHRJT_FAILURE; */
4489 /* ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD; */
4490
4491 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4497 "emlxs_rcv_auth_msg_npr_node: payload(8)=0x%x",
4492 "rcv_auth_msg_npr_node: payload(8)=0x%x",
4498 (*(uint32_t *)temp));
4499
4500 goto AUTH_Reject;
4501 }
4502 } else {
4503 /* ReasonCode = AUTHRJT_FAILURE; */
4504 /* ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD; */
4505
4506 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4493 (*(uint32_t *)temp));
4494
4495 goto AUTH_Reject;
4496 }
4497 } else {
4498 /* ReasonCode = AUTHRJT_FAILURE; */
4499 /* ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD; */
4500
4501 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4507 "emlxs_rcv_auth_msg_npr_node: payload(9)=0x%x",
4502 "rcv_auth_msg_npr_node: payload(9)=0x%x",
4508 (*(uint32_t *)(temp - sizeof (uint32_t))));
4509
4510 goto AUTH_Reject;
4511 }
4512
4513 /* Which hash_id should we use */
4514 if (num_hs == 1) {
4515 /*

--- 5 unchanged lines hidden (view full) ---

4521 hash_id = node_dhc->auth_cfg.hash_priority[0];
4522 } else if (node_dhc->auth_cfg.hash_priority[1] == hs_id[0]) {
4523 hash_id = node_dhc->auth_cfg.hash_priority[1];
4524 } else {
4525 /* ReasonCode = AUTHRJT_LOGIC_ERR; */
4526 /* ReasonCodeExplanation = AUTHEXP_HASHFUNC_UNUSABLE; */
4527
4528 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4503 (*(uint32_t *)(temp - sizeof (uint32_t))));
4504
4505 goto AUTH_Reject;
4506 }
4507
4508 /* Which hash_id should we use */
4509 if (num_hs == 1) {
4510 /*

--- 5 unchanged lines hidden (view full) ---

4516 hash_id = node_dhc->auth_cfg.hash_priority[0];
4517 } else if (node_dhc->auth_cfg.hash_priority[1] == hs_id[0]) {
4518 hash_id = node_dhc->auth_cfg.hash_priority[1];
4519 } else {
4520 /* ReasonCode = AUTHRJT_LOGIC_ERR; */
4521 /* ReasonCodeExplanation = AUTHEXP_HASHFUNC_UNUSABLE; */
4522
4523 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4529 "emlxs_rcv_auth_msg_npr_node: payload(10)=0x%lx",
4524 "rcv_auth_msg_npr_node: payload(10)=0x%lx",
4530 (*(uint32_t *)temp));
4531
4532 goto AUTH_Reject;
4533 }
4534 } else {
4535 /*
4536 * Since the initiator specified two hashs, we always select
4537 * our first one.

--- 4 unchanged lines hidden (view full) ---

4542 temp += sizeof (uint32_t);
4543 /* Check DHgIDList_tag */
4544 if ((LE_SWAP32(*(uint32_t *)temp) & 0xFFFF0000) >> 16 !=
4545 LE_SWAP16(DHGID_LIST_TAG)) {
4546 /* ReasonCode = AUTHRJT_FAILURE; */
4547 /* ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD; */
4548
4549 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4525 (*(uint32_t *)temp));
4526
4527 goto AUTH_Reject;
4528 }
4529 } else {
4530 /*
4531 * Since the initiator specified two hashs, we always select
4532 * our first one.

--- 4 unchanged lines hidden (view full) ---

4537 temp += sizeof (uint32_t);
4538 /* Check DHgIDList_tag */
4539 if ((LE_SWAP32(*(uint32_t *)temp) & 0xFFFF0000) >> 16 !=
4540 LE_SWAP16(DHGID_LIST_TAG)) {
4541 /* ReasonCode = AUTHRJT_FAILURE; */
4542 /* ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD; */
4543
4544 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4550 "emlxs_rcv_auth_msg_npr_node: payload(11)=0x%lx",
4545 "rcv_auth_msg_npr_node: payload(11)=0x%lx",
4551 (*(uint32_t *)temp));
4552
4553 goto AUTH_Reject;
4554 }
4555 /* Get num_dh */
4556 num_dh = LE_SWAP32(*(uint32_t *)temp) & 0x0000FFFF;
4557
4558 if (num_dh == 0) {
4559 /* ReasonCode = AUTHRJT_FAILURE; */
4560 /* ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD; */
4561
4562 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4546 (*(uint32_t *)temp));
4547
4548 goto AUTH_Reject;
4549 }
4550 /* Get num_dh */
4551 num_dh = LE_SWAP32(*(uint32_t *)temp) & 0x0000FFFF;
4552
4553 if (num_dh == 0) {
4554 /* ReasonCode = AUTHRJT_FAILURE; */
4555 /* ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD; */
4556
4557 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4563 "emlxs_rcv_auth_msg_npr_node: payload(12)=0x%lx",
4558 "rcv_auth_msg_npr_node: payload(12)=0x%lx",
4564 (*(uint32_t *)temp));
4565
4566 goto AUTH_Reject;
4567 }
4568 for (i = 0; i < num_dh; i++) {
4569 temp += sizeof (uint32_t);
4570 /* Check DHgIDList_g0 */
4571 dh_id[i] = (*(uint32_t *)temp);
4572 }
4573
4574 rc = emlxs_check_dhgp(port, ndlp, dh_id, num_dh, &dhgp_id);
4575
4576 if (rc == 1) {
4577 /* ReasonCode = AUTHRJT_LOGIC_ERR; */
4578 /* ReasonCodeExplanation = AUTHEXP_DHGROUP_UNUSABLE; */
4579
4580 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4559 (*(uint32_t *)temp));
4560
4561 goto AUTH_Reject;
4562 }
4563 for (i = 0; i < num_dh; i++) {
4564 temp += sizeof (uint32_t);
4565 /* Check DHgIDList_g0 */
4566 dh_id[i] = (*(uint32_t *)temp);
4567 }
4568
4569 rc = emlxs_check_dhgp(port, ndlp, dh_id, num_dh, &dhgp_id);
4570
4571 if (rc == 1) {
4572 /* ReasonCode = AUTHRJT_LOGIC_ERR; */
4573 /* ReasonCodeExplanation = AUTHEXP_DHGROUP_UNUSABLE; */
4574
4575 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4581 "emlxs_rcv_auth_msg_npr_node: payload(13)=0x%lx",
4576 "rcv_auth_msg_npr_node: payload(13)=0x%lx",
4582 (*(uint32_t *)temp));
4583
4584 goto AUTH_Reject;
4585 } else if (rc == 2) {
4586 /* ReasonCode = AUTHRJT_FAILURE; */
4587 /* ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD; */
4588
4589 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4577 (*(uint32_t *)temp));
4578
4579 goto AUTH_Reject;
4580 } else if (rc == 2) {
4581 /* ReasonCode = AUTHRJT_FAILURE; */
4582 /* ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD; */
4583
4584 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
4590 "emlxs_rcv_auth_msg_npr_node: payload(14)=0x%lx",
4585 "rcv_auth_msg_npr_node: payload(14)=0x%lx",
4591 (*(uint32_t *)temp));
4592
4593 goto AUTH_Reject;
4594 }
4595 /* We should update the tran_id */
4596 node_dhc->nlp_auth_tranid_ini = msg->tran_id;
4597
4598 if (msg->auth_msg_code == AUTH_NEGOTIATE) {

--- 12 unchanged lines hidden (view full) ---

4611 goto AUTH_Reject;
4612 }
4613
4614 return (node_dhc->state);
4615
4616AUTH_Reject:
4617
4618 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4586 (*(uint32_t *)temp));
4587
4588 goto AUTH_Reject;
4589 }
4590 /* We should update the tran_id */
4591 node_dhc->nlp_auth_tranid_ini = msg->tran_id;
4592
4593 if (msg->auth_msg_code == AUTH_NEGOTIATE) {

--- 12 unchanged lines hidden (view full) ---

4606 goto AUTH_Reject;
4607 }
4608
4609 return (node_dhc->state);
4610
4611AUTH_Reject:
4612
4613 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4619 "emlxs_rcv_auth_msg_npr_node: AUTH_Reject it.");
4614 "rcv_auth_msg_npr_node: AUTH_Reject it.");
4620
4621 return (node_dhc->state);
4622
4623} /* emlxs_rcv_auth_msg_npr_node */
4624
4625
4626/* ARGSUSED */
4627static uint32_t

--- 11 unchanged lines hidden (view full) ---

4639 /*
4640 * we donot cancel the nodev timeout here because we donot know if we
4641 * can get the authentication restarted from other side once we got
4642 * the new auth transaction kicked off we cancel nodev tmo
4643 * immediately.
4644 */
4645 /* we goto change the hba state back to where it used to be */
4646 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4615
4616 return (node_dhc->state);
4617
4618} /* emlxs_rcv_auth_msg_npr_node */
4619
4620
4621/* ARGSUSED */
4622static uint32_t

--- 11 unchanged lines hidden (view full) ---

4634 /*
4635 * we donot cancel the nodev timeout here because we donot know if we
4636 * can get the authentication restarted from other side once we got
4637 * the new auth transaction kicked off we cancel nodev tmo
4638 * immediately.
4639 */
4640 /* we goto change the hba state back to where it used to be */
4641 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4647 "emlxs_cmpl_auth_msg_npr_node: 0x%x 0x%x prev_state=0x%x\n",
4642 "cmpl_auth_msg_npr_node: 0x%x 0x%x prev_state=0x%x\n",
4648 ndlp->nlp_DID, node_dhc->state, node_dhc->prev_state);
4649
4650 return (node_dhc->state);
4651
4652} /* emlxs_cmpl_auth_msg_npr_node */
4653
4654
4655/*

--- 59 unchanged lines hidden (view full) ---

4715 uint16_t num_dh = 0;
4716
4717 /*
4718 * 1. process the auth msg, should acc first no matter what. 2.
4719 * return DHCHAP_Challenge for AUTH_Negotiate auth msg, AUTH_Reject
4720 * for anything else.
4721 */
4722 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4643 ndlp->nlp_DID, node_dhc->state, node_dhc->prev_state);
4644
4645 return (node_dhc->state);
4646
4647} /* emlxs_cmpl_auth_msg_npr_node */
4648
4649
4650/*

--- 59 unchanged lines hidden (view full) ---

4710 uint16_t num_dh = 0;
4711
4712 /*
4713 * 1. process the auth msg, should acc first no matter what. 2.
4714 * return DHCHAP_Challenge for AUTH_Negotiate auth msg, AUTH_Reject
4715 * for anything else.
4716 */
4717 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4723 "emlxs_rcv_auth_msg_unmapped_node: Sending ACC: did=0x%x",
4718 "rcv_auth_msg_unmapped_node: Sending ACC: did=0x%x",
4724 ndlp->nlp_DID);
4725
4726 (void) emlxs_els_reply(port, iocbq, ELS_CMD_ACC, ELS_CMD_AUTH, 0, 0);
4727
4728 bp = mp->virt;
4729 lp = (uint32_t *)bp;
4730
4731 msg = (AUTH_MSG_HDR *)((uint8_t *)lp);

--- 4 unchanged lines hidden (view full) ---

4736 /* temp is used for error checking */
4737 temp = (uint8_t *)((uint8_t *)lp);
4738 /* Check the auth_els_code */
4739 if (((*(uint32_t *)temp) & 0xFFFFFFFF) != LE_SWAP32(0x90000B01)) {
4740 ReasonCode = AUTHRJT_FAILURE;
4741 ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD;
4742
4743 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4719 ndlp->nlp_DID);
4720
4721 (void) emlxs_els_reply(port, iocbq, ELS_CMD_ACC, ELS_CMD_AUTH, 0, 0);
4722
4723 bp = mp->virt;
4724 lp = (uint32_t *)bp;
4725
4726 msg = (AUTH_MSG_HDR *)((uint8_t *)lp);

--- 4 unchanged lines hidden (view full) ---

4731 /* temp is used for error checking */
4732 temp = (uint8_t *)((uint8_t *)lp);
4733 /* Check the auth_els_code */
4734 if (((*(uint32_t *)temp) & 0xFFFFFFFF) != LE_SWAP32(0x90000B01)) {
4735 ReasonCode = AUTHRJT_FAILURE;
4736 ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD;
4737
4738 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4744 "emlxs_rcv_auth_msg_unmapped_node: payload(1)=0x%x",
4739 "rcv_auth_msg_unmapped_node: payload(1)=0x%x",
4745 (*(uint32_t *)temp));
4746
4747 goto AUTH_Reject;
4748 }
4749 temp += 3 * sizeof (uint32_t);
4750 /* Check name tag and name length */
4751 if (((*(uint32_t *)temp) & 0xFFFFFFFF) != LE_SWAP32(0x00010008)) {
4752 ReasonCode = AUTHRJT_FAILURE;
4753 ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD;
4754
4755 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4740 (*(uint32_t *)temp));
4741
4742 goto AUTH_Reject;
4743 }
4744 temp += 3 * sizeof (uint32_t);
4745 /* Check name tag and name length */
4746 if (((*(uint32_t *)temp) & 0xFFFFFFFF) != LE_SWAP32(0x00010008)) {
4747 ReasonCode = AUTHRJT_FAILURE;
4748 ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD;
4749
4750 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4756 "emlxs_rcv_auth_msg_unmapped_node: payload(2)=0x%x",
4751 "rcv_auth_msg_unmapped_node: payload(2)=0x%x",
4757 (*(uint32_t *)temp));
4758
4759 goto AUTH_Reject;
4760 }
4761 temp += sizeof (uint32_t) + 8;
4762 /* Check proto_num */
4763 if (((*(uint32_t *)temp) & 0xFFFFFFFF) != LE_SWAP32(0x00000001)) {
4764 ReasonCode = AUTHRJT_FAILURE;
4765 ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD;
4766
4767 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4752 (*(uint32_t *)temp));
4753
4754 goto AUTH_Reject;
4755 }
4756 temp += sizeof (uint32_t) + 8;
4757 /* Check proto_num */
4758 if (((*(uint32_t *)temp) & 0xFFFFFFFF) != LE_SWAP32(0x00000001)) {
4759 ReasonCode = AUTHRJT_FAILURE;
4760 ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD;
4761
4762 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4768 "emlxs_rcv_auth_msg_unmapped_node: payload(3)=0x%x",
4763 "rcv_auth_msg_unmapped_node: payload(3)=0x%x",
4769 (*(uint32_t *)temp));
4770
4771 goto AUTH_Reject;
4772 }
4773 temp += sizeof (uint32_t);
4774
4775 /* Get para_len */
4776 /* para_len = *(uint32_t *)temp; */
4777 temp += sizeof (uint32_t);
4778
4779 /* Check proto_id */
4780 if (((*(uint32_t *)temp) & 0xFFFFFFFF) != AUTH_DHCHAP) {
4781 ReasonCode = AUTHRJT_FAILURE;
4782 ReasonCodeExplanation = AUTHEXP_BAD_PROTOCOL;
4783
4784 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4764 (*(uint32_t *)temp));
4765
4766 goto AUTH_Reject;
4767 }
4768 temp += sizeof (uint32_t);
4769
4770 /* Get para_len */
4771 /* para_len = *(uint32_t *)temp; */
4772 temp += sizeof (uint32_t);
4773
4774 /* Check proto_id */
4775 if (((*(uint32_t *)temp) & 0xFFFFFFFF) != AUTH_DHCHAP) {
4776 ReasonCode = AUTHRJT_FAILURE;
4777 ReasonCodeExplanation = AUTHEXP_BAD_PROTOCOL;
4778
4779 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4785 "emlxs_rcv_auth_msg_unmapped_node: payload(4)=0x%x",
4780 "rcv_auth_msg_unmapped_node: payload(4)=0x%x",
4786 (*(uint32_t *)temp));
4787
4788 goto AUTH_Reject;
4789 }
4790 temp += sizeof (uint32_t);
4791 /* Check hashlist tag */
4792 if ((LE_SWAP32(*(uint32_t *)temp) & 0xFFFF0000) >> 16 !=
4793 LE_SWAP16(HASH_LIST_TAG)) {
4794 ReasonCode = AUTHRJT_FAILURE;
4795 ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD;
4796
4797 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4781 (*(uint32_t *)temp));
4782
4783 goto AUTH_Reject;
4784 }
4785 temp += sizeof (uint32_t);
4786 /* Check hashlist tag */
4787 if ((LE_SWAP32(*(uint32_t *)temp) & 0xFFFF0000) >> 16 !=
4788 LE_SWAP16(HASH_LIST_TAG)) {
4789 ReasonCode = AUTHRJT_FAILURE;
4790 ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD;
4791
4792 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4798 "emlxs_rcv_auth_msg_unmapped_node: payload(5)=0x%x",
4793 "rcv_auth_msg_unmapped_node: payload(5)=0x%x",
4799 (LE_SWAP32(*(uint32_t *)temp) & 0xFFFF0000) >> 16);
4800
4801 goto AUTH_Reject;
4802 }
4803 /* Get num_hs */
4804 num_hs = LE_SWAP32(*(uint32_t *)temp) & 0x0000FFFF;
4805
4806 temp += sizeof (uint32_t);
4807 /* Check HashList_value1 */
4808 hs_id[0] = *(uint32_t *)temp;
4809
4810 if ((hs_id[0] != AUTH_MD5) && (hs_id[0] != AUTH_SHA1)) {
4811 ReasonCode = AUTHRJT_LOGIC_ERR;
4812 ReasonCodeExplanation = AUTHEXP_HASHFUNC_UNUSABLE;
4813
4814 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4794 (LE_SWAP32(*(uint32_t *)temp) & 0xFFFF0000) >> 16);
4795
4796 goto AUTH_Reject;
4797 }
4798 /* Get num_hs */
4799 num_hs = LE_SWAP32(*(uint32_t *)temp) & 0x0000FFFF;
4800
4801 temp += sizeof (uint32_t);
4802 /* Check HashList_value1 */
4803 hs_id[0] = *(uint32_t *)temp;
4804
4805 if ((hs_id[0] != AUTH_MD5) && (hs_id[0] != AUTH_SHA1)) {
4806 ReasonCode = AUTHRJT_LOGIC_ERR;
4807 ReasonCodeExplanation = AUTHEXP_HASHFUNC_UNUSABLE;
4808
4809 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4815 "emlxs_rcv_auth_msg_unmapped_node: payload(6)=0x%x",
4810 "rcv_auth_msg_unmapped_node: payload(6)=0x%x",
4816 (*(uint32_t *)temp));
4817
4818 goto AUTH_Reject;
4819 }
4820 if (num_hs == 1) {
4821 hs_id[1] = 0;
4822 } else if (num_hs == 2) {
4823 temp += sizeof (uint32_t);
4824 hs_id[1] = *(uint32_t *)temp;
4825
4826 if ((hs_id[1] != AUTH_MD5) && (hs_id[1] != AUTH_SHA1)) {
4827 ReasonCode = AUTHRJT_LOGIC_ERR;
4828 ReasonCodeExplanation = AUTHEXP_HASHFUNC_UNUSABLE;
4829
4830 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4811 (*(uint32_t *)temp));
4812
4813 goto AUTH_Reject;
4814 }
4815 if (num_hs == 1) {
4816 hs_id[1] = 0;
4817 } else if (num_hs == 2) {
4818 temp += sizeof (uint32_t);
4819 hs_id[1] = *(uint32_t *)temp;
4820
4821 if ((hs_id[1] != AUTH_MD5) && (hs_id[1] != AUTH_SHA1)) {
4822 ReasonCode = AUTHRJT_LOGIC_ERR;
4823 ReasonCodeExplanation = AUTHEXP_HASHFUNC_UNUSABLE;
4824
4825 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4831 "emlxs_rcv_auth_msg_unmapped_node: payload(7)=0x%x",
4826 "rcv_auth_msg_unmapped_node: payload(7)=0x%x",
4832 (*(uint32_t *)temp));
4833
4834 goto AUTH_Reject;
4835 }
4836 if (hs_id[0] == hs_id[1]) {
4837 ReasonCode = AUTHRJT_FAILURE;
4838 ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD;
4839
4840 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4827 (*(uint32_t *)temp));
4828
4829 goto AUTH_Reject;
4830 }
4831 if (hs_id[0] == hs_id[1]) {
4832 ReasonCode = AUTHRJT_FAILURE;
4833 ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD;
4834
4835 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4841 "emlxs_rcv_auth_msg_unmapped_node: payload(8)=0x%x",
4836 "rcv_auth_msg_unmapped_node: payload(8)=0x%x",
4842 (*(uint32_t *)temp));
4843
4844 goto AUTH_Reject;
4845 }
4846 } else {
4847 ReasonCode = AUTHRJT_FAILURE;
4848 ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD;
4849
4850 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4837 (*(uint32_t *)temp));
4838
4839 goto AUTH_Reject;
4840 }
4841 } else {
4842 ReasonCode = AUTHRJT_FAILURE;
4843 ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD;
4844
4845 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4851 "emlxs_rcv_auth_msg_unmapped_node: payload(9)=0x%x",
4846 "rcv_auth_msg_unmapped_node: payload(9)=0x%x",
4852 (*(uint32_t *)(temp - sizeof (uint32_t))));
4853
4854 goto AUTH_Reject;
4855 }
4856
4857 /* Which hash_id should we use */
4858 if (num_hs == 1) {
4859 /*

--- 5 unchanged lines hidden (view full) ---

4865 hash_id = node_dhc->auth_cfg.hash_priority[0];
4866 } else if (node_dhc->auth_cfg.hash_priority[1] == hs_id[0]) {
4867 hash_id = node_dhc->auth_cfg.hash_priority[1];
4868 } else {
4869 ReasonCode = AUTHRJT_LOGIC_ERR;
4870 ReasonCodeExplanation = AUTHEXP_HASHFUNC_UNUSABLE;
4871
4872 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4847 (*(uint32_t *)(temp - sizeof (uint32_t))));
4848
4849 goto AUTH_Reject;
4850 }
4851
4852 /* Which hash_id should we use */
4853 if (num_hs == 1) {
4854 /*

--- 5 unchanged lines hidden (view full) ---

4860 hash_id = node_dhc->auth_cfg.hash_priority[0];
4861 } else if (node_dhc->auth_cfg.hash_priority[1] == hs_id[0]) {
4862 hash_id = node_dhc->auth_cfg.hash_priority[1];
4863 } else {
4864 ReasonCode = AUTHRJT_LOGIC_ERR;
4865 ReasonCodeExplanation = AUTHEXP_HASHFUNC_UNUSABLE;
4866
4867 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4873 "emlxs_rcv_auth_msg_unmapped_node: pload(10)=0x%x",
4868 "rcv_auth_msg_unmapped_node: pload(10)=0x%x",
4874 (*(uint32_t *)temp));
4875
4876 goto AUTH_Reject;
4877 }
4878 } else {
4879 /*
4880 * Since the initiator specified two hashs, we always select
4881 * our first one.

--- 4 unchanged lines hidden (view full) ---

4886 temp += sizeof (uint32_t);
4887 /* Check DHgIDList_tag */
4888 if ((LE_SWAP32(*(uint32_t *)temp) & 0xFFFF0000) >> 16 !=
4889 LE_SWAP16(DHGID_LIST_TAG)) {
4890 ReasonCode = AUTHRJT_FAILURE;
4891 ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD;
4892
4893 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4869 (*(uint32_t *)temp));
4870
4871 goto AUTH_Reject;
4872 }
4873 } else {
4874 /*
4875 * Since the initiator specified two hashs, we always select
4876 * our first one.

--- 4 unchanged lines hidden (view full) ---

4881 temp += sizeof (uint32_t);
4882 /* Check DHgIDList_tag */
4883 if ((LE_SWAP32(*(uint32_t *)temp) & 0xFFFF0000) >> 16 !=
4884 LE_SWAP16(DHGID_LIST_TAG)) {
4885 ReasonCode = AUTHRJT_FAILURE;
4886 ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD;
4887
4888 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4894 "emlxs_rcv_auth_msg_unmapped_node: payload(11)=0x%x",
4889 "rcv_auth_msg_unmapped_node: payload(11)=0x%x",
4895 (*(uint32_t *)temp));
4896
4897 goto AUTH_Reject;
4898 }
4899 /* Get num_dh */
4900 num_dh = LE_SWAP32(*(uint32_t *)temp) & 0x0000FFFF;
4901
4902 if (num_dh == 0) {
4903 ReasonCode = AUTHRJT_FAILURE;
4904 ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD;
4905
4906 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4890 (*(uint32_t *)temp));
4891
4892 goto AUTH_Reject;
4893 }
4894 /* Get num_dh */
4895 num_dh = LE_SWAP32(*(uint32_t *)temp) & 0x0000FFFF;
4896
4897 if (num_dh == 0) {
4898 ReasonCode = AUTHRJT_FAILURE;
4899 ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD;
4900
4901 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4907 "emlxs_rcv_auth_msg_unmapped_node: payload(12)=0x%x",
4902 "rcv_auth_msg_unmapped_node: payload(12)=0x%x",
4908 (*(uint32_t *)temp));
4909
4910 goto AUTH_Reject;
4911 }
4912 for (i = 0; i < num_dh; i++) {
4913 temp += sizeof (uint32_t);
4914 /* Check DHgIDList_g0 */
4915 dh_id[i] = (*(uint32_t *)temp);
4916 }
4917
4918 rc = emlxs_check_dhgp(port, ndlp, dh_id, num_dh, &dhgp_id);
4919
4920 if (rc == 1) {
4921 ReasonCode = AUTHRJT_LOGIC_ERR;
4922 ReasonCodeExplanation = AUTHEXP_DHGROUP_UNUSABLE;
4923
4924 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4903 (*(uint32_t *)temp));
4904
4905 goto AUTH_Reject;
4906 }
4907 for (i = 0; i < num_dh; i++) {
4908 temp += sizeof (uint32_t);
4909 /* Check DHgIDList_g0 */
4910 dh_id[i] = (*(uint32_t *)temp);
4911 }
4912
4913 rc = emlxs_check_dhgp(port, ndlp, dh_id, num_dh, &dhgp_id);
4914
4915 if (rc == 1) {
4916 ReasonCode = AUTHRJT_LOGIC_ERR;
4917 ReasonCodeExplanation = AUTHEXP_DHGROUP_UNUSABLE;
4918
4919 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4925 "emlxs_rcv_auth_msg_unmapped_node: payload(13)=0x%x",
4920 "rcv_auth_msg_unmapped_node: payload(13)=0x%x",
4926 (*(uint32_t *)temp));
4927
4928 goto AUTH_Reject;
4929 } else if (rc == 2) {
4930 ReasonCode = AUTHRJT_FAILURE;
4931 ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD;
4932
4933 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4921 (*(uint32_t *)temp));
4922
4923 goto AUTH_Reject;
4924 } else if (rc == 2) {
4925 ReasonCode = AUTHRJT_FAILURE;
4926 ReasonCodeExplanation = AUTHEXP_BAD_PAYLOAD;
4927
4928 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4934 "emlxs_rcv_auth_msg_unmapped_node: payload(14)=0x%x",
4929 "rcv_auth_msg_unmapped_node: payload(14)=0x%x",
4935 (*(uint32_t *)temp));
4936
4937 goto AUTH_Reject;
4938 }
4939 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4930 (*(uint32_t *)temp));
4931
4932 goto AUTH_Reject;
4933 }
4934 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4940 "emlxs_rcv_auth_msg_unmapped_node: 0x%x 0x%x 0x%x 0x%x 0x%x",
4935 "rcv_auth_msg_unmapped_node: 0x%x 0x%x 0x%x 0x%x 0x%x",
4941 hash_id, dhgp_id, msg->auth_msg_code, msglen, msg->tran_id);
4942
4943 /*
4944 * since ndlp is the initiator, tran_id is store in
4945 * nlp_auth_tranid_ini
4946 */
4947 node_dhc->nlp_auth_tranid_ini = LE_SWAP32(msg->tran_id);
4948

--- 16 unchanged lines hidden (view full) ---

4965 * as the auth initiator, host should reply to the received
4966 * AUTH_Negotiate message with an AUTH_Reject message with
4967 * Reason Code 'Logical Error' and Reason Code Explanation
4968 * 'Authentication Transaction Already Started'.
4969 */
4970 if (node_dhc->nlp_reauth_status ==
4971 NLP_HOST_REAUTH_IN_PROGRESS) {
4972 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4936 hash_id, dhgp_id, msg->auth_msg_code, msglen, msg->tran_id);
4937
4938 /*
4939 * since ndlp is the initiator, tran_id is store in
4940 * nlp_auth_tranid_ini
4941 */
4942 node_dhc->nlp_auth_tranid_ini = LE_SWAP32(msg->tran_id);
4943

--- 16 unchanged lines hidden (view full) ---

4960 * as the auth initiator, host should reply to the received
4961 * AUTH_Negotiate message with an AUTH_Reject message with
4962 * Reason Code 'Logical Error' and Reason Code Explanation
4963 * 'Authentication Transaction Already Started'.
4964 */
4965 if (node_dhc->nlp_reauth_status ==
4966 NLP_HOST_REAUTH_IN_PROGRESS) {
4967 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4973 "emlxs_rcv_auth_msg_unmapped_node: Ht reauth inprgress.");
4968 "rcv_auth_msg_unmapped_node: Ht reauth inprgress.");
4974
4975 ReasonCode = AUTHRJT_LOGIC_ERR;
4976 ReasonCodeExplanation = AUTHEXP_AUTHTRAN_STARTED;
4977
4978 goto AUTH_Reject;
4979 }
4980 /* Send back the DHCHAP_Challenge with the proper paramaters */
4981 if (emlxs_issue_dhchap_challenge(port, ndlp, 0, tmp,

--- 66 unchanged lines hidden (view full) ---

5048 dhgp_id = node_dhc->dhgp_id;
5049 } else {
5050 remote_key = (char *)node_dhc->auth_key.remote_password;
5051 hash_id = node_dhc->nlp_auth_hashid;
5052 dhgp_id = node_dhc->nlp_auth_dhgpid;
5053 }
5054
5055 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
4969
4970 ReasonCode = AUTHRJT_LOGIC_ERR;
4971 ReasonCodeExplanation = AUTHEXP_AUTHTRAN_STARTED;
4972
4973 goto AUTH_Reject;
4974 }
4975 /* Send back the DHCHAP_Challenge with the proper paramaters */
4976 if (emlxs_issue_dhchap_challenge(port, ndlp, 0, tmp,

--- 66 unchanged lines hidden (view full) ---

5043 dhgp_id = node_dhc->dhgp_id;
5044 } else {
5045 remote_key = (char *)node_dhc->auth_key.remote_password;
5046 hash_id = node_dhc->nlp_auth_hashid;
5047 dhgp_id = node_dhc->nlp_auth_dhgpid;
5048 }
5049
5050 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
5056 "emlxs_hash_vrf: 0x%x 0x%x 0x%x tran_id=0x%x",
5051 "hash_vrf: 0x%x 0x%x 0x%x tran_id=0x%x",
5057 ndlp->nlp_DID, hash_id, dhgp_id, mytran_id);
5058
5059 if (dhgp_id == 0) {
5060 /* NULL DHCHAP */
5061 if (hash_id == AUTH_MD5) {
5062 bzero(&mdctx, sizeof (MD5_CTX));
5063
5064 hash_size = MD5_LEN;

--- 193 unchanged lines hidden (view full) ---

5258 hash_id = node_dhc->nlp_auth_hashid;
5259 dhgp_id = node_dhc->nlp_auth_dhgpid;
5260 }
5261
5262 tran_id = (AUTH_TRAN_ID_MASK & tran_id);
5263 mytran_id = (uint8_t)(LE_SWAP32(tran_id));
5264
5265 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
5052 ndlp->nlp_DID, hash_id, dhgp_id, mytran_id);
5053
5054 if (dhgp_id == 0) {
5055 /* NULL DHCHAP */
5056 if (hash_id == AUTH_MD5) {
5057 bzero(&mdctx, sizeof (MD5_CTX));
5058
5059 hash_size = MD5_LEN;

--- 193 unchanged lines hidden (view full) ---

5253 hash_id = node_dhc->nlp_auth_hashid;
5254 dhgp_id = node_dhc->nlp_auth_dhgpid;
5255 }
5256
5257 tran_id = (AUTH_TRAN_ID_MASK & tran_id);
5258 mytran_id = (uint8_t)(LE_SWAP32(tran_id));
5259
5260 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
5266 "emlxs_hash_rsp: 0x%x 0x%x 0x%x 0x%x dhvallen=0x%x",
5261 "hash_rsp: 0x%x 0x%x 0x%x 0x%x dhvallen=0x%x",
5267 ndlp->nlp_DID, hash_id, dhgp_id, mytran_id, dhvallen);
5268
5269 if (ndlp->nlp_DID == FABRIC_DID) {
5270 mykey = (char *)node_dhc->auth_key.local_password;
5271
5272 } else {
5273 mykey = (char *)node_dhc->auth_key.local_password;
5274 }

--- 283 unchanged lines hidden (view full) ---

5558 * compute a^e mod n assume a < n, n odd, result->value at least as
5559 * long as n->value.
5560 *
5561 * a is the public key received from responder. e is the private key
5562 * generated by me. n is the wellknown modulus.
5563 */
5564
5565 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
5262 ndlp->nlp_DID, hash_id, dhgp_id, mytran_id, dhvallen);
5263
5264 if (ndlp->nlp_DID == FABRIC_DID) {
5265 mykey = (char *)node_dhc->auth_key.local_password;
5266
5267 } else {
5268 mykey = (char *)node_dhc->auth_key.local_password;
5269 }

--- 283 unchanged lines hidden (view full) ---

5553 * compute a^e mod n assume a < n, n odd, result->value at least as
5554 * long as n->value.
5555 *
5556 * a is the public key received from responder. e is the private key
5557 * generated by me. n is the wellknown modulus.
5558 */
5559
5560 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
5566 "emlxs_BIGNUM_get_pubkey: 0x%x 0x%x 0x%x 0x%x",
5561 "BIGNUM_get_pubkey: 0x%x 0x%x 0x%x 0x%x",
5567 ndlp->nlp_DID, *dhvallen, hash_size, dhgp_id);
5568
5569 /* size should be in the unit of (BIG_CHUNK_TYPE) words */
5570 if (big_init(&a, CHARLEN2BIGNUMLEN(*dhvallen)) != BIG_OK) {
5571 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5562 ndlp->nlp_DID, *dhvallen, hash_size, dhgp_id);
5563
5564 /* size should be in the unit of (BIG_CHUNK_TYPE) words */
5565 if (big_init(&a, CHARLEN2BIGNUMLEN(*dhvallen)) != BIG_OK) {
5566 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5572 "emlxs_BIGNUM_get_pubkey: big_init failed. a size=%d",
5567 "BIGNUM_get_pubkey: big_init failed. a size=%d",
5573 CHARLEN2BIGNUMLEN(*dhvallen));
5574
5575 err = BIG_NO_MEM;
5576 return (err);
5577 }
5578 /* a: (g^x mod p) */
5579 /*
5580 * dhval is in big-endian format. This call converts from
5581 * byte-big-endian format to big number format (words in little
5582 * endian order, but bytes within the words big endian)
5583 */
5584 bytestring2bignum(&a, (unsigned char *)dhval, *dhvallen);
5585
5586 if (big_init(&e, CHARLEN2BIGNUMLEN(hash_size)) != BIG_OK) {
5587 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5568 CHARLEN2BIGNUMLEN(*dhvallen));
5569
5570 err = BIG_NO_MEM;
5571 return (err);
5572 }
5573 /* a: (g^x mod p) */
5574 /*
5575 * dhval is in big-endian format. This call converts from
5576 * byte-big-endian format to big number format (words in little
5577 * endian order, but bytes within the words big endian)
5578 */
5579 bytestring2bignum(&a, (unsigned char *)dhval, *dhvallen);
5580
5581 if (big_init(&e, CHARLEN2BIGNUMLEN(hash_size)) != BIG_OK) {
5582 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5588 "emlxs_BIGNUM_get_pubkey: big_init failed. e size=%d",
5583 "BIGNUM_get_pubkey: big_init failed. e size=%d",
5589 CHARLEN2BIGNUMLEN(hash_size));
5590
5591 err = BIG_NO_MEM;
5592 goto ret1;
5593 }
5594#ifdef RAND
5595
5596 bzero(&random_number, hash_size);

--- 42 unchanged lines hidden (view full) ---

5639 case GROUP_2048:
5640 plen = 256;
5641 tmp = dhgp4_pVal;
5642 break;
5643 }
5644
5645 if (big_init(&n, CHARLEN2BIGNUMLEN(plen)) != BIG_OK) {
5646 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5584 CHARLEN2BIGNUMLEN(hash_size));
5585
5586 err = BIG_NO_MEM;
5587 goto ret1;
5588 }
5589#ifdef RAND
5590
5591 bzero(&random_number, hash_size);

--- 42 unchanged lines hidden (view full) ---

5634 case GROUP_2048:
5635 plen = 256;
5636 tmp = dhgp4_pVal;
5637 break;
5638 }
5639
5640 if (big_init(&n, CHARLEN2BIGNUMLEN(plen)) != BIG_OK) {
5641 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5647 "emlxs_BIGNUM_get_pubkey: big_init failed. n size=%d",
5642 "BIGNUM_get_pubkey: big_init failed. n size=%d",
5648 CHARLEN2BIGNUMLEN(plen));
5649 err = BIG_NO_MEM;
5650 goto ret2;
5651 }
5652 bytestring2bignum(&n, (unsigned char *)tmp, plen);
5653
5654 if (big_init(&result, CHARLEN2BIGNUMLEN(512)) != BIG_OK) {
5655 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5643 CHARLEN2BIGNUMLEN(plen));
5644 err = BIG_NO_MEM;
5645 goto ret2;
5646 }
5647 bytestring2bignum(&n, (unsigned char *)tmp, plen);
5648
5649 if (big_init(&result, CHARLEN2BIGNUMLEN(512)) != BIG_OK) {
5650 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5656 "emlxs_BIGNUM_get_pubkey: big_init failed. result size=%d",
5651 "BIGNUM_get_pubkey: big_init failed. result size=%d",
5657 CHARLEN2BIGNUMLEN(512));
5658
5659 err = BIG_NO_MEM;
5660 goto ret3;
5661 }
5662 if (big_cmp_abs(&a, &n) > 0) {
5663 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5652 CHARLEN2BIGNUMLEN(512));
5653
5654 err = BIG_NO_MEM;
5655 goto ret3;
5656 }
5657 if (big_cmp_abs(&a, &n) > 0) {
5658 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5664 "emlxs_BIGNUM_get_pubkey: big_cmp_abs error.");
5659 "BIGNUM_get_pubkey: big_cmp_abs error.");
5665 err = BIG_GENERAL_ERR;
5666 goto ret4;
5667 }
5668 /* perform computation on big numbers to get seskey */
5669 /* a^e mod n */
5670 /* i.e., (g^x mod p)^y mod p */
5671
5672 if (big_modexp(&result, &a, &e, &n, NULL) != BIG_OK) {
5673 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5660 err = BIG_GENERAL_ERR;
5661 goto ret4;
5662 }
5663 /* perform computation on big numbers to get seskey */
5664 /* a^e mod n */
5665 /* i.e., (g^x mod p)^y mod p */
5666
5667 if (big_modexp(&result, &a, &e, &n, NULL) != BIG_OK) {
5668 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5674 "emlxs_BIGNUM_get_pubkey: big_modexp result error");
5669 "BIGNUM_get_pubkey: big_modexp result error");
5675 err = BIG_NO_MEM;
5676 goto ret4;
5677 }
5678 /* convert big number ses_key to bytestring */
5679 if (ndlp->nlp_DID == FABRIC_DID) {
5680 /*
5681 * This call converts from big number format to
5682 * byte-big-endian format. big number format is words in

--- 13 unchanged lines hidden (view full) ---

5696 /* for end-to-end auth */
5697 bignum2bytestring(node_dhc->nlp_auth_misc.ses_key, &result,
5698 sizeof (BIG_CHUNK_TYPE) * (result.len));
5699 node_dhc->nlp_auth_misc.seskey_len =
5700 sizeof (BIG_CHUNK_TYPE) * (result.len);
5701 }
5702
5703 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
5670 err = BIG_NO_MEM;
5671 goto ret4;
5672 }
5673 /* convert big number ses_key to bytestring */
5674 if (ndlp->nlp_DID == FABRIC_DID) {
5675 /*
5676 * This call converts from big number format to
5677 * byte-big-endian format. big number format is words in

--- 13 unchanged lines hidden (view full) ---

5691 /* for end-to-end auth */
5692 bignum2bytestring(node_dhc->nlp_auth_misc.ses_key, &result,
5693 sizeof (BIG_CHUNK_TYPE) * (result.len));
5694 node_dhc->nlp_auth_misc.seskey_len =
5695 sizeof (BIG_CHUNK_TYPE) * (result.len);
5696 }
5697
5698 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
5704 "emlxs_BIGNUM_get_pubkey: after seskey cal: 0x%x 0x%x 0x%x",
5699 "BIGNUM_get_pubkey: after seskey cal: 0x%x 0x%x 0x%x",
5705 node_dhc->nlp_auth_misc.seskey_len, result.size, result.len);
5706
5707
5708 /* to get pub_key: g^y mod p, g is 2 */
5709
5710 if (big_init(&g, 1) != BIG_OK) {
5711 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5700 node_dhc->nlp_auth_misc.seskey_len, result.size, result.len);
5701
5702
5703 /* to get pub_key: g^y mod p, g is 2 */
5704
5705 if (big_init(&g, 1) != BIG_OK) {
5706 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5712 "emlxs_BIGNUM_get_pubkey: big_init failed. g size=1");
5707 "BIGNUM_get_pubkey: big_init failed. g size=1");
5713
5714 err = BIG_NO_MEM;
5715 goto ret4;
5716 }
5717 if (big_init(&result1, CHARLEN2BIGNUMLEN(512)) != BIG_OK) {
5718 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5708
5709 err = BIG_NO_MEM;
5710 goto ret4;
5711 }
5712 if (big_init(&result1, CHARLEN2BIGNUMLEN(512)) != BIG_OK) {
5713 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5719 "emlxs_BIGNUM_get_pubkey: big_init failed. result1 size=%d",
5714 "BIGNUM_get_pubkey: big_init failed. result1 size=%d",
5720 CHARLEN2BIGNUMLEN(512));
5721 err = BIG_NO_MEM;
5722 goto ret5;
5723 }
5724
5725 bytestring2bignum(&g,
5726 (unsigned char *)&gen, sizeof (BIG_CHUNK_TYPE));
5727
5728 if (big_modexp(&result1, &g, &e, &n, NULL) != BIG_OK) {
5729 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5715 CHARLEN2BIGNUMLEN(512));
5716 err = BIG_NO_MEM;
5717 goto ret5;
5718 }
5719
5720 bytestring2bignum(&g,
5721 (unsigned char *)&gen, sizeof (BIG_CHUNK_TYPE));
5722
5723 if (big_modexp(&result1, &g, &e, &n, NULL) != BIG_OK) {
5724 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5730 "emlxs_BIGNUM_get_pubkey: big_modexp result1 error");
5725 "BIGNUM_get_pubkey: big_modexp result1 error");
5731 err = BIG_NO_MEM;
5732 goto ret6;
5733 }
5734 /* convert big number pub_key to bytestring */
5735 if (ndlp->nlp_DID == FABRIC_DID) {
5736
5737 bignum2bytestring(node_dhc->pub_key, &result1,
5738 sizeof (BIG_CHUNK_TYPE) * (result1.len));

--- 9 unchanged lines hidden (view full) ---

5748 /* for end-to-end auth */
5749 bignum2bytestring(node_dhc->nlp_auth_misc.pub_key, &result1,
5750 sizeof (BIG_CHUNK_TYPE) * (result1.len));
5751 node_dhc->nlp_auth_misc.pubkey_len =
5752 (result1.len) * sizeof (BIG_CHUNK_TYPE);
5753 }
5754
5755 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
5726 err = BIG_NO_MEM;
5727 goto ret6;
5728 }
5729 /* convert big number pub_key to bytestring */
5730 if (ndlp->nlp_DID == FABRIC_DID) {
5731
5732 bignum2bytestring(node_dhc->pub_key, &result1,
5733 sizeof (BIG_CHUNK_TYPE) * (result1.len));

--- 9 unchanged lines hidden (view full) ---

5743 /* for end-to-end auth */
5744 bignum2bytestring(node_dhc->nlp_auth_misc.pub_key, &result1,
5745 sizeof (BIG_CHUNK_TYPE) * (result1.len));
5746 node_dhc->nlp_auth_misc.pubkey_len =
5747 (result1.len) * sizeof (BIG_CHUNK_TYPE);
5748 }
5749
5750 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
5756 "emlxs_BIGNUM_get_pubkey: after pubkey cal: 0x%x 0x%x 0x%x",
5751 "BIGNUM_get_pubkey: after pubkey cal: 0x%x 0x%x 0x%x",
5757 node_dhc->nlp_auth_misc.pubkey_len, result1.size, result1.len);
5758
5759
5760ret6:
5761 big_finish(&result1);
5762ret5:
5763 big_finish(&g);
5764ret4:

--- 34 unchanged lines hidden (view full) ---

5799 uint8_t gen[] = {0x00, 0x00, 0x00, 0x02};
5800#else
5801 uint8_t gen[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02};
5802#endif /* BIGNUM_CHUNK_32 */
5803
5804 BIG_ERR_CODE err = BIG_OK;
5805
5806 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
5752 node_dhc->nlp_auth_misc.pubkey_len, result1.size, result1.len);
5753
5754
5755ret6:
5756 big_finish(&result1);
5757ret5:
5758 big_finish(&g);
5759ret4:

--- 34 unchanged lines hidden (view full) ---

5794 uint8_t gen[] = {0x00, 0x00, 0x00, 0x02};
5795#else
5796 uint8_t gen[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02};
5797#endif /* BIGNUM_CHUNK_32 */
5798
5799 BIG_ERR_CODE err = BIG_OK;
5800
5801 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
5807 "emlxs_BIGNUM_get_dhval: did=0x%x privkey_len=0x%x dhgp_id=0x%x",
5802 "BIGNUM_get_dhval: did=0x%x privkey_len=0x%x dhgp_id=0x%x",
5808 ndlp->nlp_DID, privkey_len, dhgp_id);
5809
5810 if (big_init(&result1, CHARLEN2BIGNUMLEN(512)) != BIG_OK) {
5811 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5803 ndlp->nlp_DID, privkey_len, dhgp_id);
5804
5805 if (big_init(&result1, CHARLEN2BIGNUMLEN(512)) != BIG_OK) {
5806 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5812 "emlxs_BIGNUM_get_dhval: big_init failed. result1 size=%d",
5807 "BIGNUM_get_dhval: big_init failed. result1 size=%d",
5813 CHARLEN2BIGNUMLEN(512));
5814
5815 err = BIG_NO_MEM;
5816 return (err);
5817 }
5818 if (big_init(&g, 1) != BIG_OK) {
5819 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5808 CHARLEN2BIGNUMLEN(512));
5809
5810 err = BIG_NO_MEM;
5811 return (err);
5812 }
5813 if (big_init(&g, 1) != BIG_OK) {
5814 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5820 "emlxs_BIGNUM_get_dhval: big_init failed. g size=1");
5815 "BIGNUM_get_dhval: big_init failed. g size=1");
5821
5822 err = BIG_NO_MEM;
5823 goto ret1;
5824 }
5825 /* get g */
5826 bytestring2bignum(&g, (unsigned char *)gen, sizeof (BIG_CHUNK_TYPE));
5827
5828 if (big_init(&e, CHARLEN2BIGNUMLEN(privkey_len)) != BIG_OK) {
5829 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5816
5817 err = BIG_NO_MEM;
5818 goto ret1;
5819 }
5820 /* get g */
5821 bytestring2bignum(&g, (unsigned char *)gen, sizeof (BIG_CHUNK_TYPE));
5822
5823 if (big_init(&e, CHARLEN2BIGNUMLEN(privkey_len)) != BIG_OK) {
5824 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5830 "emlxs_BIGNUM_get_dhval: big_init failed. e size=%d",
5825 "BIGNUM_get_dhval: big_init failed. e size=%d",
5831 CHARLEN2BIGNUMLEN(privkey_len));
5832
5833 err = BIG_NO_MEM;
5834 goto ret2;
5835 }
5836 /* get x */
5837 bytestring2bignum(&e, (unsigned char *)priv_key, privkey_len);
5838

--- 16 unchanged lines hidden (view full) ---

5855 case GROUP_2048:
5856 plen = 256;
5857 tmp = dhgp4_pVal;
5858 break;
5859 }
5860
5861 if (big_init(&n, CHARLEN2BIGNUMLEN(plen)) != BIG_OK) {
5862 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5826 CHARLEN2BIGNUMLEN(privkey_len));
5827
5828 err = BIG_NO_MEM;
5829 goto ret2;
5830 }
5831 /* get x */
5832 bytestring2bignum(&e, (unsigned char *)priv_key, privkey_len);
5833

--- 16 unchanged lines hidden (view full) ---

5850 case GROUP_2048:
5851 plen = 256;
5852 tmp = dhgp4_pVal;
5853 break;
5854 }
5855
5856 if (big_init(&n, CHARLEN2BIGNUMLEN(plen)) != BIG_OK) {
5857 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5863 "emlxs_BIGNUM_get_dhval: big_init failed. n size=%d",
5858 "BIGNUM_get_dhval: big_init failed. n size=%d",
5864 CHARLEN2BIGNUMLEN(plen));
5865
5866 err = BIG_NO_MEM;
5867 goto ret3;
5868 }
5869 /* get p */
5870 bytestring2bignum(&n, (unsigned char *)tmp, plen);
5871
5872 /* to cal: (g^x mod p) */
5873 if (big_modexp(&result1, &g, &e, &n, NULL) != BIG_OK) {
5874 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5859 CHARLEN2BIGNUMLEN(plen));
5860
5861 err = BIG_NO_MEM;
5862 goto ret3;
5863 }
5864 /* get p */
5865 bytestring2bignum(&n, (unsigned char *)tmp, plen);
5866
5867 /* to cal: (g^x mod p) */
5868 if (big_modexp(&result1, &g, &e, &n, NULL) != BIG_OK) {
5869 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5875 "emlxs_BIGNUM_get_dhval: big_modexp result1 error");
5870 "BIGNUM_get_dhval: big_modexp result1 error");
5876
5877 err = BIG_GENERAL_ERR;
5878 goto ret4;
5879 }
5880 /* convert big number pub_key to bytestring */
5881 if (ndlp->nlp_DID == FABRIC_DID) {
5882 bignum2bytestring(node_dhc->hrsp_pub_key, &result1,
5883 sizeof (BIG_CHUNK_TYPE) * (result1.len));

--- 57 unchanged lines hidden (view full) ---

5941 uint32_t *pubkeylen)
5942{
5943 BIGNUM a, e, n, result;
5944 uint32_t plen;
5945 unsigned char *tmp = NULL;
5946 BIG_ERR_CODE err = BIG_OK;
5947
5948 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
5871
5872 err = BIG_GENERAL_ERR;
5873 goto ret4;
5874 }
5875 /* convert big number pub_key to bytestring */
5876 if (ndlp->nlp_DID == FABRIC_DID) {
5877 bignum2bytestring(node_dhc->hrsp_pub_key, &result1,
5878 sizeof (BIG_CHUNK_TYPE) * (result1.len));

--- 57 unchanged lines hidden (view full) ---

5936 uint32_t *pubkeylen)
5937{
5938 BIGNUM a, e, n, result;
5939 uint32_t plen;
5940 unsigned char *tmp = NULL;
5941 BIG_ERR_CODE err = BIG_OK;
5942
5943 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
5949 "emlxs_BIGNUM_pubkey: dhvallen=0x%x dhgp_id=0x%x",
5944 "BIGNUM_pubkey: dhvallen=0x%x dhgp_id=0x%x",
5950 dhvallen, dhgp_id);
5951
5952 if (big_init(&a, CHARLEN2BIGNUMLEN(dhvallen)) != BIG_OK) {
5953 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5945 dhvallen, dhgp_id);
5946
5947 if (big_init(&a, CHARLEN2BIGNUMLEN(dhvallen)) != BIG_OK) {
5948 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5954 "emlxs_BIGNUM_pubkey: big_init failed. a size=%d",
5949 "BIGNUM_pubkey: big_init failed. a size=%d",
5955 CHARLEN2BIGNUMLEN(dhvallen));
5956
5957 err = BIG_NO_MEM;
5958 return (err);
5959 }
5960 /* get g^y mod p */
5961 bytestring2bignum(&a, (unsigned char *)dhval, dhvallen);
5962
5963 if (big_init(&e, CHARLEN2BIGNUMLEN(key_size)) != BIG_OK) {
5964 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5950 CHARLEN2BIGNUMLEN(dhvallen));
5951
5952 err = BIG_NO_MEM;
5953 return (err);
5954 }
5955 /* get g^y mod p */
5956 bytestring2bignum(&a, (unsigned char *)dhval, dhvallen);
5957
5958 if (big_init(&e, CHARLEN2BIGNUMLEN(key_size)) != BIG_OK) {
5959 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5965 "emlxs_BIGNUM_pubkey: big_init failed. e size=%d",
5960 "BIGNUM_pubkey: big_init failed. e size=%d",
5966 CHARLEN2BIGNUMLEN(key_size));
5967
5968 err = BIG_NO_MEM;
5969 goto ret1;
5970 }
5971 /* get x */
5972 bytestring2bignum(&e, (unsigned char *)key, key_size);
5973

--- 16 unchanged lines hidden (view full) ---

5990 case GROUP_2048:
5991 plen = 256;
5992 tmp = dhgp4_pVal;
5993 break;
5994 }
5995
5996 if (big_init(&n, CHARLEN2BIGNUMLEN(plen)) != BIG_OK) {
5997 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5961 CHARLEN2BIGNUMLEN(key_size));
5962
5963 err = BIG_NO_MEM;
5964 goto ret1;
5965 }
5966 /* get x */
5967 bytestring2bignum(&e, (unsigned char *)key, key_size);
5968

--- 16 unchanged lines hidden (view full) ---

5985 case GROUP_2048:
5986 plen = 256;
5987 tmp = dhgp4_pVal;
5988 break;
5989 }
5990
5991 if (big_init(&n, CHARLEN2BIGNUMLEN(plen)) != BIG_OK) {
5992 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5998 "emlxs_BIGNUM_pubkey: big_init failed. n size=%d",
5993 "BIGNUM_pubkey: big_init failed. n size=%d",
5999 CHARLEN2BIGNUMLEN(plen));
6000
6001 err = BIG_NO_MEM;
6002 goto ret2;
6003 }
6004 bytestring2bignum(&n, (unsigned char *)tmp, plen);
6005
6006 if (big_init(&result, CHARLEN2BIGNUMLEN(512)) != BIG_OK) {
6007 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
5994 CHARLEN2BIGNUMLEN(plen));
5995
5996 err = BIG_NO_MEM;
5997 goto ret2;
5998 }
5999 bytestring2bignum(&n, (unsigned char *)tmp, plen);
6000
6001 if (big_init(&result, CHARLEN2BIGNUMLEN(512)) != BIG_OK) {
6002 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6008 "emlxs_BIGNUM_pubkey: big_init failed. result size=%d",
6003 "BIGNUM_pubkey: big_init failed. result size=%d",
6009 CHARLEN2BIGNUMLEN(512));
6010
6011 err = BIG_NO_MEM;
6012 goto ret3;
6013 }
6014 if (big_cmp_abs(&a, &n) > 0) {
6015 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6004 CHARLEN2BIGNUMLEN(512));
6005
6006 err = BIG_NO_MEM;
6007 goto ret3;
6008 }
6009 if (big_cmp_abs(&a, &n) > 0) {
6010 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6016 "emlxs_BIGNUM_pubkey: big_cmp_abs error");
6011 "BIGNUM_pubkey: big_cmp_abs error");
6017
6018 err = BIG_GENERAL_ERR;
6019 goto ret4;
6020 }
6021 if (big_modexp(&result, &a, &e, &n, NULL) != BIG_OK) {
6022 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6012
6013 err = BIG_GENERAL_ERR;
6014 goto ret4;
6015 }
6016 if (big_modexp(&result, &a, &e, &n, NULL) != BIG_OK) {
6017 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6023 "emlxs_BIGNUM_pubkey: big_modexp result error");
6018 "BIGNUM_pubkey: big_modexp result error");
6024
6025 err = BIG_NO_MEM;
6026 goto ret4;
6027 }
6028 bignum2bytestring(pubkey, &result,
6029 sizeof (BIG_CHUNK_TYPE) * (result.len));
6030 *pubkeylen = sizeof (BIG_CHUNK_TYPE) * (result.len);
6031

--- 42 unchanged lines hidden (view full) ---

6074 uint8_t md5_digest[16];
6075 uint8_t pubkey[512];
6076 uint32_t pubkey_len = 0;
6077 uint32_t key_size;
6078 BIG_ERR_CODE err = BIG_OK;
6079
6080 key_size = cval_len;
6081 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
6019
6020 err = BIG_NO_MEM;
6021 goto ret4;
6022 }
6023 bignum2bytestring(pubkey, &result,
6024 sizeof (BIG_CHUNK_TYPE) * (result.len));
6025 *pubkeylen = sizeof (BIG_CHUNK_TYPE) * (result.len);
6026

--- 42 unchanged lines hidden (view full) ---

6069 uint8_t md5_digest[16];
6070 uint8_t pubkey[512];
6071 uint32_t pubkey_len = 0;
6072 uint32_t key_size;
6073 BIG_ERR_CODE err = BIG_OK;
6074
6075 key_size = cval_len;
6076 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
6082 "emlxs_hash_Cai: 0x%x 0x%x 0x%x 0x%x 0x%x",
6077 "hash_Cai: 0x%x 0x%x 0x%x 0x%x 0x%x",
6083 ndlp->nlp_DID, hash_id, dhgp_id, tran_id, dhvallen);
6084
6085 if (hash_id == AUTH_MD5) {
6086 bzero(&mdctx, sizeof (MD5_CTX));
6087 MD5Init(&mdctx);
6088 MD5Update(&mdctx, (unsigned char *)cval, cval_len);
6089
6090 /* this pubkey obtained is actually the session key */
6091 /*
6092 * pubkey: ((g^y mod p)^x mod p)
6093 */
6094 err = emlxs_BIGNUM_pubkey(port, pubkey, dhval, dhvallen,
6095 key, key_size, dhgp_id, &pubkey_len);
6096
6097 if (err != BIG_OK) {
6098 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6078 ndlp->nlp_DID, hash_id, dhgp_id, tran_id, dhvallen);
6079
6080 if (hash_id == AUTH_MD5) {
6081 bzero(&mdctx, sizeof (MD5_CTX));
6082 MD5Init(&mdctx);
6083 MD5Update(&mdctx, (unsigned char *)cval, cval_len);
6084
6085 /* this pubkey obtained is actually the session key */
6086 /*
6087 * pubkey: ((g^y mod p)^x mod p)
6088 */
6089 err = emlxs_BIGNUM_pubkey(port, pubkey, dhval, dhvallen,
6090 key, key_size, dhgp_id, &pubkey_len);
6091
6092 if (err != BIG_OK) {
6093 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6099 "emlxs_hash_Cai: MD5 BIGNUM_pubkey error: 0x%x",
6094 "hash_Cai: MD5 BIGNUM_pubkey error: 0x%x",
6100 err);
6101
6102 err = BIG_GENERAL_ERR;
6103 return (err);
6104 }
6105 if (pubkey_len == 0) {
6106 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6095 err);
6096
6097 err = BIG_GENERAL_ERR;
6098 return (err);
6099 }
6100 if (pubkey_len == 0) {
6101 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6107 "emlxs_hash_Cai: MD5 BIGNUM_pubkey error: len=0");
6102 "hash_Cai: MD5 BIGNUM_pubkey error: len=0");
6108
6109 err = BIG_GENERAL_ERR;
6110 return (err);
6111 }
6112 if (ndlp->nlp_DID == FABRIC_DID) {
6113 bcopy((void *)pubkey,
6114 (void *)node_dhc->hrsp_ses_key, pubkey_len);
6115 node_dhc->hrsp_seskey_len = pubkey_len;

--- 21 unchanged lines hidden (view full) ---

6137
6138 SHA1Update(&sha1ctx, (void *)cval, cval_len);
6139
6140 err = emlxs_BIGNUM_pubkey(port, pubkey, dhval, dhvallen,
6141 key, key_size, dhgp_id, &pubkey_len);
6142
6143 if (err != BIG_OK) {
6144 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6103
6104 err = BIG_GENERAL_ERR;
6105 return (err);
6106 }
6107 if (ndlp->nlp_DID == FABRIC_DID) {
6108 bcopy((void *)pubkey,
6109 (void *)node_dhc->hrsp_ses_key, pubkey_len);
6110 node_dhc->hrsp_seskey_len = pubkey_len;

--- 21 unchanged lines hidden (view full) ---

6132
6133 SHA1Update(&sha1ctx, (void *)cval, cval_len);
6134
6135 err = emlxs_BIGNUM_pubkey(port, pubkey, dhval, dhvallen,
6136 key, key_size, dhgp_id, &pubkey_len);
6137
6138 if (err != BIG_OK) {
6139 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6145 "emlxs_hash_Cai: SHA1 BIGNUM_pubkey error: 0x%x",
6140 "hash_Cai: SHA1 BIGNUM_pubkey error: 0x%x",
6146 err);
6147
6148 err = BIG_GENERAL_ERR;
6149 return (err);
6150 }
6151 if (pubkey_len == 0) {
6152 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6141 err);
6142
6143 err = BIG_GENERAL_ERR;
6144 return (err);
6145 }
6146 if (pubkey_len == 0) {
6147 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6153 "emlxs_hash_Cai: SA1 BUM_pubkey error: key_len=0");
6148 "hash_Cai: SA1 BUM_pubkey error: key_len=0");
6154
6155 err = BIG_GENERAL_ERR;
6156 return (err);
6157 }
6158 if (ndlp->nlp_DID == FABRIC_DID) {
6159 bcopy((void *)pubkey,
6160 (void *)node_dhc->hrsp_ses_key,
6161 pubkey_len);

--- 80 unchanged lines hidden (view full) ---

6242 dhgp_id = node_dhc->dhgp_id;
6243 hash_id = node_dhc->hash_id;
6244 } else {
6245 dhgp_id = node_dhc->nlp_auth_dhgpid;
6246 hash_id = node_dhc->nlp_auth_hashid;
6247 }
6248
6249 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
6149
6150 err = BIG_GENERAL_ERR;
6151 return (err);
6152 }
6153 if (ndlp->nlp_DID == FABRIC_DID) {
6154 bcopy((void *)pubkey,
6155 (void *)node_dhc->hrsp_ses_key,
6156 pubkey_len);

--- 80 unchanged lines hidden (view full) ---

6237 dhgp_id = node_dhc->dhgp_id;
6238 hash_id = node_dhc->hash_id;
6239 } else {
6240 dhgp_id = node_dhc->nlp_auth_dhgpid;
6241 hash_id = node_dhc->nlp_auth_hashid;
6242 }
6243
6244 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
6250 "emlxs_hash_verification: 0x%x 0x%x hash_id=0x%x dhgp_id=0x%x",
6245 "hash_verification: 0x%x 0x%x hash_id=0x%x dhgp_id=0x%x",
6251 ndlp->nlp_DID, mytran_id, hash_id, dhgp_id);
6252
6253 if (dhval_len == 0) {
6254 /* NULL DHCHAP group */
6255 if (hash_id == AUTH_MD5) {
6256 bzero(&mdctx, sizeof (MD5_CTX));
6257 hash_size = MD5_LEN;
6258 MD5Init(&mdctx);

--- 21 unchanged lines hidden (view full) ---

6280 }
6281
6282 MD5Final((uint8_t *)md5_digest, &mdctx);
6283
6284 hash_val = (uint32_t *)kmem_alloc(hash_size,
6285 KM_NOSLEEP);
6286 if (hash_val == NULL) {
6287 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6246 ndlp->nlp_DID, mytran_id, hash_id, dhgp_id);
6247
6248 if (dhval_len == 0) {
6249 /* NULL DHCHAP group */
6250 if (hash_id == AUTH_MD5) {
6251 bzero(&mdctx, sizeof (MD5_CTX));
6252 hash_size = MD5_LEN;
6253 MD5Init(&mdctx);

--- 21 unchanged lines hidden (view full) ---

6275 }
6276
6277 MD5Final((uint8_t *)md5_digest, &mdctx);
6278
6279 hash_val = (uint32_t *)kmem_alloc(hash_size,
6280 KM_NOSLEEP);
6281 if (hash_val == NULL) {
6282 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6288 "emlxs_hash_verification: alloc failed");
6283 "hash_verification: alloc failed");
6289
6290 return (NULL);
6291 } else {
6292 bcopy((void *)md5_digest,
6293 (void *)hash_val, MD5_LEN);
6294 }
6295 }
6296 if (hash_id == AUTH_SHA1) {

--- 20 unchanged lines hidden (view full) ---

6317 SHA1_LEN);
6318 }
6319
6320 SHA1Final((void *)sha1_digest, &sha1ctx);
6321 hash_val = (uint32_t *)kmem_zalloc(hash_size,
6322 KM_NOSLEEP);
6323 if (hash_val == NULL) {
6324 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6284
6285 return (NULL);
6286 } else {
6287 bcopy((void *)md5_digest,
6288 (void *)hash_val, MD5_LEN);
6289 }
6290 }
6291 if (hash_id == AUTH_SHA1) {

--- 20 unchanged lines hidden (view full) ---

6312 SHA1_LEN);
6313 }
6314
6315 SHA1Final((void *)sha1_digest, &sha1ctx);
6316 hash_val = (uint32_t *)kmem_zalloc(hash_size,
6317 KM_NOSLEEP);
6318 if (hash_val == NULL) {
6319 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6325 "emlxs_hash_verification: alloc failed");
6320 "hash_verification: alloc failed");
6326
6327 return (NULL);
6328 } else {
6329 bcopy((void *)sha1_digest,
6330 (void *)hash_val, SHA1_LEN);
6331 }
6332 }
6333 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
6321
6322 return (NULL);
6323 } else {
6324 bcopy((void *)sha1_digest,
6325 (void *)hash_val, SHA1_LEN);
6326 }
6327 }
6328 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
6334 "emlxs_hash_verification: hash_val=0x%x",
6329 "hash_verification: hash_val=0x%x",
6335 *(uint32_t *)hash_val);
6336
6337 return ((uint32_t *)hash_val);
6338 } else {
6339
6340 /* DHCHAP group 1,2,3,4 */
6341 /*
6342 * host received (g^x mod p) as dhval host has its own

--- 31 unchanged lines hidden (view full) ---

6374 } else {
6375 bcopy((void *)node_dhc->nlp_auth_misc.hrsp_cval,
6376 (void *)cval,
6377 node_dhc->nlp_auth_misc.hrsp_cval_len);
6378 cval_len = node_dhc->nlp_auth_misc.hrsp_cval_len;
6379 }
6380
6381 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
6330 *(uint32_t *)hash_val);
6331
6332 return ((uint32_t *)hash_val);
6333 } else {
6334
6335 /* DHCHAP group 1,2,3,4 */
6336 /*
6337 * host received (g^x mod p) as dhval host has its own

--- 31 unchanged lines hidden (view full) ---

6369 } else {
6370 bcopy((void *)node_dhc->nlp_auth_misc.hrsp_cval,
6371 (void *)cval,
6372 node_dhc->nlp_auth_misc.hrsp_cval_len);
6373 cval_len = node_dhc->nlp_auth_misc.hrsp_cval_len;
6374 }
6375
6376 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
6382 "emlxs_hash_verification: N-Null gp. 0x%x 0x%x",
6377 "hash_verification: N-Null gp. 0x%x 0x%x",
6383 ndlp->nlp_DID, cval_len);
6384
6385 err = emlxs_hash_Cai(port, port_dhc, ndlp, (void *)Cai,
6386 hash_id, dhgp_id,
6387 tran_id, cval, cval_len,
6388 key, dhval, dhval_len);
6389
6390 if (err != BIG_OK) {
6391 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6378 ndlp->nlp_DID, cval_len);
6379
6380 err = emlxs_hash_Cai(port, port_dhc, ndlp, (void *)Cai,
6381 hash_id, dhgp_id,
6382 tran_id, cval, cval_len,
6383 key, dhval, dhval_len);
6384
6385 if (err != BIG_OK) {
6386 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6392 "emlxs_hash_verification: Cai error. ret=0x%x",
6387 "hash_verification: Cai error. ret=0x%x",
6393 err);
6394
6395 return (NULL);
6396 }
6397 if (hash_id == AUTH_MD5) {
6398 bzero(&mdctx, sizeof (MD5_CTX));
6399 hash_size = MD5_LEN;
6400

--- 12 unchanged lines hidden (view full) ---

6413
6414 MD5Update(&mdctx, (unsigned char *)Cai, MD5_LEN);
6415 MD5Final((uint8_t *)md5_digest, &mdctx);
6416
6417 hash_val = (uint32_t *)kmem_zalloc(hash_size,
6418 KM_NOSLEEP);
6419 if (hash_val == NULL) {
6420 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6388 err);
6389
6390 return (NULL);
6391 }
6392 if (hash_id == AUTH_MD5) {
6393 bzero(&mdctx, sizeof (MD5_CTX));
6394 hash_size = MD5_LEN;
6395

--- 12 unchanged lines hidden (view full) ---

6408
6409 MD5Update(&mdctx, (unsigned char *)Cai, MD5_LEN);
6410 MD5Final((uint8_t *)md5_digest, &mdctx);
6411
6412 hash_val = (uint32_t *)kmem_zalloc(hash_size,
6413 KM_NOSLEEP);
6414 if (hash_val == NULL) {
6415 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6421 "emlxs_hash_vf: alloc failed(Non-NULL dh)");
6416 "hash_vf: alloc failed(Non-NULL dh)");
6422
6423 return (NULL);
6424 } else {
6425 bcopy((void *)&md5_digest,
6426 (void *)hash_val, MD5_LEN);
6427 }
6428 }
6429 if (hash_id == AUTH_SHA1) {

--- 13 unchanged lines hidden (view full) ---

6443
6444 SHA1Update(&sha1ctx, (void *)Cai, SHA1_LEN);
6445 SHA1Final((void *)sha1_digest, &sha1ctx);
6446
6447 hash_val = (uint32_t *)kmem_zalloc(hash_size,
6448 KM_NOSLEEP);
6449 if (hash_val == NULL) {
6450 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6417
6418 return (NULL);
6419 } else {
6420 bcopy((void *)&md5_digest,
6421 (void *)hash_val, MD5_LEN);
6422 }
6423 }
6424 if (hash_id == AUTH_SHA1) {

--- 13 unchanged lines hidden (view full) ---

6438
6439 SHA1Update(&sha1ctx, (void *)Cai, SHA1_LEN);
6440 SHA1Final((void *)sha1_digest, &sha1ctx);
6441
6442 hash_val = (uint32_t *)kmem_zalloc(hash_size,
6443 KM_NOSLEEP);
6444 if (hash_val == NULL) {
6445 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6451 "emlxs_hash_vf: val alloc failed (Non-NULL dh)");
6446 "hash_vf: val alloc failed (Non-NULL dh)");
6452
6453 return (NULL);
6454 } else {
6455 bcopy((void *)&sha1_digest,
6456 (void *)hash_val, SHA1_LEN);
6457 }
6458 }
6459 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
6447
6448 return (NULL);
6449 } else {
6450 bcopy((void *)&sha1_digest,
6451 (void *)hash_val, SHA1_LEN);
6452 }
6453 }
6454 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
6460 "emlxs_hash_verification: hash_val=0x%x",
6455 "hash_verification: hash_val=0x%x",
6461 *(uint32_t *)hash_val);
6462
6463 return ((uint32_t *)hash_val);
6464 }
6465
6466} /* emlxs_hash_verification */
6467
6468

--- 62 unchanged lines hidden (view full) ---

6531 hash_id = node_dhc->nlp_auth_hashid;
6532 }
6533 }
6534
6535 tran_id = (AUTH_TRAN_ID_MASK & tran_id);
6536 mytran_id = (uint8_t)(LE_SWAP32(tran_id));
6537
6538 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
6456 *(uint32_t *)hash_val);
6457
6458 return ((uint32_t *)hash_val);
6459 }
6460
6461} /* emlxs_hash_verification */
6462
6463

--- 62 unchanged lines hidden (view full) ---

6526 hash_id = node_dhc->nlp_auth_hashid;
6527 }
6528 }
6529
6530 tran_id = (AUTH_TRAN_ID_MASK & tran_id);
6531 mytran_id = (uint8_t)(LE_SWAP32(tran_id));
6532
6533 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_detail_msg,
6539 "emlxs_hash_get_R2:0x%x 0x%x dhgp_id=0x%x mytran_id=0x%x",
6534 "hash_get_R2:0x%x 0x%x dhgp_id=0x%x mytran_id=0x%x",
6540 ndlp->nlp_DID, hash_id, dhgp_id, mytran_id);
6541
6542 if (ndlp->nlp_DID == FABRIC_DID) {
6543 mykey = (char *)node_dhc->auth_key.local_password;
6544
6545 } else {
6546 /* in case of end-to-end mykey should be remote_password */
6547 mykey = (char *)node_dhc->auth_key.remote_password;

--- 90 unchanged lines hidden (view full) ---

6638 * R2 = H (Ti || Km || Cai)
6639 */
6640 err = emlxs_hash_Cai(port, port_dhc, ndlp, (void *)Cai,
6641 hash_id, dhgp_id, tran_id, bi_cval, cval_len,
6642 key, dhval, dhval_len);
6643
6644 if (err != BIG_OK) {
6645 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6535 ndlp->nlp_DID, hash_id, dhgp_id, mytran_id);
6536
6537 if (ndlp->nlp_DID == FABRIC_DID) {
6538 mykey = (char *)node_dhc->auth_key.local_password;
6539
6540 } else {
6541 /* in case of end-to-end mykey should be remote_password */
6542 mykey = (char *)node_dhc->auth_key.remote_password;

--- 90 unchanged lines hidden (view full) ---

6633 * R2 = H (Ti || Km || Cai)
6634 */
6635 err = emlxs_hash_Cai(port, port_dhc, ndlp, (void *)Cai,
6636 hash_id, dhgp_id, tran_id, bi_cval, cval_len,
6637 key, dhval, dhval_len);
6638
6639 if (err != BIG_OK) {
6640 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6646 "emlxs_hash_get_R2: emlxs_hash_Cai error. ret=0x%x",
6641 "hash_get_R2: hash_Cai error. ret=0x%x",
6647 err);
6648
6649 return (NULL);
6650 }
6651 if (hash_id == AUTH_MD5) {
6652 bzero(&mdctx, sizeof (MD5_CTX));
6653 hash_size = MD5_LEN;
6654

--- 14 unchanged lines hidden (view full) ---

6669
6670 MD5Update(&mdctx, (unsigned char *)Cai, MD5_LEN);
6671 MD5Final((uint8_t *)md5_digest, &mdctx);
6672
6673 hash_val = (uint32_t *)kmem_alloc(hash_size,
6674 KM_NOSLEEP);
6675 if (hash_val == NULL) {
6676 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6642 err);
6643
6644 return (NULL);
6645 }
6646 if (hash_id == AUTH_MD5) {
6647 bzero(&mdctx, sizeof (MD5_CTX));
6648 hash_size = MD5_LEN;
6649

--- 14 unchanged lines hidden (view full) ---

6664
6665 MD5Update(&mdctx, (unsigned char *)Cai, MD5_LEN);
6666 MD5Final((uint8_t *)md5_digest, &mdctx);
6667
6668 hash_val = (uint32_t *)kmem_alloc(hash_size,
6669 KM_NOSLEEP);
6670 if (hash_val == NULL) {
6671 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6677 "emlxs_hash_get_R2: hash_val MD5 alloc failed.");
6672 "hash_get_R2: hash_val MD5 alloc failed.");
6678
6679 return (NULL);
6680 } else {
6681 bcopy((void *)md5_digest,
6682 (void *)hash_val, MD5_LEN);
6683 }
6684 }
6685 if (hash_id == AUTH_SHA1) {

--- 13 unchanged lines hidden (view full) ---

6699
6700 SHA1Update(&sha1ctx, (void *)Cai, SHA1_LEN);
6701 SHA1Final((void *)sha1_digest, &sha1ctx);
6702
6703 hash_val = (uint32_t *)kmem_alloc(hash_size,
6704 KM_NOSLEEP);
6705 if (hash_val == NULL) {
6706 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6673
6674 return (NULL);
6675 } else {
6676 bcopy((void *)md5_digest,
6677 (void *)hash_val, MD5_LEN);
6678 }
6679 }
6680 if (hash_id == AUTH_SHA1) {

--- 13 unchanged lines hidden (view full) ---

6694
6695 SHA1Update(&sha1ctx, (void *)Cai, SHA1_LEN);
6696 SHA1Final((void *)sha1_digest, &sha1ctx);
6697
6698 hash_val = (uint32_t *)kmem_alloc(hash_size,
6699 KM_NOSLEEP);
6700 if (hash_val == NULL) {
6701 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_error_msg,
6707 "emlxs_hash_get_R2: hash_val SHA1 alloc failed.");
6702 "hash_get_R2: hash_val SHA1 alloc failed.");
6708
6709 return (NULL);
6710 } else {
6711 bcopy((void *)sha1_digest,
6712 (void *)hash_val, SHA1_LEN);
6713 }
6714 }
6715 }
6716
6717 return ((uint32_t *)hash_val);
6718
6719} /* emlxs_hash_get_R2 */
6720
6721
6703
6704 return (NULL);
6705 } else {
6706 bcopy((void *)sha1_digest,
6707 (void *)hash_val, SHA1_LEN);
6708 }
6709 }
6710 }
6711
6712 return ((uint32_t *)hash_val);
6713
6714} /* emlxs_hash_get_R2 */
6715
6716
6722
6723/*
6724 */
6725static void
6726emlxs_log_auth_event(
6727 emlxs_port_t *port,
6728 NODELIST *ndlp,
6729 char *subclass,
6730 char *info)
6731{
6732 emlxs_hba_t *hba = HBA;
6733 emlxs_node_dhc_t *node_dhc = &ndlp->node_dhc;
6734 nvlist_t *attr_list = NULL;
6735 dev_info_t *dip = hba->dip;
6736 emlxs_auth_cfg_t *auth_cfg;
6737 char *tmp = "No_more_logging_information_available";
6717static void
6718emlxs_log_auth_event(
6719 emlxs_port_t *port,
6720 NODELIST *ndlp,
6721 char *subclass,
6722 char *info)
6723{
6724 emlxs_hba_t *hba = HBA;
6725 emlxs_node_dhc_t *node_dhc = &ndlp->node_dhc;
6726 nvlist_t *attr_list = NULL;
6727 dev_info_t *dip = hba->dip;
6728 emlxs_auth_cfg_t *auth_cfg;
6729 char *tmp = "No_more_logging_information_available";
6738
6739 uint8_t lwwn[8];
6740 uint8_t rwwn[8];
6730 uint8_t lwwn[8];
6731 uint8_t rwwn[8];
6741 char *lwwn_tmp = NULL;
6742 char *rwwn_tmp = NULL;
6743 char *mytmp_lwwn, *mytmp_rwwn;
6744 int i;
6732 char *lwwn_str = NULL;
6733 char *rwwn_str = NULL;
6734 char ext_subclass[128];
6735 char ext_class[32];
6745
6746 auth_cfg = &(node_dhc->auth_cfg);
6747
6748 if (info == NULL) {
6749 info = tmp;
6750 }
6751 bcopy((void *) &auth_cfg->local_entity, (void *)lwwn, 8);
6736
6737 auth_cfg = &(node_dhc->auth_cfg);
6738
6739 if (info == NULL) {
6740 info = tmp;
6741 }
6742 bcopy((void *) &auth_cfg->local_entity, (void *)lwwn, 8);
6752 lwwn_tmp = (char *)kmem_zalloc(32, KM_NOSLEEP);
6753 if (lwwn_tmp == NULL) {
6743 lwwn_str = (char *)kmem_zalloc(32, KM_NOSLEEP);
6744 if (lwwn_str == NULL) {
6754 return;
6755 }
6745 return;
6746 }
6756 mytmp_lwwn = lwwn_tmp;
6747 (void) snprintf(lwwn_str, 32, "%02X%02X%02X%02X%02X%02X%02X%02X",
6748 lwwn[0], lwwn[1], lwwn[2], lwwn[3], lwwn[4], lwwn[5], lwwn[6],
6749 lwwn[7]);
6757
6750
6758 for (i = 0; i < 8; i++) {
6759 lwwn_tmp = (char *)sprintf((char *)lwwn_tmp, "%02X", lwwn[i]);
6760 lwwn_tmp += 2;
6761 }
6762 mytmp_lwwn[16] = '\0';
6763
6764 bcopy((void *)&auth_cfg->remote_entity, (void *)rwwn, 8);
6751 bcopy((void *)&auth_cfg->remote_entity, (void *)rwwn, 8);
6765 rwwn_tmp = (char *)kmem_zalloc(32, KM_NOSLEEP);
6766
6767 mytmp_rwwn = rwwn_tmp;
6768
6769 if (rwwn_tmp == NULL) {
6770 kmem_free(mytmp_lwwn, 32);
6752 rwwn_str = (char *)kmem_zalloc(32, KM_NOSLEEP);
6753 if (rwwn_str == NULL) {
6754 kmem_free(lwwn_str, 32);
6771 return;
6772 }
6755 return;
6756 }
6773 for (i = 0; i < 8; i++) {
6774 rwwn_tmp = (char *)sprintf((char *)rwwn_tmp, "%02X", rwwn[i]);
6775 rwwn_tmp += 2;
6776 }
6777 mytmp_rwwn[16] = '\0';
6778
6757
6758 (void) snprintf(rwwn_str, 32, "%02X%02X%02X%02X%02X%02X%02X%02X",
6759 rwwn[0], rwwn[1], rwwn[2], rwwn[3], rwwn[4], rwwn[5], rwwn[6],
6760 rwwn[7]);
6761
6762 (void) snprintf(ext_subclass, sizeof (ext_subclass),
6763 "ESC_%s_%s", DRIVER_NAME, subclass);
6764 (void) snprintf(ext_class, sizeof (ext_class),
6765 "EC_%s", DRIVER_NAME);
6766
6779 if (nvlist_alloc(&attr_list, NV_UNIQUE_NAME_TYPE, KM_NOSLEEP)
6780 == DDI_SUCCESS) {
6781 if ((nvlist_add_uint32(attr_list, "instance",
6782 ddi_get_instance(dip)) == DDI_SUCCESS) &&
6783 (nvlist_add_string(attr_list, "lwwn",
6767 if (nvlist_alloc(&attr_list, NV_UNIQUE_NAME_TYPE, KM_NOSLEEP)
6768 == DDI_SUCCESS) {
6769 if ((nvlist_add_uint32(attr_list, "instance",
6770 ddi_get_instance(dip)) == DDI_SUCCESS) &&
6771 (nvlist_add_string(attr_list, "lwwn",
6784 (char *)mytmp_lwwn) == DDI_SUCCESS) &&
6772 lwwn_str) == DDI_SUCCESS) &&
6785 (nvlist_add_string(attr_list, "rwwn",
6773 (nvlist_add_string(attr_list, "rwwn",
6786 (char *)mytmp_rwwn) == DDI_SUCCESS) &&
6774 rwwn_str) == DDI_SUCCESS) &&
6787 (nvlist_add_string(attr_list, "Info",
6788 info) == DDI_SUCCESS) &&
6789 (nvlist_add_string(attr_list, "Class",
6775 (nvlist_add_string(attr_list, "Info",
6776 info) == DDI_SUCCESS) &&
6777 (nvlist_add_string(attr_list, "Class",
6790 "EC_emlx") == DDI_SUCCESS) &&
6778 ext_class) == DDI_SUCCESS) &&
6791 (nvlist_add_string(attr_list, "SubClass",
6779 (nvlist_add_string(attr_list, "SubClass",
6792 subclass) == DDI_SUCCESS)) {
6780 ext_subclass) == DDI_SUCCESS)) {
6793
6794 (void) ddi_log_sysevent(dip,
6781
6782 (void) ddi_log_sysevent(dip,
6795 DDI_VENDOR_EMLX,
6796 EC_EMLXS,
6797 subclass,
6783 emlxs_strtoupper(DRIVER_NAME),
6784 ext_class,
6785 ext_subclass,
6798 attr_list,
6799 NULL,
6800 DDI_NOSLEEP);
6801 }
6802 nvlist_free(attr_list);
6803 attr_list = NULL;
6804 }
6786 attr_list,
6787 NULL,
6788 DDI_NOSLEEP);
6789 }
6790 nvlist_free(attr_list);
6791 attr_list = NULL;
6792 }
6805 kmem_free(mytmp_lwwn, 32);
6806 kmem_free(mytmp_rwwn, 32);
6793 kmem_free(lwwn_str, 32);
6794 kmem_free(rwwn_str, 32);
6807
6808 return;
6809
6810} /* emlxs_log_auth_event() */
6811
6812
6813/* **************************** AUTH DHC INTERFACE ************************* */
6814

--- 479 unchanged lines hidden (view full) ---

7294 return;
7295
7296} /* emlxs_dhc_auth_complete */
7297
7298
7299extern void
7300emlxs_dhc_attach(emlxs_hba_t *hba)
7301{
6795
6796 return;
6797
6798} /* emlxs_log_auth_event() */
6799
6800
6801/* **************************** AUTH DHC INTERFACE ************************* */
6802

--- 479 unchanged lines hidden (view full) ---

7282 return;
7283
7284} /* emlxs_dhc_auth_complete */
7285
7286
7287extern void
7288emlxs_dhc_attach(emlxs_hba_t *hba)
7289{
7302 char buf[32];
7290 mutex_init(&hba->auth_lock, NULL, MUTEX_DRIVER, NULL);
7303
7291
7304 (void) sprintf(buf, "%s_auth_lock mutex", DRIVER_NAME);
7305 mutex_init(&hba->auth_lock, buf, MUTEX_DRIVER, NULL);
7292 mutex_init(&hba->dhc_lock, NULL, MUTEX_DRIVER, NULL);
7306
7293
7307 (void) sprintf(buf, "%s_dhc_lock mutex", DRIVER_NAME);
7308 mutex_init(&hba->dhc_lock, buf, MUTEX_DRIVER, NULL);
7309
7310 emlxs_auth_cfg_init(hba);
7311
7312 emlxs_auth_key_init(hba);
7313
7314 hba->rdn_flag = 1;
7315
7316 return;
7317

--- 541 unchanged lines hidden (view full) ---

7859
7860 char s_lwwpn[32];
7861 char s_rwwpn[32];
7862
7863 /* Create and add new entry */
7864 EMLXS_MSGF(EMLXS_CONTEXT,
7865 &emlxs_fcsp_detail_msg,
7866 "%s:%s:%x:%x:%x:%x%x%x%x:%x%x%x%x:%x%x%x%x%x%x%x%x:%x",
7294 emlxs_auth_cfg_init(hba);
7295
7296 emlxs_auth_key_init(hba);
7297
7298 hba->rdn_flag = 1;
7299
7300 return;
7301

--- 541 unchanged lines hidden (view full) ---

7843
7844 char s_lwwpn[32];
7845 char s_rwwpn[32];
7846
7847 /* Create and add new entry */
7848 EMLXS_MSGF(EMLXS_CONTEXT,
7849 &emlxs_fcsp_detail_msg,
7850 "%s:%s:%x:%x:%x:%x%x%x%x:%x%x%x%x:%x%x%x%x%x%x%x%x:%x",
7867 emlxs_wwn_xlate(s_lwwpn, (uint8_t *)&auth_cfg->local_entity),
7868 emlxs_wwn_xlate(s_rwwpn, (uint8_t *)&auth_cfg->remote_entity),
7851 emlxs_wwn_xlate(s_lwwpn, sizeof (s_lwwpn),
7852 (uint8_t *)&auth_cfg->local_entity),
7853 emlxs_wwn_xlate(s_rwwpn, sizeof (s_rwwpn),
7854 (uint8_t *)&auth_cfg->remote_entity),
7869 auth_cfg->authentication_timeout,
7870 auth_cfg->authentication_mode,
7871 auth_cfg->bidirectional,
7872 auth_cfg->authentication_type_priority[0],
7873 auth_cfg->authentication_type_priority[1],
7874 auth_cfg->authentication_type_priority[2],
7875 auth_cfg->authentication_type_priority[3],
7876 auth_cfg->hash_priority[0],

--- 133 unchanged lines hidden (view full) ---

8010 emlxs_auth_cfg_t *auth_cfg2;
8011 uint32_t cnt;
8012 uint32_t rval;
8013 char buffer[64];
8014 char *prop_str;
8015 uint32_t i;
8016
8017 /* Check for the per adapter setting */
7855 auth_cfg->authentication_timeout,
7856 auth_cfg->authentication_mode,
7857 auth_cfg->bidirectional,
7858 auth_cfg->authentication_type_priority[0],
7859 auth_cfg->authentication_type_priority[1],
7860 auth_cfg->authentication_type_priority[2],
7861 auth_cfg->authentication_type_priority[3],
7862 auth_cfg->hash_priority[0],

--- 133 unchanged lines hidden (view full) ---

7996 emlxs_auth_cfg_t *auth_cfg2;
7997 uint32_t cnt;
7998 uint32_t rval;
7999 char buffer[64];
8000 char *prop_str;
8001 uint32_t i;
8002
8003 /* Check for the per adapter setting */
8018 (void) sprintf(buffer, "%s%d-auth-cfgs", DRIVER_NAME, hba->ddiinst);
8004 (void) snprintf(buffer, sizeof (buffer), "%s%d-auth-cfgs", DRIVER_NAME,
8005 hba->ddiinst);
8019 cnt = 0;
8020 arrayp = NULL;
8021 rval = ddi_prop_lookup_string_array(DDI_DEV_T_ANY, hba->dip,
8022 (DDI_PROP_DONTPASS),
8023 buffer, &arrayp, &cnt);
8024
8025 if ((rval != DDI_PROP_SUCCESS) || !cnt || !arrayp) {
8026 /* Check for the global setting */

--- 499 unchanged lines hidden (view full) ---

8526{
8527 emlxs_port_t *port = &PPORT;
8528 char s_lwwpn[32];
8529 char s_rwwpn[32];
8530
8531 EMLXS_MSGF(EMLXS_CONTEXT,
8532 &emlxs_fcsp_detail_msg,
8533 "auth-key> %s:%s:%x:*%d chars*:%x:*%d chars*",
8006 cnt = 0;
8007 arrayp = NULL;
8008 rval = ddi_prop_lookup_string_array(DDI_DEV_T_ANY, hba->dip,
8009 (DDI_PROP_DONTPASS),
8010 buffer, &arrayp, &cnt);
8011
8012 if ((rval != DDI_PROP_SUCCESS) || !cnt || !arrayp) {
8013 /* Check for the global setting */

--- 499 unchanged lines hidden (view full) ---

8513{
8514 emlxs_port_t *port = &PPORT;
8515 char s_lwwpn[32];
8516 char s_rwwpn[32];
8517
8518 EMLXS_MSGF(EMLXS_CONTEXT,
8519 &emlxs_fcsp_detail_msg,
8520 "auth-key> %s:%s:%x:*%d chars*:%x:*%d chars*",
8534 emlxs_wwn_xlate(s_lwwpn, (uint8_t *)&auth_key->local_entity),
8535 emlxs_wwn_xlate(s_rwwpn, (uint8_t *)&auth_key->remote_entity),
8521 emlxs_wwn_xlate(s_lwwpn, sizeof (s_lwwpn),
8522 (uint8_t *)&auth_key->local_entity),
8523 emlxs_wwn_xlate(s_rwwpn, sizeof (s_rwwpn),
8524 (uint8_t *)&auth_key->remote_entity),
8536 auth_key->local_password_type, auth_key->local_password_length,
8537 auth_key->remote_password_type, auth_key->remote_password_length);
8538
8539 return;
8540
8541} /* emlxs_auth_key_print() */
8542
8543

--- 117 unchanged lines hidden (view full) ---

8661 emlxs_auth_key_t *auth_key2;
8662 uint32_t cnt;
8663 uint32_t rval;
8664 char buffer[64];
8665 char *prop_str;
8666 uint32_t i;
8667
8668 /* Check for the per adapter setting */
8525 auth_key->local_password_type, auth_key->local_password_length,
8526 auth_key->remote_password_type, auth_key->remote_password_length);
8527
8528 return;
8529
8530} /* emlxs_auth_key_print() */
8531
8532

--- 117 unchanged lines hidden (view full) ---

8650 emlxs_auth_key_t *auth_key2;
8651 uint32_t cnt;
8652 uint32_t rval;
8653 char buffer[64];
8654 char *prop_str;
8655 uint32_t i;
8656
8657 /* Check for the per adapter setting */
8669 (void) sprintf(buffer, "%s%d-auth-keys", DRIVER_NAME, hba->ddiinst);
8658 (void) snprintf(buffer, sizeof (buffer), "%s%d-auth-keys", DRIVER_NAME,
8659 hba->ddiinst);
8670 cnt = 0;
8671 arrayp = NULL;
8672 rval = ddi_prop_lookup_string_array(DDI_DEV_T_ANY, hba->dip,
8673 (DDI_PROP_DONTPASS),
8674 buffer, &arrayp, &cnt);
8675
8676 if ((rval != DDI_PROP_SUCCESS) || !cnt || !arrayp) {
8677 /* Check for the global setting */

--- 380 unchanged lines hidden (view full) ---

9058 NODELIST *ndlp;
9059 uint32_t vpi;
9060 char s_wwpn[64];
9061
9062 /* Return is authentication is not enabled */
9063 if (cfg[CFG_AUTH_ENABLE].current == 0) {
9064 EMLXS_MSGF(EMLXS_CONTEXT,
9065 &emlxs_fcsp_debug_msg,
8660 cnt = 0;
8661 arrayp = NULL;
8662 rval = ddi_prop_lookup_string_array(DDI_DEV_T_ANY, hba->dip,
8663 (DDI_PROP_DONTPASS),
8664 buffer, &arrayp, &cnt);
8665
8666 if ((rval != DDI_PROP_SUCCESS) || !cnt || !arrayp) {
8667 /* Check for the global setting */

--- 380 unchanged lines hidden (view full) ---

9048 NODELIST *ndlp;
9049 uint32_t vpi;
9050 char s_wwpn[64];
9051
9052 /* Return is authentication is not enabled */
9053 if (cfg[CFG_AUTH_ENABLE].current == 0) {
9054 EMLXS_MSGF(EMLXS_CONTEXT,
9055 &emlxs_fcsp_debug_msg,
9066 "emlxs_dhc_init_auth. Auth disabled.");
9056 "dhc_init_auth. Auth disabled.");
9067
9068 return (DFC_AUTH_AUTHENTICATION_DISABLED);
9069 }
9070 /* Scan for lwwpn match */
9071 for (vpi = 0; vpi < MAX_VPORTS; vpi++) {
9072 port = &VPORT(vpi);
9073
9074 if (!(port->flag & EMLXS_PORT_BOUND)) {
9075 continue;
9076 }
9077 if (bcmp((uint8_t *)&port->wwpn, lwwpn, 8) == 0) {
9078 break;
9079 }
9080 }
9081
9082 if (vpi == MAX_VPORTS) {
9083 EMLXS_MSGF(EMLXS_CONTEXT,
9084 &emlxs_dfc_error_msg,
9057
9058 return (DFC_AUTH_AUTHENTICATION_DISABLED);
9059 }
9060 /* Scan for lwwpn match */
9061 for (vpi = 0; vpi < MAX_VPORTS; vpi++) {
9062 port = &VPORT(vpi);
9063
9064 if (!(port->flag & EMLXS_PORT_BOUND)) {
9065 continue;
9066 }
9067 if (bcmp((uint8_t *)&port->wwpn, lwwpn, 8) == 0) {
9068 break;
9069 }
9070 }
9071
9072 if (vpi == MAX_VPORTS) {
9073 EMLXS_MSGF(EMLXS_CONTEXT,
9074 &emlxs_dfc_error_msg,
9085 "emlxs_dhc_init_auth: lwwpn not found. %s",
9086 emlxs_wwn_xlate(s_wwpn, lwwpn));
9075 "dhc_init_auth: lwwpn not found. %s",
9076 emlxs_wwn_xlate(s_wwpn, sizeof (s_wwpn), lwwpn));
9087
9088 return (DFC_AUTH_WWN_NOT_FOUND);
9089 }
9090 if (bcmp(rwwpn, emlxs_fabric_wwn, 8) == 0) {
9091 /* Scan for fabric node */
9077
9078 return (DFC_AUTH_WWN_NOT_FOUND);
9079 }
9080 if (bcmp(rwwpn, emlxs_fabric_wwn, 8) == 0) {
9081 /* Scan for fabric node */
9092 if ((ndlp = emlxs_node_find_did(port, FABRIC_DID)) == NULL) {
9082 if ((ndlp = emlxs_node_find_did(port, FABRIC_DID, 1)) == NULL) {
9093 EMLXS_MSGF(EMLXS_CONTEXT,
9094 &emlxs_dfc_error_msg,
9083 EMLXS_MSGF(EMLXS_CONTEXT,
9084 &emlxs_dfc_error_msg,
9095 "emlxs_dhc_init_auth: fabric node not found.");
9085 "dhc_init_auth: fabric node not found.");
9096
9097 return (DFC_AUTH_WWN_NOT_FOUND);
9098 }
9099 } else {
9100 /* Scan for rwwpn match */
9086
9087 return (DFC_AUTH_WWN_NOT_FOUND);
9088 }
9089 } else {
9090 /* Scan for rwwpn match */
9101 if ((ndlp = emlxs_node_find_wwpn(port, rwwpn)) == NULL) {
9091 if ((ndlp = emlxs_node_find_wwpn(port, rwwpn, 1)) == NULL) {
9102 EMLXS_MSGF(EMLXS_CONTEXT,
9103 &emlxs_dfc_error_msg,
9092 EMLXS_MSGF(EMLXS_CONTEXT,
9093 &emlxs_dfc_error_msg,
9104 "emlxs_dhc_init_auth: rwwpn not found. %s",
9105 emlxs_wwn_xlate(s_wwpn, rwwpn));
9094 "dhc_init_auth: rwwpn not found. %s",
9095 emlxs_wwn_xlate(s_wwpn, sizeof (s_wwpn), rwwpn));
9106
9107 return (DFC_AUTH_WWN_NOT_FOUND);
9108 }
9109 }
9110
9111 if ((ndlp->nlp_DID != FABRIC_DID) &&
9112 ((port->port_dhc.state != ELX_FABRIC_AUTH_SUCCESS))) {
9113 return (DFC_IO_ERROR);

--- 23 unchanged lines hidden (view full) ---

9137 char s_rwwpn[64];
9138 emlxs_auth_cfg_t *auth_cfg;
9139 uint32_t i;
9140
9141 /* Return is authentication is not enabled */
9142 if (cfg[CFG_AUTH_ENABLE].current == 0) {
9143 EMLXS_MSGF(EMLXS_CONTEXT,
9144 &emlxs_fcsp_debug_msg,
9096
9097 return (DFC_AUTH_WWN_NOT_FOUND);
9098 }
9099 }
9100
9101 if ((ndlp->nlp_DID != FABRIC_DID) &&
9102 ((port->port_dhc.state != ELX_FABRIC_AUTH_SUCCESS))) {
9103 return (DFC_IO_ERROR);

--- 23 unchanged lines hidden (view full) ---

9127 char s_rwwpn[64];
9128 emlxs_auth_cfg_t *auth_cfg;
9129 uint32_t i;
9130
9131 /* Return is authentication is not enabled */
9132 if (cfg[CFG_AUTH_ENABLE].current == 0) {
9133 EMLXS_MSGF(EMLXS_CONTEXT,
9134 &emlxs_fcsp_debug_msg,
9145 "emlxs_dhc_get_auth_cfg. Auth disabled.");
9135 "dhc_get_auth_cfg. Auth disabled.");
9146
9147 return (DFC_AUTH_AUTHENTICATION_DISABLED);
9148 }
9149 mutex_enter(&hba->auth_lock);
9150
9151 auth_cfg = emlxs_auth_cfg_get(hba,
9152 (uint8_t *)&fcsp_cfg->lwwpn, (uint8_t *)&fcsp_cfg->rwwpn);
9153
9154 if (!auth_cfg) {
9155 EMLXS_MSGF(EMLXS_CONTEXT,
9156 &emlxs_dfc_error_msg,
9136
9137 return (DFC_AUTH_AUTHENTICATION_DISABLED);
9138 }
9139 mutex_enter(&hba->auth_lock);
9140
9141 auth_cfg = emlxs_auth_cfg_get(hba,
9142 (uint8_t *)&fcsp_cfg->lwwpn, (uint8_t *)&fcsp_cfg->rwwpn);
9143
9144 if (!auth_cfg) {
9145 EMLXS_MSGF(EMLXS_CONTEXT,
9146 &emlxs_dfc_error_msg,
9157 "emlxs_dhc_get_auth_cfg: entry not found. %s:%s",
9158 emlxs_wwn_xlate(s_lwwpn,
9147 "dhc_get_auth_cfg: entry not found. %s:%s",
9148 emlxs_wwn_xlate(s_lwwpn, sizeof (s_lwwpn),
9159 (uint8_t *)&fcsp_cfg->lwwpn),
9149 (uint8_t *)&fcsp_cfg->lwwpn),
9160 emlxs_wwn_xlate(s_rwwpn,
9150 emlxs_wwn_xlate(s_rwwpn, sizeof (s_rwwpn),
9161 (uint8_t *)&fcsp_cfg->rwwpn));
9162
9163 mutex_exit(&hba->auth_lock);
9164
9165 return (DFC_AUTH_NOT_CONFIGURED);
9166 }
9167 fcsp_cfg->auth_tov = auth_cfg->authentication_timeout;
9168 fcsp_cfg->auth_mode = auth_cfg->authentication_mode;

--- 32 unchanged lines hidden (view full) ---

9201 emlxs_auth_key_t *auth_key;
9202 uint32_t i;
9203 NODELIST *ndlp;
9204
9205 /* Return if authentication is not enabled */
9206 if (cfg[CFG_AUTH_ENABLE].current == 0) {
9207 EMLXS_MSGF(EMLXS_CONTEXT,
9208 &emlxs_fcsp_debug_msg,
9151 (uint8_t *)&fcsp_cfg->rwwpn));
9152
9153 mutex_exit(&hba->auth_lock);
9154
9155 return (DFC_AUTH_NOT_CONFIGURED);
9156 }
9157 fcsp_cfg->auth_tov = auth_cfg->authentication_timeout;
9158 fcsp_cfg->auth_mode = auth_cfg->authentication_mode;

--- 32 unchanged lines hidden (view full) ---

9191 emlxs_auth_key_t *auth_key;
9192 uint32_t i;
9193 NODELIST *ndlp;
9194
9195 /* Return if authentication is not enabled */
9196 if (cfg[CFG_AUTH_ENABLE].current == 0) {
9197 EMLXS_MSGF(EMLXS_CONTEXT,
9198 &emlxs_fcsp_debug_msg,
9209 "emlxs_dhc_add_auth_cfg. Auth disabled.");
9199 "dhc_add_auth_cfg. Auth disabled.");
9210
9211 return (DFC_AUTH_AUTHENTICATION_DISABLED);
9212 }
9213 mutex_enter(&hba->auth_lock);
9214
9215 auth_key = emlxs_auth_key_get(hba,
9216 (uint8_t *)&fcsp_cfg->lwwpn, (uint8_t *)&fcsp_cfg->rwwpn);
9217
9218 if (auth_key &&
9219 (auth_key->local_password_type == PASSWORD_TYPE_ASCII ||
9220 auth_key->local_password_type == PASSWORD_TYPE_BINARY)) {
9221
9222 /* Verify local password */
9223 if ((auth_key->local_password_length != dfc_pwd->length) ||
9224 (auth_key->local_password_type != dfc_pwd->type) ||
9225 bcmp(dfc_pwd->password, auth_key->local_password,
9226 dfc_pwd->length)) {
9227 EMLXS_MSGF(EMLXS_CONTEXT,
9228 &emlxs_dfc_error_msg,
9200
9201 return (DFC_AUTH_AUTHENTICATION_DISABLED);
9202 }
9203 mutex_enter(&hba->auth_lock);
9204
9205 auth_key = emlxs_auth_key_get(hba,
9206 (uint8_t *)&fcsp_cfg->lwwpn, (uint8_t *)&fcsp_cfg->rwwpn);
9207
9208 if (auth_key &&
9209 (auth_key->local_password_type == PASSWORD_TYPE_ASCII ||
9210 auth_key->local_password_type == PASSWORD_TYPE_BINARY)) {
9211
9212 /* Verify local password */
9213 if ((auth_key->local_password_length != dfc_pwd->length) ||
9214 (auth_key->local_password_type != dfc_pwd->type) ||
9215 bcmp(dfc_pwd->password, auth_key->local_password,
9216 dfc_pwd->length)) {
9217 EMLXS_MSGF(EMLXS_CONTEXT,
9218 &emlxs_dfc_error_msg,
9229 "emlxs_dhc_add_auth_cfg: Invalid local password.");
9219 "dhc_add_auth_cfg: Invalid local password.");
9230
9231 mutex_exit(&hba->auth_lock);
9232
9233 return (DFC_AUTH_COMPARE_FAILED);
9234 }
9235 }
9236 /* Create entry */
9237 auth_cfg = emlxs_auth_cfg_create(hba,
9238 (uint8_t *)&fcsp_cfg->lwwpn,
9239 (uint8_t *)&fcsp_cfg->rwwpn);
9240
9241 if (!auth_cfg) {
9242 EMLXS_MSGF(EMLXS_CONTEXT,
9243 &emlxs_dfc_error_msg,
9220
9221 mutex_exit(&hba->auth_lock);
9222
9223 return (DFC_AUTH_COMPARE_FAILED);
9224 }
9225 }
9226 /* Create entry */
9227 auth_cfg = emlxs_auth_cfg_create(hba,
9228 (uint8_t *)&fcsp_cfg->lwwpn,
9229 (uint8_t *)&fcsp_cfg->rwwpn);
9230
9231 if (!auth_cfg) {
9232 EMLXS_MSGF(EMLXS_CONTEXT,
9233 &emlxs_dfc_error_msg,
9244 "emlxs_dhc_add_auth_cfg: Out of memory.");
9234 "dhc_add_auth_cfg: Out of memory.");
9245
9246 mutex_exit(&hba->auth_lock);
9247
9248 return (DFC_SYSRES_ERROR);
9249 }
9250 /* Init entry */
9251 auth_cfg->authentication_timeout = fcsp_cfg->auth_tov;
9252 auth_cfg->authentication_mode = fcsp_cfg->auth_mode;

--- 28 unchanged lines hidden (view full) ---

9281 continue;
9282 }
9283 /* Port match found */
9284
9285 if (bcmp((uint8_t *)&fcsp_cfg->rwwpn,
9286 emlxs_fabric_wwn, 8) == 0) {
9287 /* Scan for fabric node */
9288 if ((ndlp = emlxs_node_find_did(port,
9235
9236 mutex_exit(&hba->auth_lock);
9237
9238 return (DFC_SYSRES_ERROR);
9239 }
9240 /* Init entry */
9241 auth_cfg->authentication_timeout = fcsp_cfg->auth_tov;
9242 auth_cfg->authentication_mode = fcsp_cfg->auth_mode;

--- 28 unchanged lines hidden (view full) ---

9271 continue;
9272 }
9273 /* Port match found */
9274
9275 if (bcmp((uint8_t *)&fcsp_cfg->rwwpn,
9276 emlxs_fabric_wwn, 8) == 0) {
9277 /* Scan for fabric node */
9278 if ((ndlp = emlxs_node_find_did(port,
9289 FABRIC_DID)) == NULL) {
9279 FABRIC_DID, 1)) == NULL) {
9290 break;
9291 }
9292 } else {
9293 /* Scan for rwwpn match */
9294 if ((ndlp = emlxs_node_find_wwpn(port,
9280 break;
9281 }
9282 } else {
9283 /* Scan for rwwpn match */
9284 if ((ndlp = emlxs_node_find_wwpn(port,
9295 (uint8_t *)&fcsp_cfg->rwwpn)) == NULL) {
9285 (uint8_t *)&fcsp_cfg->rwwpn, 1)) == NULL) {
9296 break;
9297 }
9298 }
9299
9300 emlxs_dhc_set_reauth_time(port, ndlp, ENABLE);
9301
9302 break;
9303 }

--- 18 unchanged lines hidden (view full) ---

9322 char s_rwwpn[64];
9323 emlxs_auth_key_t *auth_key;
9324 emlxs_auth_cfg_t *auth_cfg;
9325
9326 /* Return is authentication is not enabled */
9327 if (cfg[CFG_AUTH_ENABLE].current == 0) {
9328 EMLXS_MSGF(EMLXS_CONTEXT,
9329 &emlxs_fcsp_debug_msg,
9286 break;
9287 }
9288 }
9289
9290 emlxs_dhc_set_reauth_time(port, ndlp, ENABLE);
9291
9292 break;
9293 }

--- 18 unchanged lines hidden (view full) ---

9312 char s_rwwpn[64];
9313 emlxs_auth_key_t *auth_key;
9314 emlxs_auth_cfg_t *auth_cfg;
9315
9316 /* Return is authentication is not enabled */
9317 if (cfg[CFG_AUTH_ENABLE].current == 0) {
9318 EMLXS_MSGF(EMLXS_CONTEXT,
9319 &emlxs_fcsp_debug_msg,
9330 "emlxs_dhc_delete_auth_cfg. Auth disabled.");
9320 "dhc_delete_auth_cfg. Auth disabled.");
9331
9332 return (DFC_AUTH_AUTHENTICATION_DISABLED);
9333 }
9334 mutex_enter(&hba->auth_lock);
9335
9336 auth_key = emlxs_auth_key_get(hba,
9337 (uint8_t *)&fcsp_cfg->lwwpn,
9338 (uint8_t *)&fcsp_cfg->rwwpn);

--- 6 unchanged lines hidden (view full) ---

9345 if ((auth_key->local_password_length != dfc_pwd->length) ||
9346 (auth_key->local_password_type != dfc_pwd->type) ||
9347 bcmp(dfc_pwd->password,
9348 auth_key->local_password,
9349 dfc_pwd->length)) {
9350
9351 EMLXS_MSGF(EMLXS_CONTEXT,
9352 &emlxs_dfc_error_msg,
9321
9322 return (DFC_AUTH_AUTHENTICATION_DISABLED);
9323 }
9324 mutex_enter(&hba->auth_lock);
9325
9326 auth_key = emlxs_auth_key_get(hba,
9327 (uint8_t *)&fcsp_cfg->lwwpn,
9328 (uint8_t *)&fcsp_cfg->rwwpn);

--- 6 unchanged lines hidden (view full) ---

9335 if ((auth_key->local_password_length != dfc_pwd->length) ||
9336 (auth_key->local_password_type != dfc_pwd->type) ||
9337 bcmp(dfc_pwd->password,
9338 auth_key->local_password,
9339 dfc_pwd->length)) {
9340
9341 EMLXS_MSGF(EMLXS_CONTEXT,
9342 &emlxs_dfc_error_msg,
9353 "emlxs_dhc_delete_auth_cfg: Ivld local pwd.");
9343 "dhc_delete_auth_cfg: Ivld local pwd.");
9354
9355 mutex_exit(&hba->auth_lock);
9356
9357 return (DFC_AUTH_COMPARE_FAILED);
9358 }
9359 }
9360 auth_cfg = emlxs_auth_cfg_get(hba,
9361 (uint8_t *)&fcsp_cfg->lwwpn, (uint8_t *)&fcsp_cfg->rwwpn);
9362
9363 if (!auth_cfg) {
9364 EMLXS_MSGF(EMLXS_CONTEXT,
9365 &emlxs_dfc_error_msg,
9344
9345 mutex_exit(&hba->auth_lock);
9346
9347 return (DFC_AUTH_COMPARE_FAILED);
9348 }
9349 }
9350 auth_cfg = emlxs_auth_cfg_get(hba,
9351 (uint8_t *)&fcsp_cfg->lwwpn, (uint8_t *)&fcsp_cfg->rwwpn);
9352
9353 if (!auth_cfg) {
9354 EMLXS_MSGF(EMLXS_CONTEXT,
9355 &emlxs_dfc_error_msg,
9366 "emlxs_dhc_delete_auth_cfg: entry not found. %s:%s",
9367 emlxs_wwn_xlate(s_lwwpn, (uint8_t *)&fcsp_cfg->lwwpn),
9368 emlxs_wwn_xlate(s_rwwpn, (uint8_t *)&fcsp_cfg->rwwpn));
9356 "dhc_delete_auth_cfg: entry not found. %s:%s",
9357 emlxs_wwn_xlate(s_lwwpn, sizeof (s_lwwpn),
9358 (uint8_t *)&fcsp_cfg->lwwpn),
9359 emlxs_wwn_xlate(s_rwwpn, sizeof (s_rwwpn),
9360 (uint8_t *)&fcsp_cfg->rwwpn));
9369
9370 mutex_exit(&hba->auth_lock);
9371
9372 return (DFC_AUTH_WWN_NOT_FOUND);
9373 }
9374 /* Destroy cfg entry */
9375 emlxs_auth_cfg_destroy(hba, auth_cfg);
9376

--- 16 unchanged lines hidden (view full) ---

9393 char s_lwwpn[64];
9394 char s_rwwpn[64];
9395 emlxs_auth_key_t *auth_key;
9396
9397 /* Return is authentication is not enabled */
9398 if (cfg[CFG_AUTH_ENABLE].current == 0) {
9399 EMLXS_MSGF(EMLXS_CONTEXT,
9400 &emlxs_fcsp_debug_msg,
9361
9362 mutex_exit(&hba->auth_lock);
9363
9364 return (DFC_AUTH_WWN_NOT_FOUND);
9365 }
9366 /* Destroy cfg entry */
9367 emlxs_auth_cfg_destroy(hba, auth_cfg);
9368

--- 16 unchanged lines hidden (view full) ---

9385 char s_lwwpn[64];
9386 char s_rwwpn[64];
9387 emlxs_auth_key_t *auth_key;
9388
9389 /* Return is authentication is not enabled */
9390 if (cfg[CFG_AUTH_ENABLE].current == 0) {
9391 EMLXS_MSGF(EMLXS_CONTEXT,
9392 &emlxs_fcsp_debug_msg,
9401 "emlxs_dhc_get_auth_key. Auth disabled.");
9393 "dhc_get_auth_key. Auth disabled.");
9402
9403 return (DFC_AUTH_AUTHENTICATION_DISABLED);
9404 }
9405 mutex_enter(&hba->auth_lock);
9406
9407 auth_key = emlxs_auth_key_get(hba,
9408 (uint8_t *)&dfc_auth_pwd->lwwpn,
9409 (uint8_t *)&dfc_auth_pwd->rwwpn);
9410
9411 if (!auth_key) {
9412 EMLXS_MSGF(EMLXS_CONTEXT,
9413 &emlxs_dfc_error_msg,
9394
9395 return (DFC_AUTH_AUTHENTICATION_DISABLED);
9396 }
9397 mutex_enter(&hba->auth_lock);
9398
9399 auth_key = emlxs_auth_key_get(hba,
9400 (uint8_t *)&dfc_auth_pwd->lwwpn,
9401 (uint8_t *)&dfc_auth_pwd->rwwpn);
9402
9403 if (!auth_key) {
9404 EMLXS_MSGF(EMLXS_CONTEXT,
9405 &emlxs_dfc_error_msg,
9414 "emlxs_dhc_get_auth_key: entry not found. %s:%s",
9415 emlxs_wwn_xlate(s_lwwpn, (uint8_t *)&dfc_auth_pwd->lwwpn),
9416 emlxs_wwn_xlate(s_rwwpn, (uint8_t *)&dfc_auth_pwd->rwwpn));
9406 "dhc_get_auth_key: entry not found. %s:%s",
9407 emlxs_wwn_xlate(s_lwwpn, sizeof (s_lwwpn),
9408 (uint8_t *)&dfc_auth_pwd->lwwpn),
9409 emlxs_wwn_xlate(s_rwwpn, sizeof (s_rwwpn),
9410 (uint8_t *)&dfc_auth_pwd->rwwpn));
9417
9418 mutex_exit(&hba->auth_lock);
9419
9420 return (DFC_AUTH_NOT_CONFIGURED);
9421 }
9422 dfc_auth_pwd->lpw.length = auth_key->local_password_length;
9423 dfc_auth_pwd->lpw.type = auth_key->local_password_type;
9424 /*

--- 37 unchanged lines hidden (view full) ---

9462 emlxs_config_t *cfg = &CFG;
9463 emlxs_auth_key_t *auth_key;
9464 uint32_t length;
9465
9466 /* Return is authentication is not enabled */
9467 if (cfg[CFG_AUTH_ENABLE].current == 0) {
9468 EMLXS_MSGF(EMLXS_CONTEXT,
9469 &emlxs_fcsp_debug_msg,
9411
9412 mutex_exit(&hba->auth_lock);
9413
9414 return (DFC_AUTH_NOT_CONFIGURED);
9415 }
9416 dfc_auth_pwd->lpw.length = auth_key->local_password_length;
9417 dfc_auth_pwd->lpw.type = auth_key->local_password_type;
9418 /*

--- 37 unchanged lines hidden (view full) ---

9456 emlxs_config_t *cfg = &CFG;
9457 emlxs_auth_key_t *auth_key;
9458 uint32_t length;
9459
9460 /* Return is authentication is not enabled */
9461 if (cfg[CFG_AUTH_ENABLE].current == 0) {
9462 EMLXS_MSGF(EMLXS_CONTEXT,
9463 &emlxs_fcsp_debug_msg,
9470 "emlxs_dhc_set_auth_key. Auth disabled.");
9464 "dhc_set_auth_key. Auth disabled.");
9471
9472 return (DFC_AUTH_AUTHENTICATION_DISABLED);
9473 }
9474
9475 /* Check to make sure localpwd does not equal to remotepwd */
9476 /* if they are given in the same time, if not, see below */
9477 if ((dfc_pwd->lpw_new.type == PASSWORD_TYPE_ASCII ||
9478 dfc_pwd->lpw_new.type == PASSWORD_TYPE_BINARY) &&
9479 (dfc_pwd->rpw_new.type == PASSWORD_TYPE_ASCII ||
9480 dfc_pwd->rpw_new.type == PASSWORD_TYPE_BINARY)) {
9481 if (bcmp(dfc_pwd->lpw_new.password,
9482 dfc_pwd->rpw_new.password,
9483 dfc_pwd->lpw_new.length) == 0) {
9484 EMLXS_MSGF(EMLXS_CONTEXT,
9485 &emlxs_fcsp_debug_msg,
9465
9466 return (DFC_AUTH_AUTHENTICATION_DISABLED);
9467 }
9468
9469 /* Check to make sure localpwd does not equal to remotepwd */
9470 /* if they are given in the same time, if not, see below */
9471 if ((dfc_pwd->lpw_new.type == PASSWORD_TYPE_ASCII ||
9472 dfc_pwd->lpw_new.type == PASSWORD_TYPE_BINARY) &&
9473 (dfc_pwd->rpw_new.type == PASSWORD_TYPE_ASCII ||
9474 dfc_pwd->rpw_new.type == PASSWORD_TYPE_BINARY)) {
9475 if (bcmp(dfc_pwd->lpw_new.password,
9476 dfc_pwd->rpw_new.password,
9477 dfc_pwd->lpw_new.length) == 0) {
9478 EMLXS_MSGF(EMLXS_CONTEXT,
9479 &emlxs_fcsp_debug_msg,
9486 "emlxs_dhc_set_auth_key. nlpwd==nrpwd");
9480 "dhc_set_auth_key. nlpwd==nrpwd");
9487
9488 return (DFC_AUTH_LOCAL_REMOTE_PWD_EQUAL);
9489 }
9490 }
9491
9492 mutex_enter(&hba->auth_lock);
9493
9494 auth_key = emlxs_auth_key_get(hba,

--- 4 unchanged lines hidden (view full) ---

9499 if (!auth_key) {
9500 auth_key = emlxs_auth_key_create(hba,
9501 (uint8_t *)&dfc_pwd->lwwpn,
9502 (uint8_t *)&dfc_pwd->rwwpn);
9503
9504 if (!auth_key) {
9505 EMLXS_MSGF(EMLXS_CONTEXT,
9506 &emlxs_dfc_error_msg,
9481
9482 return (DFC_AUTH_LOCAL_REMOTE_PWD_EQUAL);
9483 }
9484 }
9485
9486 mutex_enter(&hba->auth_lock);
9487
9488 auth_key = emlxs_auth_key_get(hba,

--- 4 unchanged lines hidden (view full) ---

9493 if (!auth_key) {
9494 auth_key = emlxs_auth_key_create(hba,
9495 (uint8_t *)&dfc_pwd->lwwpn,
9496 (uint8_t *)&dfc_pwd->rwwpn);
9497
9498 if (!auth_key) {
9499 EMLXS_MSGF(EMLXS_CONTEXT,
9500 &emlxs_dfc_error_msg,
9507 "emlxs_dhc_set_auth_key: Out of memory.");
9501 "dhc_set_auth_key: Out of memory.");
9508
9509 mutex_exit(&hba->auth_lock);
9510
9511 return (DFC_SYSRES_ERROR);
9512 }
9513 }
9514
9515 /* Check if a new local password is provided */

--- 7 unchanged lines hidden (view full) ---

9523 dfc_pwd->lpw.length) ||
9524 (auth_key->local_password_type !=
9525 dfc_pwd->lpw.type) ||
9526 bcmp(dfc_pwd->lpw.password,
9527 auth_key->local_password,
9528 dfc_pwd->lpw.length)) {
9529 EMLXS_MSGF(EMLXS_CONTEXT,
9530 &emlxs_dfc_error_msg,
9502
9503 mutex_exit(&hba->auth_lock);
9504
9505 return (DFC_SYSRES_ERROR);
9506 }
9507 }
9508
9509 /* Check if a new local password is provided */

--- 7 unchanged lines hidden (view full) ---

9517 dfc_pwd->lpw.length) ||
9518 (auth_key->local_password_type !=
9519 dfc_pwd->lpw.type) ||
9520 bcmp(dfc_pwd->lpw.password,
9521 auth_key->local_password,
9522 dfc_pwd->lpw.length)) {
9523 EMLXS_MSGF(EMLXS_CONTEXT,
9524 &emlxs_dfc_error_msg,
9531 "emlxs_dhc_set_auth_key: Invalid local password.");
9525 "dhc_set_auth_key: Invalid local password.");
9532
9533 mutex_exit(&hba->auth_lock);
9534
9535 return (DFC_AUTH_COMPARE_FAILED);
9536 }
9537 }
9538
9539 /*

--- 4 unchanged lines hidden (view full) ---

9544 auth_key->remote_password_type == PASSWORD_TYPE_BINARY) {
9545 if ((auth_key->remote_password_length ==
9546 dfc_pwd->lpw_new.length) &&
9547 (bcmp(dfc_pwd->lpw_new.password,
9548 auth_key->remote_password,
9549 dfc_pwd->lpw_new.length) == 0)) {
9550 EMLXS_MSGF(EMLXS_CONTEXT,
9551 &emlxs_dfc_error_msg,
9526
9527 mutex_exit(&hba->auth_lock);
9528
9529 return (DFC_AUTH_COMPARE_FAILED);
9530 }
9531 }
9532
9533 /*

--- 4 unchanged lines hidden (view full) ---

9538 auth_key->remote_password_type == PASSWORD_TYPE_BINARY) {
9539 if ((auth_key->remote_password_length ==
9540 dfc_pwd->lpw_new.length) &&
9541 (bcmp(dfc_pwd->lpw_new.password,
9542 auth_key->remote_password,
9543 dfc_pwd->lpw_new.length) == 0)) {
9544 EMLXS_MSGF(EMLXS_CONTEXT,
9545 &emlxs_dfc_error_msg,
9552 "emlxs_dhc_set_auth_key: nlpwd==crpwd");
9546 "dhc_set_auth_key: nlpwd==crpwd");
9553
9554 mutex_exit(&hba->auth_lock);
9555
9556 return (DFC_AUTH_LOCAL_REMOTE_PWD_EQUAL);
9557 }
9558 }
9559 /* Update local entry */
9560 auth_key->local_password_length = dfc_pwd->lpw_new.length;

--- 16 unchanged lines hidden (view full) ---

9577 dfc_pwd->rpw.length) ||
9578 (auth_key->remote_password_type !=
9579 dfc_pwd->rpw.type) ||
9580 bcmp(dfc_pwd->rpw.password,
9581 auth_key->remote_password,
9582 dfc_pwd->rpw.length)) {
9583 EMLXS_MSGF(EMLXS_CONTEXT,
9584 &emlxs_dfc_error_msg,
9547
9548 mutex_exit(&hba->auth_lock);
9549
9550 return (DFC_AUTH_LOCAL_REMOTE_PWD_EQUAL);
9551 }
9552 }
9553 /* Update local entry */
9554 auth_key->local_password_length = dfc_pwd->lpw_new.length;

--- 16 unchanged lines hidden (view full) ---

9571 dfc_pwd->rpw.length) ||
9572 (auth_key->remote_password_type !=
9573 dfc_pwd->rpw.type) ||
9574 bcmp(dfc_pwd->rpw.password,
9575 auth_key->remote_password,
9576 dfc_pwd->rpw.length)) {
9577 EMLXS_MSGF(EMLXS_CONTEXT,
9578 &emlxs_dfc_error_msg,
9585 "emlxs_dhc_set_auth_key: Invalid remote password.");
9579 "dhc_set_auth_key: Invalid remote password.");
9586
9587 mutex_exit(&hba->auth_lock);
9588
9589 return (DFC_AUTH_COMPARE_FAILED);
9590 }
9591 }
9592
9593 /*

--- 4 unchanged lines hidden (view full) ---

9598 auth_key->local_password_type == PASSWORD_TYPE_BINARY) {
9599 if ((auth_key->local_password_length ==
9600 dfc_pwd->rpw_new.length) &&
9601 (bcmp(dfc_pwd->rpw_new.password,
9602 auth_key->local_password,
9603 dfc_pwd->rpw_new.length) == 0)) {
9604 EMLXS_MSGF(EMLXS_CONTEXT,
9605 &emlxs_dfc_error_msg,
9580
9581 mutex_exit(&hba->auth_lock);
9582
9583 return (DFC_AUTH_COMPARE_FAILED);
9584 }
9585 }
9586
9587 /*

--- 4 unchanged lines hidden (view full) ---

9592 auth_key->local_password_type == PASSWORD_TYPE_BINARY) {
9593 if ((auth_key->local_password_length ==
9594 dfc_pwd->rpw_new.length) &&
9595 (bcmp(dfc_pwd->rpw_new.password,
9596 auth_key->local_password,
9597 dfc_pwd->rpw_new.length) == 0)) {
9598 EMLXS_MSGF(EMLXS_CONTEXT,
9599 &emlxs_dfc_error_msg,
9606 "emlxs_dhc_set_auth_key: nrpwd==clpwd");
9600 "dhc_set_auth_key: nrpwd==clpwd");
9607
9608 mutex_exit(&hba->auth_lock);
9609
9610 return (DFC_AUTH_LOCAL_REMOTE_PWD_EQUAL);
9611 }
9612 }
9613 /* Update remote entry */
9614 auth_key->remote_password_length = dfc_pwd->rpw_new.length;

--- 42 unchanged lines hidden (view full) ---

9657 NODELIST *ndlp;
9658 uint32_t rc;
9659 time_t auth_time;
9660 uint32_t update;
9661
9662 /* Return is authentication is not enabled */
9663 if (cfg[CFG_AUTH_ENABLE].current == 0) {
9664 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_debug_msg,
9601
9602 mutex_exit(&hba->auth_lock);
9603
9604 return (DFC_AUTH_LOCAL_REMOTE_PWD_EQUAL);
9605 }
9606 }
9607 /* Update remote entry */
9608 auth_key->remote_password_length = dfc_pwd->rpw_new.length;

--- 42 unchanged lines hidden (view full) ---

9651 NODELIST *ndlp;
9652 uint32_t rc;
9653 time_t auth_time;
9654 uint32_t update;
9655
9656 /* Return is authentication is not enabled */
9657 if (cfg[CFG_AUTH_ENABLE].current == 0) {
9658 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fcsp_debug_msg,
9665 "emlxs_dhc_get_auth_status. Auth disabled.");
9659 "dhc_get_auth_status. Auth disabled.");
9666
9667 return (DFC_AUTH_AUTHENTICATION_DISABLED);
9668 }
9669 mutex_enter(&hba->auth_lock);
9670
9671 auth_cfg = emlxs_auth_cfg_get(hba, (uint8_t *)&fcsp_status->lwwpn,
9672 (uint8_t *)&fcsp_status->rwwpn);
9673
9674 if (!auth_cfg) {
9675 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
9660
9661 return (DFC_AUTH_AUTHENTICATION_DISABLED);
9662 }
9663 mutex_enter(&hba->auth_lock);
9664
9665 auth_cfg = emlxs_auth_cfg_get(hba, (uint8_t *)&fcsp_status->lwwpn,
9666 (uint8_t *)&fcsp_status->rwwpn);
9667
9668 if (!auth_cfg) {
9669 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
9676 "emlxs_dhc_get_auth_status: entry not found. %s:%s",
9677 emlxs_wwn_xlate(s_lwwpn, (uint8_t *)&fcsp_status->lwwpn),
9678 emlxs_wwn_xlate(s_rwwpn, (uint8_t *)&fcsp_status->rwwpn));
9670 "dhc_get_auth_status: entry not found. %s:%s",
9671 emlxs_wwn_xlate(s_lwwpn, sizeof (s_lwwpn),
9672 (uint8_t *)&fcsp_status->lwwpn),
9673 emlxs_wwn_xlate(s_rwwpn, sizeof (s_rwwpn),
9674 (uint8_t *)&fcsp_status->rwwpn));
9679
9680 mutex_exit(&hba->auth_lock);
9681
9682 return (DFC_AUTH_NOT_CONFIGURED);
9683 }
9684 if (bcmp((uint8_t *)&fcsp_status->rwwpn,
9685 (uint8_t *)emlxs_fabric_wwn, 8) == 0) {
9686 auth_status = &port->port_dhc.auth_status;
9687 auth_time = port->port_dhc.auth_time;
9675
9676 mutex_exit(&hba->auth_lock);
9677
9678 return (DFC_AUTH_NOT_CONFIGURED);
9679 }
9680 if (bcmp((uint8_t *)&fcsp_status->rwwpn,
9681 (uint8_t *)emlxs_fabric_wwn, 8) == 0) {
9682 auth_status = &port->port_dhc.auth_status;
9683 auth_time = port->port_dhc.auth_time;
9688 ndlp = emlxs_node_find_did(port, FABRIC_DID);
9684 ndlp = emlxs_node_find_did(port, FABRIC_DID, 1);
9689 } else {
9690 auth_status = &auth_cfg->auth_status;
9691 auth_time = auth_cfg->auth_time;
9692 ndlp = auth_cfg->node;
9693 }
9694
9695 update = 0;
9696

--- 40 unchanged lines hidden (view full) ---

9737 emlxs_config_t *cfg = &CFG;
9738 emlxs_auth_cfg_t *auth_cfg;
9739 uint32_t i;
9740
9741 /* Return if authentication is not enabled */
9742 if (cfg[CFG_AUTH_ENABLE].current == 0) {
9743 EMLXS_MSGF(EMLXS_CONTEXT,
9744 &emlxs_fcsp_debug_msg,
9685 } else {
9686 auth_status = &auth_cfg->auth_status;
9687 auth_time = auth_cfg->auth_time;
9688 ndlp = auth_cfg->node;
9689 }
9690
9691 update = 0;
9692

--- 40 unchanged lines hidden (view full) ---

9733 emlxs_config_t *cfg = &CFG;
9734 emlxs_auth_cfg_t *auth_cfg;
9735 uint32_t i;
9736
9737 /* Return if authentication is not enabled */
9738 if (cfg[CFG_AUTH_ENABLE].current == 0) {
9739 EMLXS_MSGF(EMLXS_CONTEXT,
9740 &emlxs_fcsp_debug_msg,
9745 "emlxs_dhc_get_auth_cfg_table. Auth disabled.");
9741 "dhc_get_auth_cfg_table. Auth disabled.");
9746
9747 return (DFC_AUTH_AUTHENTICATION_DISABLED);
9748 }
9749 for (auth_cfg = hba->auth_cfg.next;
9750 auth_cfg != &hba->auth_cfg;
9751 auth_cfg = auth_cfg->next) {
9752 bcopy((uint8_t *)&auth_cfg->local_entity,
9753 (uint8_t *)&fcsp_cfg->lwwpn, 8);

--- 36 unchanged lines hidden (view full) ---

9790 emlxs_port_t *port = &PPORT;
9791 emlxs_config_t *cfg = &CFG;
9792 emlxs_auth_key_t *auth_key;
9793
9794 /* Return if authentication is not enabled */
9795 if (cfg[CFG_AUTH_ENABLE].current == 0) {
9796 EMLXS_MSGF(EMLXS_CONTEXT,
9797 &emlxs_fcsp_debug_msg,
9742
9743 return (DFC_AUTH_AUTHENTICATION_DISABLED);
9744 }
9745 for (auth_cfg = hba->auth_cfg.next;
9746 auth_cfg != &hba->auth_cfg;
9747 auth_cfg = auth_cfg->next) {
9748 bcopy((uint8_t *)&auth_cfg->local_entity,
9749 (uint8_t *)&fcsp_cfg->lwwpn, 8);

--- 36 unchanged lines hidden (view full) ---

9786 emlxs_port_t *port = &PPORT;
9787 emlxs_config_t *cfg = &CFG;
9788 emlxs_auth_key_t *auth_key;
9789
9790 /* Return if authentication is not enabled */
9791 if (cfg[CFG_AUTH_ENABLE].current == 0) {
9792 EMLXS_MSGF(EMLXS_CONTEXT,
9793 &emlxs_fcsp_debug_msg,
9798 "emlxs_dhc_get_auth_key_table. Auth disabled.");
9794 "dhc_get_auth_key_table. Auth disabled.");
9799
9800 return (DFC_AUTH_AUTHENTICATION_DISABLED);
9801 }
9802 for (auth_key = hba->auth_key.next;
9803 auth_key != &hba->auth_key;
9804 auth_key = auth_key->next) {
9805 bcopy((uint8_t *)&auth_key->local_entity,
9806 (uint8_t *)&auth_pwd->lwwpn, 8);

--- 39 unchanged lines hidden ---
9795
9796 return (DFC_AUTH_AUTHENTICATION_DISABLED);
9797 }
9798 for (auth_key = hba->auth_key.next;
9799 auth_key != &hba->auth_key;
9800 auth_key = auth_key->next) {
9801 bcopy((uint8_t *)&auth_key->local_entity,
9802 (uint8_t *)&auth_pwd->lwwpn, 8);

--- 39 unchanged lines hidden ---