From: Yu Watanabe Date: Sun, 4 Jul 2021 11:05:35 +0000 (+0900) Subject: sd-netlink: read protocol version of each genl family X-Git-Tag: v250-rc1~763^2~5 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=52313394ba4f2e57156d0ba1a4c4ddc669dbf7f0;p=thirdparty%2Fsystemd.git sd-netlink: read protocol version of each genl family --- diff --git a/src/libsystemd/sd-netlink/netlink-genl.c b/src/libsystemd/sd-netlink/netlink-genl.c index 1aeca0c5cff..f454dbd8373 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);