* [PATCH v2][Patch 2/4] MdePkg/UefiDevicePathLib: Add DevPathFromTextDns and DevPathToTextDns libraries
@ 2017-07-26 3:41 Jiaxin Wu
2017-07-26 3:48 ` Fu, Siyuan
2017-08-03 5:10 ` Jin, Eric
0 siblings, 2 replies; 4+ messages in thread
From: Jiaxin Wu @ 2017-07-26 3:41 UTC (permalink / raw)
To: edk2-devel; +Cc: Ye Ting, Fu Siyuan, Wu Jiaxin
V2:
* Add no IP instance case check.
Cc: Ye Ting <ting.ye@intel.com>
Cc: Fu Siyuan <siyuan.fu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Wu Jiaxin <jiaxin.wu@intel.com>
---
.../Library/UefiDevicePathLib/DevicePathFromText.c | 80 ++++++++++++++++++++++
.../Library/UefiDevicePathLib/DevicePathToText.c | 46 +++++++++++++
2 files changed, 126 insertions(+)
diff --git a/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c b/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c
index f50c11c..3cdc11f 100644
--- a/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c
+++ b/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c
@@ -2723,10 +2723,89 @@ DevPathFromTextBluetoothLE (
);
return (EFI_DEVICE_PATH_PROTOCOL *) BluetoothLeDp;
}
/**
+ Converts a text device path node to DNS device path structure.
+
+ @param TextDeviceNode The input Text device path node.
+
+ @return A pointer to the newly-created DNS device path structure.
+
+**/
+EFI_DEVICE_PATH_PROTOCOL *
+DevPathFromTextDns (
+ IN CHAR16 *TextDeviceNode
+ )
+{
+ CHAR16 *DeviceNodeStr;
+ UINT32 DnsServerIpCount;
+ UINT16 DnsDeviceNodeLength;
+ DNS_DEVICE_PATH *DnsDeviceNode;
+ UINT32 DnsServerIpIndex;
+ CHAR16 *DnsServerIp;
+
+
+ //
+ // Count the DNS server address number.
+ //
+ DeviceNodeStr = TextDeviceNode;
+ DnsServerIpCount = 0;
+ while (DeviceNodeStr != NULL && *DeviceNodeStr != L'\0') {
+ GetNextParamStr (&DeviceNodeStr);
+ DnsServerIpCount ++;
+ }
+
+ //
+ // One or more instances of the DNS server address in EFI_IP_ADDRESS,
+ // otherwise, NULL will be returned.
+ //
+ if (DnsServerIpCount == 0) {
+ return NULL;
+ }
+
+ //
+ // Create the DNS DeviceNode.
+ //
+ DnsDeviceNodeLength = (UINT16) (sizeof (EFI_DEVICE_PATH_PROTOCOL) + sizeof (UINT8) + DnsServerIpCount * sizeof (EFI_IP_ADDRESS));
+ DnsDeviceNode = (DNS_DEVICE_PATH *) CreateDeviceNode (
+ MESSAGING_DEVICE_PATH,
+ MSG_DNS_DP,
+ DnsDeviceNodeLength
+ );
+
+ //
+ // Confirm the DNS server address is IPv4 or IPv6 type.
+ //
+ DeviceNodeStr = TextDeviceNode;
+ while (!IS_NULL (*DeviceNodeStr)) {
+ if (*DeviceNodeStr == L'.') {
+ DnsDeviceNode->IsIPv6 = 0x00;
+ break;
+ }
+
+ if (*DeviceNodeStr == L':') {
+ DnsDeviceNode->IsIPv6 = 0x01;
+ break;
+ }
+
+ DeviceNodeStr++;
+ }
+
+ for (DnsServerIpIndex = 0; DnsServerIpIndex < DnsServerIpCount; DnsServerIpIndex++) {
+ DnsServerIp = GetNextParamStr (&TextDeviceNode);
+ if (DnsDeviceNode->IsIPv6 == 0x00) {
+ StrToIpv4Address (DnsServerIp, NULL, &(DnsDeviceNode->DnsServerIp[DnsServerIpIndex].v4), NULL);
+ } else {
+ StrToIpv6Address (DnsServerIp, NULL, &(DnsDeviceNode->DnsServerIp[DnsServerIpIndex].v6), NULL);
+ }
+ }
+
+ return (EFI_DEVICE_PATH_PROTOCOL *) DnsDeviceNode;
+}
+
+/**
Converts a text device path node to URI device path structure.
@param TextDeviceNode The input Text device path node.
@return A pointer to the newly-created URI device path structure.
@@ -3395,10 +3474,11 @@ GLOBAL_REMOVE_IF_UNREFERENCED DEVICE_PATH_FROM_TEXT_TABLE mUefiDevicePathLibDevP
{L"UsbTestAndMeasurement", DevPathFromTextUsbTestAndMeasurement },
{L"UsbWwid", DevPathFromTextUsbWwid },
{L"Unit", DevPathFromTextUnit },
{L"iSCSI", DevPathFromTextiSCSI },
{L"Vlan", DevPathFromTextVlan },
+ {L"Dns", DevPathFromTextDns },
{L"Uri", DevPathFromTextUri },
{L"Bluetooth", DevPathFromTextBluetooth },
{L"Wi-Fi", DevPathFromTextWiFi },
{L"BluetoothLE", DevPathFromTextBluetoothLE },
{L"MediaPath", DevPathFromTextMediaPath },
diff --git a/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c b/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
index b8d9491..63542db 100644
--- a/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
+++ b/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
@@ -1695,10 +1695,55 @@ DevPathToTextBluetoothLE (
BluetoothLE->Address.Type
);
}
/**
+ Converts a DNS device path structure to its string representative.
+
+ @param Str The string representative of input device.
+ @param DevPath The input device path structure.
+ @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
+ of the display node is used, where applicable. If DisplayOnly
+ is FALSE, then the longer text representation of the display node
+ is used.
+ @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
+ representation for a device node can be used, where applicable.
+
+**/
+VOID
+DevPathToTextDns (
+ IN OUT POOL_PRINT *Str,
+ IN VOID *DevPath,
+ IN BOOLEAN DisplayOnly,
+ IN BOOLEAN AllowShortcuts
+ )
+{
+ DNS_DEVICE_PATH *DnsDevPath;
+ UINT32 DnsServerIpCount;
+ UINT32 DnsServerIpIndex;
+
+ DnsDevPath = DevPath;
+ DnsServerIpCount = (UINT32) (DevicePathNodeLength(DnsDevPath) - sizeof (EFI_DEVICE_PATH_PROTOCOL) - sizeof (DnsDevPath->IsIPv6)) / sizeof (EFI_IP_ADDRESS);
+
+ UefiDevicePathLibCatPrint (Str, L"Dns(");
+
+ for (DnsServerIpIndex = 0; DnsServerIpIndex < DnsServerIpCount; DnsServerIpIndex++) {
+ if (DnsDevPath->IsIPv6 == 0x00) {
+ CatIPv4Address (Str, &(DnsDevPath->DnsServerIp[DnsServerIpIndex].v4));
+ } else {
+ CatIPv6Address (Str, &(DnsDevPath->DnsServerIp[DnsServerIpIndex].v6));
+ }
+
+ if (DnsServerIpIndex < DnsServerIpCount - 1) {
+ UefiDevicePathLibCatPrint (Str, L",");
+ }
+ }
+
+ UefiDevicePathLibCatPrint (Str, L")");
+}
+
+/**
Converts a URI device path structure to its string representative.
@param Str The string representative of input device.
@param DevPath The input device path structure.
@param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
@@ -2223,10 +2268,11 @@ GLOBAL_REMOVE_IF_UNREFERENCED const DEVICE_PATH_TO_TEXT_TABLE mUefiDevicePathLib
{MESSAGING_DEVICE_PATH, MSG_INFINIBAND_DP, DevPathToTextInfiniBand },
{MESSAGING_DEVICE_PATH, MSG_UART_DP, DevPathToTextUart },
{MESSAGING_DEVICE_PATH, MSG_VENDOR_DP, DevPathToTextVendor },
{MESSAGING_DEVICE_PATH, MSG_ISCSI_DP, DevPathToTextiSCSI },
{MESSAGING_DEVICE_PATH, MSG_VLAN_DP, DevPathToTextVlan },
+ {MESSAGING_DEVICE_PATH, MSG_DNS_DP, DevPathToTextDns },
{MESSAGING_DEVICE_PATH, MSG_URI_DP, DevPathToTextUri },
{MESSAGING_DEVICE_PATH, MSG_BLUETOOTH_DP, DevPathToTextBluetooth },
{MESSAGING_DEVICE_PATH, MSG_WIFI_DP, DevPathToTextWiFi },
{MESSAGING_DEVICE_PATH, MSG_BLUETOOTH_LE_DP, DevPathToTextBluetoothLE },
{MEDIA_DEVICE_PATH, MEDIA_HARDDRIVE_DP, DevPathToTextHardDrive },
--
1.9.5.msysgit.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2][Patch 2/4] MdePkg/UefiDevicePathLib: Add DevPathFromTextDns and DevPathToTextDns libraries
2017-07-26 3:41 [PATCH v2][Patch 2/4] MdePkg/UefiDevicePathLib: Add DevPathFromTextDns and DevPathToTextDns libraries Jiaxin Wu
@ 2017-07-26 3:48 ` Fu, Siyuan
2017-08-03 5:10 ` Jin, Eric
1 sibling, 0 replies; 4+ messages in thread
From: Fu, Siyuan @ 2017-07-26 3:48 UTC (permalink / raw)
To: Wu, Jiaxin, edk2-devel@lists.01.org; +Cc: Ye, Ting
Reviewed-by: Fu Siyuan <siyuan.fu@intel.com>
-----Original Message-----
From: Wu, Jiaxin
Sent: Wednesday, July 26, 2017 11:41 AM
To: edk2-devel@lists.01.org
Cc: Ye, Ting <ting.ye@intel.com>; Fu, Siyuan <siyuan.fu@intel.com>; Wu, Jiaxin <jiaxin.wu@intel.com>
Subject: [PATCH v2][Patch 2/4] MdePkg/UefiDevicePathLib: Add DevPathFromTextDns and DevPathToTextDns libraries
V2:
* Add no IP instance case check.
Cc: Ye Ting <ting.ye@intel.com>
Cc: Fu Siyuan <siyuan.fu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Wu Jiaxin <jiaxin.wu@intel.com>
---
.../Library/UefiDevicePathLib/DevicePathFromText.c | 80 ++++++++++++++++++++++
.../Library/UefiDevicePathLib/DevicePathToText.c | 46 +++++++++++++
2 files changed, 126 insertions(+)
diff --git a/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c b/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c
index f50c11c..3cdc11f 100644
--- a/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c
+++ b/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c
@@ -2723,10 +2723,89 @@ DevPathFromTextBluetoothLE (
);
return (EFI_DEVICE_PATH_PROTOCOL *) BluetoothLeDp;
}
/**
+ Converts a text device path node to DNS device path structure.
+
+ @param TextDeviceNode The input Text device path node.
+
+ @return A pointer to the newly-created DNS device path structure.
+
+**/
+EFI_DEVICE_PATH_PROTOCOL *
+DevPathFromTextDns (
+ IN CHAR16 *TextDeviceNode
+ )
+{
+ CHAR16 *DeviceNodeStr;
+ UINT32 DnsServerIpCount;
+ UINT16 DnsDeviceNodeLength;
+ DNS_DEVICE_PATH *DnsDeviceNode;
+ UINT32 DnsServerIpIndex;
+ CHAR16 *DnsServerIp;
+
+
+ //
+ // Count the DNS server address number.
+ //
+ DeviceNodeStr = TextDeviceNode;
+ DnsServerIpCount = 0;
+ while (DeviceNodeStr != NULL && *DeviceNodeStr != L'\0') {
+ GetNextParamStr (&DeviceNodeStr);
+ DnsServerIpCount ++;
+ }
+
+ //
+ // One or more instances of the DNS server address in EFI_IP_ADDRESS,
+ // otherwise, NULL will be returned.
+ //
+ if (DnsServerIpCount == 0) {
+ return NULL;
+ }
+
+ //
+ // Create the DNS DeviceNode.
+ //
+ DnsDeviceNodeLength = (UINT16) (sizeof (EFI_DEVICE_PATH_PROTOCOL) + sizeof (UINT8) + DnsServerIpCount * sizeof (EFI_IP_ADDRESS));
+ DnsDeviceNode = (DNS_DEVICE_PATH *) CreateDeviceNode (
+ MESSAGING_DEVICE_PATH,
+ MSG_DNS_DP,
+ DnsDeviceNodeLength
+ );
+
+ //
+ // Confirm the DNS server address is IPv4 or IPv6 type.
+ //
+ DeviceNodeStr = TextDeviceNode;
+ while (!IS_NULL (*DeviceNodeStr)) {
+ if (*DeviceNodeStr == L'.') {
+ DnsDeviceNode->IsIPv6 = 0x00;
+ break;
+ }
+
+ if (*DeviceNodeStr == L':') {
+ DnsDeviceNode->IsIPv6 = 0x01;
+ break;
+ }
+
+ DeviceNodeStr++;
+ }
+
+ for (DnsServerIpIndex = 0; DnsServerIpIndex < DnsServerIpCount; DnsServerIpIndex++) {
+ DnsServerIp = GetNextParamStr (&TextDeviceNode);
+ if (DnsDeviceNode->IsIPv6 == 0x00) {
+ StrToIpv4Address (DnsServerIp, NULL, &(DnsDeviceNode->DnsServerIp[DnsServerIpIndex].v4), NULL);
+ } else {
+ StrToIpv6Address (DnsServerIp, NULL, &(DnsDeviceNode->DnsServerIp[DnsServerIpIndex].v6), NULL);
+ }
+ }
+
+ return (EFI_DEVICE_PATH_PROTOCOL *) DnsDeviceNode;
+}
+
+/**
Converts a text device path node to URI device path structure.
@param TextDeviceNode The input Text device path node.
@return A pointer to the newly-created URI device path structure.
@@ -3395,10 +3474,11 @@ GLOBAL_REMOVE_IF_UNREFERENCED DEVICE_PATH_FROM_TEXT_TABLE mUefiDevicePathLibDevP
{L"UsbTestAndMeasurement", DevPathFromTextUsbTestAndMeasurement },
{L"UsbWwid", DevPathFromTextUsbWwid },
{L"Unit", DevPathFromTextUnit },
{L"iSCSI", DevPathFromTextiSCSI },
{L"Vlan", DevPathFromTextVlan },
+ {L"Dns", DevPathFromTextDns },
{L"Uri", DevPathFromTextUri },
{L"Bluetooth", DevPathFromTextBluetooth },
{L"Wi-Fi", DevPathFromTextWiFi },
{L"BluetoothLE", DevPathFromTextBluetoothLE },
{L"MediaPath", DevPathFromTextMediaPath },
diff --git a/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c b/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
index b8d9491..63542db 100644
--- a/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
+++ b/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
@@ -1695,10 +1695,55 @@ DevPathToTextBluetoothLE (
BluetoothLE->Address.Type
);
}
/**
+ Converts a DNS device path structure to its string representative.
+
+ @param Str The string representative of input device.
+ @param DevPath The input device path structure.
+ @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
+ of the display node is used, where applicable. If DisplayOnly
+ is FALSE, then the longer text representation of the display node
+ is used.
+ @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
+ representation for a device node can be used, where applicable.
+
+**/
+VOID
+DevPathToTextDns (
+ IN OUT POOL_PRINT *Str,
+ IN VOID *DevPath,
+ IN BOOLEAN DisplayOnly,
+ IN BOOLEAN AllowShortcuts
+ )
+{
+ DNS_DEVICE_PATH *DnsDevPath;
+ UINT32 DnsServerIpCount;
+ UINT32 DnsServerIpIndex;
+
+ DnsDevPath = DevPath;
+ DnsServerIpCount = (UINT32) (DevicePathNodeLength(DnsDevPath) - sizeof (EFI_DEVICE_PATH_PROTOCOL) - sizeof (DnsDevPath->IsIPv6)) / sizeof (EFI_IP_ADDRESS);
+
+ UefiDevicePathLibCatPrint (Str, L"Dns(");
+
+ for (DnsServerIpIndex = 0; DnsServerIpIndex < DnsServerIpCount; DnsServerIpIndex++) {
+ if (DnsDevPath->IsIPv6 == 0x00) {
+ CatIPv4Address (Str, &(DnsDevPath->DnsServerIp[DnsServerIpIndex].v4));
+ } else {
+ CatIPv6Address (Str, &(DnsDevPath->DnsServerIp[DnsServerIpIndex].v6));
+ }
+
+ if (DnsServerIpIndex < DnsServerIpCount - 1) {
+ UefiDevicePathLibCatPrint (Str, L",");
+ }
+ }
+
+ UefiDevicePathLibCatPrint (Str, L")");
+}
+
+/**
Converts a URI device path structure to its string representative.
@param Str The string representative of input device.
@param DevPath The input device path structure.
@param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
@@ -2223,10 +2268,11 @@ GLOBAL_REMOVE_IF_UNREFERENCED const DEVICE_PATH_TO_TEXT_TABLE mUefiDevicePathLib
{MESSAGING_DEVICE_PATH, MSG_INFINIBAND_DP, DevPathToTextInfiniBand },
{MESSAGING_DEVICE_PATH, MSG_UART_DP, DevPathToTextUart },
{MESSAGING_DEVICE_PATH, MSG_VENDOR_DP, DevPathToTextVendor },
{MESSAGING_DEVICE_PATH, MSG_ISCSI_DP, DevPathToTextiSCSI },
{MESSAGING_DEVICE_PATH, MSG_VLAN_DP, DevPathToTextVlan },
+ {MESSAGING_DEVICE_PATH, MSG_DNS_DP, DevPathToTextDns },
{MESSAGING_DEVICE_PATH, MSG_URI_DP, DevPathToTextUri },
{MESSAGING_DEVICE_PATH, MSG_BLUETOOTH_DP, DevPathToTextBluetooth },
{MESSAGING_DEVICE_PATH, MSG_WIFI_DP, DevPathToTextWiFi },
{MESSAGING_DEVICE_PATH, MSG_BLUETOOTH_LE_DP, DevPathToTextBluetoothLE },
{MEDIA_DEVICE_PATH, MEDIA_HARDDRIVE_DP, DevPathToTextHardDrive },
--
1.9.5.msysgit.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2][Patch 2/4] MdePkg/UefiDevicePathLib: Add DevPathFromTextDns and DevPathToTextDns libraries
2017-07-26 3:41 [PATCH v2][Patch 2/4] MdePkg/UefiDevicePathLib: Add DevPathFromTextDns and DevPathToTextDns libraries Jiaxin Wu
2017-07-26 3:48 ` Fu, Siyuan
@ 2017-08-03 5:10 ` Jin, Eric
2017-08-03 5:12 ` Wu, Jiaxin
1 sibling, 1 reply; 4+ messages in thread
From: Jin, Eric @ 2017-08-03 5:10 UTC (permalink / raw)
To: Wu, Jiaxin, edk2-devel@lists.01.org
Cc: Ye, Ting, Fu, Siyuan, Wu, Jiaxin, Jin, Eric
Jiaxin,
In V2, the input parameter, TextDeviceNode, in the DevPathFromTextDns() is parsed by GetNextParamStr() twice.
After the first parse, the content of TextDeviceNode is modified and can convert to correct device path node.
Suggest to duplicate the TextDeviceNode or restore the return value of 1st GetNextParamStr() for usage in next step. Thanks.
Best Regards
Eric
-----Original Message-----
From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Jiaxin Wu
Sent: Wednesday, July 26, 2017 11:41 AM
To: edk2-devel@lists.01.org
Cc: Ye, Ting <ting.ye@intel.com>; Fu, Siyuan <siyuan.fu@intel.com>; Wu, Jiaxin <jiaxin.wu@intel.com>
Subject: [edk2] [PATCH v2][Patch 2/4] MdePkg/UefiDevicePathLib: Add DevPathFromTextDns and DevPathToTextDns libraries
V2:
* Add no IP instance case check.
Cc: Ye Ting <ting.ye@intel.com>
Cc: Fu Siyuan <siyuan.fu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Wu Jiaxin <jiaxin.wu@intel.com>
---
.../Library/UefiDevicePathLib/DevicePathFromText.c | 80 ++++++++++++++++++++++
.../Library/UefiDevicePathLib/DevicePathToText.c | 46 +++++++++++++
2 files changed, 126 insertions(+)
diff --git a/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c b/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c
index f50c11c..3cdc11f 100644
--- a/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c
+++ b/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c
@@ -2723,10 +2723,89 @@ DevPathFromTextBluetoothLE (
);
return (EFI_DEVICE_PATH_PROTOCOL *) BluetoothLeDp; }
/**
+ Converts a text device path node to DNS device path structure.
+
+ @param TextDeviceNode The input Text device path node.
+
+ @return A pointer to the newly-created DNS device path structure.
+
+**/
+EFI_DEVICE_PATH_PROTOCOL *
+DevPathFromTextDns (
+ IN CHAR16 *TextDeviceNode
+ )
+{
+ CHAR16 *DeviceNodeStr;
+ UINT32 DnsServerIpCount;
+ UINT16 DnsDeviceNodeLength;
+ DNS_DEVICE_PATH *DnsDeviceNode;
+ UINT32 DnsServerIpIndex;
+ CHAR16 *DnsServerIp;
+
+
+ //
+ // Count the DNS server address number.
+ //
+ DeviceNodeStr = TextDeviceNode;
+ DnsServerIpCount = 0;
+ while (DeviceNodeStr != NULL && *DeviceNodeStr != L'\0') {
+ GetNextParamStr (&DeviceNodeStr);
+ DnsServerIpCount ++;
+ }
+
+ //
+ // One or more instances of the DNS server address in EFI_IP_ADDRESS,
+ // otherwise, NULL will be returned.
+ //
+ if (DnsServerIpCount == 0) {
+ return NULL;
+ }
+
+ //
+ // Create the DNS DeviceNode.
+ //
+ DnsDeviceNodeLength = (UINT16) (sizeof (EFI_DEVICE_PATH_PROTOCOL) + sizeof (UINT8) + DnsServerIpCount * sizeof (EFI_IP_ADDRESS));
+ DnsDeviceNode = (DNS_DEVICE_PATH *) CreateDeviceNode (
+ MESSAGING_DEVICE_PATH,
+ MSG_DNS_DP,
+ DnsDeviceNodeLength
+ );
+
+ //
+ // Confirm the DNS server address is IPv4 or IPv6 type.
+ //
+ DeviceNodeStr = TextDeviceNode;
+ while (!IS_NULL (*DeviceNodeStr)) {
+ if (*DeviceNodeStr == L'.') {
+ DnsDeviceNode->IsIPv6 = 0x00;
+ break;
+ }
+
+ if (*DeviceNodeStr == L':') {
+ DnsDeviceNode->IsIPv6 = 0x01;
+ break;
+ }
+
+ DeviceNodeStr++;
+ }
+
+ for (DnsServerIpIndex = 0; DnsServerIpIndex < DnsServerIpCount; DnsServerIpIndex++) {
+ DnsServerIp = GetNextParamStr (&TextDeviceNode);
+ if (DnsDeviceNode->IsIPv6 == 0x00) {
+ StrToIpv4Address (DnsServerIp, NULL, &(DnsDeviceNode->DnsServerIp[DnsServerIpIndex].v4), NULL);
+ } else {
+ StrToIpv6Address (DnsServerIp, NULL, &(DnsDeviceNode->DnsServerIp[DnsServerIpIndex].v6), NULL);
+ }
+ }
+
+ return (EFI_DEVICE_PATH_PROTOCOL *) DnsDeviceNode; }
+
+/**
Converts a text device path node to URI device path structure.
@param TextDeviceNode The input Text device path node.
@return A pointer to the newly-created URI device path structure.
@@ -3395,10 +3474,11 @@ GLOBAL_REMOVE_IF_UNREFERENCED DEVICE_PATH_FROM_TEXT_TABLE mUefiDevicePathLibDevP
{L"UsbTestAndMeasurement", DevPathFromTextUsbTestAndMeasurement },
{L"UsbWwid", DevPathFromTextUsbWwid },
{L"Unit", DevPathFromTextUnit },
{L"iSCSI", DevPathFromTextiSCSI },
{L"Vlan", DevPathFromTextVlan },
+ {L"Dns", DevPathFromTextDns },
{L"Uri", DevPathFromTextUri },
{L"Bluetooth", DevPathFromTextBluetooth },
{L"Wi-Fi", DevPathFromTextWiFi },
{L"BluetoothLE", DevPathFromTextBluetoothLE },
{L"MediaPath", DevPathFromTextMediaPath },
diff --git a/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c b/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
index b8d9491..63542db 100644
--- a/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
+++ b/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
@@ -1695,10 +1695,55 @@ DevPathToTextBluetoothLE (
BluetoothLE->Address.Type
);
}
/**
+ Converts a DNS device path structure to its string representative.
+
+ @param Str The string representative of input device.
+ @param DevPath The input device path structure.
+ @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
+ of the display node is used, where applicable. If DisplayOnly
+ is FALSE, then the longer text representation of the display node
+ is used.
+ @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
+ representation for a device node can be used, where applicable.
+
+**/
+VOID
+DevPathToTextDns (
+ IN OUT POOL_PRINT *Str,
+ IN VOID *DevPath,
+ IN BOOLEAN DisplayOnly,
+ IN BOOLEAN AllowShortcuts
+ )
+{
+ DNS_DEVICE_PATH *DnsDevPath;
+ UINT32 DnsServerIpCount;
+ UINT32 DnsServerIpIndex;
+
+ DnsDevPath = DevPath;
+ DnsServerIpCount = (UINT32) (DevicePathNodeLength(DnsDevPath) -
+ sizeof (EFI_DEVICE_PATH_PROTOCOL) - sizeof (DnsDevPath->IsIPv6)) /
+ sizeof (EFI_IP_ADDRESS);
+
+ UefiDevicePathLibCatPrint (Str, L"Dns(");
+
+ for (DnsServerIpIndex = 0; DnsServerIpIndex < DnsServerIpCount; DnsServerIpIndex++) {
+ if (DnsDevPath->IsIPv6 == 0x00) {
+ CatIPv4Address (Str, &(DnsDevPath->DnsServerIp[DnsServerIpIndex].v4));
+ } else {
+ CatIPv6Address (Str, &(DnsDevPath->DnsServerIp[DnsServerIpIndex].v6));
+ }
+
+ if (DnsServerIpIndex < DnsServerIpCount - 1) {
+ UefiDevicePathLibCatPrint (Str, L",");
+ }
+ }
+
+ UefiDevicePathLibCatPrint (Str, L")"); }
+
+/**
Converts a URI device path structure to its string representative.
@param Str The string representative of input device.
@param DevPath The input device path structure.
@param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
@@ -2223,10 +2268,11 @@ GLOBAL_REMOVE_IF_UNREFERENCED const DEVICE_PATH_TO_TEXT_TABLE mUefiDevicePathLib
{MESSAGING_DEVICE_PATH, MSG_INFINIBAND_DP, DevPathToTextInfiniBand },
{MESSAGING_DEVICE_PATH, MSG_UART_DP, DevPathToTextUart },
{MESSAGING_DEVICE_PATH, MSG_VENDOR_DP, DevPathToTextVendor },
{MESSAGING_DEVICE_PATH, MSG_ISCSI_DP, DevPathToTextiSCSI },
{MESSAGING_DEVICE_PATH, MSG_VLAN_DP, DevPathToTextVlan },
+ {MESSAGING_DEVICE_PATH, MSG_DNS_DP, DevPathToTextDns },
{MESSAGING_DEVICE_PATH, MSG_URI_DP, DevPathToTextUri },
{MESSAGING_DEVICE_PATH, MSG_BLUETOOTH_DP, DevPathToTextBluetooth },
{MESSAGING_DEVICE_PATH, MSG_WIFI_DP, DevPathToTextWiFi },
{MESSAGING_DEVICE_PATH, MSG_BLUETOOTH_LE_DP, DevPathToTextBluetoothLE },
{MEDIA_DEVICE_PATH, MEDIA_HARDDRIVE_DP, DevPathToTextHardDrive },
--
1.9.5.msysgit.1
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2][Patch 2/4] MdePkg/UefiDevicePathLib: Add DevPathFromTextDns and DevPathToTextDns libraries
2017-08-03 5:10 ` Jin, Eric
@ 2017-08-03 5:12 ` Wu, Jiaxin
0 siblings, 0 replies; 4+ messages in thread
From: Wu, Jiaxin @ 2017-08-03 5:12 UTC (permalink / raw)
To: Jin, Eric, edk2-devel@lists.01.org; +Cc: Ye, Ting, Fu, Siyuan
You are right. Thanks Eric, will send out V3 later.
> -----Original Message-----
> From: Jin, Eric
> Sent: Thursday, August 3, 2017 1:10 PM
> To: Wu, Jiaxin <jiaxin.wu@intel.com>; edk2-devel@lists.01.org
> Cc: Ye, Ting <ting.ye@intel.com>; Fu, Siyuan <siyuan.fu@intel.com>; Wu,
> Jiaxin <jiaxin.wu@intel.com>; Jin, Eric <eric.jin@intel.com>
> Subject: RE: [edk2] [PATCH v2][Patch 2/4] MdePkg/UefiDevicePathLib: Add
> DevPathFromTextDns and DevPathToTextDns libraries
>
> Jiaxin,
>
> In V2, the input parameter, TextDeviceNode, in the DevPathFromTextDns()
> is parsed by GetNextParamStr() twice.
> After the first parse, the content of TextDeviceNode is modified and can
> convert to correct device path node.
>
> Suggest to duplicate the TextDeviceNode or restore the return value of 1st
> GetNextParamStr() for usage in next step. Thanks.
>
> Best Regards
> Eric
>
> -----Original Message-----
> From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of
> Jiaxin Wu
> Sent: Wednesday, July 26, 2017 11:41 AM
> To: edk2-devel@lists.01.org
> Cc: Ye, Ting <ting.ye@intel.com>; Fu, Siyuan <siyuan.fu@intel.com>; Wu,
> Jiaxin <jiaxin.wu@intel.com>
> Subject: [edk2] [PATCH v2][Patch 2/4] MdePkg/UefiDevicePathLib: Add
> DevPathFromTextDns and DevPathToTextDns libraries
>
> V2:
> * Add no IP instance case check.
>
> Cc: Ye Ting <ting.ye@intel.com>
> Cc: Fu Siyuan <siyuan.fu@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Wu Jiaxin <jiaxin.wu@intel.com>
> ---
> .../Library/UefiDevicePathLib/DevicePathFromText.c | 80
> ++++++++++++++++++++++
> .../Library/UefiDevicePathLib/DevicePathToText.c | 46 +++++++++++++
> 2 files changed, 126 insertions(+)
>
> diff --git a/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c
> b/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c
> index f50c11c..3cdc11f 100644
> --- a/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c
> +++ b/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c
> @@ -2723,10 +2723,89 @@ DevPathFromTextBluetoothLE (
> );
> return (EFI_DEVICE_PATH_PROTOCOL *) BluetoothLeDp; }
>
> /**
> + Converts a text device path node to DNS device path structure.
> +
> + @param TextDeviceNode The input Text device path node.
> +
> + @return A pointer to the newly-created DNS device path structure.
> +
> +**/
> +EFI_DEVICE_PATH_PROTOCOL *
> +DevPathFromTextDns (
> + IN CHAR16 *TextDeviceNode
> + )
> +{
> + CHAR16 *DeviceNodeStr;
> + UINT32 DnsServerIpCount;
> + UINT16 DnsDeviceNodeLength;
> + DNS_DEVICE_PATH *DnsDeviceNode;
> + UINT32 DnsServerIpIndex;
> + CHAR16 *DnsServerIp;
> +
> +
> + //
> + // Count the DNS server address number.
> + //
> + DeviceNodeStr = TextDeviceNode;
> + DnsServerIpCount = 0;
> + while (DeviceNodeStr != NULL && *DeviceNodeStr != L'\0') {
> + GetNextParamStr (&DeviceNodeStr);
> + DnsServerIpCount ++;
> + }
> +
> + //
> + // One or more instances of the DNS server address in EFI_IP_ADDRESS,
> + // otherwise, NULL will be returned.
> + //
> + if (DnsServerIpCount == 0) {
> + return NULL;
> + }
> +
> + //
> + // Create the DNS DeviceNode.
> + //
> + DnsDeviceNodeLength = (UINT16) (sizeof (EFI_DEVICE_PATH_PROTOCOL)
> + sizeof (UINT8) + DnsServerIpCount * sizeof (EFI_IP_ADDRESS));
> + DnsDeviceNode = (DNS_DEVICE_PATH *) CreateDeviceNode (
> + MESSAGING_DEVICE_PATH,
> + MSG_DNS_DP,
> + DnsDeviceNodeLength
> + );
> +
> + //
> + // Confirm the DNS server address is IPv4 or IPv6 type.
> + //
> + DeviceNodeStr = TextDeviceNode;
> + while (!IS_NULL (*DeviceNodeStr)) {
> + if (*DeviceNodeStr == L'.') {
> + DnsDeviceNode->IsIPv6 = 0x00;
> + break;
> + }
> +
> + if (*DeviceNodeStr == L':') {
> + DnsDeviceNode->IsIPv6 = 0x01;
> + break;
> + }
> +
> + DeviceNodeStr++;
> + }
> +
> + for (DnsServerIpIndex = 0; DnsServerIpIndex < DnsServerIpCount;
> DnsServerIpIndex++) {
> + DnsServerIp = GetNextParamStr (&TextDeviceNode);
> + if (DnsDeviceNode->IsIPv6 == 0x00) {
> + StrToIpv4Address (DnsServerIp, NULL, &(DnsDeviceNode-
> >DnsServerIp[DnsServerIpIndex].v4), NULL);
> + } else {
> + StrToIpv6Address (DnsServerIp, NULL, &(DnsDeviceNode-
> >DnsServerIp[DnsServerIpIndex].v6), NULL);
> + }
> + }
> +
> + return (EFI_DEVICE_PATH_PROTOCOL *) DnsDeviceNode; }
> +
> +/**
> Converts a text device path node to URI device path structure.
>
> @param TextDeviceNode The input Text device path node.
>
> @return A pointer to the newly-created URI device path structure.
> @@ -3395,10 +3474,11 @@ GLOBAL_REMOVE_IF_UNREFERENCED
> DEVICE_PATH_FROM_TEXT_TABLE mUefiDevicePathLibDevP
> {L"UsbTestAndMeasurement",
> DevPathFromTextUsbTestAndMeasurement },
> {L"UsbWwid", DevPathFromTextUsbWwid },
> {L"Unit", DevPathFromTextUnit },
> {L"iSCSI", DevPathFromTextiSCSI },
> {L"Vlan", DevPathFromTextVlan },
> + {L"Dns", DevPathFromTextDns },
> {L"Uri", DevPathFromTextUri },
> {L"Bluetooth", DevPathFromTextBluetooth },
> {L"Wi-Fi", DevPathFromTextWiFi },
> {L"BluetoothLE", DevPathFromTextBluetoothLE },
> {L"MediaPath", DevPathFromTextMediaPath },
> diff --git a/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
> b/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
> index b8d9491..63542db 100644
> --- a/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
> +++ b/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
> @@ -1695,10 +1695,55 @@ DevPathToTextBluetoothLE (
> BluetoothLE->Address.Type
> );
> }
>
> /**
> + Converts a DNS device path structure to its string representative.
> +
> + @param Str The string representative of input device.
> + @param DevPath The input device path structure.
> + @param DisplayOnly If DisplayOnly is TRUE, then the shorter text
> representation
> + of the display node is used, where applicable. If DisplayOnly
> + is FALSE, then the longer text representation of the display
> node
> + is used.
> + @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut
> forms of text
> + representation for a device node can be used, where
> applicable.
> +
> +**/
> +VOID
> +DevPathToTextDns (
> + IN OUT POOL_PRINT *Str,
> + IN VOID *DevPath,
> + IN BOOLEAN DisplayOnly,
> + IN BOOLEAN AllowShortcuts
> + )
> +{
> + DNS_DEVICE_PATH *DnsDevPath;
> + UINT32 DnsServerIpCount;
> + UINT32 DnsServerIpIndex;
> +
> + DnsDevPath = DevPath;
> + DnsServerIpCount = (UINT32) (DevicePathNodeLength(DnsDevPath) -
> + sizeof (EFI_DEVICE_PATH_PROTOCOL) - sizeof (DnsDevPath->IsIPv6)) /
> + sizeof (EFI_IP_ADDRESS);
> +
> + UefiDevicePathLibCatPrint (Str, L"Dns(");
> +
> + for (DnsServerIpIndex = 0; DnsServerIpIndex < DnsServerIpCount;
> DnsServerIpIndex++) {
> + if (DnsDevPath->IsIPv6 == 0x00) {
> + CatIPv4Address (Str, &(DnsDevPath-
> >DnsServerIp[DnsServerIpIndex].v4));
> + } else {
> + CatIPv6Address (Str, &(DnsDevPath-
> >DnsServerIp[DnsServerIpIndex].v6));
> + }
> +
> + if (DnsServerIpIndex < DnsServerIpCount - 1) {
> + UefiDevicePathLibCatPrint (Str, L",");
> + }
> + }
> +
> + UefiDevicePathLibCatPrint (Str, L")"); }
> +
> +/**
> Converts a URI device path structure to its string representative.
>
> @param Str The string representative of input device.
> @param DevPath The input device path structure.
> @param DisplayOnly If DisplayOnly is TRUE, then the shorter text
> representation
> @@ -2223,10 +2268,11 @@ GLOBAL_REMOVE_IF_UNREFERENCED const
> DEVICE_PATH_TO_TEXT_TABLE mUefiDevicePathLib
> {MESSAGING_DEVICE_PATH, MSG_INFINIBAND_DP,
> DevPathToTextInfiniBand },
> {MESSAGING_DEVICE_PATH, MSG_UART_DP,
> DevPathToTextUart },
> {MESSAGING_DEVICE_PATH, MSG_VENDOR_DP,
> DevPathToTextVendor },
> {MESSAGING_DEVICE_PATH, MSG_ISCSI_DP,
> DevPathToTextiSCSI },
> {MESSAGING_DEVICE_PATH, MSG_VLAN_DP,
> DevPathToTextVlan },
> + {MESSAGING_DEVICE_PATH, MSG_DNS_DP,
> DevPathToTextDns },
> {MESSAGING_DEVICE_PATH, MSG_URI_DP,
> DevPathToTextUri },
> {MESSAGING_DEVICE_PATH, MSG_BLUETOOTH_DP,
> DevPathToTextBluetooth },
> {MESSAGING_DEVICE_PATH, MSG_WIFI_DP,
> DevPathToTextWiFi },
> {MESSAGING_DEVICE_PATH, MSG_BLUETOOTH_LE_DP,
> DevPathToTextBluetoothLE },
> {MEDIA_DEVICE_PATH, MEDIA_HARDDRIVE_DP,
> DevPathToTextHardDrive },
> --
> 1.9.5.msysgit.1
>
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-08-03 5:09 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-07-26 3:41 [PATCH v2][Patch 2/4] MdePkg/UefiDevicePathLib: Add DevPathFromTextDns and DevPathToTextDns libraries Jiaxin Wu
2017-07-26 3:48 ` Fu, Siyuan
2017-08-03 5:10 ` Jin, Eric
2017-08-03 5:12 ` Wu, Jiaxin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox