aboutsummaryrefslogtreecommitdiff
path: root/lib/netlink.c
diff options
context:
space:
mode:
authorAlex Wang <alexw@nicira.com>2013-06-19 16:58:44 -0700
committerBen Pfaff <blp@nicira.com>2013-06-20 10:42:37 -0700
commit4e022ec09e14ac89add74c1b4b8e3ff3873edbf0 (patch)
treea6817234d1d992d2a7970865c1464dfaaf247c7f /lib/netlink.c
parente6cc0babc25de1800aeffad66d2804e64e5bd602 (diff)
Create specific types for ofp and odp port
Until now, datapath ports and openflow ports were both represented by unsigned integers of various sizes. With implicit conversions, etc., it is easy to mix them up and use one where the other is expected. This commit creates two typedefs, ofp_port_t and odp_port_t. Both of these two types are marked by "__attribute__((bitwise))" so that sparse can be used to detect any misuse. Signed-off-by: Alex Wang <alexw@nicira.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'lib/netlink.c')
-rw-r--r--lib/netlink.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/lib/netlink.c b/lib/netlink.c
index c8e5905a..7e7884e6 100644
--- a/lib/netlink.c
+++ b/lib/netlink.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc.
+ * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,6 +21,7 @@
#include <sys/types.h>
#include <unistd.h>
#include "coverage.h"
+#include "flow.h"
#include "netlink-protocol.h"
#include "ofpbuf.h"
#include "timeval.h"
@@ -295,6 +296,15 @@ nl_msg_put_be64(struct ofpbuf *msg, uint16_t type, ovs_be64 value)
nl_msg_put_unspec(msg, type, &value, sizeof value);
}
+/* Appends a Netlink attribute of the given 'type' and the given odp_port_t
+ * 'value' to 'msg'. */
+void
+nl_msg_put_odp_port(struct ofpbuf *msg, uint16_t type, odp_port_t value)
+{
+ nl_msg_put_u32(msg, type, odp_to_u32(value));
+}
+
+
/* Appends a Netlink attribute of the given 'type' and the given
* null-terminated string 'value' to 'msg'. */
void
@@ -570,6 +580,15 @@ nl_attr_get_be64(const struct nlattr *nla)
return get_32aligned_be64(x);
}
+/* Returns the 32-bit odp_port_t value in 'nla''s payload.
+ *
+ * Asserts that 'nla''s payload is at least 4 bytes long. */
+odp_port_t
+nl_attr_get_odp_port(const struct nlattr *nla)
+{
+ return u32_to_odp(nl_attr_get_u32(nla));
+}
+
/* Returns the null-terminated string value in 'nla''s payload.
*
* Asserts that 'nla''s payload contains a null-terminated string. */