netlink: Use proper types and functions for half-aligned 64-bit values.
authorBen Pfaff <blp@nicira.com>
Tue, 18 Jan 2011 19:51:46 +0000 (11:51 -0800)
committerBen Pfaff <blp@nicira.com>
Sat, 5 Feb 2011 21:14:49 +0000 (13:14 -0800)
These haven't showed up as problems yet in my tests but it is only a matter
of time.

lib/netlink.c

index 725bba0..ec35849 100644 (file)
@@ -25,6 +25,7 @@
 #include "netlink-protocol.h"
 #include "ofpbuf.h"
 #include "timeval.h"
+#include "unaligned.h"
 #include "vlog.h"
 
 VLOG_DEFINE_THIS_MODULE(netlink);
@@ -435,7 +436,8 @@ nl_attr_get_u32(const struct nlattr *nla)
 uint64_t
 nl_attr_get_u64(const struct nlattr *nla)
 {
-    return NL_ATTR_GET_AS(nla, uint64_t);
+    const ovs_32aligned_u64 *x = nl_attr_get_unspec(nla, sizeof *x);
+    return get_32aligned_u64(x);
 }
 
 /* Returns the 16-bit network byte order value in 'nla''s payload.
@@ -462,7 +464,8 @@ nl_attr_get_be32(const struct nlattr *nla)
 ovs_be64
 nl_attr_get_be64(const struct nlattr *nla)
 {
-    return NL_ATTR_GET_AS(nla, ovs_be64);
+    const ovs_32aligned_be64 *x = nl_attr_get_unspec(nla, sizeof *x);
+    return get_32aligned_be64(x);
 }
 
 /* Returns the null-terminated string value in 'nla''s payload.