diff mbox series

[iproute2-next,v2,2/8] dcb: app: modify dcb-app print functions for dcb-rewr reuse

Message ID 20230510-dcb-rewr-v2-2-9f38e688117e@microchip.com (mailing list archive)
State Superseded
Delegated to: David Ahern
Headers show
Series Introduce new dcb-rewr subcommand | expand

Checks

Context Check Description
netdev/tree_selection success Not a local patch

Commit Message

Daniel Machon May 25, 2023, 6:10 p.m. UTC
Where dcb-app requires protocol to be the printed key, dcb-rewr requires
it to be the priority. Adapt existing dcb-app print functions for this.

dcb_app_print_filtered() has been modified, to take two callbacks; one
for printing the entire string (pid and prio), and one for the pid type
(dec, hex, dscp, pcp). This saves us for making one dedicated function
for each pid type for both app and rewr.

dcb_app_print_key_*() functions have been renamed to
dcb_app_print_pid_*() to align with new situation. Also, none of them
will print the colon anymore.

Signed-off-by: Daniel Machon <daniel.machon@microchip.com>
---
 dcb/dcb_app.c | 58 ++++++++++++++++++++++++++++++++++++----------------------
 1 file changed, 36 insertions(+), 22 deletions(-)

Comments

Petr Machata May 29, 2023, 5:09 p.m. UTC | #1
Daniel Machon <daniel.machon@microchip.com> writes:

> Where dcb-app requires protocol to be the printed key, dcb-rewr requires
> it to be the priority. Adapt existing dcb-app print functions for this.
>
> dcb_app_print_filtered() has been modified, to take two callbacks; one
> for printing the entire string (pid and prio), and one for the pid type
> (dec, hex, dscp, pcp). This saves us for making one dedicated function
> for each pid type for both app and rewr.
>
> dcb_app_print_key_*() functions have been renamed to
> dcb_app_print_pid_*() to align with new situation. Also, none of them
> will print the colon anymore.
>
> Signed-off-by: Daniel Machon <daniel.machon@microchip.com>

There are about four patches included in this one patch: the %d->%u
change, the colon shenanigans, the renaming, and prototype change of
dcb_app_print_filtered().

I think the code is OK, but I would appreciate splitting into a patch
per feature.
Daniel Machon May 30, 2023, 8:01 a.m. UTC | #2
> > Where dcb-app requires protocol to be the printed key, dcb-rewr requires
> > it to be the priority. Adapt existing dcb-app print functions for this.
> >
> > dcb_app_print_filtered() has been modified, to take two callbacks; one
> > for printing the entire string (pid and prio), and one for the pid type
> > (dec, hex, dscp, pcp). This saves us for making one dedicated function
> > for each pid type for both app and rewr.
> >
> > dcb_app_print_key_*() functions have been renamed to
> > dcb_app_print_pid_*() to align with new situation. Also, none of them
> > will print the colon anymore.
> >
> > Signed-off-by: Daniel Machon <daniel.machon@microchip.com>
> 
> There are about four patches included in this one patch: the %d->%u
> change, the colon shenanigans, the renaming, and prototype change of
> dcb_app_print_filtered().
> 
> I think the code is OK, but I would appreciate splitting into a patch
> per feature.

Sure I can split those changes up.
Daniel Machon May 31, 2023, 8:31 a.m. UTC | #3
> Daniel Machon <daniel.machon@microchip.com> writes:
> 
> > Where dcb-app requires protocol to be the printed key, dcb-rewr requires
> > it to be the priority. Adapt existing dcb-app print functions for this.
> >
> > dcb_app_print_filtered() has been modified, to take two callbacks; one
> > for printing the entire string (pid and prio), and one for the pid type
> > (dec, hex, dscp, pcp). This saves us for making one dedicated function
> > for each pid type for both app and rewr.
> >
> > dcb_app_print_key_*() functions have been renamed to
> > dcb_app_print_pid_*() to align with new situation. Also, none of them
> > will print the colon anymore.
> >
> > Signed-off-by: Daniel Machon <daniel.machon@microchip.com>
> 
> There are about four patches included in this one patch: the %d->%u
> change, the colon shenanigans, the renaming, and prototype change of
> dcb_app_print_filtered().
> 
> I think the code is OK, but I would appreciate splitting into a patch
> per feature.

Actually, IMHO, the 'colon shenanigans' does not make much sense in a
patch of its own, since its not really a standalone feature, but rather
some change that is required for the prototype change of
dcb_app_print_filtered?
Petr Machata May 31, 2023, 11:26 a.m. UTC | #4
Daniel Machon <daniel.machon@microchip.com> writes:

>> Daniel Machon <daniel.machon@microchip.com> writes:
>> 
>> > Where dcb-app requires protocol to be the printed key, dcb-rewr requires
>> > it to be the priority. Adapt existing dcb-app print functions for this.
>> >
>> > dcb_app_print_filtered() has been modified, to take two callbacks; one
>> > for printing the entire string (pid and prio), and one for the pid type
>> > (dec, hex, dscp, pcp). This saves us for making one dedicated function
>> > for each pid type for both app and rewr.
>> >
>> > dcb_app_print_key_*() functions have been renamed to
>> > dcb_app_print_pid_*() to align with new situation. Also, none of them
>> > will print the colon anymore.
>> >
>> > Signed-off-by: Daniel Machon <daniel.machon@microchip.com>
>> 
>> There are about four patches included in this one patch: the %d->%u
>> change, the colon shenanigans, the renaming, and prototype change of
>> dcb_app_print_filtered().
>> 
>> I think the code is OK, but I would appreciate splitting into a patch
>> per feature.
>
> Actually, IMHO, the 'colon shenanigans' does not make much sense in a
> patch of its own, since its not really a standalone feature, but rather
> some change that is required for the prototype change of
> dcb_app_print_filtered? 

It doesn't make sense on its own, but it also does not get sent on its
own, but together with the following patches. Its role is to set stage.

dcb_app_print_filtered() should first stop assuming the callback prints
a colon. So you have one patch where the colon moves from the callback
to _print_filtered(). That's a clean, behavior-neutral change that
should be trivial to review. Then next patch introduces the callback.
Which at that point should likewise be tidy, focused and easy to review,
because it will only deal with the new callback.
David Ahern May 31, 2023, 2:28 p.m. UTC | #5
On 5/31/23 5:26 AM, Petr Machata wrote:
> It doesn't make sense on its own, but it also does not get sent on its
> own, but together with the following patches. Its role is to set stage.
> 
> dcb_app_print_filtered() should first stop assuming the callback prints
> a colon. So you have one patch where the colon moves from the callback
> to _print_filtered(). That's a clean, behavior-neutral change that
> should be trivial to review. Then next patch introduces the callback.
> Which at that point should likewise be tidy, focused and easy to review,
> because it will only deal with the new callback.

agreed. code should evolve in a way that makes it easy to review.
diff mbox series

Patch

diff --git a/dcb/dcb_app.c b/dcb/dcb_app.c
index 8073415ad084..1e36541bec61 100644
--- a/dcb/dcb_app.c
+++ b/dcb/dcb_app.c
@@ -403,38 +403,39 @@  static bool dcb_app_is_port(const struct dcb_app *app)
 	return app->selector == IEEE_8021QAZ_APP_SEL_ANY;
 }
 
-static int dcb_app_print_key_dec(__u16 protocol)
+static int dcb_app_print_pid_dec(__u16 protocol)
 {
-	return print_uint(PRINT_ANY, NULL, "%d:", protocol);
+	return print_uint(PRINT_ANY, NULL, "%u", protocol);
 }
 
-static int dcb_app_print_key_hex(__u16 protocol)
+static int dcb_app_print_pid_hex(__u16 protocol)
 {
-	return print_uint(PRINT_ANY, NULL, "%x:", protocol);
+	return print_uint(PRINT_ANY, NULL, "%x", protocol);
 }
 
-static int dcb_app_print_key_dscp(__u16 protocol)
+static int dcb_app_print_pid_dscp(__u16 protocol)
 {
 	const char *name = rtnl_dsfield_get_name(protocol << 2);
 
-
 	if (!is_json_context() && name != NULL)
-		return print_string(PRINT_FP, NULL, "%s:", name);
-	return print_uint(PRINT_ANY, NULL, "%d:", protocol);
+		return print_string(PRINT_FP, NULL, "%s", name);
+	return print_uint(PRINT_ANY, NULL, "%u", protocol);
 }
 
-static int dcb_app_print_key_pcp(__u16 protocol)
+static int dcb_app_print_pid_pcp(__u16 protocol)
 {
 	/* Print in numerical form, if protocol value is out-of-range */
 	if (protocol > DCB_APP_PCP_MAX)
-		return print_uint(PRINT_ANY, NULL, "%d:", protocol);
+		return print_uint(PRINT_ANY, NULL, "%u", protocol);
 
-	return print_string(PRINT_ANY, NULL, "%s:", pcp_names[protocol]);
+	return print_string(PRINT_ANY, NULL, "%s", pcp_names[protocol]);
 }
 
 static void dcb_app_print_filtered(const struct dcb_app_table *tab,
 				   bool (*filter)(const struct dcb_app *),
-				   int (*print_key)(__u16 protocol),
+				   void (*print_pid_prio)(int (*print_pid)(__u16),
+							  const struct dcb_app *),
+				   int (*print_pid)(__u16 protocol),
 				   const char *json_name,
 				   const char *fp_name)
 {
@@ -453,8 +454,8 @@  static void dcb_app_print_filtered(const struct dcb_app_table *tab,
 		}
 
 		open_json_array(PRINT_JSON, NULL);
-		print_key(app->protocol);
-		print_uint(PRINT_ANY, NULL, "%d ", app->priority);
+		print_pid_prio(print_pid, app);
+		print_string(PRINT_ANY, NULL, "%s", " ");
 		close_json_array(PRINT_JSON, NULL);
 	}
 
@@ -464,9 +465,17 @@  static void dcb_app_print_filtered(const struct dcb_app_table *tab,
 	}
 }
 
+static void dcb_app_print_pid_prio(int (*print_pid)(__u16 protocol),
+				   const struct dcb_app *app)
+{
+	print_pid(app->protocol);
+	print_uint(PRINT_ANY, NULL, ":%u", app->priority);
+}
+
 static void dcb_app_print_ethtype_prio(const struct dcb_app_table *tab)
 {
-	dcb_app_print_filtered(tab, dcb_app_is_ethtype,  dcb_app_print_key_hex,
+	dcb_app_print_filtered(tab, dcb_app_is_ethtype,
+			       dcb_app_print_pid_prio, dcb_app_print_pid_hex,
 			       "ethtype_prio", "ethtype-prio");
 }
 
@@ -474,8 +483,9 @@  static void dcb_app_print_pcp_prio(const struct dcb *dcb,
 				   const struct dcb_app_table *tab)
 {
 	dcb_app_print_filtered(tab, dcb_app_is_pcp,
-			       dcb->numeric ? dcb_app_print_key_dec
-					    : dcb_app_print_key_pcp,
+			       dcb_app_print_pid_prio,
+			       dcb->numeric ? dcb_app_print_pid_dec :
+					      dcb_app_print_pid_pcp,
 			       "pcp_prio", "pcp-prio");
 }
 
@@ -483,26 +493,30 @@  static void dcb_app_print_dscp_prio(const struct dcb *dcb,
 				    const struct dcb_app_table *tab)
 {
 	dcb_app_print_filtered(tab, dcb_app_is_dscp,
-			       dcb->numeric ? dcb_app_print_key_dec
-					    : dcb_app_print_key_dscp,
+			       dcb_app_print_pid_prio,
+			       dcb->numeric ? dcb_app_print_pid_dec :
+					      dcb_app_print_pid_dscp,
 			       "dscp_prio", "dscp-prio");
 }
 
 static void dcb_app_print_stream_port_prio(const struct dcb_app_table *tab)
 {
-	dcb_app_print_filtered(tab, dcb_app_is_stream_port, dcb_app_print_key_dec,
+	dcb_app_print_filtered(tab, dcb_app_is_stream_port,
+			       dcb_app_print_pid_prio, dcb_app_print_pid_dec,
 			       "stream_port_prio", "stream-port-prio");
 }
 
 static void dcb_app_print_dgram_port_prio(const struct dcb_app_table *tab)
 {
-	dcb_app_print_filtered(tab, dcb_app_is_dgram_port, dcb_app_print_key_dec,
+	dcb_app_print_filtered(tab, dcb_app_is_dgram_port,
+			       dcb_app_print_pid_prio, dcb_app_print_pid_dec,
 			       "dgram_port_prio", "dgram-port-prio");
 }
 
 static void dcb_app_print_port_prio(const struct dcb_app_table *tab)
 {
-	dcb_app_print_filtered(tab, dcb_app_is_port, dcb_app_print_key_dec,
+	dcb_app_print_filtered(tab, dcb_app_is_port,
+			       dcb_app_print_pid_prio, dcb_app_print_pid_dec,
 			       "port_prio", "port-prio");
 }