diff mbox series

[iproute] libgenl: report a verbose error if rtnl_talk fails

Message ID 20250228133431.20296-1-kirjanov@gmail.com (mailing list archive)
State Rejected
Delegated to: Stephen Hemminger
Headers show
Series [iproute] libgenl: report a verbose error if rtnl_talk fails | expand

Checks

Context Check Description
netdev/tree_selection success Guessing tree name failed - patch did not apply

Commit Message

Denis Kirjanov Feb. 28, 2025, 1:34 p.m. UTC
Currenlty rtnl_talk() doesn't give us the reason
if it fails.

Signed-off-by: Denis Kirjanov <kirjanov@gmail.com>
---
 lib/libgenl.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Stephen Hemminger March 10, 2025, 4:12 p.m. UTC | #1
On Fri, 28 Feb 2025 16:34:31 +0300
Denis Kirjanov <kirjanov@gmail.com> wrote:

> Currenlty rtnl_talk() doesn't give us the reason
> if it fails.
> 
> Signed-off-by: Denis Kirjanov <kirjanov@gmail.com>
> ---

Don't think this is needed.
 - inside rtnl_talk, it already prints (using perror) if it is a kernel reported error
 - lots of other places call rtnl_talk() what is special about genl

Better to move any required error prints into libnetlink.c

Even better is to make sure any errors in kernel are using extack to give
better messages.
diff mbox series

Patch

diff --git a/lib/libgenl.c b/lib/libgenl.c
index fca07f9f..9927af84 100644
--- a/lib/libgenl.c
+++ b/lib/libgenl.c
@@ -58,7 +58,8 @@  int genl_resolve_family(struct rtnl_handle *grth, const char *family)
 		  family, strlen(family) + 1);
 
 	if (rtnl_talk(grth, &req.n, &answer) < 0) {
-		fprintf(stderr, "Error talking to the kernel\n");
+		fprintf(stderr, "Error talking to the kernel: %s (errno %d)\n",
+			strerror(errno), errno);
 		return -2;
 	}
 
@@ -103,7 +104,8 @@  int genl_add_mcast_grp(struct rtnl_handle *grth, __u16 fnum, const char *group)
 	addattr16(&req.n, sizeof(req), CTRL_ATTR_FAMILY_ID, fnum);
 
 	if (rtnl_talk(grth, &req.n, &answer) < 0) {
-		fprintf(stderr, "Error talking to the kernel\n");
+		fprintf(stderr, "Error talking to the kernel: %s (errno %d)\n",
+			strerror(errno), errno);
 		return -2;
 	}