From: Petr Machata Date: Thu, 14 Mar 2024 14:52:12 +0000 (+0100) Subject: libnetlink: Add rta_getattr_uint() X-Git-Tag: v6.10.0~10^2~16^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=95836fbf35d352f7c031ddac2e6093a935308cc9;p=thirdparty%2Fiproute2.git 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 Signed-off-by: David Ahern --- diff --git a/include/libnetlink.h b/include/libnetlink.h index ad7e7127..35a9bb57 100644 --- a/include/libnetlink.h +++ b/include/libnetlink.h @@ -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);