]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-netlink: unify two spurious type system root for genl
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 24 Aug 2021 06:27:56 +0000 (15:27 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 29 Aug 2021 09:01:26 +0000 (18:01 +0900)
src/libsystemd/sd-netlink/netlink-genl.c
src/libsystemd/sd-netlink/netlink-types-genl.c
src/libsystemd/sd-netlink/netlink-types.h

index d8a628a68356deb1a07e20d690881a81bc2f5622..06406add496edcfcf4c948515bc7bee6aae36596 100644 (file)
@@ -37,7 +37,7 @@ static int genl_message_new(sd_netlink *nl, sd_genl_family_t family, uint16_t nl
         assert(nl->protocol == NETLINK_GENERIC);
         assert(ret);
 
-        r = type_system_get_type(&genl_family_type_system, &type, family);
+        r = type_system_root_get_type(nl, &type, nlmsg_type);
         if (r < 0)
                 return r;
 
index 7259d240faa48d55a5e91194710325b0c9f0d3f2..10d073f32513481812ed1fb0c96c6868dc828aed 100644 (file)
@@ -250,30 +250,18 @@ static const NLTypeSystem genl_wireguard_type_system = {
 };
 
 /***************** genl families *****************/
-static const NLType genl_families[] = {
-        [SD_GENL_ID_CTRL]   = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_ctrl_type_system },
-        [SD_GENL_WIREGUARD] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_wireguard_type_system },
-        [SD_GENL_FOU]       = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_fou_type_system },
-        [SD_GENL_L2TP]      = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_l2tp_type_system },
-        [SD_GENL_MACSEC]    = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_macsec_type_system },
-        [SD_GENL_NL80211]   = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_nl80211_type_system },
-        [SD_GENL_BATADV]    = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_batadv_type_system },
-};
-
-/* Mainly used when sending message */
-const NLTypeSystem genl_family_type_system = {
-        .count = ELEMENTSOF(genl_families),
-        .types = genl_families,
-};
-
 static const NLType genl_types[] = {
-        [SD_GENL_DONE]    = { .type = NETLINK_TYPE_NESTED, .type_system = &empty_type_system },
-        [SD_GENL_ERROR]   = { .type = NETLINK_TYPE_NESTED, .type_system = &error_type_system, .size = sizeof(struct nlmsgerr) },
-        [SD_GENL_ID_CTRL] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_ctrl_type_system, .size = sizeof(struct genlmsghdr) },
-        [SD_GENL_NL80211] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_nl80211_type_system, .size = sizeof(struct genlmsghdr) },
+        [SD_GENL_DONE]      = { .type = NETLINK_TYPE_NESTED, .type_system = &empty_type_system },
+        [SD_GENL_ERROR]     = { .type = NETLINK_TYPE_NESTED, .type_system = &error_type_system, .size = sizeof(struct nlmsgerr) },
+        [SD_GENL_ID_CTRL]   = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_ctrl_type_system, .size = sizeof(struct genlmsghdr) },
+        [SD_GENL_WIREGUARD] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_wireguard_type_system, .size = sizeof(struct genlmsghdr) },
+        [SD_GENL_FOU]       = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_fou_type_system, .size = sizeof(struct genlmsghdr) },
+        [SD_GENL_L2TP]      = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_l2tp_type_system, .size = sizeof(struct genlmsghdr) },
+        [SD_GENL_MACSEC]    = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_macsec_type_system, .size = sizeof(struct genlmsghdr) },
+        [SD_GENL_NL80211]   = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_nl80211_type_system, .size = sizeof(struct genlmsghdr) },
+        [SD_GENL_BATADV]    = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_batadv_type_system, .size = sizeof(struct genlmsghdr) },
 };
 
-/* Mainly used when message received */
 static const NLTypeSystem genl_type_system = {
         .count = ELEMENTSOF(genl_types),
         .types = genl_types,
@@ -281,21 +269,11 @@ static const NLTypeSystem genl_type_system = {
 
 int genl_get_type(sd_netlink *genl, uint16_t nlmsg_type, const NLType **ret) {
         sd_genl_family_t family;
-        const NLType *nl_type;
         int r;
 
         r = nlmsg_type_to_genl_family(genl, nlmsg_type, &family);
         if (r < 0)
                 return r;
 
-        if (family >= genl_type_system.count)
-                return -EOPNOTSUPP;
-
-        nl_type = &genl_type_system.types[family];
-
-        if (nl_type->type == NETLINK_TYPE_UNSPEC)
-                return -EOPNOTSUPP;
-
-        *ret = nl_type;
-        return 0;
+        return type_system_get_type(&genl_type_system, ret, family);
 }
index 5e2a0efee97f9c9f9ecfc38138f81cc64661e2e0..baab1dbdb01a459bcf3da3fc2aadb360ad4ee375 100644 (file)
@@ -35,8 +35,6 @@ typedef struct NLTypeSystemUnion NLTypeSystemUnion;
 typedef struct NLTypeSystem NLTypeSystem;
 typedef struct NLType NLType;
 
-extern const NLTypeSystem genl_family_type_system;
-
 int rtnl_get_type(uint16_t nlmsg_type, const NLType **ret);
 int nfnl_get_type(uint16_t nlmsg_type, const NLType **ret);
 int genl_get_type(sd_netlink *genl, uint16_t nlmsg_type, const NLType **ret);