X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=include%2Fopenvswitch%2Ftypes.h;h=90a32f55d7520702e298c35c09af62829e7508be;hb=7b9f1974f42d63693676d2611f9276fb8227e071;hp=2f670c0424c2f98d7ce3fb65c18449d9f8641e6e;hpb=fba473391b92b6f2ce33a0acd68920941cb47b03;p=openvswitch diff --git a/include/openvswitch/types.h b/include/openvswitch/types.h index 2f670c04..90a32f55 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,21 +17,47 @@ #ifndef OPENVSWITCH_TYPES_H #define OPENVSWITCH_TYPES_H 1 +#include +#include #include #ifdef __CHECKER__ #define OVS_BITWISE __attribute__((bitwise)) +#define OVS_FORCE __attribute__((force)) #else #define OVS_BITWISE +#define OVS_FORCE #endif /* The ovs_be types indicate that an object is in big-endian, not * native-endian, byte order. They are otherwise equivalent to uint_t. * - * The OVS_BITWISE annotation allows the sparse checker to issue warnings - * for incorrect use of values in network byte order. */ -typedef uint16_t OVS_BITWISE ovs_be16; -typedef uint32_t OVS_BITWISE ovs_be32; -typedef uint64_t OVS_BITWISE ovs_be64; + * We bootstrap these from the Linux __be types. If we instead define our + * own independently then __be and ovs_be become mutually + * incompatible. */ +typedef __be16 ovs_be16; +typedef __be32 ovs_be32; +typedef __be64 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 */