summaryrefslogtreecommitdiff
path: root/include/openvswitch/types.h
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2011-02-05 13:14:47 -0800
committerBen Pfaff <blp@nicira.com>2011-02-05 13:14:47 -0800
commit7bef2c918ac077da2156697ca821820e56561b9e (patch)
treea1fbda17f89264d7fe158492123ea07fb27d138e /include/openvswitch/types.h
parentcc2f1abfed0501550af32d2928ec3c4417f78f0a (diff)
downloadopenvswitch-7bef2c918ac077da2156697ca821820e56561b9e.tar.gz
Add types and accessors for working with half-aligned 64-bit values.
Both OpenFlow and Netlink contain 64-bit fields that are only guaranteed to be aligned on 32-bit boundaries. This commit introduces types for representing these fields and functions for working with them. Followup commits will make the OpenFlow and Netlink code use these types and functions.
Diffstat (limited to 'include/openvswitch/types.h')
-rw-r--r--include/openvswitch/types.h25
1 files changed, 24 insertions, 1 deletions
diff --git a/include/openvswitch/types.h b/include/openvswitch/types.h
index fbd2997b3..9ddb85773 100644
--- a/include/openvswitch/types.h
+++ b/include/openvswitch/types.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010 Nicira Networks.
+ * Copyright (c) 2010, 2011 Nicira Networks.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,6 +17,8 @@
#ifndef OPENVSWITCH_TYPES_H
#define OPENVSWITCH_TYPES_H 1
+#include <arpa/inet.h>
+#include <sys/types.h>
#include <stdint.h>
#ifdef __CHECKER__
@@ -35,5 +37,26 @@
typedef uint16_t OVS_BITWISE ovs_be16;
typedef uint32_t OVS_BITWISE ovs_be32;
typedef uint64_t OVS_BITWISE ovs_be64;
+
+/* Netlink and OpenFlow both contain 64-bit values that are only guaranteed to
+ * be aligned on 32-bit boundaries. These types help.
+ *
+ * lib/unaligned.h has helper functions for accessing these. */
+
+/* A 64-bit value, in host byte order, that is only aligned on a 32-bit
+ * boundary. */
+typedef struct {
+#ifdef WORDS_BIGENDIAN
+ uint32_t hi, lo;
+#else
+ uint32_t lo, hi;
+#endif
+} ovs_32aligned_u64;
+
+/* A 64-bit value, in network byte order, that is only aligned on a 32-bit
+ * boundary. */
+typedef struct {
+ ovs_be32 hi, lo;
+} ovs_32aligned_be64;
#endif /* openvswitch/types.h */