mirror of https://github.com/acidanthera/audk.git
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;
|
||||
}
|
||||
|
||||
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,
|
||||
// a dotted-decimal IPv4 address, or a bracketed IPv6 address. Only accept dotted
|
||||
// IPv4 address.
|
||||
// The domainname of the target is presented in a dotted-decimal IPv4 address format.
|
||||
//
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -1105,15 +1140,6 @@ IScsiUpdateTargetAddress (
|
|||
//
|
||||
NvData->OriginalTargetPort = NvData->TargetPort;
|
||||
|
||||
IpStr = TargetAddress;
|
||||
|
||||
while ((*TargetAddress != 0) && (*TargetAddress != ':') && (*TargetAddress != ',')) {
|
||||
//
|
||||
// NULL, ':', or ',' ends the IPv4 string.
|
||||
//
|
||||
TargetAddress++;
|
||||
}
|
||||
|
||||
if (*TargetAddress == ',') {
|
||||
//
|
||||
// Comma and the portal group tag MUST be ommitted if the TargetAddress is sent
|
||||
|
@ -1133,7 +1159,7 @@ IScsiUpdateTargetAddress (
|
|||
}
|
||||
} 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;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
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
|
||||
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
|
||||
|
@ -40,6 +40,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
#define ISCSI_VERSION_MAX 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_HEADER_DIGEST "HeaderDigest"
|
||||
#define ISCSI_KEY_DATA_DIGEST "DataDigest"
|
||||
|
|
Loading…
Reference in New Issue