NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/53562: bridge(4) breaks segmentation / TX checksum offloading



The following reply was made to PR kern/53562; it has been noted by GNATS.

From: Rin Okuyama <rokuyama%rk.phys.keio.ac.jp@localhost>
To: gnats-bugs%NetBSD.org@localhost, kern-bug-people%netbsd.org@localhost,
 gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost
Cc: 
Subject: Re: kern/53562: bridge(4) breaks segmentation / TX checksum
 offloading
Date: Tue, 11 Dec 2018 17:38:46 +0900

 On 2018/12/04 9:35, Rin Okuyama wrote:
 >   First, let me summarize the current status of the problem. Most problems
 >   have been resolved by msaito. The remaining problem is that transmission
 >   from interface if0 to interface if1 fails when any TX offload option is
 >   enabled for if0 but disabled for if1.
 >   
 >   We need handle TX offload in software in bridge_output() when some TX
 >   offload option is enabled for a packet and it is not available for the
 >   destination interface. The attached patches deal with this as follows.
 >   
 >   For unicast:
 >   
 >   (1) When the destination interface is the same as source interface, we
 >        do not need to handle offload options; send a packet as is.
 >   
 >   (2) When the destination is different from the source, check whether TX
 >        offload options specified in a packet is supported by the
 >        destination. If so, we can send it as is. Otherwise, handle these
 >        options in software.
 >   
 >   For multicast/broadcast:
 >   
 >   (3) Send a packet as is if all the members of that bridge support given
 >        TX offload options. Otherwise, handle these options in software.
 >   
 >   For (3) we need calculate logical AND b/w capabilities of TX offload
 >   options in member interface (ifp->if_csum_flags_tx). I've added
 >   sc_csum_flags_tx flag to bridge softc for this purpose. This flag is
 >   updated when a member is (i) added to or (ii) removed from a bridge, or
 >   (iii) if_csum_flags_tx flag of a member interface is manipulated via
 >   ifconfig(8).
 >   
 >   Also, currently, if_csum_flags_tx do not contains M_CSUM_TSOv[46]. I've
 >   added these flags when TSOv[46] is enabled for that interface. As far
 >   as I can see, no one seems to depend on the old behavior.
 >   
 >   I've separated the patch into four parts for readability.
 >   
 >   (a) http://www.netbsd.org/~rin/bridge_20181204/ether_sw_offload_20181204.patch
 >   
 >   This patch provides routines to handle TX/RX offload options in software
 >   for ethernet. Since this breaks separation between L2 and L3/L4, I've
 >   added new files (ether_sw_offload.[ch]) rather than adding the routines
 >   to existing files.
 >   
 >   (b) http://www.netbsd.org/~rin/bridge_20181204/bridge_sw_offload_20181204.patch
 >   
 >   This is main patch to deal with the problem described above by using (a).
 >   
 >   (c) http://www.netbsd.org/~rin/bridge_20181204/if_shmem_sw_offload_20181204.patch
 >   
 >   This patch adds TX/RX offload support for shmemif(4) using (a). This may
 >   be useful for testing offload related codes in the ATF framework. This
 >   patch also contains a test code written by msaito; if_capabilities for
 >   shmemif(4) can be specified by environmental variable
 >   RUMP_SHMIF_CAPENABLE:
 >   
 >      setenv RUMP_SHMIF_CAPENABLE 0x7ff80 (all offload)
 >      setenv RUMP_SHMIF_CAPENABLE 0x6aa80 (all TX)
 >      setenv RUMP_SHMIF_CAPENABLE 0x15500 (all RX)
 >   
 >   for definition of flags, see sys/net/if.h:
 >   
 >      https://nxr.netbsd.org/xref/src/sys/net/if.h#591
 >   
 >   I've tested all tests in /usr/tests passed with all offload options
 >   enabled (RUMP_SHMIF_CAPENABLE=0x7ff80).
 >   
 >   (d) http://www.netbsd.org/~rin/bridge_20181204/simplify_ip_output_20181204.patch
 >   
 >   This patch simplify logics in ip{,6}_output() by using M_CSUM_TSOv[46]
 >   bits in ifp->if_csum_flags_tx.
 >   
 >   Any comments and suggestions are welcomed. I thank msaito for fruitful
 >   discussion!
 >   
 >   rin
 
 I will commit this soon if there's no objection (OKed by msaitoh).
 
 The patch (a) above adds new public functions, tcp[46]_segment(), that
 are used from bridge(4) via ether_sw_offload_tx(). Should I bump
 __NetBSD_Version__ although bridge(4) does not have its module?
 
 Thanks,
 rin
 


Home | Main Index | Thread Index | Old Index