All of lore.kernel.org
 help / color / mirror / Atom feed
* A GRO question
@ 2011-07-05  5:41 Li Yu
  0 siblings, 0 replies; only message in thread
From: Li Yu @ 2011-07-05  5:41 UTC (permalink / raw)
  To: netdev@vger.kernel.org

Hi,

	I have a question about GRO implementation, this indeed confuses me.

	I found that we assume that NAPI_GRO_CB(skb)->frag0 starts 
with a mac/L2 header in compare_ether_header(), which is called in
__napi_gro_receive()

	However, in further dev_gro_receive() -> ptype->gro_receive [inet_gro_receive],
we use same address as IPv4/L3 header, like below:

        off = skb_gro_offset(skb); //it should keep zero until now, in my words.
        hlen = off + sizeof(*iph);      
        iph = skb_gro_header_fast(skb, off);  //just return NAPI_GRO_CB(skb)->frag0 + 0

	So we forget that updating NAPI_GRO_CB(skb)->data_offset here, or I miss sth?

	And, in my understanding against igb source code, if rx_ring->rx_buffer_len < 1024 
(if we used large MTU), then igb driver use header split mode, in such case, the mac header
should be saved in skb->data : skb_put(skb, igb_get_hlen(rx_ring, rx_desc)), the rest data
is loaded by below skb_fill_page_desc() call. so NAPI_GRO_CB(skb)->frag0 should start with
L3 header. 

	Thanks.

Yu

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2011-07-05  5:41 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-07-05  5:41 A GRO question Li Yu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.