From: Stephen Hemminger Date: Thu, 29 Dec 2011 17:29:33 +0000 (-0800) Subject: libnetlink: add attribute access inline functions X-Git-Tag: v3.2.0~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=46c5d64d6967da4401122159a8d9488c1878be65;p=thirdparty%2Fiproute2.git libnetlink: add attribute access inline functions Based on idea in libmnl, add attribute access functions instead of explicitly exposing casts. Also handle possible alignment issues of u64. --- diff --git a/include/libnetlink.h b/include/libnetlink.h index a828032df..b23757983 100644 --- a/include/libnetlink.h +++ b/include/libnetlink.h @@ -70,6 +70,25 @@ extern int __parse_rtattr_nested_compat(struct rtattr *tb[], int max, struct rta ({ data = RTA_PAYLOAD(rta) >= len ? RTA_DATA(rta) : NULL; \ __parse_rtattr_nested_compat(tb, max, rta, len); }) +static inline __u16 rta_getattr_u16(const struct rtattr *rta) +{ + return *(__u16 *)RTA_DATA(rta); +} +static inline __u16 rta_getattr_u32(const struct rtattr *rta) +{ + return *(__u32 *)RTA_DATA(rta); +} +static inline __u64 rta_getattr_u64(const struct rtattr *rta) +{ + __u64 tmp; + memcpy(&tmp, RTA_DATA(rta), sizeof(__u64)); + return tmp; +} +static inline const char *rta_getattr_str(const struct rtattr *rta) +{ + return RTA_DATA(rta); +} + extern int rtnl_listen(struct rtnl_handle *, rtnl_filter_t handler, void *jarg); extern int rtnl_from_file(FILE *, rtnl_filter_t handler,