2015-11-03 4 views
0

В открытом реализации VSWITCH 2.4.0, мы имеем следующее:типы Преобразовать openvswitch в небольшой Endian

#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 в little-endian uint16_t?

ответ

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; 
} 
1

уже есть функции:

htonl() 
htons() 
ntohl() 
ntohs() 

Какие прототипы в

#include <arpa/inet.h> 

Если я правильно понимаю ваш вопрос, эти функции будут делать то, что вы хотите.