diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2021-07-04 20:05:35 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2021-08-29 18:10:47 +0900 |
commit | 52313394ba4f2e57156d0ba1a4c4ddc669dbf7f0 (patch) | |
tree | 766366bcbc35d2190aac8b96c196cdb9ca49cbf9 | |
parent | 56fdc16da81aa1608d0ab49e76cc124a579382ec (diff) | |
download | systemd-52313394ba4f2e57156d0ba1a4c4ddc669dbf7f0.tar.gz |
sd-netlink: read protocol version of each genl family
-rw-r--r-- | src/libsystemd/sd-netlink/netlink-genl.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/libsystemd/sd-netlink/netlink-genl.c b/src/libsystemd/sd-netlink/netlink-genl.c index 1aeca0c5cf..f454dbd837 100644 --- a/src/libsystemd/sd-netlink/netlink-genl.c +++ b/src/libsystemd/sd-netlink/netlink-genl.c @@ -16,11 +16,13 @@ typedef struct GenericNetlinkFamily { uint16_t id; /* a.k.a nlmsg_type */ char *name; + uint32_t version; } GenericNetlinkFamily; static const GenericNetlinkFamily nlctrl_static = { .id = GENL_ID_CTRL, .name = (char*) CTRL_GENL_NAME, + .version = 0x01, }; static GenericNetlinkFamily *genl_family_free(GenericNetlinkFamily *f) { @@ -113,6 +115,10 @@ static int genl_family_new( if (!streq(f->name, expected_family_name)) return -EINVAL; + r = sd_netlink_message_read_u32(message, CTRL_ATTR_VERSION, &f->version); + if (r < 0) + return r; + r = hashmap_ensure_put(&nl->genl_family_by_id, NULL, UINT_TO_PTR(f->id), f); if (r < 0) return r; @@ -165,7 +171,7 @@ static int genl_message_new( *(struct genlmsghdr *) NLMSG_DATA(m->hdr) = (struct genlmsghdr) { .cmd = cmd, - .version = 1, + .version = family->version, }; *ret = TAKE_PTR(m); |