]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-netlink: introduce two helper functions for type system union
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 4 Jul 2021 06:11:08 +0000 (15:11 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 29 Aug 2021 08:18:11 +0000 (17:18 +0900)
src/libsystemd/sd-netlink/netlink-message.c
src/libsystemd/sd-netlink/netlink-types.c
src/libsystemd/sd-netlink/netlink-types.h

index a0de7a00365160ff10391f3a89832a7f0fa91d4e..169e9cd9574919d09bc274000e46bb9695e91e42 100644 (file)
@@ -616,7 +616,7 @@ int sd_netlink_message_open_container_union(sd_netlink_message *m, unsigned shor
         if (r < 0)
                 return r;
 
-        r = sd_netlink_message_append_string(m, type_system_union->match, key);
+        r = sd_netlink_message_append_string(m, type_system_union_get_match_attribute(type_system_union), key);
         if (r < 0)
                 return r;
 
@@ -1148,12 +1148,14 @@ int sd_netlink_message_enter_container(sd_netlink_message *m, unsigned short typ
                 if (r < 0)
                         return r;
 
-                switch (type_system_union->match_type) {
-                case NL_MATCH_SIBLING:
-                {
+                switch (type_system_union_get_match_type(type_system_union)) {
+                case NL_MATCH_SIBLING: {
                         const char *key;
 
-                        r = sd_netlink_message_read_string(m, type_system_union->match, &key);
+                        r = sd_netlink_message_read_string(
+                                        m,
+                                        type_system_union_get_match_attribute(type_system_union),
+                                        &key);
                         if (r < 0)
                                 return r;
 
@@ -1166,8 +1168,7 @@ int sd_netlink_message_enter_container(sd_netlink_message *m, unsigned short typ
 
                         break;
                 }
-                case NL_MATCH_PROTOCOL:
-                {
+                case NL_MATCH_PROTOCOL: {
                         int family;
 
                         r = sd_rtnl_message_get_family(m, &family);
index d0719b3cc589dbbeb9211d0f8cf58be4a7c98f7b..f7ea451b3bc2290be3a931beda84da2c703550d0 100644 (file)
@@ -72,6 +72,14 @@ struct NLTypeSystem {
         const NLType *types;
 };
 
+struct NLTypeSystemUnion {
+        int num;
+        NLMatchType match_type;
+        uint16_t match_attribute;
+        int (*lookup)(const char *);
+        const NLTypeSystem *type_systems;
+};
+
 static const NLTypeSystem rtnl_link_type_system;
 
 static const NLType empty_types[1] = {
@@ -476,7 +484,7 @@ static const NLTypeSystemUnion rtnl_link_info_data_type_system_union = {
         .lookup = nl_union_link_info_data_from_string,
         .type_systems = rtnl_link_info_data_type_systems,
         .match_type = NL_MATCH_SIBLING,
-        .match = IFLA_INFO_KIND,
+        .match_attribute = IFLA_INFO_KIND,
 };
 
 static const NLType rtnl_link_info_types[] = {
@@ -1013,7 +1021,7 @@ static const NLTypeSystemUnion rtnl_tca_option_data_type_system_union = {
         .lookup = nl_union_tca_option_data_from_string,
         .type_systems = rtnl_tca_option_data_type_systems,
         .match_type = NL_MATCH_SIBLING,
-        .match = TCA_KIND,
+        .match_attribute = TCA_KIND,
 };
 
 static const NLType rtnl_tca_types[] = {
@@ -1570,7 +1578,7 @@ static const NLTypeSystemUnion nfnl_nft_data_expr_type_system_union = {
         .lookup = nl_union_nft_expr_data_from_string,
         .type_systems = nfnl_expr_data_type_systems,
         .match_type = NL_MATCH_SIBLING,
-        .match = NFTA_EXPR_NAME,
+        .match_attribute = NFTA_EXPR_NAME,
 };
 
 static const NLType nfnl_nft_rule_expr_types[] = {
@@ -1805,6 +1813,17 @@ int type_system_get_type_system_union(const NLTypeSystem *type_system, const NLT
         return 0;
 }
 
+NLMatchType type_system_union_get_match_type(const NLTypeSystemUnion *type_system_union) {
+        assert(type_system_union);
+        return type_system_union->match_type;
+}
+
+uint16_t type_system_union_get_match_attribute(const NLTypeSystemUnion *type_system_union) {
+        assert(type_system_union);
+        assert(type_system_union->match_type == NL_MATCH_SIBLING);
+        return type_system_union->match_attribute;
+}
+
 int type_system_union_get_type_system_by_string(const NLTypeSystemUnion *type_system_union, const NLTypeSystem **ret, const char *key) {
         int type;
 
index 59c7dfabcddef209bce5e2e29fd92597452d32db..5c292ab2b39475c2c20e1e292c19c85642453264 100644 (file)
@@ -35,14 +35,6 @@ typedef struct NLTypeSystemUnion NLTypeSystemUnion;
 typedef struct NLTypeSystem NLTypeSystem;
 typedef struct NLType NLType;
 
-struct NLTypeSystemUnion {
-        int num;
-        NLMatchType match_type;
-        uint16_t match;
-        int (*lookup)(const char *);
-        const NLTypeSystem *type_systems;
-};
-
 extern const NLTypeSystem genl_family_type_system_root;
 
 uint16_t type_get_type(const NLType *type);
@@ -56,6 +48,8 @@ int type_system_root_get_type(sd_netlink *nl, const NLType **ret, uint16_t type)
 int type_system_get_type(const NLTypeSystem *type_system, const NLType **ret, uint16_t type);
 int type_system_get_type_system(const NLTypeSystem *type_system, const NLTypeSystem **ret, uint16_t type);
 int type_system_get_type_system_union(const NLTypeSystem *type_system, const NLTypeSystemUnion **ret, uint16_t type);
+NLMatchType type_system_union_get_match_type(const NLTypeSystemUnion *type_system_union);
+uint16_t type_system_union_get_match_attribute(const NLTypeSystemUnion *type_system_union);
 int type_system_union_get_type_system_by_string(const NLTypeSystemUnion *type_system_union, const NLTypeSystem **ret, const char *key);
 int type_system_union_get_type_system_by_protocol(const NLTypeSystemUnion *type_system_union, const NLTypeSystem **ret, uint16_t protocol);