From: Bruce Allan <bwa@us.ibm.com> Date: 12 Feb 2003 15:15:39 -0800 I don't like how sockaddr_storage works, so you'll have to clean it up before we move it to a generic spot. +struct sockaddr_storage { + sa_family_t ss_family; /* address family */ + /* Following fields are implementation specific */ + char __ss_pad1[_SS_PAD1SIZE]; + /* 6 byte pad, this is to make implementation */ + /* specific pad up to alignment field that */ + /* follows explicit in the data structure */ + int64_t __ss_align; /* field to force desired structure */ + /* storage alignment */ + char __ss_pad2[_SS_PAD2SIZE]; + /* 112 byte pad to achieve desired size, */ + /* _SS_MAXSIZE value minus size of ss_family */ + /* __ss_pad1, __ss_align fields is 112 */ +}; All of this pad stuff is really unnecessary, just specify ss_family and then "stuff" where "stuff" can be something like "char __data[0];" Then you can add "attribute((aligned(64)))" or whatever to the declaration as well. And if you're going to put some 64-bit type in here, use "__u64" which actually makes you consistent with the rest of the kernel. You could also do something like: __u64 data[_SS_MAXSIZE / sizeof(__u64)]; Anything but this pad stuff... - : send the line "unsubscribe linux-net" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html