Blob Blame History Raw
From fb287742d4221195708f5865fd5335d43e8a8a5d Mon Sep 17 00:00:00 2001
From: Eugene Syromyatnikov <evgsyr@gmail.com>
Date: Sat, 19 Oct 2019 10:44:36 +0200
Subject: [PATCH 64/76] rtnl_link: print pad field in the struct ifla_port_vsi
 decoder

And steamline the flow a bit.

* rtnl_link.c (decode_ifla_port_vsi): Factor the printing code out of
the conditional statement, add pad field printing.
* tests/nlattr_ifla_port.c: Add check for the pad field printing.
---
 rtnl_link.c              | 19 ++++++++++++-------
 tests/nlattr_ifla_port.c | 15 +++++++++++++++
 2 files changed, 27 insertions(+), 7 deletions(-)

Index: strace-5.1/rtnl_link.c
===================================================================
--- strace-5.1.orig/rtnl_link.c	2020-01-29 12:36:17.631477314 +0100
+++ strace-5.1/rtnl_link.c	2020-01-29 12:36:19.726458084 +0100
@@ -560,13 +560,18 @@
 
 	if (len < sizeof(vsi))
 		return false;
-	else if (!umove_or_printaddr(tcp, addr, &vsi)) {
-		PRINT_FIELD_U("{", vsi, vsi_mgr_id);
-		PRINT_FIELD_STRING(", ", vsi, vsi_type_id,
-				   sizeof(vsi.vsi_type_id), QUOTE_FORCE_HEX);
-		PRINT_FIELD_U(", ", vsi, vsi_type_version);
-		tprints("}");
-	}
+	if (umove_or_printaddr(tcp, addr, &vsi))
+		return true;
+
+	PRINT_FIELD_U("{", vsi, vsi_mgr_id);
+	PRINT_FIELD_STRING(", ", vsi, vsi_type_id,
+			   sizeof(vsi.vsi_type_id), QUOTE_FORCE_HEX);
+	PRINT_FIELD_U(", ", vsi, vsi_type_version);
+
+	if (!IS_ARRAY_ZERO(vsi.pad))
+		PRINT_FIELD_HEX_ARRAY(", ", vsi, pad);
+
+	tprints("}");
 
 	return true;
 }
Index: strace-5.1/tests/nlattr_ifla_port.c
===================================================================
--- strace-5.1.orig/tests/nlattr_ifla_port.c	2018-12-10 01:00:00.000000000 +0100
+++ strace-5.1/tests/nlattr_ifla_port.c	2020-01-29 12:36:19.729458056 +0100
@@ -57,6 +57,21 @@
 				  printf(", vsi_type_id=\"\\x61\\x62\\x63\"");
 				  PRINT_FIELD_U(", ", vsi, vsi_type_version);
 				  printf("}"));
+
+	static const struct ifla_port_vsi vsi2 = {
+		.vsi_mgr_id = 0xab,
+		.vsi_type_id = { 10, 0, 255 },
+		.vsi_type_version = 0xef,
+		.pad = { 0, 1, 2 },
+	};
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_PORT_VSI_TYPE, pattern, vsi2,
+				  PRINT_FIELD_U("{", vsi2, vsi_mgr_id);
+				  printf(", vsi_type_id=\"\\x0a\\x00\\xff\"");
+				  PRINT_FIELD_U(", ", vsi2, vsi_type_version);
+				  printf(", pad=\"\\x00\\x01\\x02\"");
+				  printf("}"));
 #endif
 
 	puts("+++ exited with 0 +++");
Index: strace-5.1/tests-m32/nlattr_ifla_port.c
===================================================================
--- strace-5.1.orig/tests-m32/nlattr_ifla_port.c	2018-12-10 01:00:00.000000000 +0100
+++ strace-5.1/tests-m32/nlattr_ifla_port.c	2020-01-29 12:36:51.841163297 +0100
@@ -57,6 +57,21 @@
 				  printf(", vsi_type_id=\"\\x61\\x62\\x63\"");
 				  PRINT_FIELD_U(", ", vsi, vsi_type_version);
 				  printf("}"));
+
+	static const struct ifla_port_vsi vsi2 = {
+		.vsi_mgr_id = 0xab,
+		.vsi_type_id = { 10, 0, 255 },
+		.vsi_type_version = 0xef,
+		.pad = { 0, 1, 2 },
+	};
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_PORT_VSI_TYPE, pattern, vsi2,
+				  PRINT_FIELD_U("{", vsi2, vsi_mgr_id);
+				  printf(", vsi_type_id=\"\\x0a\\x00\\xff\"");
+				  PRINT_FIELD_U(", ", vsi2, vsi_type_version);
+				  printf(", pad=\"\\x00\\x01\\x02\"");
+				  printf("}"));
 #endif
 
 	puts("+++ exited with 0 +++");
Index: strace-5.1/tests-mx32/nlattr_ifla_port.c
===================================================================
--- strace-5.1.orig/tests-mx32/nlattr_ifla_port.c	2018-12-10 01:00:00.000000000 +0100
+++ strace-5.1/tests-mx32/nlattr_ifla_port.c	2020-01-29 12:36:51.843163278 +0100
@@ -57,6 +57,21 @@
 				  printf(", vsi_type_id=\"\\x61\\x62\\x63\"");
 				  PRINT_FIELD_U(", ", vsi, vsi_type_version);
 				  printf("}"));
+
+	static const struct ifla_port_vsi vsi2 = {
+		.vsi_mgr_id = 0xab,
+		.vsi_type_id = { 10, 0, 255 },
+		.vsi_type_version = 0xef,
+		.pad = { 0, 1, 2 },
+	};
+	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
+				  init_ifinfomsg, print_ifinfomsg,
+				  IFLA_PORT_VSI_TYPE, pattern, vsi2,
+				  PRINT_FIELD_U("{", vsi2, vsi_mgr_id);
+				  printf(", vsi_type_id=\"\\x0a\\x00\\xff\"");
+				  PRINT_FIELD_U(", ", vsi2, vsi_type_version);
+				  printf(", pad=\"\\x00\\x01\\x02\"");
+				  printf("}"));
 #endif
 
 	puts("+++ exited with 0 +++");