From b44662fee5c98fa1f8019cdf9f0634dae514b071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 18 Aug 2022 10:50:41 +0200 Subject: [PATCH 1/7] sd-netlink: prefix output param names with 'ret' In some places, the code was already using that, so only the header file needed to be adjusted. We use 'nl' for the sd_netlink* when it's passed in as input. I was considering renaming to 'netlink', but that'd add a lot of verbosity and also we have 'sd_journal *j' in sd-journal, so the short name matches in style. --- .../sd-netlink/netlink-message-rtnl.c | 30 +++++++++---------- src/systemd/sd-netlink.h | 14 ++++----- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/libsystemd/sd-netlink/netlink-message-rtnl.c b/src/libsystemd/sd-netlink/netlink-message-rtnl.c index 0ff25f8e6c..c7fe031c99 100644 --- a/src/libsystemd/sd-netlink/netlink-message-rtnl.c +++ b/src/libsystemd/sd-netlink/netlink-message-rtnl.c @@ -633,77 +633,77 @@ _public_ int sd_rtnl_message_addr_set_scope(sd_netlink_message *m, unsigned char return 0; } -_public_ int sd_rtnl_message_addr_get_family(sd_netlink_message *m, int *family) { +_public_ int sd_rtnl_message_addr_get_family(sd_netlink_message *m, int *ret_family) { struct ifaddrmsg *ifa; assert_return(m, -EINVAL); assert_return(m->hdr, -EINVAL); assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL); - assert_return(family, -EINVAL); + assert_return(ret_family, -EINVAL); ifa = NLMSG_DATA(m->hdr); - *family = ifa->ifa_family; + *ret_family = ifa->ifa_family; return 0; } -_public_ int sd_rtnl_message_addr_get_prefixlen(sd_netlink_message *m, unsigned char *prefixlen) { +_public_ int sd_rtnl_message_addr_get_prefixlen(sd_netlink_message *m, unsigned char *ret_prefixlen) { struct ifaddrmsg *ifa; assert_return(m, -EINVAL); assert_return(m->hdr, -EINVAL); assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL); - assert_return(prefixlen, -EINVAL); + assert_return(ret_prefixlen, -EINVAL); ifa = NLMSG_DATA(m->hdr); - *prefixlen = ifa->ifa_prefixlen; + *ret_prefixlen = ifa->ifa_prefixlen; return 0; } -_public_ int sd_rtnl_message_addr_get_scope(sd_netlink_message *m, unsigned char *scope) { +_public_ int sd_rtnl_message_addr_get_scope(sd_netlink_message *m, unsigned char *ret_scope) { struct ifaddrmsg *ifa; assert_return(m, -EINVAL); assert_return(m->hdr, -EINVAL); assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL); - assert_return(scope, -EINVAL); + assert_return(ret_scope, -EINVAL); ifa = NLMSG_DATA(m->hdr); - *scope = ifa->ifa_scope; + *ret_scope = ifa->ifa_scope; return 0; } -_public_ int sd_rtnl_message_addr_get_flags(sd_netlink_message *m, unsigned char *flags) { +_public_ int sd_rtnl_message_addr_get_flags(sd_netlink_message *m, unsigned char *ret_flags) { struct ifaddrmsg *ifa; assert_return(m, -EINVAL); assert_return(m->hdr, -EINVAL); assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL); - assert_return(flags, -EINVAL); + assert_return(ret_flags, -EINVAL); ifa = NLMSG_DATA(m->hdr); - *flags = ifa->ifa_flags; + *ret_flags = ifa->ifa_flags; return 0; } -_public_ int sd_rtnl_message_addr_get_ifindex(sd_netlink_message *m, int *ifindex) { +_public_ int sd_rtnl_message_addr_get_ifindex(sd_netlink_message *m, int *ret_ifindex) { struct ifaddrmsg *ifa; assert_return(m, -EINVAL); assert_return(m->hdr, -EINVAL); assert_return(rtnl_message_type_is_addr(m->hdr->nlmsg_type), -EINVAL); - assert_return(ifindex, -EINVAL); + assert_return(ret_ifindex, -EINVAL); ifa = NLMSG_DATA(m->hdr); - *ifindex = ifa->ifa_index; + *ret_ifindex = ifa->ifa_index; return 0; } diff --git a/src/systemd/sd-netlink.h b/src/systemd/sd-netlink.h index 2d87fe011e..5517f1516c 100644 --- a/src/systemd/sd-netlink.h +++ b/src/systemd/sd-netlink.h @@ -40,9 +40,9 @@ typedef int (*sd_netlink_message_handler_t)(sd_netlink *nl, sd_netlink_message * typedef _sd_destroy_t sd_netlink_destroy_t; /* bus */ -int sd_netlink_new_from_fd(sd_netlink **nl, int fd); -int sd_netlink_open(sd_netlink **nl); -int sd_netlink_open_fd(sd_netlink **nl, int fd); +int sd_netlink_new_from_fd(sd_netlink **ret, int fd); +int sd_netlink_open(sd_netlink **ret); +int sd_netlink_open_fd(sd_netlink **ret, int fd); int sd_netlink_increase_rxbuf(sd_netlink *nl, const size_t size); sd_netlink *sd_netlink_ref(sd_netlink *nl); @@ -145,10 +145,10 @@ int sd_rtnl_message_addr_set_prefixlen(sd_netlink_message *m, unsigned char pref int sd_rtnl_message_addr_set_scope(sd_netlink_message *m, unsigned char scope); int sd_rtnl_message_addr_set_flags(sd_netlink_message *m, unsigned char flags); int sd_rtnl_message_addr_get_family(sd_netlink_message *m, int *family); -int sd_rtnl_message_addr_get_prefixlen(sd_netlink_message *m, unsigned char *prefixlen); -int sd_rtnl_message_addr_get_scope(sd_netlink_message *m, unsigned char *scope); -int sd_rtnl_message_addr_get_flags(sd_netlink_message *m, unsigned char *flags); -int sd_rtnl_message_addr_get_ifindex(sd_netlink_message *m, int *ifindex); +int sd_rtnl_message_addr_get_prefixlen(sd_netlink_message *m, unsigned char *ret_prefixlen); +int sd_rtnl_message_addr_get_scope(sd_netlink_message *m, unsigned char *ret_scope); +int sd_rtnl_message_addr_get_flags(sd_netlink_message *m, unsigned char *ret_flags); +int sd_rtnl_message_addr_get_ifindex(sd_netlink_message *m, int *ret_ifindex); int sd_rtnl_message_new_link(sd_netlink *nl, sd_netlink_message **ret, uint16_t msg_type, int index); int sd_rtnl_message_link_set_flags(sd_netlink_message *m, unsigned flags, unsigned change); From f4f81a6b35f050bfa0dd257a30117467b8739e7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 18 Aug 2022 11:04:16 +0200 Subject: [PATCH 2/7] sd-netlink: constify parameters in public api and adjust pointer formatting In the internal api, 'char* const*' is used instead of 'const char* const*' because otherwise we'd get a mismatch with the various strv apis. --- src/libsystemd/sd-netlink/netlink-message.c | 2 +- src/libsystemd/sd-netlink/netlink-util.c | 21 +++++++++++++++------ src/libsystemd/sd-netlink/netlink-util.h | 6 +++--- src/libsystemd/sd-netlink/sd-netlink.c | 4 ++-- src/libsystemd/sd-netlink/test-netlink.c | 2 +- src/systemd/sd-netlink.h | 4 ++-- 6 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/libsystemd/sd-netlink/netlink-message.c b/src/libsystemd/sd-netlink/netlink-message.c index 093527a20d..48f962b8b5 100644 --- a/src/libsystemd/sd-netlink/netlink-message.c +++ b/src/libsystemd/sd-netlink/netlink-message.c @@ -256,7 +256,7 @@ _public_ int sd_netlink_message_append_string(sd_netlink_message *m, uint16_t at return 0; } -_public_ int sd_netlink_message_append_strv(sd_netlink_message *m, uint16_t attr_type, char * const *data) { +_public_ int sd_netlink_message_append_strv(sd_netlink_message *m, uint16_t attr_type, const char* const *data) { size_t length, size; int r; diff --git a/src/libsystemd/sd-netlink/netlink-util.c b/src/libsystemd/sd-netlink/netlink-util.c index 8e05161558..12cdc99ff2 100644 --- a/src/libsystemd/sd-netlink/netlink-util.c +++ b/src/libsystemd/sd-netlink/netlink-util.c @@ -187,7 +187,12 @@ int rtnl_get_link_alternative_names(sd_netlink **rtnl, int ifindex, char ***ret) return 0; } -static int rtnl_update_link_alternative_names(sd_netlink **rtnl, uint16_t nlmsg_type, int ifindex, char * const *alternative_names) { +static int rtnl_update_link_alternative_names( + sd_netlink **rtnl, + uint16_t nlmsg_type, + int ifindex, + char* const *alternative_names) { + _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL; int r; @@ -212,7 +217,7 @@ static int rtnl_update_link_alternative_names(sd_netlink **rtnl, uint16_t nlmsg_ if (r < 0) return r; - r = sd_netlink_message_append_strv(message, IFLA_ALT_IFNAME, alternative_names); + r = sd_netlink_message_append_strv(message, IFLA_ALT_IFNAME, (const char**) alternative_names); if (r < 0) return r; @@ -227,15 +232,19 @@ static int rtnl_update_link_alternative_names(sd_netlink **rtnl, uint16_t nlmsg_ return 0; } -int rtnl_set_link_alternative_names(sd_netlink **rtnl, int ifindex, char * const *alternative_names) { +int rtnl_set_link_alternative_names(sd_netlink **rtnl, int ifindex, char* const *alternative_names) { return rtnl_update_link_alternative_names(rtnl, RTM_NEWLINKPROP, ifindex, alternative_names); } -int rtnl_delete_link_alternative_names(sd_netlink **rtnl, int ifindex, char * const *alternative_names) { +int rtnl_delete_link_alternative_names(sd_netlink **rtnl, int ifindex, char* const *alternative_names) { return rtnl_update_link_alternative_names(rtnl, RTM_DELLINKPROP, ifindex, alternative_names); } -int rtnl_set_link_alternative_names_by_ifname(sd_netlink **rtnl, const char *ifname, char * const *alternative_names) { +int rtnl_set_link_alternative_names_by_ifname( + sd_netlink **rtnl, + const char *ifname, + char* const *alternative_names) { + _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL; int r; @@ -263,7 +272,7 @@ int rtnl_set_link_alternative_names_by_ifname(sd_netlink **rtnl, const char *ifn if (r < 0) return r; - r = sd_netlink_message_append_strv(message, IFLA_ALT_IFNAME, alternative_names); + r = sd_netlink_message_append_strv(message, IFLA_ALT_IFNAME, (const char**) alternative_names); if (r < 0) return r; diff --git a/src/libsystemd/sd-netlink/netlink-util.h b/src/libsystemd/sd-netlink/netlink-util.h index 9473e15700..d14392a018 100644 --- a/src/libsystemd/sd-netlink/netlink-util.h +++ b/src/libsystemd/sd-netlink/netlink-util.h @@ -42,9 +42,9 @@ int rtnl_set_link_properties( uint32_t gso_max_size, size_t gso_max_segments); int rtnl_get_link_alternative_names(sd_netlink **rtnl, int ifindex, char ***ret); -int rtnl_set_link_alternative_names(sd_netlink **rtnl, int ifindex, char * const *alternative_names); -int rtnl_set_link_alternative_names_by_ifname(sd_netlink **rtnl, const char *ifname, char * const *alternative_names); -int rtnl_delete_link_alternative_names(sd_netlink **rtnl, int ifindex, char * const *alternative_names); +int rtnl_set_link_alternative_names(sd_netlink **rtnl, int ifindex, char* const *alternative_names); +int rtnl_set_link_alternative_names_by_ifname(sd_netlink **rtnl, const char *ifname, char* const *alternative_names); +int rtnl_delete_link_alternative_names(sd_netlink **rtnl, int ifindex, char* const *alternative_names); int rtnl_resolve_link_alternative_name(sd_netlink **rtnl, const char *name, char **ret); int rtnl_resolve_ifname(sd_netlink **rtnl, const char *name); int rtnl_resolve_interface(sd_netlink **rtnl, const char *name); diff --git a/src/libsystemd/sd-netlink/sd-netlink.c b/src/libsystemd/sd-netlink/sd-netlink.c index 5cb831cb4a..d1e5e68996 100644 --- a/src/libsystemd/sd-netlink/sd-netlink.c +++ b/src/libsystemd/sd-netlink/sd-netlink.c @@ -947,7 +947,7 @@ _public_ int sd_netlink_add_match( destroy_callback, userdata, description); } -_public_ int sd_netlink_attach_filter(sd_netlink *nl, size_t len, struct sock_filter *filter) { +_public_ int sd_netlink_attach_filter(sd_netlink *nl, size_t len, const struct sock_filter *filter) { assert_return(nl, -EINVAL); assert_return(len == 0 || filter, -EINVAL); @@ -955,7 +955,7 @@ _public_ int sd_netlink_attach_filter(sd_netlink *nl, size_t len, struct sock_fi len == 0 ? SO_DETACH_FILTER : SO_ATTACH_FILTER, &(struct sock_fprog) { .len = len, - .filter = filter, + .filter = (struct sock_filter*) filter, }, sizeof(struct sock_fprog)) < 0) return -errno; diff --git a/src/libsystemd/sd-netlink/test-netlink.c b/src/libsystemd/sd-netlink/test-netlink.c index 1117814332..842bcd1abf 100644 --- a/src/libsystemd/sd-netlink/test-netlink.c +++ b/src/libsystemd/sd-netlink/test-netlink.c @@ -572,7 +572,7 @@ static void test_strv(sd_netlink *rtnl) { } assert_se(sd_netlink_message_open_container(m, IFLA_PROP_LIST) >= 0); - assert_se(sd_netlink_message_append_strv(m, IFLA_ALT_IFNAME, names_in) >= 0); + assert_se(sd_netlink_message_append_strv(m, IFLA_ALT_IFNAME, (const char**) names_in) >= 0); assert_se(sd_netlink_message_close_container(m) >= 0); message_seal(m); diff --git a/src/systemd/sd-netlink.h b/src/systemd/sd-netlink.h index 5517f1516c..a4c105a489 100644 --- a/src/systemd/sd-netlink.h +++ b/src/systemd/sd-netlink.h @@ -68,11 +68,11 @@ int sd_netlink_add_match(sd_netlink *nl, sd_netlink_slot **ret_slot, uint16_t ma int sd_netlink_attach_event(sd_netlink *nl, sd_event *e, int64_t priority); int sd_netlink_detach_event(sd_netlink *nl); -int sd_netlink_attach_filter(sd_netlink *nl, size_t len, struct sock_filter *filter); +int sd_netlink_attach_filter(sd_netlink *nl, size_t len, const struct sock_filter *filter); /* message */ int sd_netlink_message_append_string(sd_netlink_message *m, uint16_t attr_type, const char *data); -int sd_netlink_message_append_strv(sd_netlink_message *m, uint16_t attr_type, char * const *data); +int sd_netlink_message_append_strv(sd_netlink_message *m, uint16_t attr_type, const char* const *data); int sd_netlink_message_append_flag(sd_netlink_message *m, uint16_t attr_type); int sd_netlink_message_append_u8(sd_netlink_message *m, uint16_t attr_type, uint8_t data); int sd_netlink_message_append_u16(sd_netlink_message *m, uint16_t attr_type, uint16_t data); From 24c0f38591578db8dbefaa76251d4461947782c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 18 Aug 2022 11:08:44 +0200 Subject: [PATCH 3/7] sd-netlink: rename sd_netlink_message_request_dump to sd_netlink_message_set_request_dump --- src/libsystemd/libsystemd.sym | 2 +- src/libsystemd/sd-netlink/netlink-message.c | 2 +- src/libsystemd/sd-netlink/test-netlink.c | 4 ++-- src/network/networkctl.c | 6 +++--- src/network/networkd-address.c | 2 +- src/network/networkd-manager.c | 2 +- src/network/networkd-speed-meter.c | 2 +- src/network/wait-online/manager.c | 2 +- src/resolve/resolvectl.c | 2 +- src/resolve/resolved-manager.c | 4 ++-- src/shared/local-addresses.c | 4 ++-- src/systemd/sd-netlink.h | 2 +- src/udev/test-udev-netlink.c | 2 +- 13 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/libsystemd/libsystemd.sym b/src/libsystemd/libsystemd.sym index 215b6cf87f..5da9294ebe 100644 --- a/src/libsystemd/libsystemd.sym +++ b/src/libsystemd/libsystemd.sym @@ -855,7 +855,7 @@ global: sd_netlink_message_next; sd_netlink_message_ref; sd_netlink_message_unref; - sd_netlink_message_request_dump; + sd_netlink_message_set_request_dump; sd_netlink_message_is_error; sd_netlink_message_get_errno; sd_netlink_message_get_type; diff --git a/src/libsystemd/sd-netlink/netlink-message.c b/src/libsystemd/sd-netlink/netlink-message.c index 48f962b8b5..33bec2ac9b 100644 --- a/src/libsystemd/sd-netlink/netlink-message.c +++ b/src/libsystemd/sd-netlink/netlink-message.c @@ -113,7 +113,7 @@ int message_new_synthetic_error(sd_netlink *nl, int error, uint32_t serial, sd_n return 0; } -_public_ int sd_netlink_message_request_dump(sd_netlink_message *m, int dump) { +_public_ int sd_netlink_message_set_request_dump(sd_netlink_message *m, int dump) { assert_return(m, -EINVAL); assert_return(m->hdr, -EINVAL); assert_return(m->protocol != NETLINK_ROUTE || diff --git a/src/libsystemd/sd-netlink/test-netlink.c b/src/libsystemd/sd-netlink/test-netlink.c index 842bcd1abf..5eda53b596 100644 --- a/src/libsystemd/sd-netlink/test-netlink.c +++ b/src/libsystemd/sd-netlink/test-netlink.c @@ -99,7 +99,7 @@ static void test_address_get(sd_netlink *rtnl, int ifindex) { assert_se(sd_rtnl_message_new_addr(rtnl, &m, RTM_GETADDR, ifindex, AF_INET) >= 0); assert_se(m); - assert_se(sd_netlink_message_request_dump(m, true) >= 0); + assert_se(sd_netlink_message_set_request_dump(m, true) >= 0); assert_se(sd_netlink_call(rtnl, m, -1, &r) == 1); assert_se(sd_netlink_message_read_in_addr(r, IFA_LOCAL, &in_data) == 0); @@ -480,7 +480,7 @@ static void test_get_addresses(sd_netlink *rtnl) { log_debug("/* %s */", __func__); assert_se(sd_rtnl_message_new_addr(rtnl, &req, RTM_GETADDR, 0, AF_UNSPEC) >= 0); - assert_se(sd_netlink_message_request_dump(req, true) >= 0); + assert_se(sd_netlink_message_set_request_dump(req, true) >= 0); assert_se(sd_netlink_call(rtnl, req, 0, &reply) >= 0); for (m = reply; m; m = sd_netlink_message_next(m)) { diff --git a/src/network/networkctl.c b/src/network/networkctl.c index 2f789e773a..3db2d26469 100644 --- a/src/network/networkctl.c +++ b/src/network/networkctl.c @@ -721,7 +721,7 @@ static int acquire_link_info(sd_bus *bus, sd_netlink *rtnl, char **patterns, Lin if (r < 0) return rtnl_log_create_error(r); - r = sd_netlink_message_request_dump(req, true); + r = sd_netlink_message_set_request_dump(req, true); if (r < 0) return rtnl_log_create_error(r); @@ -922,7 +922,7 @@ static int get_gateway_description( if (r < 0) return r; - r = sd_netlink_message_request_dump(req, true); + r = sd_netlink_message_set_request_dump(req, true); if (r < 0) return r; @@ -1115,7 +1115,7 @@ static int dump_address_labels(sd_netlink *rtnl) { if (r < 0) return log_error_errno(r, "Could not allocate RTM_GETADDRLABEL message: %m"); - r = sd_netlink_message_request_dump(req, true); + r = sd_netlink_message_set_request_dump(req, true); if (r < 0) return r; diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c index ccb4a426fa..47bae041fe 100644 --- a/src/network/networkd-address.c +++ b/src/network/networkd-address.c @@ -809,7 +809,7 @@ int link_drop_ipv6ll_addresses(Link *link) { if (r < 0) return r; - r = sd_netlink_message_request_dump(req, true); + r = sd_netlink_message_set_request_dump(req, true); if (r < 0) return r; diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index 52c62d7297..9c8311447b 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -739,7 +739,7 @@ static int manager_enumerate_internal( assert(req); assert(process); - r = sd_netlink_message_request_dump(req, true); + r = sd_netlink_message_set_request_dump(req, true); if (r < 0) return r; diff --git a/src/network/networkd-speed-meter.c b/src/network/networkd-speed-meter.c index 6c3f97079e..34e8614520 100644 --- a/src/network/networkd-speed-meter.c +++ b/src/network/networkd-speed-meter.c @@ -71,7 +71,7 @@ static int speed_meter_handler(sd_event_source *s, uint64_t usec, void *userdata return 0; } - r = sd_netlink_message_request_dump(req, true); + r = sd_netlink_message_set_request_dump(req, true); if (r < 0) { log_warning_errno(r, "Failed to set dump flag, ignoring: %m"); return 0; diff --git a/src/network/wait-online/manager.c b/src/network/wait-online/manager.c index e5e23979ea..c98b48b06f 100644 --- a/src/network/wait-online/manager.c +++ b/src/network/wait-online/manager.c @@ -284,7 +284,7 @@ static int manager_rtnl_listen(Manager *m) { if (r < 0) return r; - r = sd_netlink_message_request_dump(req, true); + r = sd_netlink_message_set_request_dump(req, true); if (r < 0) return r; diff --git a/src/resolve/resolvectl.c b/src/resolve/resolvectl.c index 6d08821ecd..8e6620d604 100644 --- a/src/resolve/resolvectl.c +++ b/src/resolve/resolvectl.c @@ -1964,7 +1964,7 @@ static int status_all(sd_bus *bus, StatusMode mode) { if (r < 0) return rtnl_log_create_error(r); - r = sd_netlink_message_request_dump(req, true); + r = sd_netlink_message_set_request_dump(req, true); if (r < 0) return rtnl_log_create_error(r); diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c index 7b83b91bee..0525a3b96e 100644 --- a/src/resolve/resolved-manager.c +++ b/src/resolve/resolved-manager.c @@ -226,7 +226,7 @@ static int manager_rtnl_listen(Manager *m) { if (r < 0) return r; - r = sd_netlink_message_request_dump(req, true); + r = sd_netlink_message_set_request_dump(req, true); if (r < 0) return r; @@ -248,7 +248,7 @@ static int manager_rtnl_listen(Manager *m) { if (r < 0) return r; - r = sd_netlink_message_request_dump(req, true); + r = sd_netlink_message_set_request_dump(req, true); if (r < 0) return r; diff --git a/src/shared/local-addresses.c b/src/shared/local-addresses.c index d1f6b5df03..4d6bf9307d 100644 --- a/src/shared/local-addresses.c +++ b/src/shared/local-addresses.c @@ -83,7 +83,7 @@ int local_addresses( if (r < 0) return r; - r = sd_netlink_message_request_dump(req, true); + r = sd_netlink_message_set_request_dump(req, true); if (r < 0) return r; @@ -236,7 +236,7 @@ int local_gateways( if (r < 0) return r; - r = sd_netlink_message_request_dump(req, true); + r = sd_netlink_message_set_request_dump(req, true); if (r < 0) return r; diff --git a/src/systemd/sd-netlink.h b/src/systemd/sd-netlink.h index a4c105a489..45c2ffb47e 100644 --- a/src/systemd/sd-netlink.h +++ b/src/systemd/sd-netlink.h @@ -128,7 +128,7 @@ sd_netlink_message *sd_netlink_message_next(sd_netlink_message *m); sd_netlink_message *sd_netlink_message_ref(sd_netlink_message *m); sd_netlink_message *sd_netlink_message_unref(sd_netlink_message *m); -int sd_netlink_message_request_dump(sd_netlink_message *m, int dump); +int sd_netlink_message_set_request_dump(sd_netlink_message *m, int dump); int sd_netlink_message_is_error(sd_netlink_message *m); int sd_netlink_message_get_errno(sd_netlink_message *m); int sd_netlink_message_get_type(sd_netlink_message *m, uint16_t *type); diff --git a/src/udev/test-udev-netlink.c b/src/udev/test-udev-netlink.c index 1fddb5efb1..341414c5ef 100644 --- a/src/udev/test-udev-netlink.c +++ b/src/udev/test-udev-netlink.c @@ -139,7 +139,7 @@ TEST(link_info_get) { assert_se(sd_netlink_open(&rtnl) >= 0); assert_se(sd_rtnl_message_new_link(rtnl, &req, RTM_GETLINK, 0) >= 0); - assert_se(sd_netlink_message_request_dump(req, true) >= 0); + assert_se(sd_netlink_message_set_request_dump(req, true) >= 0); assert_se(sd_netlink_call(rtnl, req, 0, &reply) >= 0); for (sd_netlink_message *reply_one = reply; reply_one; reply_one = sd_netlink_message_next(reply_one)) { From 3310e0647ced0e8175e55e44e47f245b90d8cba1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 18 Aug 2022 14:24:14 +0200 Subject: [PATCH 4/7] sd-netlink: delete sd_netlink_new_from_fd() It was somewhat similar to sd_netlink_open_fd(), and unused. --- src/libsystemd/libsystemd.sym | 1 - src/libsystemd/sd-netlink/sd-netlink.c | 25 ------------------------- src/systemd/sd-netlink.h | 1 - 3 files changed, 27 deletions(-) diff --git a/src/libsystemd/libsystemd.sym b/src/libsystemd/libsystemd.sym index 5da9294ebe..3510beea5b 100644 --- a/src/libsystemd/libsystemd.sym +++ b/src/libsystemd/libsystemd.sym @@ -792,7 +792,6 @@ global: sd_hwdb_new_from_path; - sd_netlink_new_from_fd; sd_netlink_open; sd_netlink_open_fd; sd_netlink_increase_rxbuf; diff --git a/src/libsystemd/sd-netlink/sd-netlink.c b/src/libsystemd/sd-netlink/sd-netlink.c index d1e5e68996..965235862c 100644 --- a/src/libsystemd/sd-netlink/sd-netlink.c +++ b/src/libsystemd/sd-netlink/sd-netlink.c @@ -69,31 +69,6 @@ static int netlink_new(sd_netlink **ret) { return 0; } -_public_ int sd_netlink_new_from_fd(sd_netlink **ret, int fd) { - _cleanup_(sd_netlink_unrefp) sd_netlink *nl = NULL; - socklen_t addrlen; - int r; - - assert_return(ret, -EINVAL); - - r = netlink_new(&nl); - if (r < 0) - return r; - - addrlen = sizeof(nl->sockaddr); - - if (getsockname(fd, &nl->sockaddr.sa, &addrlen) < 0) - return -errno; - - if (nl->sockaddr.nl.nl_family != AF_NETLINK) - return -EINVAL; - - nl->fd = fd; - - *ret = TAKE_PTR(nl); - return 0; -} - _public_ int sd_netlink_open_fd(sd_netlink **ret, int fd) { _cleanup_(sd_netlink_unrefp) sd_netlink *nl = NULL; int r, protocol; diff --git a/src/systemd/sd-netlink.h b/src/systemd/sd-netlink.h index 45c2ffb47e..51b553a6f8 100644 --- a/src/systemd/sd-netlink.h +++ b/src/systemd/sd-netlink.h @@ -40,7 +40,6 @@ typedef int (*sd_netlink_message_handler_t)(sd_netlink *nl, sd_netlink_message * typedef _sd_destroy_t sd_netlink_destroy_t; /* bus */ -int sd_netlink_new_from_fd(sd_netlink **ret, int fd); int sd_netlink_open(sd_netlink **ret); int sd_netlink_open_fd(sd_netlink **ret, int fd); int sd_netlink_increase_rxbuf(sd_netlink *nl, const size_t size); From 40c864afe0d281e0cba5a2d77d1d8adb15724604 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 18 Aug 2022 15:06:00 +0200 Subject: [PATCH 5/7] sd-netlink: simplify error code retention --- src/libsystemd/sd-netlink/sd-netlink.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/libsystemd/sd-netlink/sd-netlink.c b/src/libsystemd/sd-netlink/sd-netlink.c index 965235862c..9a88285d09 100644 --- a/src/libsystemd/sd-netlink/sd-netlink.c +++ b/src/libsystemd/sd-netlink/sd-netlink.c @@ -539,7 +539,7 @@ _public_ int sd_netlink_call_async( } } - /* Set this at last. Otherwise, some failures in above call the destroy callback but some do not. */ + /* Set this at last. Otherwise, some failures in above would call destroy_callback but some would not. */ slot->destroy_callback = destroy_callback; if (ret_slot) @@ -705,32 +705,30 @@ static int time_callback(sd_event_source *s, uint64_t usec, void *userdata) { static int prepare_callback(sd_event_source *s, void *userdata) { sd_netlink *nl = userdata; - int r, e; + int r, enabled; usec_t until; assert(s); assert(nl); - e = sd_netlink_get_events(nl); - if (e < 0) - return e; - - r = sd_event_source_set_io_events(nl->io_event_source, e); + r = sd_netlink_get_events(nl); if (r < 0) return r; - r = sd_netlink_get_timeout(nl, &until); + r = sd_event_source_set_io_events(nl->io_event_source, r); if (r < 0) return r; - if (r > 0) { - int j; - j = sd_event_source_set_time(nl->time_event_source, until); - if (j < 0) - return j; + enabled = sd_netlink_get_timeout(nl, &until); + if (enabled < 0) + return enabled; + if (enabled > 0) { + r = sd_event_source_set_time(nl->time_event_source, until); + if (r < 0) + return r; } - r = sd_event_source_set_enabled(nl->time_event_source, r > 0); + r = sd_event_source_set_enabled(nl->time_event_source, enabled > 0); if (r < 0) return r; From f59499085f7017b84325af601cf24c54b8064c6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 19 Aug 2022 10:39:37 +0200 Subject: [PATCH 6/7] sd-netlink: group message cons methods together --- src/systemd/sd-netlink.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/systemd/sd-netlink.h b/src/systemd/sd-netlink.h index 51b553a6f8..7edfeb7687 100644 --- a/src/systemd/sd-netlink.h +++ b/src/systemd/sd-netlink.h @@ -69,7 +69,7 @@ int sd_netlink_attach_event(sd_netlink *nl, sd_event *e, int64_t priority); int sd_netlink_detach_event(sd_netlink *nl); int sd_netlink_attach_filter(sd_netlink *nl, size_t len, const struct sock_filter *filter); -/* message */ +/* Message construction */ int sd_netlink_message_append_string(sd_netlink_message *m, uint16_t attr_type, const char *data); int sd_netlink_message_append_strv(sd_netlink_message *m, uint16_t attr_type, const char* const *data); int sd_netlink_message_append_flag(sd_netlink_message *m, uint16_t attr_type); @@ -99,6 +99,10 @@ int sd_netlink_message_open_container(sd_netlink_message *m, uint16_t attr_type) int sd_netlink_message_open_container_union(sd_netlink_message *m, uint16_t attr_type, const char *key); int sd_netlink_message_close_container(sd_netlink_message *m); +int sd_netlink_message_open_array(sd_netlink_message *m, uint16_t type); +int sd_netlink_message_cancel_array(sd_netlink_message *m); + +/* Reading messages */ int sd_netlink_message_read(sd_netlink_message *m, uint16_t attr_type, size_t size, void *data); int sd_netlink_message_read_data(sd_netlink_message *m, uint16_t attr_type, size_t *ret_size, void **ret_data); int sd_netlink_message_read_data_suffix0(sd_netlink_message *m, uint16_t attr_type, size_t *ret_size, void **ret_data); @@ -117,9 +121,6 @@ int sd_netlink_message_enter_container(sd_netlink_message *m, uint16_t attr_type int sd_netlink_message_enter_array(sd_netlink_message *m, uint16_t attr_type); int sd_netlink_message_exit_container(sd_netlink_message *m); -int sd_netlink_message_open_array(sd_netlink_message *m, uint16_t type); -int sd_netlink_message_cancel_array(sd_netlink_message *m); - int sd_netlink_message_rewind(sd_netlink_message *m, sd_netlink *nl); sd_netlink_message *sd_netlink_message_next(sd_netlink_message *m); From 93c0a5eccf0716aa749015a3bffe7290d19ea909 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 19 Aug 2022 17:43:56 +0200 Subject: [PATCH 7/7] sd-netlink: use SD_EVENT_ONESHOT for a time-based callback --- src/libsystemd/sd-netlink/sd-netlink.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libsystemd/sd-netlink/sd-netlink.c b/src/libsystemd/sd-netlink/sd-netlink.c index 9a88285d09..912efcf3ad 100644 --- a/src/libsystemd/sd-netlink/sd-netlink.c +++ b/src/libsystemd/sd-netlink/sd-netlink.c @@ -728,7 +728,8 @@ static int prepare_callback(sd_event_source *s, void *userdata) { return r; } - r = sd_event_source_set_enabled(nl->time_event_source, enabled > 0); + r = sd_event_source_set_enabled(nl->time_event_source, + enabled > 0 ? SD_EVENT_ONESHOT : SD_EVENT_OFF); if (r < 0) return r;