mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-30 00:54:06 +02:00
NetworkPkg: Support bracketed IPv6 address during a redirection in iSCSI
According to RFC 3720, the TargetAddress provided in a redirection might be a DNS host name, a dotted-decimal IPv4 address, or a bracketed IPv6 address. Current ISCSI driver in Networkpkg only supports dotted-decimal IPv4 address, so we need add IPv6 address support since it is a combo driver supporting dual stack. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Zhang Lubo <lubo.zhang@intel.com> Cc: Ye Ting <ting.ye@intel.com> Cc: Fu Siyuan <siyuan.fu@intel.com> Cc: Wu Jiaxin <jiaxin.wu@intel.com> Reviewed-by: Fu Siyuan <siyuan.fu@intel.com>
This commit is contained in:
parent
8aa2cdd79f
commit
9c3dcd0f56
@ -1091,12 +1091,47 @@ IScsiUpdateTargetAddress (
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!NET_IS_DIGIT (TargetAddress[0])) {
|
//
|
||||||
|
// RFC 3720 defines format of the TargetAddress=domainname[:port][,portal-group-tag]
|
||||||
|
// The domainname can be specified as either a DNS host name, adotted-decimal IPv4 address,
|
||||||
|
// or a bracketed IPv6 address as specified in [RFC2732].
|
||||||
|
//
|
||||||
|
if (NET_IS_DIGIT (TargetAddress[0])) {
|
||||||
//
|
//
|
||||||
// The domainname of the target may be presented in three formats: a DNS host name,
|
// The domainname of the target is presented in a dotted-decimal IPv4 address format.
|
||||||
// a dotted-decimal IPv4 address, or a bracketed IPv6 address. Only accept dotted
|
|
||||||
// IPv4 address.
|
|
||||||
//
|
//
|
||||||
|
IpStr = TargetAddress;
|
||||||
|
|
||||||
|
while ((*TargetAddress != '\0') && (*TargetAddress != ':') && (*TargetAddress != ',')) {
|
||||||
|
//
|
||||||
|
// NULL, ':', or ',' ends the IPv4 string.
|
||||||
|
//
|
||||||
|
TargetAddress++;
|
||||||
|
}
|
||||||
|
} else if (*TargetAddress == ISCSI_REDIRECT_ADDR_START_DELIMITER){
|
||||||
|
//
|
||||||
|
// The domainname of the target is presented in a bracketed IPv6 address format.
|
||||||
|
//
|
||||||
|
TargetAddress ++;
|
||||||
|
IpStr = TargetAddress;
|
||||||
|
while ((*TargetAddress != '\0') && (*TargetAddress != ISCSI_REDIRECT_ADDR_END_DELIMITER)) {
|
||||||
|
//
|
||||||
|
// ']' ends the IPv6 string.
|
||||||
|
//
|
||||||
|
TargetAddress++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*TargetAddress != ISCSI_REDIRECT_ADDR_END_DELIMITER) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
*TargetAddress = '\0';
|
||||||
|
TargetAddress ++;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
//
|
||||||
|
// The domainname of the target is presented in the format of a DNS host name.
|
||||||
|
// Temporary not supported.
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1105,15 +1140,6 @@ IScsiUpdateTargetAddress (
|
|||||||
//
|
//
|
||||||
NvData->OriginalTargetPort = NvData->TargetPort;
|
NvData->OriginalTargetPort = NvData->TargetPort;
|
||||||
|
|
||||||
IpStr = TargetAddress;
|
|
||||||
|
|
||||||
while ((*TargetAddress != 0) && (*TargetAddress != ':') && (*TargetAddress != ',')) {
|
|
||||||
//
|
|
||||||
// NULL, ':', or ',' ends the IPv4 string.
|
|
||||||
//
|
|
||||||
TargetAddress++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*TargetAddress == ',') {
|
if (*TargetAddress == ',') {
|
||||||
//
|
//
|
||||||
// Comma and the portal group tag MUST be ommitted if the TargetAddress is sent
|
// Comma and the portal group tag MUST be ommitted if the TargetAddress is sent
|
||||||
@ -1133,7 +1159,7 @@ IScsiUpdateTargetAddress (
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//
|
//
|
||||||
// The string only contains the IPv4 address. Use the well-known port.
|
// The string only contains the Target address. Use the well-known port.
|
||||||
//
|
//
|
||||||
NvData->TargetPort = ISCSI_WELL_KNOWN_PORT;
|
NvData->TargetPort = ISCSI_WELL_KNOWN_PORT;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
The header file of iSCSI Protocol that defines many specific data structures.
|
The header file of iSCSI Protocol that defines many specific data structures.
|
||||||
|
|
||||||
Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -40,6 +40,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#define ISCSI_VERSION_MAX 0x00
|
#define ISCSI_VERSION_MAX 0x00
|
||||||
#define ISCSI_VERSION_MIN 0x00
|
#define ISCSI_VERSION_MIN 0x00
|
||||||
|
|
||||||
|
#define ISCSI_REDIRECT_ADDR_START_DELIMITER '['
|
||||||
|
#define ISCSI_REDIRECT_ADDR_END_DELIMITER ']'
|
||||||
|
|
||||||
#define ISCSI_KEY_AUTH_METHOD "AuthMethod"
|
#define ISCSI_KEY_AUTH_METHOD "AuthMethod"
|
||||||
#define ISCSI_KEY_HEADER_DIGEST "HeaderDigest"
|
#define ISCSI_KEY_HEADER_DIGEST "HeaderDigest"
|
||||||
#define ISCSI_KEY_DATA_DIGEST "DataDigest"
|
#define ISCSI_KEY_DATA_DIGEST "DataDigest"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user