Purpose of using __be16 inside a data structure?
陳國成
gcchen.org at gmail.com
Thu Aug 25 01:41:32 EDT 2011
Hi Adam,
1. Which platform?
* little-endian
ARM
* big-endian
MIPS
2. The atomic element size is 16-bit?
No idea about this question.
3. Maybe you should take a look at __be32 and __le32.
* little-endian
# 1 "arch/arm/include/asm/types.h" 1
# 1 "include/asm-generic/int-ll64.h" 1
# 17 "include/asm-generic/int-ll64.h"
typedef __signed__ char __s8;
typedef unsigned char __u8;
typedef __signed__ short __s16;
typedef unsigned short __u16;
typedef __signed__ int __s32;
typedef unsigned int __u32;
# 168 "include/linux/types.h"
typedef __u16 __le16;
typedef __u16 __be16;
typedef __u32 __le32;
typedef __u32 __be32;
* big-endian
# 21 "arch/mips/include/asm/types.h"
# 1 "include/asm-generic/int-ll64.h" 1
# 17 "include/asm-generic/int-ll64.h"
typedef __signed__ char __s8;
typedef unsigned char __u8;
typedef __signed__ short __s16;
typedef unsigned short __u16;
typedef __signed__ int __s32;
typedef unsigned int __u32;
# 168 "include/linux/types.h"
typedef __u16 __le16;
typedef __u16 __be16;
typedef __u32 __le32;
typedef __u32 __be32;
I'm using Linux 2.6.30.
Regards,
GC
2011/8/24 Adam Lee <adam8157 at gmail.com>:
> 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 at gmail.com
> Website: http://www.adam8157.info
> --------------------------------------------------
>
More information about the Kernelnewbies
mailing list