sd-netlink: introduce sd_netlink_message_append_container_data()

This commit is contained in:
Yu Watanabe
2022-07-23 23:52:42 +09:00
parent 64f090a61a
commit 2c08455eed
5 changed files with 35 additions and 41 deletions
+1
View File
@@ -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;
@@ -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;
}
@@ -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;