X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fnetlink.c;h=ec358495946b5364380236ea6566661a3ff8d6d3;hb=55eccb868b8f1da858a9f724335b5bb059276497;hp=48a52ee343172766e89eb6bfa9619502b7932967;hpb=b18fcf8edd07d7832c16e96f29d44a2961c1e5aa;p=openvswitch diff --git a/lib/netlink.c b/lib/netlink.c index 48a52ee3..ec358495 100644 --- a/lib/netlink.c +++ b/lib/netlink.c @@ -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. @@ -582,6 +585,9 @@ nl_policy_parse(const struct ofpbuf *msg, size_t nla_offset, assert(n_required > 0); --n_required; } + if (attrs[type]) { + VLOG_DBG_RL(&rl, "%zu: duplicate attr %"PRIu16, offset, type); + } attrs[type] = nla; } else { /* Skip attribute type that we don't care about. */