在Open vSwitch 2.4.0实现中,我们有以下内容:
#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
* native-endian, byte order. They are otherwise equivalent to uint<N>_t. */
typedef uint16_t OVS_BITWISE ovs_be16;
typedef struct {
ovs_be16 hi, lo;
} ovs_16aligned_be32;
我有以下变量:
ovs_16aligned_be32 srcIP;
ovs_be16 srcPort ;
如何将srcIP
转换为xxx.yyy.zzz.ttt
,将srcPort
转换为小端uint16_t
?
答案 0 :(得分:1)
已有功能:
htonl()
htons()
ntohl()
ntohs()
中的原型
#include <arpa/inet.h>
如果我理解你的问题,这些功能会做你想要的。
答案 1 :(得分:0)
好的,我不知道什么是openvswitch,但我认为这应该有效:
ovs_16aligned_be32 ovs_16aligned_be32_to_littleEndian(ovs_16aligned_be32 a) {
ovs_16aligned_be32 b.high = ovs_be16_toLittleEndian(a.low);
b.low = ovs_be16_toLittleEndian(a.high);
return b;
}
ovs_be16 ovs_be16_toLittleEndian(ovs_be16 srcPort a) {
ovs_be16 srcPort b = (a >> 8) & 0x00ff;
b |= a << 8;
return b;
}