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: Masanobu SAITOH <msaitoh%execsw.org@localhost>
To: Christoph Badura <bad%bsd.de@localhost>, Rin Okuyama <rokuyama%rk.phys.keio.ac.jp@localhost>
Cc: msaitoh%execsw.org@localhost, Ryota Ozaki <ozaki-r%netbsd.org@localhost>,
 "gnats-bugs%NetBSD.org@localhost" <gnats-bugs%netbsd.org@localhost>, kern-bug-people%netbsd.org@localhost,
 gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost
Subject: Re: kern/53562: bridge(4) breaks segmentation / TX checksum
 offloading
Date: Fri, 7 Sep 2018 17:50:58 +0900

 On 2018/09/06 6:51, Christoph Badura wrote:
 > On Wed, Sep 05, 2018 at 09:04:16PM +0900, Rin Okuyama wrote:
 >> With both patches, TX works fine through an interface added to bridge,
 >> even if TSO is enabled. However, RX from an host which shares the
 >> interface via bridge does not work for larger packets (because of TSO?).
 >> RX of smaller packets and TX work for that host.
 > 
 > I would not expect any TSO flags to be set on a packet that is received
 > from another host.  The packet should have been segmented on other host
 > already.
 > 
 >> I'm not sure if my setup should work in principle...
 > 
 > Maybe you could describe your setup in more detail.  Looking at the PR I
 > don't understand what exactly your setup is.
 
 I think so, too. I read if_bridge.c and I think ozaki-r's change should be
 correct. There might be another bug. The detailed configuration is required
 to reproduce the problem.
 
 
 > It might be worth going over the original PR kern/27007 again.  Also note
 > the second part of PR kern/21831 by yamt@.
 > 
 > Note that in kern/27007 the damage was actually done only when ipf was
 > enabled on the bridge interface.  It might well be that my change was
 > not correct because it was to broad.  Maybe ipf has changed since, so that
 > packets do not get corrupted anymore in this case, too.
 > 
 > Looking back at the code I think the comment could have been worded
 > better.  If you move it out of bridge_enqueue() it would be nice if the
 > comment could be expanded.  Like, what exactly the circumstances are that
 > the flags have been set and why they need clearing.
 
 New patch:
 Index: if_bridge.c
 ===================================================================
 RCS file: /cvsroot/src/sys/net/if_bridge.c,v
 retrieving revision 1.156
 diff -u -p -r1.156 if_bridge.c
 --- if_bridge.c	25 May 2018 04:40:27 -0000	1.156
 +++ if_bridge.c	7 Sep 2018 08:47:47 -0000
 @@ -1395,11 +1395,6 @@ bridge_enqueue(struct bridge_softc *sc,
   	int len, error;
   	short mflags;
   
 -	/*
 -	 * Clear any in-bound checksum flags for this packet.
 -	 */
 -	m->m_pkthdr.csum_flags = 0;
 -
   	if (runfilt) {
   		if (pfil_run_hooks(sc->sc_if.if_pfil, &m,
   		    dst_ifp, PFIL_OUT) != 0) {
 @@ -1768,6 +1763,13 @@ bridge_forward(struct bridge_softc *sc,
   
   	bridge_release_member(sc, bif, &psref);
   
 +	/*
 +	 * Before enqueueing this packet to the destination interface,
 +	 * clear any in-bound checksum flags to prevent them from being
 +	 * misused as out-bound flags.
 +	 */
 +	m->m_pkthdr.csum_flags = 0;
 +
   	ACQUIRE_GLOBAL_LOCKS();
   	bridge_enqueue(sc, dst_if, m, 1);
   	RELEASE_GLOBAL_LOCKS();
 @@ -1978,6 +1980,13 @@ bridge_broadcast(struct bridge_softc *sc
   				sc->sc_if.if_oerrors++;
   				goto next;
   			}
 +			/*
 +			 * Before enqueueing this packet to the destination
 +			 * interface, clear any in-bound checksum flags to
 +			 * prevent them from being misused as out-bound flags.
 +			 */
 +			m->m_pkthdr.csum_flags = 0;
 +
   			ACQUIRE_GLOBAL_LOCKS();
   			bridge_enqueue(sc, dst_if, mc, 1);
   			RELEASE_GLOBAL_LOCKS();
 
 
 > Maybe we need ATF tests.  That certainly would be nice.  Also we now have
 > more test cases to consider: npf and pf active on the bridge.
 
 I think adding offload functions into shmif(4) is a good idea to test offload
 stuff.
 
 > 
 > --chris
 > 
 
 
 -- 
 -----------------------------------------------
                  SAITOH Masanobu (msaitoh%execsw.org@localhost
                                   msaitoh%netbsd.org@localhost)
 


Home | Main Index | Thread Index | Old Index