git: 407b7bcc9386 - main - libsysdecode: decode combined Netlink message flags

Kristof Provost <[email protected]>
Newsgroups gmane.os.freebsd.devel.cvs.src
Message-ID <6a6724b2.19b7e.6b2f266a__7914.31073318876$1785144518$gmane$org@gitrepo.freebsd.org>
The branch main has been updated by kp:

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

commit 407b7bcc93862fe0c026e254bac8ec0e8318e7e6
Author:     Ishan Agrawal <[email protected]>
AuthorDate: 2026-07-23 02:29:48 +0000
Commit:     Kristof Provost <[email protected]>
CommitDate: 2026-07-27 09:27:54 +0000

    libsysdecode: decode combined Netlink message flags
    
    Change sysdecode_nlm_flag() to decode Netlink message flags as a
    bitmask instead of looking up a single flag value. This correctly
    prints combinations of NLM_F_* flags while preserving any unknown
    bits in hexadecimal.
    
    Reported by:    androvonx95 <[email protected]>
    Reviewed by:    kp
    Signed-off-by:  Ishan Agrawal <[email protected]>
    Sponsored-by:   Google LLC (GSoC 2026)
---
 lib/libsysdecode/flags.c     | 11 ++++++++---
 lib/libsysdecode/netlink.c   |  7 +------
 lib/libsysdecode/sysdecode.h |  2 +-
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/lib/libsysdecode/flags.c b/lib/libsysdecode/flags.c
index f94fb88ebf83..880fe5e1ed49 100644
--- a/lib/libsysdecode/flags.c
+++ b/lib/libsysdecode/flags.c
@@ -1217,9 +1217,14 @@ sysdecode_pfnl_cmd(int cmd)
 	return (lookup_value(pfnl_cmd, cmd));
 }
 
-const char *
-sysdecode_nlm_flag(int flag)
+void
+sysdecode_nlm_flag(FILE *fp, int flags)
 {
 
-	return (lookup_value(nlm_flag, flag));
+	int rem;
+
+	if (!print_mask_int(fp, nlm_flag, flags, &rem))
+		fprintf(fp, "0x%x", rem);
+	else if (rem != 0)
+		fprintf(fp, "|0x%x", rem);
 }
diff --git a/lib/libsysdecode/netlink.c b/lib/libsysdecode/netlink.c
index bb07ad2e4bf7..6e2af72374b0 100644
--- a/lib/libsysdecode/netlink.c
+++ b/lib/libsysdecode/netlink.c
@@ -287,11 +287,7 @@ sysdecode_netlink(FILE *fp, const void *buf, size_t len, int protocol)
 		}
 
 		fprintf(fp, "flags=");
-		const char *nlm_f = sysdecode_nlm_flag(nl->nlmsg_flags);
-		if (nlm_f != NULL)
-			fprintf(fp, "%s", nlm_f);
-		else
-			fprintf(fp, "0x%x", nl->nlmsg_flags);
+		sysdecode_nlm_flag(fp, nl->nlmsg_flags);
 
 		fprintf(fp, ",seq=%u,pid=%u", nl->nlmsg_seq, nl->nlmsg_pid);
 
@@ -371,7 +367,6 @@ sysdecode_netlink(FILE *fp, const void *buf, size_t len, int protocol)
 				family_table[num_family] =
 				    (struct name_table){0, NULL};
 			}
-
 			fprintf(fp, "}");
 			break;
 		default:
diff --git a/lib/libsysdecode/sysdecode.h b/lib/libsysdecode/sysdecode.h
index bd38bb5bdc42..513ecddf07bd 100644
--- a/lib/libsysdecode/sysdecode.h
+++ b/lib/libsysdecode/sysdecode.h
@@ -67,7 +67,7 @@ void	sysdecode_kevent_fflags(FILE *_fp, short _filter, int _fflags,
 	    int _base);
 const char *sysdecode_itimer(int _which);
 const char *sysdecode_pfnl_cmd(int _cmd);
-const char *sysdecode_nlm_flag(int _flag);
+void	sysdecode_nlm_flag(FILE *_fp, int _flag);
 const char *sysdecode_kevent_filter(int _filter);
 bool	sysdecode_kevent_flags(FILE *_fp, int _flags, int *_rem);
 const char *sysdecode_kldsym_cmd(int _cmd);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.