diff mbox

uefi: uefidump: dumping the new definitions for ipv4 ipv6 device path (LP: #1311538)

Message ID 1398243634-25182-1-git-send-email-ivan.hu@canonical.com
State Rejected
Headers show

Commit Message

Ivan Hu April 23, 2014, 9 a.m. UTC
The definitions, GatewayIPAddress, Subnet Mask have been added to Ipv4 device path
structure and PrefixLength, GatewayIPAddress have been added to Ipv6 device path
structure on UEFI spec 2.3. Add to dump these information on uefidump tool.

This patch also fix the woring dumping size for ipv6 device path.

Signed-off-by: Ivan Hu <ivan.hu@canonical.com>
---
 src/lib/include/fwts_uefi.h  |    4 ++++
 src/uefi/uefidump/uefidump.c |   29 +++++++++++++++++++++--------
 2 files changed, 25 insertions(+), 8 deletions(-)

Comments

Colin Ian King April 23, 2014, 9:20 a.m. UTC | #1
On 23/04/14 10:00, Ivan Hu wrote:
> The definitions, GatewayIPAddress, Subnet Mask have been added to Ipv4 device path
> structure and PrefixLength, GatewayIPAddress have been added to Ipv6 device path
> structure on UEFI spec 2.3. Add to dump these information on uefidump tool.

If these are new fields added to these structures how do we handle
firmware without these fields?


> 
> This patch also fix the woring dumping size for ipv6 device path.
> 
> Signed-off-by: Ivan Hu <ivan.hu@canonical.com>
> ---
>  src/lib/include/fwts_uefi.h  |    4 ++++
>  src/uefi/uefidump/uefidump.c |   29 +++++++++++++++++++++--------
>  2 files changed, 25 insertions(+), 8 deletions(-)
> 
> diff --git a/src/lib/include/fwts_uefi.h b/src/lib/include/fwts_uefi.h
> index da4556e..9d653a5 100644
> --- a/src/lib/include/fwts_uefi.h
> +++ b/src/lib/include/fwts_uefi.h
> @@ -362,6 +362,8 @@ typedef struct {
>    	uint16_t remote_port;
>    	uint16_t protocol;
>    	uint8_t static_ip_address;
> +  	fwts_uefi_ipv4_addr gateway_ip_addr;
> +  	fwts_uefi_ipv4_addr subnet_mask;
>  } __attribute__((packed)) fwts_uefi_ipv4_dev_path;
>  
>  typedef struct {
> @@ -372,6 +374,8 @@ typedef struct {
>    	uint16_t remote_port;
>    	uint16_t protocol;
>    	uint8_t static_ip_address;
> +	uint8_t prefix_length;
> +  	fwts_uefi_ipv6_addr gateway_ip_addr;
>  } __attribute__((packed)) fwts_uefi_ipv6_dev_path;
>  
>  typedef struct {
> diff --git a/src/uefi/uefidump/uefidump.c b/src/uefi/uefidump/uefidump.c
> index e17731f..e885718 100644
> --- a/src/uefi/uefidump/uefidump.c
> +++ b/src/uefi/uefidump/uefidump.c
> @@ -277,24 +277,32 @@ static char *uefidump_build_dev_path(char *path, fwts_uefi_dev_path *dev_path, c
>  				path = uefidump_vprintf(path, "\\IPv4("
>  					"%" PRIu8 ".%" PRIu8 ".%" PRIu8 ".%" PRIu8 ","
>  					"%" PRIu8 ".%" PRIu8 ".%" PRIu8 ".%" PRIu8 ","
> -					"%" PRIu16 ",%" PRIu16 ",%" PRIx16 ",%" PRIx8 ")",
> +					"%" PRIu16 ",%" PRIu16 ",%" PRIx16 ",%" PRIx8 ","
> +					"%" PRIu8 ".%" PRIu8 ".%" PRIu8 ".%" PRIu8 ","
> +					"%" PRIu8 ".%" PRIu8 ".%" PRIu8 ".%" PRIu8 ")",
>  					i->local_ip_addr[0], i->local_ip_addr[1],
>  					i->local_ip_addr[2], i->local_ip_addr[3],
>  					i->remote_ip_addr[0], i->remote_ip_addr[1],
>  					i->remote_ip_addr[2], i->remote_ip_addr[3],
>  					i->local_port, i->remote_port,
> -					i->protocol, i->static_ip_address);
> +					i->protocol, i->static_ip_address,
> +					i->gateway_ip_addr[0], i->gateway_ip_addr[1],
> +					i->gateway_ip_addr[2], i->gateway_ip_addr[3],
> +					i->subnet_mask[0], i->subnet_mask[1],
> +					i->subnet_mask[2], i->subnet_mask[3]);
>  			}
>  			break;
>  		case FWTS_UEFI_IPV6_DEVICE_PATH_SUBTYPE:
>  			if (dev_path_len >= sizeof(fwts_uefi_ipv6_dev_path)) {
>  				fwts_uefi_ipv6_dev_path *i = (fwts_uefi_ipv6_dev_path*)dev_path;
>  				path = uefidump_vprintf(path, "\\IPv6("
> -					"%" PRIx8 ":%" PRIx8 ":%" PRIx8 ":%" PRIx8
> -					":%" PRIx8 ":%" PRIx8 ":%" PRIx8 ":%" PRIx8 ","
> -					"%" PRIx8 ":%" PRIx8 ":%" PRIx8 ":%" PRIx8
> -					":%" PRIx8 ":%" PRIx8 ":%" PRIx8 ":%" PRIx8 ","
> -					"%" PRIu16 ",%" PRIu16 ",%" PRIx16 ",%" PRIx8 ")",
> +					"%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16
> +					":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ","
> +					"%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16
> +					":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ","
> +					"%" PRIu16 ",%" PRIu16 ",%" PRIx16 ",%" PRIx8 "," "%" PRIu8 ","
> +					"%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16
> +					":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ")",
>  					i->local_ip_addr[0], i->local_ip_addr[1],
>  					i->local_ip_addr[2], i->local_ip_addr[3],
>  					i->local_ip_addr[4], i->local_ip_addr[5],
> @@ -304,7 +312,12 @@ static char *uefidump_build_dev_path(char *path, fwts_uefi_dev_path *dev_path, c
>  					i->remote_ip_addr[4], i->remote_ip_addr[5],
>  					i->remote_ip_addr[6], i->remote_ip_addr[7],
>  					i->local_port, i->remote_port,
> -					i->protocol, i->static_ip_address);
> +					i->protocol, i->static_ip_address,
> +					i->prefix_length,
> +					i->gateway_ip_addr[0], i->gateway_ip_addr[1],
> +					i->gateway_ip_addr[2], i->gateway_ip_addr[3],
> +					i->gateway_ip_addr[4], i->gateway_ip_addr[5],
> +					i->gateway_ip_addr[6], i->gateway_ip_addr[7]);
>  			}
>  			break;
>  		case FWTS_UEFI_INFINIBAND_DEVICE_PATH_SUBTYPE:
>
diff mbox

Patch

diff --git a/src/lib/include/fwts_uefi.h b/src/lib/include/fwts_uefi.h
index da4556e..9d653a5 100644
--- a/src/lib/include/fwts_uefi.h
+++ b/src/lib/include/fwts_uefi.h
@@ -362,6 +362,8 @@  typedef struct {
   	uint16_t remote_port;
   	uint16_t protocol;
   	uint8_t static_ip_address;
+  	fwts_uefi_ipv4_addr gateway_ip_addr;
+  	fwts_uefi_ipv4_addr subnet_mask;
 } __attribute__((packed)) fwts_uefi_ipv4_dev_path;
 
 typedef struct {
@@ -372,6 +374,8 @@  typedef struct {
   	uint16_t remote_port;
   	uint16_t protocol;
   	uint8_t static_ip_address;
+	uint8_t prefix_length;
+  	fwts_uefi_ipv6_addr gateway_ip_addr;
 } __attribute__((packed)) fwts_uefi_ipv6_dev_path;
 
 typedef struct {
diff --git a/src/uefi/uefidump/uefidump.c b/src/uefi/uefidump/uefidump.c
index e17731f..e885718 100644
--- a/src/uefi/uefidump/uefidump.c
+++ b/src/uefi/uefidump/uefidump.c
@@ -277,24 +277,32 @@  static char *uefidump_build_dev_path(char *path, fwts_uefi_dev_path *dev_path, c
 				path = uefidump_vprintf(path, "\\IPv4("
 					"%" PRIu8 ".%" PRIu8 ".%" PRIu8 ".%" PRIu8 ","
 					"%" PRIu8 ".%" PRIu8 ".%" PRIu8 ".%" PRIu8 ","
-					"%" PRIu16 ",%" PRIu16 ",%" PRIx16 ",%" PRIx8 ")",
+					"%" PRIu16 ",%" PRIu16 ",%" PRIx16 ",%" PRIx8 ","
+					"%" PRIu8 ".%" PRIu8 ".%" PRIu8 ".%" PRIu8 ","
+					"%" PRIu8 ".%" PRIu8 ".%" PRIu8 ".%" PRIu8 ")",
 					i->local_ip_addr[0], i->local_ip_addr[1],
 					i->local_ip_addr[2], i->local_ip_addr[3],
 					i->remote_ip_addr[0], i->remote_ip_addr[1],
 					i->remote_ip_addr[2], i->remote_ip_addr[3],
 					i->local_port, i->remote_port,
-					i->protocol, i->static_ip_address);
+					i->protocol, i->static_ip_address,
+					i->gateway_ip_addr[0], i->gateway_ip_addr[1],
+					i->gateway_ip_addr[2], i->gateway_ip_addr[3],
+					i->subnet_mask[0], i->subnet_mask[1],
+					i->subnet_mask[2], i->subnet_mask[3]);
 			}
 			break;
 		case FWTS_UEFI_IPV6_DEVICE_PATH_SUBTYPE:
 			if (dev_path_len >= sizeof(fwts_uefi_ipv6_dev_path)) {
 				fwts_uefi_ipv6_dev_path *i = (fwts_uefi_ipv6_dev_path*)dev_path;
 				path = uefidump_vprintf(path, "\\IPv6("
-					"%" PRIx8 ":%" PRIx8 ":%" PRIx8 ":%" PRIx8
-					":%" PRIx8 ":%" PRIx8 ":%" PRIx8 ":%" PRIx8 ","
-					"%" PRIx8 ":%" PRIx8 ":%" PRIx8 ":%" PRIx8
-					":%" PRIx8 ":%" PRIx8 ":%" PRIx8 ":%" PRIx8 ","
-					"%" PRIu16 ",%" PRIu16 ",%" PRIx16 ",%" PRIx8 ")",
+					"%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16
+					":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ","
+					"%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16
+					":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ","
+					"%" PRIu16 ",%" PRIu16 ",%" PRIx16 ",%" PRIx8 "," "%" PRIu8 ","
+					"%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16
+					":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ":%" PRIx16 ")",
 					i->local_ip_addr[0], i->local_ip_addr[1],
 					i->local_ip_addr[2], i->local_ip_addr[3],
 					i->local_ip_addr[4], i->local_ip_addr[5],
@@ -304,7 +312,12 @@  static char *uefidump_build_dev_path(char *path, fwts_uefi_dev_path *dev_path, c
 					i->remote_ip_addr[4], i->remote_ip_addr[5],
 					i->remote_ip_addr[6], i->remote_ip_addr[7],
 					i->local_port, i->remote_port,
-					i->protocol, i->static_ip_address);
+					i->protocol, i->static_ip_address,
+					i->prefix_length,
+					i->gateway_ip_addr[0], i->gateway_ip_addr[1],
+					i->gateway_ip_addr[2], i->gateway_ip_addr[3],
+					i->gateway_ip_addr[4], i->gateway_ip_addr[5],
+					i->gateway_ip_addr[6], i->gateway_ip_addr[7]);
 			}
 			break;
 		case FWTS_UEFI_INFINIBAND_DEVICE_PATH_SUBTYPE: