On Tue, Aug 09, 2011 at 03:25:52PM +0800, 陳國成 wrote: > Please tell me the difference between using unsigned short and __be16 to > declear a variable in a data structure. > For example, in include/net/inet_sock.h, struct inet_sock is decleared as > > struct inet_sock { > __be16 inet_dport; > }; > > not > > struct inet_sock { > unsigned short inet_dport; > }; > > I think it has something to do with endianness. But I see that both __le16 and > __be16 are unsigned short when using gcc with -E option for little-endian and > big-endian platform. Can someone give me more information? > > * little-endian > typedef unsigned short __u16; > typedef __u16 __le16; > typedef __u16 __be16; > > * big-endian > typedef unsigned short __u16; > typedef __u16 __le16; > typedef __u16 __be16; > Which platform? The atomic element size is 16-bit? Maybe you should take a look at __be32 and __le32. FYI: This is in the kernel types.h ---- #ifdef __CHECKER__ #define __bitwise__ __attribute__((bitwise)) #else #define __bitwise__ #endif #ifdef __CHECK_ENDIAN__ #define __bitwise __bitwise__ #else #define __bitwise #endif typedef __u16 __bitwise __le16; typedef __u16 __bitwise __be16; ---- -- Regards, Adam Lee -------------------------------------------------- E-mail: adam8157@xxxxxxxxx Website: http://www.adam8157.info -------------------------------------------------- _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies