libnetlink: Add rta_getattr_uint()

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>
This commit is contained in:
Petr Machata 2024-03-14 15:52:12 +01:00 committed by David Ahern
parent 8b3b71898d
commit 95836fbf35

View 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);