datapath-protocol: Remove #include <linux/netlink.h>.
[sliver-openvswitch.git] / include / openvswitch / types.h
index 2f670c0..4d2a1e9 100644 (file)
@@ -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.
 #ifndef OPENVSWITCH_TYPES_H
 #define OPENVSWITCH_TYPES_H 1
 
+#include <sys/types.h>
 #include <stdint.h>
 
 #ifdef __CHECKER__
 #define OVS_BITWISE __attribute__((bitwise))
+#define OVS_FORCE __attribute__((force))
 #else
 #define OVS_BITWISE
+#define OVS_FORCE
 #endif
 
 /* The ovs_be<N> types indicate that an object is in big-endian, not
 typedef uint16_t OVS_BITWISE ovs_be16;
 typedef uint32_t OVS_BITWISE ovs_be32;
 typedef uint64_t OVS_BITWISE ovs_be64;
+\f
+/* 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 */