Subject: Re: Generic Netlink HOW-TO based on Jamal's original doc

From: Randy Dunlap <[email-masked]>
Date: Fri, 10 Nov 2006 14:49:54 -0800

Thomas Graf wrote:
> * Randy Dunlap <[email-masked]> 2006-11-10 10:23
>> On Fri, 10 Nov 2006 01:08:23 -0500 Paul Moore wrote:
>>
>>> An Introduction To Using Generic Netlink
>>> ===============================================================================
>>> 3.1.2. The genl_family Structure
>>>
>>> Generic Netlink services are defined by the genl_family structure, which is
>>> shown below:
>>>
>>>   struct genl_family
>>>   {
>>>         unsigned int            id;
>>>         unsigned int            hdrsize;
>>>         char                    name[GENL_NAMSIZ];
>>>         unsigned int            version;
>>>         unsigned int            maxattr;
>>>         struct nlattr **        attrbuf;
>>>         struct list_head        ops_list;
>>>         struct list_head        family_list;
>>>   };
>> Any alignment/packing concerns here?  or that is already
>> handled, just not presented here?
> 
> I thought I chose GENL_NAMESIZ wisely but to be sure I checked
> with Mr. Alignment himself, Arnaldo:

Hm, looks OK to me.  Am I missing something?

> struct genl_family {
>         unsigned int               id;                   /* 0(0)     4 */
>         unsigned int               hdrsize;              /* 4(0)     4 */
>         char                       name[16];             /* 8(0)    16 */
>         unsigned int               version;              /* 24(0)     4 */
>         unsigned int               maxattr;              /* 28(0)     4 */
>         /* ---------- cacheline 1 boundary ---------- */
>         struct nlattr * *          attrbuf;              /* 32(0)     4 */
>         struct list_head           ops_list;             /* 36(0)     8 */
>         struct list_head           family_list;          /* 44(0)     8 */
> }; /* size: 52 */

How about field size issues?  Usually for int's etc. that are in
userspace interfaces, we use __u32 etc.

-- 
~Randy