[PATCH 2/4] uefi: uefidump: add dumping for DNS device path
Ivan Hu
ivan.hu at canonical.com
Thu Oct 26 09:42:21 UTC 2017
DNS device path was added on UEFI spec version 2.7
Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
---
src/lib/include/fwts_uefi.h | 9 ++++++++-
src/uefi/uefidump/uefidump.c | 13 +++++++++++++
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/src/lib/include/fwts_uefi.h b/src/lib/include/fwts_uefi.h
index db83f2f..0821069 100644
--- a/src/lib/include/fwts_uefi.h
+++ b/src/lib/include/fwts_uefi.h
@@ -254,7 +254,8 @@ typedef enum {
FWTS_UEFI_BLUETOOTH_DEVICE_PATH_SUBTYPE = (0x1b),
FWTS_UEFI_WIRELESS_DEVICE_PATH_SUBTYPE = (0x1c),
FWTS_UEFI_EMMC_DEVICE_PATH_SUBTYPE = (0x1d),
- FWTS_UEFI_BLUETOOTHLE_DEVICE_PATH_SUBTYPE = (0x1e)
+ FWTS_UEFI_BLUETOOTHLE_DEVICE_PATH_SUBTYPE = (0x1e),
+ FWTS_UEFI_DNS_DEVICE_PATH_SUBTYPE = (0x1f)
} messaging_dev_path_subtypes;
typedef enum {
@@ -565,6 +566,12 @@ typedef struct {
typedef struct {
fwts_uefi_dev_path dev_path;
+ uint8_t isipv6;
+ uint8_t dns_addr[0];
+} __attribute__((packed)) fwts_uefi_dns_dev_path;
+
+typedef struct {
+ fwts_uefi_dev_path dev_path;
uint32_t partition_number;
uint64_t partition_start;
uint64_t partition_size;
diff --git a/src/uefi/uefidump/uefidump.c b/src/uefi/uefidump/uefidump.c
index af20f85..f73ed6e 100644
--- a/src/uefi/uefidump/uefidump.c
+++ b/src/uefi/uefidump/uefidump.c
@@ -549,6 +549,19 @@ static char *uefidump_build_dev_path(char *path, fwts_uefi_dev_path *dev_path, c
b->bluetooth_addr[3], b->bluetooth_addr[4], b->bluetooth_addr[5], b->addr_type);
}
break;
+ case FWTS_UEFI_DNS_DEVICE_PATH_SUBTYPE:
+ if (dev_path_len > sizeof(fwts_uefi_dns_dev_path)) {
+ size_t i;
+ fwts_uefi_dns_dev_path *d = (fwts_uefi_dns_dev_path *)dev_path;
+ uint16_t len = d->dev_path.length[0] | (((uint16_t)d->dev_path.length[1]) << 8);
+ path = uefidump_vprintf(path, "\\DNS(0x%" PRIx8 ",", d->isipv6);
+
+ /* dump one or more DNS server address */
+ for (i = 0; i < (len - sizeof(fwts_uefi_dns_dev_path)); i++)
+ path = uefidump_vprintf(path, "%02" PRIx8 , d->dns_addr[i]);
+ path = uefidump_vprintf(path, ")");
+ }
+ break;
default:
path = uefidump_vprintf(path, "\\Unknown-MESSAGING-DEV-PATH(0x%" PRIx8 ")", dev_path->subtype);
break;
--
2.7.4
More information about the fwts-devel
mailing list