Re: Purpose of using __be16 inside a data structure?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux