linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [RFC 0/1] lro: Generic Large Receive Offload for TCP traffic
@ 2007-07-20 15:41 Jan-Bernd Themann
  2007-07-21 14:03 ` Andrew Gallatin
  2007-07-25 17:17 ` Andrew Gallatin
  0 siblings, 2 replies; 7+ messages in thread
From: Jan-Bernd Themann @ 2007-07-20 15:41 UTC (permalink / raw)
  To: netdev
  Cc: Thomas Klein, Jeff Garzik, Jan-Bernd Themann, linux-kernel,
	linux-ppc, Christoph Raisch, Marcus Eder, Stefan Roscher,
	David Miller

Hi,

Thanks a lot for your comments so far.
This generic LRO patch differs from the last one in several points.
A new interface for a "receive in pages" mode has been added and tested
with an eHEA prototype. Seems to work well.

Does this extended interface seem to be sufficient?

Below some more explanations:

Thanks,
Jan-Bernd


Changes to http://www.spinics.net/lists/netdev/msg35490.html :

- Interfaces are changed to allow later support for IPv6 / UDP
- New interface to support "receive in pages"
- TCP checksums are updated properly
- TCP packets with push flag are aggregated now
- Timestamps are now compared using after()


The additional interface to support "receive in pages":

void lro_receive_frags(struct net_lro_mgr *lro_mgr,
                       struct skb_frag_struct *frags,
                       int len, int true_size, void *priv);

void lro_vlan_hwaccel_receive_frags(struct net_lro_mgr *lro_mgr,
                                    struct skb_frag_struct *frags,
                                    int len,
                                    int true_size,
                                    struct vlan_group *vgrp,
                                    u16 vlan_tag,
                                    void *priv);

These functions generate SKBs only for the first packet of an
LRO session. The next fragment list to be aggregated will be
added in the fragment list of that SKB.

The reason why this is a smart approach is described in:
http://www.spinics.net/lists/netdev/msg35634.html

All other packets that do not match the LRO requirements are
put in an SKB and sent to the stack.

Packets that are received in an extra buffer (small packets) and
thus not in an skb fragment can be sent by the driver to the stack
after flushing the appropriate LRO sessions:

void lro_flush_pkt(struct net_lro_mgr *lro_mgr,
                   struct iphdr *iph, struct tcphdr *tcph);

or

void lro_flush_all(struct net_lro_mgr *lro_mgr);

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2007-07-27 19:47 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-20 15:41 [RFC 0/1] lro: Generic Large Receive Offload for TCP traffic Jan-Bernd Themann
2007-07-21 14:03 ` Andrew Gallatin
2007-07-25 17:17 ` Andrew Gallatin
2007-07-26  0:28   ` David Miller
2007-07-27 12:18   ` Jan-Bernd Themann
2007-07-27 13:00     ` Jeff Garzik
2007-07-27 19:47     ` Andrew Gallatin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).