We've had several bugs in the past that were quite tricky to debug,
but would have been much easier if we'd known that a netlink operation
had failed. So, it would be desirable to actually detect and report
failures of netlink operations. While working on that, I discovered
that there are a number of other issues ranging from very small to
medium sized with the way we use netlink. This series addresses many
of them.
Link: https://bugs.passt.top/show_bug.cgi?id=60
Link: https://bugs.passt.top/show_bug.cgi?id=67
David Gibson (17):
netlink: Split up functionality if nl_link()
netlink: Split nl_addr() into separate operation functions
netlink: Split nl_route() into separate operation functions
netlink: Use struct in_addr for IPv4 addresses, not bare uint32_t
netlink: Explicitly pass netlink sockets to operations
netlink: Make nl_*_dup() use a separate datagram for each request
netlink: Start sequence number from 1 instead of 0
netlink: Treat send() or recv() errors as fatal
netlink: Fill in netlink header fields from nl_req()
netlink: Add nl_do() helper for simple operations with error checking
netlink: Clearer reasoning about the netlink response buffer size
netlink: Split nl_req() to allow processing multiple response
datagrams
netlink: Add nl_foreach_oftype to filter response message types
netlink: Propagate errors for "set" operations
netlink: Always process all responses to a netlink request
netlink: Propagate errors for "dump" operations
netlink: Propagate errors for "dup" operations
conf.c | 66 ++++-
netlink.c | 844 ++++++++++++++++++++++++++++++++++--------------------
netlink.h | 27 +-
pasta.c | 75 +++--
4 files changed, 659 insertions(+), 353 deletions(-)
--
2.41.0
It is important to know why a syscall failed so pasta should include the
errno in the error message. This is still not perfect as we do not know
which of functions (open, ioctl, if_nametoindex) failed but it should at
least include more important context.
This change was inspiered by a podman issue[1].
[1] https://github.com/containers/podman/issues/19428
Signed-off-by: Paul Holzinger <pholzing(a)redhat.com>
---
tap.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/tap.c b/tap.c
index a6a73d3..c212616 100644
--- a/tap.c
+++ b/tap.c
@@ -1205,7 +1205,8 @@ static void tap_sock_tun_init(struct ctx *c)
NS_CALL(tap_ns_tun, c);
if (tun_ns_fd == -1)
- die("Failed to open tun socket in namespace");
+ die("Failed to open tun socket in namespace: %s",
+ strerror(errno));
pasta_ns_conf(c);
--
2.41.0