On Mon, 18 Feb 2002 anupama.sonnenahalli@amd.com wrote: > Linux kernel release 2.4.6. Am attaching the header file. > > Anu Very interesting! I havent followed the 2.4 kernel network details for sometime and they insert a new field!! :) >From what i understood after going thru some code, it seems that 'data_len' is an artifact of the ability to have non-linear skbuffs. Meaning, skbs can now be split up so that header and data areas dont have to be in contiguous memory. From other sources i gathered that this is required for 'zerocopy' to work. Hence skb->len is the length of the data for that protocol, while skb->data_len is the length of the data for that protocol in THAT skb. So if you are not bothered about skb splits, then data_len = 0 -------------------------------------------------------------------- This part of code from tcp_output.c might help in understanding: 350 /* Split fragmented skb to two parts at length len. */ 351 352 static void skb_split(struct sk_buff *skb, struct sk_buff *skb1, u32 len) 353 { 354 int i; 355 int pos = skb->len - skb->data_len; 356 357 if (len < pos) { 358 /* Split line is inside header. */ 359 memcpy(skb_put(skb1, pos-len), skb->data + len, pos-len); 360 361 /* And move data appendix as is. */ 362 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) 363 skb_shinfo(skb1)->frags[i] = skb_shinfo(skb)->frags[i]; 364 365 skb_shinfo(skb1)->nr_frags = skb_shinfo(skb)->nr_frags; 366 skb_shinfo(skb)->nr_frags = 0; 367 368 skb1->data_len = skb->data_len; 369 skb1->len += skb1->data_len; 370 skb->data_len = 0; 371 skb->len = len; 372 skb->tail = skb->data+len; 373 } else { 374 int k = 0; 375 int nfrags = skb_shinfo(skb)->nr_frags; 376 377 /* Second chunk has no header, nothing to copy. */ 378 379 skb_shinfo(skb)->nr_frags = 0; 380 skb1->len = skb1->data_len = skb->len - len; 381 skb->len = len; 382 skb->data_len = len - pos; ---------------------------------------------------------------- HTH. ciao, Amit -- The statement below is true. The statement above is false. ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^ Amit Kucheria EECS Grad. Research Assistant University of Kansas @ Lawrence (R)+1-(785)-830 8521 ||| (O)+1-(785)-864 7774 ____________________________________________________ -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ IRC Channel: irc.openprojects.net / #kernelnewbies Web Page: http://www.kernelnewbies.org/