git: e8c50058e8d0 - main - ddb: use %b when showing flags for an inp

From: Michael Tuexen <tuexen_at_FreeBSD.org>
Date: Sun, 02 Nov 2025 20:15:11 UTC
The branch main has been updated by tuexen:

URL: https://cgit.FreeBSD.org/src/commit/?id=e8c50058e8d03af17b7458bb560ddee29062082f

commit e8c50058e8d03af17b7458bb560ddee29062082f
Author:     Michael Tuexen <tuexen@FreeBSD.org>
AuthorDate: 2025-11-02 16:12:32 +0000
Commit:     Michael Tuexen <tuexen@FreeBSD.org>
CommitDate: 2025-11-02 16:14:57 +0000

    ddb: use %b when showing flags for an inp
    
    This is much more compact. Thanks to markj@ for suggesting the change.
    
    Reviewed by:            markj
    MFC after:              3 days
    Sponsored by:           Netflix, Inc.
    Differential Revision:  https://reviews.freebsd.org/D53507
---
 sys/netinet/in_pcb.c | 160 ++-------------------------------------------------
 sys/netinet/in_pcb.h |  14 +++++
 2 files changed, 18 insertions(+), 156 deletions(-)

diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c
index 79c77c105d9e..4a1a8cdea619 100644
--- a/sys/netinet/in_pcb.c
+++ b/sys/netinet/in_pcb.c
@@ -3058,154 +3058,6 @@ db_print_inconninfo(struct in_conninfo *inc, const char *name, int indent)
 	    ntohs(inc->inc_fport));
 }
 
-static void
-db_print_inpflags(int inp_flags)
-{
-	int comma;
-
-	comma = 0;
-	if (inp_flags & INP_RECVOPTS) {
-		db_printf("%sINP_RECVOPTS", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & INP_RECVRETOPTS) {
-		db_printf("%sINP_RECVRETOPTS", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & INP_RECVDSTADDR) {
-		db_printf("%sINP_RECVDSTADDR", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & INP_HDRINCL) {
-		db_printf("%sINP_HDRINCL", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & INP_HIGHPORT) {
-		db_printf("%sINP_HIGHPORT", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & INP_LOWPORT) {
-		db_printf("%sINP_LOWPORT", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & INP_ANONPORT) {
-		db_printf("%sINP_ANONPORT", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & INP_RECVIF) {
-		db_printf("%sINP_RECVIF", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & INP_MTUDISC) {
-		db_printf("%sINP_MTUDISC", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & INP_RECVTTL) {
-		db_printf("%sINP_RECVTTL", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & INP_DONTFRAG) {
-		db_printf("%sINP_DONTFRAG", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & INP_BINDANY) {
-		db_printf("%sINP_BINDANY", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & INP_INHASHLIST) {
-		db_printf("%sINP_INHASHLIST", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & INP_RECVTOS) {
-		db_printf("%sINP_RECVTOS", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & IN6P_IPV6_V6ONLY) {
-		db_printf("%sIN6P_IPV6_V6ONLY", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & IN6P_PKTINFO) {
-		db_printf("%sIN6P_PKTINFO", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & IN6P_HOPLIMIT) {
-		db_printf("%sIN6P_HOPLIMIT", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & IN6P_HOPOPTS) {
-		db_printf("%sIN6P_HOPOPTS", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & IN6P_DSTOPTS) {
-		db_printf("%sIN6P_DSTOPTS", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & IN6P_RTHDR) {
-		db_printf("%sIN6P_RTHDR", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & IN6P_RTHDRDSTOPTS) {
-		db_printf("%sIN6P_RTHDRDSTOPTS", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & IN6P_TCLASS) {
-		db_printf("%sIN6P_TCLASS", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & IN6P_AUTOFLOWLABEL) {
-		db_printf("%sIN6P_AUTOFLOWLABEL", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & INP_ONESBCAST) {
-		db_printf("%sINP_ONESBCAST", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & INP_DROPPED) {
-		db_printf("%sINP_DROPPED", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & INP_SOCKREF) {
-		db_printf("%sINP_SOCKREF", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & INP_RESERVED_0) {
-		db_printf("%sINP_RESERVED_0", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & INP_BOUNDFIB) {
-		db_printf("%sINP_BOUNDFIB", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & IN6P_RFC2292) {
-		db_printf("%sIN6P_RFC2292", comma ? ", " : "");
-		comma = 1;
-	}
-	if (inp_flags & IN6P_MTU) {
-		db_printf("IN6P_MTU%s", comma ? ", " : "");
-		comma = 1;
-	}
-}
-
-static void
-db_print_inpvflag(u_char inp_vflag)
-{
-	int comma;
-
-	comma = 0;
-	if (inp_vflag & INP_IPV4) {
-		db_printf("%sINP_IPV4", comma ? ", " : "");
-		comma  = 1;
-	}
-	if (inp_vflag & INP_IPV6) {
-		db_printf("%sINP_IPV6", comma ? ", " : "");
-		comma  = 1;
-	}
-	if (inp_vflag & INP_IPV6PROTO) {
-		db_printf("%sINP_IPV6PROTO", comma ? ", " : "");
-		comma  = 1;
-	}
-}
-
 void
 db_print_inpcb(struct inpcb *inp, const char *name, int indent)
 {
@@ -3221,16 +3073,12 @@ db_print_inpcb(struct inpcb *inp, const char *name, int indent)
 	db_print_inconninfo(&inp->inp_inc, "inp_conninfo", indent);
 
 	db_print_indent(indent);
-	db_printf("inp_label: %p   inp_flags: 0x%x (",
-	   inp->inp_label, inp->inp_flags);
-	db_print_inpflags(inp->inp_flags);
-	db_printf(")\n");
+	db_printf("inp_label: %p   inp_flags: 0x%b\n",
+	   inp->inp_label, inp->inp_flags, INP_FLAGS_BITS);
 
 	db_print_indent(indent);
-	db_printf("inp_sp: %p   inp_vflag: 0x%x (", inp->inp_sp,
-	    inp->inp_vflag);
-	db_print_inpvflag(inp->inp_vflag);
-	db_printf(")\n");
+	db_printf("inp_sp: %p   inp_vflag: 0x%b\n", inp->inp_sp,
+	    inp->inp_vflag, INP_VFLAGS_BITS);
 
 	db_print_indent(indent);
 	db_printf("inp_ip_ttl: %d   inp_ip_p: %d   inp_ip_minttl: %d\n",
diff --git a/sys/netinet/in_pcb.h b/sys/netinet/in_pcb.h
index 7d41e3d690e0..60f129bce216 100644
--- a/sys/netinet/in_pcb.h
+++ b/sys/netinet/in_pcb.h
@@ -539,6 +539,9 @@ void 	inp_4tuple_get(struct inpcb *inp, uint32_t *laddr, uint16_t *lp,
 #define	INP_IPV6	0x2
 #define	INP_IPV6PROTO	0x4		/* opened under IPv6 protocol */
 
+/* inp_vflags description for use with printf(9) %b identifier. */
+#define	INP_VFLAGS_BITS	"\20\1INP_IPV4\2INP_IPV6\3INP_IPV6PROTO"
+
 /*
  * Flags for inp_flags.
  */
@@ -582,6 +585,17 @@ void 	inp_4tuple_get(struct inpcb *inp, uint32_t *laddr, uint16_t *lp,
 				 IN6P_TCLASS|IN6P_AUTOFLOWLABEL|IN6P_RFC2292|\
 				 IN6P_MTU)
 
+/* inp_flags description for use with printf(9) %b identifier. */
+#define	INP_FLAGS_BITS	"\20" \
+    "\1INP_RECVOPTS\2INP_RECVRETOPTS\3INP_RECVDSTADDR\4INP_HDRINCL" \
+    "\5INP_HIGHPORT\6INP_LOWPORT\7INP_ANONPORT\10INP_RECVIF" \
+    "\11INP_MTUDISC\12INP_FREED\13INP_RECVTTL\14INP_DONTFRAG" \
+    "\15INP_BINDANY\16INP_INHASHLIST\17INP_RECVTOS\20IN6P_IPV6_V6ONLY" \
+    "\21IN6P_PKTINFO\22IN6P_HOPLIMIT\23IN6P_HOPOPTS\24IN6P_DSTOPTS" \
+    "\25IN6P_RTHDR\26IN6P_RTHDRDSTOPTS\27IN6P_TCLASS\30IN6P_AUTOFLOWLABEL" \
+    "\31INP_INLBGROUP\32INP_ONESBCAST\33INP_DROPPED\34INP_SOCKREF" \
+    "\35INP_RESERVED_0\36INP_BOUNDFIB\37IN6P_RFC2292\40IN6P_MTU"
+
 /*
  * Flags for inp_flags2.
  */