summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2021-07-04 20:05:35 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2021-08-29 18:10:47 +0900
commit52313394ba4f2e57156d0ba1a4c4ddc669dbf7f0 (patch)
tree766366bcbc35d2190aac8b96c196cdb9ca49cbf9
parent56fdc16da81aa1608d0ab49e76cc124a579382ec (diff)
downloadsystemd-52313394ba4f2e57156d0ba1a4c4ddc669dbf7f0.tar.gz
sd-netlink: read protocol version of each genl family
-rw-r--r--src/libsystemd/sd-netlink/netlink-genl.c8
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);