[Click] ip.h bitfields and CLICK_BYTE_ORDER?

Markku Savela Markku.Savela at vtt.fi
Mon Mar 19 07:43:13 EDT 2012


I see following in ip.h (and similar stuff in ip6.h):

struct click_ip {
#if CLICK_BYTE_ORDER == CLICK_BIG_ENDIAN
     unsigned	ip_v : 4;		/* 0     version == 4		     */
     unsigned	ip_hl : 4;		/*       header length		     */
#elif CLICK_BYTE_ORDER == CLICK_LITTLE_ENDIAN
     unsigned	ip_hl : 4;		/* 0     header length		     */
     unsigned	ip_v : 4;		/*       version == 4		     */
#else
#   error "unknown byte order"
#endif

How can these ever work reliably? I mean, what has bitfield
placement within a byte (or int) to do with the byte order?

The C standard gives the compiler a total freedom of
placing the consecutive bit fields within a struct.


More information about the click mailing list