]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
libnetlink: Add rta_getattr_uint()
authorPetr Machata <petrm@nvidia.com>
Thu, 14 Mar 2024 14:52:12 +0000 (15:52 +0100)
committerDavid Ahern <dsahern@kernel.org>
Fri, 15 Mar 2024 15:03:06 +0000 (15:03 +0000)
NLA_UINT attributes have a 4-byte payload if possible, and an 8-byte one if
necessary. Add a function to extract these. Since we need to dispatch on
length anyway, make the getter truly universal by supporting also u8 and
u16.

Signed-off-by: Petr Machata <petrm@nvidia.com>
Signed-off-by: David Ahern <dsahern@kernel.org>
include/libnetlink.h

index ad7e71272bfa9a93c45df8b00e6dea4ee9b766c5..35a9bb57d685a5f01d0f8c5e78f0c8c2e58e8a79 100644 (file)
@@ -260,6 +260,20 @@ static inline __u64 rta_getattr_u64(const struct rtattr *rta)
        memcpy(&tmp, RTA_DATA(rta), sizeof(__u64));
        return tmp;
 }
+static inline __u64 rta_getattr_uint(const struct rtattr *rta)
+{
+       switch (RTA_PAYLOAD(rta)) {
+       case sizeof(__u8):
+               return rta_getattr_u8(rta);
+       case sizeof(__u16):
+               return rta_getattr_u16(rta);
+       case sizeof(__u32):
+               return rta_getattr_u32(rta);
+       case sizeof(__u64):
+               return rta_getattr_u64(rta);
+       }
+       return -1ULL;
+}
 static inline __s32 rta_getattr_s32(const struct rtattr *rta)
 {
        return *(__s32 *)RTA_DATA(rta);