summaryrefslogtreecommitdiff
path: root/src/libsystemd/sd-netlink/netlink-genl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libsystemd/sd-netlink/netlink-genl.c')
-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);