From fba473391b92b6f2ce33a0acd68920941cb47b03 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Thu, 21 Oct 2010 11:31:43 -0700 Subject: [PATCH] Make the ovs_be types generally available. Using these types for data in network byte order makes code clearer, and allows the "sparse" checker to give warnings for misuse. --- build-aux/check-structs | 3 ++ include/openvswitch/datapath-protocol.h | 5 +--- include/openvswitch/types.h | 37 +++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 include/openvswitch/types.h diff --git a/build-aux/check-structs b/build-aux/check-structs index 545c80a8..f582e2bd 100755 --- a/build-aux/check-structs +++ b/build-aux/check-structs @@ -13,6 +13,9 @@ types['uint8_t'] = {"size": 1, "alignment": 1} types['uint16_t'] = {"size": 2, "alignment": 2} types['uint32_t'] = {"size": 4, "alignment": 4} types['uint64_t'] = {"size": 8, "alignment": 8} +types['ovs_be16'] = {"size": 2, "alignment": 2} +types['ovs_be32'] = {"size": 4, "alignment": 4} +types['ovs_be64'] = {"size": 8, "alignment": 8} token = None line = "" diff --git a/include/openvswitch/datapath-protocol.h b/include/openvswitch/datapath-protocol.h index b0e9dfbb..15c05e0d 100644 --- a/include/openvswitch/datapath-protocol.h +++ b/include/openvswitch/datapath-protocol.h @@ -56,10 +56,7 @@ #define ovs_be32 __be32 #define ovs_be64 __be64 #else -#include -#define ovs_be16 uint16_t -#define ovs_be32 uint32_t -#define ovs_be64 uint64_t +#include "openvswitch/types.h" #endif #define ODP_MAX 256 /* Maximum number of datapaths. */ diff --git a/include/openvswitch/types.h b/include/openvswitch/types.h new file mode 100644 index 00000000..2f670c04 --- /dev/null +++ b/include/openvswitch/types.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2010 Nicira Networks. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OPENVSWITCH_TYPES_H +#define OPENVSWITCH_TYPES_H 1 + +#include + +#ifdef __CHECKER__ +#define OVS_BITWISE __attribute__((bitwise)) +#else +#define OVS_BITWISE +#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; + +#endif /* openvswitch/types.h */ -- 2.30.2