]>
Commit | Line | Data |
---|---|---|
064af421 | 1 | /* |
dbba996b | 2 | * Copyright (c) 2008, 2010, 2011 Nicira Networks. |
064af421 | 3 | * |
a14bc59f BP |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. | |
6 | * You may obtain a copy of the License at: | |
064af421 | 7 | * |
a14bc59f BP |
8 | * http://www.apache.org/licenses/LICENSE-2.0 |
9 | * | |
10 | * Unless required by applicable law or agreed to in writing, software | |
11 | * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | * See the License for the specific language governing permissions and | |
14 | * limitations under the License. | |
064af421 | 15 | */ |
10a24935 BP |
16 | #ifndef BYTE_ORDER_H |
17 | #define BYTE_ORDER_H 1 | |
064af421 BP |
18 | |
19 | #include <arpa/inet.h> | |
20 | #include <sys/types.h> | |
965f03d8 | 21 | #include <inttypes.h> |
dbba996b | 22 | #include "openvswitch/types.h" |
064af421 | 23 | |
dbba996b | 24 | static inline ovs_be64 |
064af421 BP |
25 | htonll(uint64_t n) |
26 | { | |
27 | return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32); | |
28 | } | |
29 | ||
30 | static inline uint64_t | |
dbba996b | 31 | ntohll(ovs_be64 n) |
064af421 BP |
32 | { |
33 | return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32); | |
34 | } | |
35 | ||
965f03d8 BP |
36 | /* These macros may substitute for htons(), htonl(), and htonll() in contexts |
37 | * where function calls are not allowed, such as case labels. They should not | |
38 | * be used elsewhere because all of them evaluate their argument many times. */ | |
39 | #ifdef WORDS_BIGENDIAN | |
dbba996b BP |
40 | #define CONSTANT_HTONS(VALUE) ((ovs_be16) (VALUE)) |
41 | #define CONSTANT_HTONL(VALUE) ((ovs_be32) (VALUE)) | |
42 | #define CONSTANT_HTONLL(VALUE) ((ovs_be64) (VALUE)) | |
965f03d8 BP |
43 | #else |
44 | #define CONSTANT_HTONS(VALUE) \ | |
dbba996b BP |
45 | (((((ovs_be16) (VALUE)) & 0xff00) >> 8) | \ |
46 | ((((ovs_be16) (VALUE)) & 0x00ff) << 8)) | |
965f03d8 | 47 | #define CONSTANT_HTONL(VALUE) \ |
dbba996b BP |
48 | (((((ovs_be32) (VALUE)) & 0x000000ff) << 24) | \ |
49 | ((((ovs_be32) (VALUE)) & 0x0000ff00) << 8) | \ | |
50 | ((((ovs_be32) (VALUE)) & 0x00ff0000) >> 8) | \ | |
51 | ((((ovs_be32) (VALUE)) & 0xff000000) >> 24)) | |
965f03d8 | 52 | #define CONSTANT_HTONLL(VALUE) \ |
dbba996b BP |
53 | (((((ovs_be64) (VALUE)) & UINT64_C(0x00000000000000ff)) << 56) | \ |
54 | ((((ovs_be64) (VALUE)) & UINT64_C(0x000000000000ff00)) << 40) | \ | |
55 | ((((ovs_be64) (VALUE)) & UINT64_C(0x0000000000ff0000)) << 24) | \ | |
56 | ((((ovs_be64) (VALUE)) & UINT64_C(0x00000000ff000000)) << 8) | \ | |
57 | ((((ovs_be64) (VALUE)) & UINT64_C(0x000000ff00000000)) >> 8) | \ | |
58 | ((((ovs_be64) (VALUE)) & UINT64_C(0x0000ff0000000000)) >> 24) | \ | |
59 | ((((ovs_be64) (VALUE)) & UINT64_C(0x00ff000000000000)) >> 40) | \ | |
60 | ((((ovs_be64) (VALUE)) & UINT64_C(0xff00000000000000)) >> 56)) | |
965f03d8 BP |
61 | #endif |
62 | ||
10a24935 | 63 | #endif /* byte-order.h */ |