Here is an excellent tutorial by Alan Cox http://www.tldp.org/LDP/khg/HyperNews/get/net/net-intro.html Regards Mohanlal ----- Original Message ----- From: "Kiran Kumar" <immidi_kiran@yahoo.com> To: "bunty" <bunty123_4@rediffmail.com>; <kernelnewbies@nl.linux.org> Sent: Thursday, April 29, 2004 9:34 AM Subject: Re: more questions on skbuff allocation > --- bunty <bunty123_4@rediffmail.com> wrote: > > > 1)I want to know where are actaully packet > > layer headers are stored by sk_buff structure? i got > > some diagrams that tells that area between data and > > tail contains compelete packet.then what is stored > > between skb->head and skb->data area? > > Ok, let me try to sort things out. This diagram > might help. > > -> head > {headroom space} > ->data > ->tail > {tailroom space} > ->end > > Also, > len = total lenght of the data in the skb; > data_len = length of the data not in the main body of > the skb, ie, is in the frags. > > headlen = len - data_len = data in the main body of > the skb. > > When you normally create an skb (using alloc_skb()), > there is no headroom, and there is tailroom of how > many ever bytes you requested. > > A packet will be like this in the skb > > ->head, data > eth hdr > nw hdr > tran hdr > ->tail > ->end > > Then, you say, > ethhdr = skb->dat; > skb_pull(skb, ethhdr size); > > next > iphdr = skb->data; > skb_pull(skb, iphdr size); > > and so on; > > Hope this clarfies to some extent. Please do correct > me if I am wrong anywhere. > > > 2) what exactly skb_put does? > > This adds data to the buffer, by decreasing the > tailroom, that is it moves the tail pointer towards > the end pointer. > > > 3) which functions very first takes data > > from application layer and store in skbuff? > > Every 'struct sock' has a sk_proto field which in turn > has a protocol specific function generally > proto_sendmsg (like tcp_sendmsg) which actually > allocates the skbuff. > > > 4) Is there any main alloc_skb call that > > allocates total length skb buffer for whole packet? > > net/core/skbuff.c:alloc_skb() is the function > > ===== > Regards, > Kiran Kumar Immidi > > > > > __________________________________ > Do you Yahoo!? > Win a $20,000 Career Makeover at Yahoo! HotJobs > http://hotjobs.sweepstakes.yahoo.com/careermakeover > > -- > Kernelnewbies: Help each other learn about the Linux kernel. > Archive: http://mail.nl.linux.org/kernelnewbies/ > FAQ: http://kernelnewbies.org/faq/ > > -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/