From: Yu Watanabe Date: Wed, 15 Jun 2022 04:55:20 +0000 (+0900) Subject: sd-netlink: introduce sd_netlink_message_append_container_data() X-Git-Tag: v252-rc1~594^2~5 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2c08455eedbedbd62fc712e239f76f34e7ac0de1;p=thirdparty%2Fsystemd.git sd-netlink: introduce sd_netlink_message_append_container_data() --- diff --git a/src/libsystemd/libsystemd.sym b/src/libsystemd/libsystemd.sym index 24dfee70953..fb6e6f6431b 100644 --- a/src/libsystemd/libsystemd.sym +++ b/src/libsystemd/libsystemd.sym @@ -818,6 +818,7 @@ global: sd_netlink_message_append_s32; sd_netlink_message_append_s64; sd_netlink_message_append_data; + sd_netlink_message_append_container_data; sd_netlink_message_append_in_addr; sd_netlink_message_append_in6_addr; sd_netlink_message_append_sockaddr_in; diff --git a/src/libsystemd/sd-netlink/netlink-message-nfnl.c b/src/libsystemd/sd-netlink/netlink-message-nfnl.c index e70cf526316..ed83a618043 100644 --- a/src/libsystemd/sd-netlink/netlink-message-nfnl.c +++ b/src/libsystemd/sd-netlink/netlink-message-nfnl.c @@ -290,20 +290,6 @@ int sd_nfnl_nft_message_del_setelems_begin( return r; } -static int add_data(sd_netlink_message *m, uint16_t attr, const void *data, uint32_t dlen) { - int r; - - r = sd_netlink_message_open_container(m, attr); - if (r < 0) - return r; - - r = sd_netlink_message_append_data(m, NFTA_DATA_VALUE, data, dlen); - if (r < 0) - return r; - - return sd_netlink_message_close_container(m); /* attr */ -} - int sd_nfnl_nft_message_add_setelem( sd_netlink_message *m, uint32_t index, @@ -318,12 +304,12 @@ int sd_nfnl_nft_message_add_setelem( if (r < 0) return r; - r = add_data(m, NFTA_SET_ELEM_KEY, key, key_len); + r = sd_netlink_message_append_container_data(m, NFTA_SET_ELEM_KEY, NFTA_DATA_VALUE, key, key_len); if (r < 0) goto cancel; if (data) { - r = add_data(m, NFTA_SET_ELEM_DATA, data, data_len); + r = sd_netlink_message_append_container_data(m, NFTA_SET_ELEM_DATA, NFTA_DATA_VALUE, data, data_len); if (r < 0) goto cancel; } diff --git a/src/libsystemd/sd-netlink/netlink-message.c b/src/libsystemd/sd-netlink/netlink-message.c index 34b4c23bd54..192feac47dd 100644 --- a/src/libsystemd/sd-netlink/netlink-message.c +++ b/src/libsystemd/sd-netlink/netlink-message.c @@ -452,6 +452,29 @@ _public_ int sd_netlink_message_append_data(sd_netlink_message *m, unsigned shor return 0; } +_public_ int sd_netlink_message_append_container_data( + sd_netlink_message *m, + unsigned short container_type, + unsigned short type, + const void *data, + size_t len) { + + int r; + + assert_return(m, -EINVAL); + assert_return(!m->sealed, -EPERM); + + r = sd_netlink_message_open_container(m, container_type); + if (r < 0) + return r; + + r = sd_netlink_message_append_data(m, type, data, len); + if (r < 0) + return r; + + return sd_netlink_message_close_container(m); +} + int netlink_message_append_in_addr_union(sd_netlink_message *m, unsigned short type, int family, const union in_addr_union *data) { int r; diff --git a/src/shared/firewall-util-nft.c b/src/shared/firewall-util-nft.c index 0a8fc08f99c..66ea8ee0bdb 100644 --- a/src/shared/firewall-util-nft.c +++ b/src/shared/firewall-util-nft.c @@ -254,28 +254,6 @@ static int nfnl_add_expr_lookup_map( return sd_netlink_message_close_container(m); /* NFTA_LIST_ELEM */ } -static int nfnl_add_expr_data( - sd_netlink_message *m, - int attr, - const void *data, - uint32_t dlen) { - - int r; - - assert(m); - assert(data); - - r = sd_netlink_message_open_container(m, attr); - if (r < 0) - return r; - - r = sd_netlink_message_append_data(m, NFTA_DATA_VALUE, data, dlen); - if (r < 0) - return r; - - return sd_netlink_message_close_container(m); /* attr */ -} - static int nfnl_add_expr_cmp( sd_netlink_message *m, enum nft_cmp_ops cmp_op, @@ -300,7 +278,7 @@ static int nfnl_add_expr_cmp( if (r < 0) return r; - r = nfnl_add_expr_data(m, NFTA_CMP_DATA, data, dlen); + r = sd_netlink_message_append_container_data(m, NFTA_CMP_DATA, NFTA_DATA_VALUE, data, dlen); if (r < 0) return r; @@ -341,11 +319,11 @@ static int nfnl_add_expr_bitwise( if (r < 0) return r; - r = nfnl_add_expr_data(m, NFTA_BITWISE_MASK, and, len); + r = sd_netlink_message_append_container_data(m, NFTA_BITWISE_MASK, NFTA_DATA_VALUE, and, len); if (r < 0) return r; - r = nfnl_add_expr_data(m, NFTA_BITWISE_XOR, xor, len); + r = sd_netlink_message_append_container_data(m, NFTA_BITWISE_XOR, NFTA_DATA_VALUE, xor, len); if (r < 0) return r; diff --git a/src/systemd/sd-netlink.h b/src/systemd/sd-netlink.h index dcdf77c4fe5..541eb1110ae 100644 --- a/src/systemd/sd-netlink.h +++ b/src/systemd/sd-netlink.h @@ -83,6 +83,12 @@ int sd_netlink_message_append_s16(sd_netlink_message *m, unsigned short type, in int sd_netlink_message_append_s32(sd_netlink_message *m, unsigned short type, int32_t data); int sd_netlink_message_append_s64(sd_netlink_message *m, unsigned short type, int64_t data); int sd_netlink_message_append_data(sd_netlink_message *m, unsigned short type, const void *data, size_t len); +int sd_netlink_message_append_container_data( + sd_netlink_message *m, + unsigned short container_type, + unsigned short type, + const void *data, + size_t len); int sd_netlink_message_append_in_addr(sd_netlink_message *m, unsigned short type, const struct in_addr *data); int sd_netlink_message_append_in6_addr(sd_netlink_message *m, unsigned short type, const struct in6_addr *data); int sd_netlink_message_append_sockaddr_in(sd_netlink_message *m, unsigned short type, const struct sockaddr_in *data);