Re: structre object question

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

 



cranium 2003 wrote:

Hello Mandeep,
On Mon, 31 Jan 2005 16:29:52 +0530, Mandeep Sandhu
<Mandeep_Sandhu@xxxxxxxxxxx> wrote:

On Mon, 2005-01-31 at 16:20 +0530, cranium 2003 wrote:

Hello,
 In linux kernel source etheernet header is defined as structure as
struct ethhdr
{
       unsigned char   h_dest[ETH_ALEN];       /* destination eth addr */
       unsigned char   h_source[ETH_ALEN];     /* source ether addr    */
       unsigned short  h_proto;                /* packet type ID field */
} __attribute__((packed));
I want to know what __attribute__((packed)) meance?
      It is not looking as a structure object  then what is thati?

Your ethernet header is 14 bytes long so the "packed" attribute
tells the compiler to to pack the structure to 14 bytes and not
try to byte align it on a word boundary (as it would do without
specifying this keyword).

   Why its necessary to tell compiler to consider it as 14 bytes?
becasue  sizeof(struct ethhdr) is 14 bytes so while putting ethhdr in
packet 14 bytes are always put so why question arises to have word
boundry alignment?
regards,
cranium

You dont see any difference here since , ETH_ALEN is defined as 6, so 6+6 = 12 , that is a word boundary and then h_proto is alligned from that address , try adding a char in between and then see the difference with and without
__attribute__((packed));


with __attribute__ tag you wud get -> 15;
without __attribute__ tag  u get -> 16

struct ethhdr
{
       unsigned char   h_dest[ETH_ALEN];       /* destination eth addr */
       unsigned char   h_source[ETH_ALEN];     /* source ether addr    */
	char  c; /* added for testing */	
       unsigned short  h_proto;                /* packet type ID field */
} __attribute__((packed));


on some archietectures unalligned memory access will not give you the right values for word's.


hth,
Cheers,
Amith


-- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/


[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