]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: make log_link_message_full_errno() take format string
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 4 May 2025 16:33:05 +0000 (01:33 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 5 May 2025 13:07:04 +0000 (22:07 +0900)
15 files changed:
src/network/networkd-address.c
src/network/networkd-address.h
src/network/networkd-dhcp-prefix-delegation.c
src/network/networkd-dhcp4.c
src/network/networkd-dhcp6.c
src/network/networkd-ipv4ll.c
src/network/networkd-link.c
src/network/networkd-ndisc.c
src/network/networkd-nexthop.c
src/network/networkd-nexthop.h
src/network/networkd-route.c
src/network/networkd-route.h
src/network/networkd-setlink.c
src/network/networkd-util.c
src/network/networkd-util.h

index 979890f9a573bfab094e1305a4fbda7c46bf149d..027e89ca69aa4af0dce510d914419da94672ae7c 100644 (file)
@@ -1472,17 +1472,18 @@ int link_drop_static_addresses(Link *link) {
         return r;
 }
 
-int address_configure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link, const char *error_msg) {
+int address_configure_handler_internal(sd_netlink_message *m, Link *link, Address *address) {
         int r;
 
-        assert(rtnl);
         assert(m);
         assert(link);
-        assert(error_msg);
+        assert(address);
 
         r = sd_netlink_message_get_errno(m);
         if (r < 0 && r != -EEXIST) {
-                log_link_message_warning_errno(link, m, r, error_msg);
+                log_link_message_warning_errno(link, m, r, "Failed to set %s address %s",
+                                               network_config_source_to_string(address->source),
+                                               IN_ADDR_TO_STRING(address->family, &address->in_addr));
                 link_enter_failed(link);
                 return 0;
         }
@@ -1725,8 +1726,9 @@ static int static_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Reque
         int r;
 
         assert(link);
+        assert(address);
 
-        r = address_configure_handler_internal(rtnl, m, link, "Failed to set static address");
+        r = address_configure_handler_internal(m, link, address);
         if (r <= 0)
                 return r;
 
index f8d6b6c3a1ec97cf0ef926b448502eace3c7705c..1c171a476a2aaec4218f2292c0c2aa0d1b6ce93f 100644 (file)
@@ -103,7 +103,7 @@ int address_new(Address **ret);
 int address_new_static(Network *network, const char *filename, unsigned section_line, Address **ret);
 int address_get(Link *link, const Address *in, Address **ret);
 int address_get_harder(Link *link, const Address *in, Address **ret);
-int address_configure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link, const char *error_msg);
+int address_configure_handler_internal(sd_netlink_message *m, Link *link, Address *address);
 int address_remove(Address *address, Link *link);
 int address_remove_and_cancel(Address *address, Link *link);
 int address_dup(const Address *src, Address **ret);
index 41f215ba5324e6238fdfe91af07f87528913479a..e519896fa07714c084b6ea02cad58b391c2f2ec9 100644 (file)
@@ -271,8 +271,9 @@ static int dhcp_pd_route_handler(sd_netlink *rtnl, sd_netlink_message *m, Reques
 
         assert(req);
         assert(link);
+        assert(route);
 
-        r = route_configure_handler_internal(rtnl, m, req, "Failed to add prefix route for DHCP delegated subnet prefix");
+        r = route_configure_handler_internal(m, req, route);
         if (r <= 0)
                 return r;
 
@@ -328,8 +329,9 @@ static int dhcp_pd_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Requ
         int r;
 
         assert(link);
+        assert(address);
 
-        r = address_configure_handler_internal(rtnl, m, link, "Could not set DHCP-PD address");
+        r = address_configure_handler_internal(m, link, address);
         if (r <= 0)
                 return r;
 
@@ -698,8 +700,9 @@ static int dhcp4_unreachable_route_handler(sd_netlink *rtnl, sd_netlink_message
 
         assert(req);
         assert(link);
+        assert(route);
 
-        r = route_configure_handler_internal(rtnl, m, req, "Failed to set unreachable route for DHCPv4 delegated prefix");
+        r = route_configure_handler_internal(m, req, route);
         if (r <= 0)
                 return r;
 
@@ -715,8 +718,9 @@ static int dhcp6_unreachable_route_handler(sd_netlink *rtnl, sd_netlink_message
 
         assert(req);
         assert(link);
+        assert(route);
 
-        r = route_configure_handler_internal(rtnl, m, req, "Failed to set unreachable route for DHCPv6 delegated prefix");
+        r = route_configure_handler_internal(m, req, route);
         if (r <= 0)
                 return r;
 
index 96b82a447cee7825a5dbfaf19e5395cc99c19fc3..b94935ebd992926d803791139c265d0e4f366849 100644 (file)
@@ -341,11 +341,11 @@ int dhcp4_check_ready(Link *link) {
 static int dhcp4_route_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, Route *route) {
         int r;
 
-        assert(m);
         assert(req);
         assert(link);
+        assert(route);
 
-        r = route_configure_handler_internal(rtnl, m, req, "Could not set DHCPv4 route");
+        r = route_configure_handler_internal(m, req, route);
         if (r <= 0)
                 return r;
 
@@ -897,8 +897,9 @@ static int dhcp4_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Reques
         int r;
 
         assert(link);
+        assert(address);
 
-        r = address_configure_handler_internal(rtnl, m, link, "Could not set DHCPv4 address");
+        r = address_configure_handler_internal(m, link, address);
         if (r <= 0)
                 return r;
 
index 90b4b33bbc9ef90fa0b7cde2be8c8b1ac3d935cd..222d791e4b467019da8b27b456f69f12b0a35fad 100644 (file)
@@ -134,8 +134,9 @@ static int dhcp6_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Reques
         int r;
 
         assert(link);
+        assert(address);
 
-        r = address_configure_handler_internal(rtnl, m, link, "Could not set DHCPv6 address");
+        r = address_configure_handler_internal(m, link, address);
         if (r <= 0)
                 return r;
 
index d154574a3ff5100c5a32bc5cc2813dcee492f864..7c20c7f49f073b3e441f30347f591a33723e199e 100644 (file)
@@ -80,8 +80,9 @@ static int ipv4ll_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Reque
 
         assert(link);
         assert(!link->ipv4ll_address_configured);
+        assert(address);
 
-        r = address_configure_handler_internal(rtnl, m, link, "Could not set ipv4ll address");
+        r = address_configure_handler_internal(m, link, address);
         if (r <= 0)
                 return r;
 
index 0bd27a45c8998c4479b04ce7a2b1089f92104187..d58b21da9e2ce81250b0d2fef4cb5721d0e9f166 100644 (file)
@@ -2914,7 +2914,7 @@ int link_getlink_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link
 
         r = sd_netlink_message_get_errno(m);
         if (r < 0) {
-                log_link_message_warning_errno(link, m, r, error_msg);
+                log_link_message_warning_errno(link, m, r, "%s", error_msg);
                 link_enter_failed(link);
                 return 0;
         }
index 26d5611ba386d24e7dfb0f4ba2437cb0cca20260..4b988dcaf49f21c0de0c059c7960791fd5298019 100644 (file)
@@ -370,8 +370,9 @@ static int ndisc_nexthop_handler(sd_netlink *rtnl, sd_netlink_message *m, Reques
         int r;
 
         assert(link);
+        assert(nexthop);
 
-        r = nexthop_configure_handler_internal(m, link, "Could not set NDisc route");
+        r = nexthop_configure_handler_internal(m, link, nexthop);
         if (r <= 0)
                 return r;
 
@@ -441,8 +442,9 @@ static int ndisc_route_handler(sd_netlink *rtnl, sd_netlink_message *m, Request
 
         assert(req);
         assert(link);
+        assert(route);
 
-        r = route_configure_handler_internal(rtnl, m, req, "Could not set NDisc route");
+        r = route_configure_handler_internal(m, req, route);
         if (r <= 0)
                 return r;
 
@@ -670,8 +672,9 @@ static int ndisc_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Reques
         int r;
 
         assert(link);
+        assert(address);
 
-        r = address_configure_handler_internal(rtnl, m, link, "Could not set NDisc address");
+        r = address_configure_handler_internal(m, link, address);
         if (r <= 0)
                 return r;
 
index 68bcd44ca5b64156c6b049b46ed2ef6a9c1df79f..87056882a8c41cf14cfa3f7d9da7525eae94137c 100644 (file)
@@ -687,16 +687,19 @@ static int nexthop_configure(NextHop *nexthop, Link *link, Request *req) {
         return request_call_netlink_async(link->manager->rtnl, m, req);
 }
 
-int nexthop_configure_handler_internal(sd_netlink_message *m, Link *link, const char *error_msg) {
+int nexthop_configure_handler_internal(sd_netlink_message *m, Link *link, NextHop *nexthop) {
         int r;
 
         assert(m);
         assert(link);
-        assert(error_msg);
+        assert(nexthop);
 
         r = sd_netlink_message_get_errno(m);
         if (r < 0 && r != -EEXIST) {
-                log_link_message_warning_errno(link, m, r, error_msg);
+                _cleanup_free_ char *str = NULL;
+                (void) nexthop_to_string(nexthop, link->manager, &str);
+                log_link_message_warning_errno(link, m, r, "Failed to set %s nexthop (%s)",
+                                               network_config_source_to_string(nexthop->source), strna(str));
                 link_enter_failed(link);
                 return 0;
         }
@@ -709,7 +712,7 @@ static int static_nexthop_handler(sd_netlink *rtnl, sd_netlink_message *m, Reque
 
         assert(link);
 
-        r = nexthop_configure_handler_internal(m, link, "Failed to set static nexthop");
+        r = nexthop_configure_handler_internal(m, link, nexthop);
         if (r <= 0)
                 return r;
 
index 1b0679fc37f9bcb50a61bc0892c901c4eb9757b9..8e345c6d53e269c5ce4b24b6de1143c5079f9227 100644 (file)
@@ -76,7 +76,7 @@ static inline int link_drop_static_nexthops(Link *link) {
 }
 void link_forget_nexthops(Link *link);
 
-int nexthop_configure_handler_internal(sd_netlink_message *m, Link *link, const char *error_msg);
+int nexthop_configure_handler_internal(sd_netlink_message *m, Link *link, NextHop *nexthop);
 int link_request_nexthop(
                 Link *link,
                 const NextHop *nexthop,
index 281433619ce174f08a7075dea6962cb6e2bd6849..665155e1ba00fa52e307862940682cd085c00873 100644 (file)
@@ -783,12 +783,12 @@ static int route_update_on_existing(Request *req) {
         return 0;
 }
 
-int route_configure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Request *req, const char *error_msg) {
+int route_configure_handler_internal(sd_netlink_message *m, Request *req, Route *route) {
         int r;
 
         assert(m);
         assert(req);
-        assert(error_msg);
+        assert(route);
 
         Link *link = ASSERT_PTR(req->link);
 
@@ -806,7 +806,10 @@ int route_configure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Re
                 return 1;
         }
         if (r < 0) {
-                log_link_message_warning_errno(link, m, r, error_msg);
+                _cleanup_free_ char *str = NULL;
+                (void) route_to_string(route, link->manager, &str);
+                log_link_message_warning_errno(link, m, r, "Failed to configure %s route (%s)",
+                                               network_config_source_to_string(route->source), strna(str));
                 link_enter_failed(link);
                 return 0;
         }
@@ -1030,9 +1033,11 @@ int link_request_route(
 static int static_route_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, Route *route) {
         int r;
 
+        assert(req);
         assert(link);
+        assert(route);
 
-        r = route_configure_handler_internal(rtnl, m, req, "Could not set static route");
+        r = route_configure_handler_internal(m, req, route);
         if (r <= 0)
                 return r;
 
index 5dba22b44759f11ce0760f5d1d7cbecfa66333ba..4ce81342a788d6621f52b28cd58b84e501b63be4 100644 (file)
@@ -96,7 +96,7 @@ int route_new(Route **ret);
 int route_new_static(Network *network, const char *filename, unsigned section_line, Route **ret);
 int route_dup(const Route *src, const RouteNextHop *nh, Route **ret);
 
-int route_configure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Request *req, const char *error_msg);
+int route_configure_handler_internal(sd_netlink_message *m, Request *req, Route *route);
 int route_remove(Route *route, Manager *manager);
 int route_remove_and_cancel(Route *route, Manager *manager);
 
index 9c4dbc74f759f5ecbbc1a71cbbb65a892778a978..255ad5a271e733cf9dcff9fb5d0dc24c3d8bf5c7 100644 (file)
@@ -56,10 +56,9 @@ static int set_link_handler_internal(
 
         r = sd_netlink_message_get_errno(m);
         if (r < 0) {
-                const char *error_msg;
-
-                error_msg = strjoina("Failed to set ", request_type_to_string(req->type), ignore ? ", ignoring" : "");
-                log_link_message_warning_errno(link, m, r, error_msg);
+                log_link_message_warning_errno(link, m, r, "Failed to set %s%s",
+                                               request_type_to_string(req->type),
+                                               ignore ? ", ignoring" : "");
 
                 if (!ignore)
                         link_enter_failed(link);
@@ -1073,9 +1072,7 @@ static int link_up_or_down_handler(sd_netlink *rtnl, sd_netlink_message *m, Requ
         if (r == -ENETDOWN && up && link_up_dsa_slave(link) > 0)
                 log_link_message_debug_errno(link, m, r, "Could not bring up dsa slave, retrying again after dsa master becomes up");
         else if (r < 0)
-                log_link_message_warning_errno(link, m, r, up ?
-                                               "Could not bring up interface, ignoring" :
-                                               "Could not bring down interface, ignoring");
+                log_link_message_warning_errno(link, m, r, "Could not bring %s interface, ignoring", up ? "up" : "down");
 
         r = link_call_getlink(link, get_link_update_flag_handler);
         if (r < 0) {
@@ -1277,7 +1274,7 @@ int link_request_to_bring_up_or_down(Link *link, bool up) {
         return 0;
 }
 
-static int link_up_or_down_now_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link, const char *msg) {
+static int link_up_or_down_now_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link, bool up) {
         int r;
 
         assert(m);
@@ -1291,7 +1288,7 @@ static int link_up_or_down_now_handler(sd_netlink *rtnl, sd_netlink_message *m,
 
         r = sd_netlink_message_get_errno(m);
         if (r < 0)
-                log_link_message_warning_errno(link, m, r, msg);
+                log_link_message_warning_errno(link, m, r, "Could not bring %s interface, ignoring", up ? "up" : "down");
 
         r = link_call_getlink(link, get_link_update_flag_handler);
         if (r < 0) {
@@ -1304,11 +1301,11 @@ static int link_up_or_down_now_handler(sd_netlink *rtnl, sd_netlink_message *m,
 }
 
 static int link_up_now_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        return link_up_or_down_now_handler(rtnl, m, link, "Could not bring up interface, ignoring");
+        return link_up_or_down_now_handler(rtnl, m, link, /* up = */ true);
 }
 
 static int link_down_now_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        return link_up_or_down_now_handler(rtnl, m, link, "Could not bring down interface, ignoring");
+        return link_up_or_down_now_handler(rtnl, m, link, /* up = */ false);
 }
 
 int link_up_or_down_now(Link *link, bool up) {
index 80cce4dcdc9964f3a1e8f583b5ba2a0cb3473eb7..87139ba47f4a54747a9fa5c2640cc0dd8d2d75f4 100644 (file)
@@ -233,17 +233,3 @@ int config_parse_mud_url(
 
         return free_and_replace(*url, unescaped);
 }
-
-int log_link_message_full_errno(Link *link, sd_netlink_message *m, int level, int err, const char *msg) {
-        const char *err_msg = NULL;
-
-        /* link may be NULL. */
-
-        (void) sd_netlink_message_read_string(m, NLMSGERR_ATTR_MSG, &err_msg);
-        return log_link_full_errno(link, level, err,
-                                   "%s: %s%s%s%m",
-                                   msg,
-                                   strempty(err_msg),
-                                   err_msg && !endswith(err_msg, ".") ? "." : "",
-                                   err_msg ? " " : "");
-}
index 2a3b5683fad28f0cf38895c6ea7510cb8e6fce5c..ea600043cff9754429bbf2620b7f0032f356a8ba 100644 (file)
@@ -153,15 +153,34 @@ sd_dhcp_lease_server_type_t dhcp_lease_server_type_from_string(const char *s) _p
 
 bool link_should_mark_config(Link *link, bool only_static, NetworkConfigSource source, uint8_t protocol);
 
-int log_link_message_full_errno(Link *link, sd_netlink_message *m, int level, int err, const char *msg);
-#define log_link_message_error_errno(link, m, err, msg)   log_link_message_full_errno(link, m, LOG_ERR, err, msg)
-#define log_link_message_warning_errno(link, m, err, msg) log_link_message_full_errno(link, m, LOG_WARNING, err, msg)
-#define log_link_message_notice_errno(link, m, err, msg)  log_link_message_full_errno(link, m, LOG_NOTICE, err, msg)
-#define log_link_message_info_errno(link, m, err, msg)    log_link_message_full_errno(link, m, LOG_INFO, err, msg)
-#define log_link_message_debug_errno(link, m, err, msg)   log_link_message_full_errno(link, m, LOG_DEBUG, err, msg)
-#define log_message_full_errno(m, level, err, msg)        log_link_message_full_errno(NULL, m, level, err, msg)
-#define log_message_error_errno(m, err, msg)              log_message_full_errno(m, LOG_ERR, err, msg)
-#define log_message_warning_errno(m, err, msg)            log_message_full_errno(m, LOG_WARNING, err, msg)
-#define log_message_notice_errno(m, err, msg)             log_message_full_errno(m, LOG_NOTICE, err, msg)
-#define log_message_info_errno(m, err, msg)               log_message_full_errno(m, LOG_INFO, err, msg)
-#define log_message_debug_errno(m, err, msg)              log_message_full_errno(m, LOG_DEBUG, err, msg)
+#define _log_link_message_full_errno(link, link_u, message, error_msg, level, level_u, error, error_u, format, ...) \
+        ({                                                              \
+                Link *link_u = (link);                                  \
+                int level_u = (level);                                  \
+                int error_u = (error);                                  \
+                                                                        \
+                const char *error_msg = NULL;                           \
+                if (message)                                            \
+                        (void) sd_netlink_message_read_string(message, NLMSGERR_ATTR_MSG, &error_msg); \
+                                                                        \
+                error_msg ?                                             \
+                        log_link_full_errno(link_u, level_u, error_u, format ": %s%s %m", ##__VA_ARGS__, \
+                                            error_msg, endswith(error_msg, ".") ? "" : ".") : \
+                        log_link_full_errno(link_u, level_u, error_u, format ": %m", ##__VA_ARGS__); \
+        })
+
+
+#define log_link_message_full_errno(link, message, level, error, format, ...) \
+        _log_link_message_full_errno(link, UNIQ_T(lnk, UNIQ), message, UNIQ_T(emsg, UNIQ), level, UNIQ_T(lvl, UNIQ), error, UNIQ_T(err, UNIQ), format, ##__VA_ARGS__)
+
+#define log_link_message_error_errno(link, m, err, fmt, ...)   log_link_message_full_errno(link, m, LOG_ERR, err, fmt, ##__VA_ARGS__)
+#define log_link_message_warning_errno(link, m, err, fmt, ...) log_link_message_full_errno(link, m, LOG_WARNING, err, fmt, ##__VA_ARGS__)
+#define log_link_message_notice_errno(link, m, err, fmt, ...)  log_link_message_full_errno(link, m, LOG_NOTICE, err, fmt, ##__VA_ARGS__)
+#define log_link_message_info_errno(link, m, err, fmt, ...)    log_link_message_full_errno(link, m, LOG_INFO, err, fmt, ##__VA_ARGS__)
+#define log_link_message_debug_errno(link, m, err, fmt, ...)   log_link_message_full_errno(link, m, LOG_DEBUG, err, fmt, ##__VA_ARGS__)
+#define log_message_full_errno(m, level, err, fmt, ...)        log_link_message_full_errno(NULL, m, level, err, fmt, ##__VA_ARGS__)
+#define log_message_error_errno(m, err, fmt, ...)              log_message_full_errno(m, LOG_ERR, err, fmt, ##__VA_ARGS__)
+#define log_message_warning_errno(m, err, fmt, ...)            log_message_full_errno(m, LOG_WARNING, err, fmt, ##__VA_ARGS__)
+#define log_message_notice_errno(m, err, fmt, ...)             log_message_full_errno(m, LOG_NOTICE, err, fmt, ##__VA_ARGS__)
+#define log_message_info_errno(m, err, fmt, ...)               log_message_full_errno(m, LOG_INFO, err, fmt, ##__VA_ARGS__)
+#define log_message_debug_errno(m, err, fmt, ...)              log_message_full_errno(m, LOG_DEBUG, err, fmt, ##__VA_ARGS__)