diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2021-08-24 15:27:56 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2021-08-29 18:01:26 +0900 |
commit | d757e6bdf0934466580f0c099c1ea7889904db5f (patch) | |
tree | 9e1dd7d0ccfb279f38864db5a551a00ed0bfc493 | |
parent | 9270ec60bcdbe6481cf7ab0f0b60a7afad6f932a (diff) | |
download | systemd-d757e6bdf0934466580f0c099c1ea7889904db5f.tar.gz |
sd-netlink: unify two spurious type system root for genl
-rw-r--r-- | src/libsystemd/sd-netlink/netlink-genl.c | 2 | ||||
-rw-r--r-- | src/libsystemd/sd-netlink/netlink-types-genl.c | 42 | ||||
-rw-r--r-- | src/libsystemd/sd-netlink/netlink-types.h | 2 |
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); |