diff options
-rw-r--r-- | src/libsystemd/sd-netlink/netlink-message.c | 15 | ||||
-rw-r--r-- | src/libsystemd/sd-netlink/netlink-types.c | 25 | ||||
-rw-r--r-- | src/libsystemd/sd-netlink/netlink-types.h | 10 |
3 files changed, 32 insertions, 18 deletions
diff --git a/src/libsystemd/sd-netlink/netlink-message.c b/src/libsystemd/sd-netlink/netlink-message.c index a0de7a0036..169e9cd957 100644 --- a/src/libsystemd/sd-netlink/netlink-message.c +++ b/src/libsystemd/sd-netlink/netlink-message.c @@ -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); diff --git a/src/libsystemd/sd-netlink/netlink-types.c b/src/libsystemd/sd-netlink/netlink-types.c index d0719b3cc5..f7ea451b3b 100644 --- a/src/libsystemd/sd-netlink/netlink-types.c +++ b/src/libsystemd/sd-netlink/netlink-types.c @@ -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; diff --git a/src/libsystemd/sd-netlink/netlink-types.h b/src/libsystemd/sd-netlink/netlink-types.h index 59c7dfabcd..5c292ab2b3 100644 --- a/src/libsystemd/sd-netlink/netlink-types.h +++ b/src/libsystemd/sd-netlink/netlink-types.h @@ -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); |