]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-netlink: read protocol version of each genl family
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 4 Jul 2021 11:05:35 +0000 (20:05 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 29 Aug 2021 09:10:47 +0000 (18:10 +0900)
src/libsystemd/sd-netlink/netlink-genl.c

index 1aeca0c5cff997d557d3d5aed41debf3d046722f..f454dbd8373cbc2114bd040149eafbf60410ea8c 100644 (file)
@@ -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);