summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2021-08-24 15:27:56 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2021-08-29 18:01:26 +0900
commitd757e6bdf0934466580f0c099c1ea7889904db5f (patch)
tree9e1dd7d0ccfb279f38864db5a551a00ed0bfc493
parent9270ec60bcdbe6481cf7ab0f0b60a7afad6f932a (diff)
downloadsystemd-d757e6bdf0934466580f0c099c1ea7889904db5f.tar.gz
sd-netlink: unify two spurious type system root for genl
-rw-r--r--src/libsystemd/sd-netlink/netlink-genl.c2
-rw-r--r--src/libsystemd/sd-netlink/netlink-types-genl.c42
-rw-r--r--src/libsystemd/sd-netlink/netlink-types.h2
3 files changed, 11 insertions, 35 deletions
diff --git a/src/libsystemd/sd-netlink/netlink-genl.c b/src/libsystemd/sd-netlink/netlink-genl.c
index d8a628a683..06406add49 100644
--- a/src/libsystemd/sd-netlink/netlink-genl.c
+++ b/src/libsystemd/sd-netlink/netlink-genl.c
@@ -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;
diff --git a/src/libsystemd/sd-netlink/netlink-types-genl.c b/src/libsystemd/sd-netlink/netlink-types-genl.c
index 7259d240fa..10d073f325 100644
--- a/src/libsystemd/sd-netlink/netlink-types-genl.c
+++ b/src/libsystemd/sd-netlink/netlink-types-genl.c
@@ -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);
}
diff --git a/src/libsystemd/sd-netlink/netlink-types.h b/src/libsystemd/sd-netlink/netlink-types.h
index 5e2a0efee9..baab1dbdb0 100644
--- a/src/libsystemd/sd-netlink/netlink-types.h
+++ b/src/libsystemd/sd-netlink/netlink-types.h
@@ -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);