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