From: Yu Watanabe Date: Sun, 3 Feb 2019 00:06:23 +0000 (+0100) Subject: sd-netlink: unify sd_netlink_message_append_in{,6}_addr() and _sockaddr_in{,6}() X-Git-Tag: v242~370^2~7 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=67b19a496173e0401e9f2b7a3591715e0fe22b75;p=platform%2Fupstream%2Fsystemd.git sd-netlink: unify sd_netlink_message_append_in{,6}_addr() and _sockaddr_in{,6}() --- diff --git a/src/libsystemd/sd-netlink/netlink-message.c b/src/libsystemd/sd-netlink/netlink-message.c index 5e9bc45..f878fc9 100644 --- a/src/libsystemd/sd-netlink/netlink-message.c +++ b/src/libsystemd/sd-netlink/netlink-message.c @@ -334,78 +334,61 @@ int sd_netlink_message_append_data(sd_netlink_message *m, unsigned short type, c return 0; } -int sd_netlink_message_append_in_addr(sd_netlink_message *m, unsigned short type, const struct in_addr *data) { +int netlink_message_append_in_addr_union(sd_netlink_message *m, unsigned short type, int family, const union in_addr_union *data) { int r; assert_return(m, -EINVAL); assert_return(!m->sealed, -EPERM); assert_return(data, -EINVAL); + assert_return(IN_SET(family, AF_INET, AF_INET6), -EINVAL); r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_IN_ADDR); if (r < 0) return r; - r = add_rtattr(m, type, data, sizeof(struct in_addr)); + r = add_rtattr(m, type, data, FAMILY_ADDRESS_SIZE(family)); if (r < 0) return r; return 0; } -int sd_netlink_message_append_in6_addr(sd_netlink_message *m, unsigned short type, const struct in6_addr *data) { - int r; - - assert_return(m, -EINVAL); - assert_return(!m->sealed, -EPERM); - assert_return(data, -EINVAL); - - r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_IN_ADDR); - if (r < 0) - return r; - - r = add_rtattr(m, type, data, sizeof(struct in6_addr)); - if (r < 0) - return r; +int sd_netlink_message_append_in_addr(sd_netlink_message *m, unsigned short type, const struct in_addr *data) { + return netlink_message_append_in_addr_union(m, type, AF_INET, (const union in_addr_union *) data); +} - return 0; +int sd_netlink_message_append_in6_addr(sd_netlink_message *m, unsigned short type, const struct in6_addr *data) { + return netlink_message_append_in_addr_union(m, type, AF_INET6, (const union in_addr_union *) data); } -int sd_netlink_message_append_sockaddr_in(sd_netlink_message *m, unsigned short type, const struct sockaddr_in *data) { +int netlink_message_append_sockaddr_union(sd_netlink_message *m, unsigned short type, const union sockaddr_union *data) { int r; assert_return(m, -EINVAL); assert_return(!m->sealed, -EPERM); assert_return(data, -EINVAL); + assert_return(IN_SET(data->sa.sa_family, AF_INET, AF_INET6), -EINVAL); r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_SOCKADDR); if (r < 0) return r; - r = add_rtattr(m, type, data, sizeof(struct sockaddr_in)); + r = add_rtattr(m, type, data, data->sa.sa_family == AF_INET ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6)); if (r < 0) return r; return 0; } -int sd_netlink_message_append_sockaddr_in6(sd_netlink_message *m, unsigned short type, const struct sockaddr_in6 *data) { - int r; - - assert_return(m, -EINVAL); - assert_return(!m->sealed, -EPERM); - assert_return(data, -EINVAL); - - r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_SOCKADDR); - if (r < 0) - return r; - - r = add_rtattr(m, type, data, sizeof(struct sockaddr_in6)); - if (r < 0) - return r; +int sd_netlink_message_append_sockaddr_in(sd_netlink_message *m, unsigned short type, const struct sockaddr_in *data) { + return netlink_message_append_sockaddr_union(m, type, (const union sockaddr_union *) data); +} - return 0; +int sd_netlink_message_append_sockaddr_in6(sd_netlink_message *m, unsigned short type, const struct sockaddr_in6 *data) { + return netlink_message_append_sockaddr_union(m, type, (const union sockaddr_union *) data); } + int sd_netlink_message_append_ether_addr(sd_netlink_message *m, unsigned short type, const struct ether_addr *data) { int r; diff --git a/src/libsystemd/sd-netlink/netlink-util.h b/src/libsystemd/sd-netlink/netlink-util.h index d272328..0d01a4b 100644 --- a/src/libsystemd/sd-netlink/netlink-util.h +++ b/src/libsystemd/sd-netlink/netlink-util.h @@ -3,6 +3,8 @@ #include "sd-netlink.h" +#include "in-addr-util.h" +#include "socket-util.h" #include "util.h" int rtnl_message_new_synthetic_error(sd_netlink *rtnl, int error, uint32_t serial, sd_netlink_message **ret); @@ -58,3 +60,6 @@ int rtnl_log_create_error(int r); (sd_netlink_destroy_t) _destroy_, \ userdata, __func__); \ }) + +int netlink_message_append_in_addr_union(sd_netlink_message *m, unsigned short type, int family, const union in_addr_union *data); +int netlink_message_append_sockaddr_union(sd_netlink_message *m, unsigned short type, const union sockaddr_union *data);