Hi, I'm completely new in kernel things, so forgive me if sometimes I will have stupid questions. So, to the point. The questions: 1. What is the __mptr needed for? #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );}) 2. Why is the "{ }" needed? #define __pgd(x) ((pgd_t) { (x) } ) 3. What are data_len and len in sk_buff, how are they used? 4. What is the difference between frag_list and frags[]? struct skb_shared_info { atomic_t dataref; unsigned int nr_frags; unsigned short tso_size; unsigned short tso_segs; struct sk_buff *frag_list; skb_frag_t frags[MAX_SKB_FRAGS]; }; Thanks in advance, Gabor -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/