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: gnats-bugs%NetBSD.org@localhost, kern-bug-people%netbsd.org@localhost,
gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost
Cc: msaitoh%execsw.org@localhost
Subject: Re: kern/53562: bridge(4) breaks segmentation / TX checksum
offloading
Date: Mon, 3 Sep 2018 17:52:52 +0900
On 2018/08/30 18:25, rokuyama%rk.phys.keio.ac.jp@localhost wrote:
>> Number: 53562
>> Category: kern
>> Synopsis: bridge(4) breaks segmentation / TX checksum offloading
>> Confidential: no
>> Severity: serious
>> Priority: medium
>> Responsible: kern-bug-people
>> State: open
>> Class: sw-bug
>> Submitter-Id: net
>> Arrival-Date: Thu Aug 30 09:25:00 +0000 2018
>> Originator: Rin Okuyama
>> Release: 8.99.24
>> Organization:
> School of Science and Technology, Meiji University
>> Environment:
> NetBSD rpi3b 8.99.24 NetBSD 8.99.24 (RPI3-64) #24: Thu Aug 30 17:39:24 JST 2018 rin@latipes:/var/build/src/sys/arch/evbarm/compile/RPI3-64 evbarm aarch64
>> Description:
> If a network interface is added to bridge(4), segmentation or TX
> checksum offloading do not work. This is because csum_flags are
> cleared in bridge_enqueue():
>
> https://nxr.netbsd.org/xref/src/sys/net/if_bridge.c#1401
>
> 1391 void
> 1392 bridge_enqueue(struct bridge_softc *sc, struct ifnet *dst_ifp, struct mbuf *m,
> 1393 int runfilt)
> 1394 {
> ....
> 1398 /*
> 1399 * Clear any in-bound checksum flags for this packet.
> 1400 */
> 1401 m->m_pkthdr.csum_flags = 0;
>> How-To-Repeat:
> Enable segmentation or TX checksum offloading for a network interface,
> and add it to bridge(4). Then, data transmission starts to fail.
>> Fix:
> Not known.
>
Is the following change correct?
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 3 Sep 2018 08:51:23 -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) {
@@ -1644,6 +1639,11 @@ bridge_forward(struct bridge_softc *sc,
if ((sc->sc_if.if_flags & IFF_RUNNING) == 0)
return;
+ /*
+ * Clear any in-bound checksum flags for this packet.
+ */
+ m->m_pkthdr.csum_flags = 0;
+
src_if = m_get_rcvif_psref(m, &psref_src);
if (src_if == NULL) {
/* Interface is being destroyed? */
--
-----------------------------------------------
SAITOH Masanobu (msaitoh%execsw.org@localhost
msaitoh%netbsd.org@localhost)
Home |
Main Index |
Thread Index |
Old Index