]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-netlink: introduce sd_netlink_message_append_container_data()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 15 Jun 2022 04:55:20 +0000 (13:55 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 23 Jul 2022 14:52:42 +0000 (23:52 +0900)
src/libsystemd/libsystemd.sym
src/libsystemd/sd-netlink/netlink-message-nfnl.c
src/libsystemd/sd-netlink/netlink-message.c
src/shared/firewall-util-nft.c
src/systemd/sd-netlink.h

index 24dfee709530904ef1ca2f1c6d202da8b06d1309..fb6e6f6431b4753733ab204e72ab8b7f1e86561f 100644 (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;
index e70cf5263160dc63d02851ff2d15bf9060abc9f1..ed83a6180430de165fae74d29376121ffcb5fe7b 100644 (file)
@@ -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;
         }
index 34b4c23bd546732877637222c3840180508a9a83..192feac47dd79e4e70c3ac41796d660a7f9d30f0 100644 (file)
@@ -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;
 
index 0a8fc08f99cd4509d89c77d850bf9c8d8b0877cc..66ea8ee0bdbdaa081109b52d777e409c01a00b46 100644 (file)
@@ -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;
 
index dcdf77c4fe5c8e464890b86167062e6522969351..541eb1110ae572910dc57e4b1d961145f8230195 100644 (file)
@@ -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);