Module Name: src
Committed By: hikaru
Date: Sat Feb 13 06:02:31 UTC 2016
Modified Files:
src/sys/dev/marvell: if_mvxpe.c
Log Message:
Preserve rx csum bad flags.
To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sys/dev/marvell/if_mvxpe.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/marvell/if_mvxpe.c
diff -u src/sys/dev/marvell/if_mvxpe.c:1.7 src/sys/dev/marvell/if_mvxpe.c:1.8
--- src/sys/dev/marvell/if_mvxpe.c:1.7 Sat Feb 13 05:47:38 2016
+++ src/sys/dev/marvell/if_mvxpe.c Sat Feb 13 06:02:31 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: if_mvxpe.c,v 1.7 2016/02/13 05:47:38 hikaru Exp $ */
+/* $NetBSD: if_mvxpe.c,v 1.8 2016/02/13 06:02:31 hikaru Exp $ */
/*
* Copyright (c) 2015 Internet Initiative Japan Inc.
* All rights reserved.
@@ -25,7 +25,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_mvxpe.c,v 1.7 2016/02/13 05:47:38 hikaru Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_mvxpe.c,v 1.8 2016/02/13 06:02:31 hikaru Exp $");
#include "opt_multiprocessor.h"
@@ -2620,8 +2620,9 @@ mvxpe_rx_set_csumflag(struct ifnet *ifp,
/* L3 */
if (r->status & MVXPE_RX_L3_IP) {
- csum_flags |= M_CSUM_IPv4;
- if ((r->status & MVXPE_RX_IP_HEADER_OK) == 0) {
+ csum_flags |= M_CSUM_IPv4 & ifp->if_csum_flags_rx;
+ if ((r->status & MVXPE_RX_IP_HEADER_OK) == 0 &&
+ (csum_flags & M_CSUM_IPv4)) {
csum_flags |= M_CSUM_IPv4_BAD;
goto finish;
}
@@ -2638,26 +2639,25 @@ mvxpe_rx_set_csumflag(struct ifnet *ifp,
switch (r->status & MVXPE_RX_L4_MASK) {
case MVXPE_RX_L4_TCP:
if (r->status & MVXPE_RX_L3_IP)
- csum_flags |= M_CSUM_TCPv4;
+ csum_flags |= M_CSUM_TCPv4 & ifp->if_csum_flags_rx;
else
- csum_flags |= M_CSUM_TCPv6;
- if ((r->status & MVXPE_RX_L4_CHECKSUM_OK) == 0)
- csum_flags |= M_CSUM_TCP_UDP_BAD;
+ csum_flags |= M_CSUM_TCPv6 & ifp->if_csum_flags_rx;
break;
case MVXPE_RX_L4_UDP:
if (r->status & MVXPE_RX_L3_IP)
- csum_flags |= M_CSUM_UDPv4;
+ csum_flags |= M_CSUM_UDPv4 & ifp->if_csum_flags_rx;
else
- csum_flags |= M_CSUM_UDPv6;
- if ((r->status & MVXPE_RX_L4_CHECKSUM_OK) == 0)
- csum_flags |= M_CSUM_TCP_UDP_BAD;
+ csum_flags |= M_CSUM_UDPv6 & ifp->if_csum_flags_rx;
break;
case MVXPE_RX_L4_OTH:
default:
break;
}
+ if ((r->status & MVXPE_RX_L4_CHECKSUM_OK) == 0 && (csum_flags &
+ (M_CSUM_TCPv4 | M_CSUM_TCPv6 | M_CSUM_UDPv4 | M_CSUM_UDPv6)))
+ csum_flags |= M_CSUM_TCP_UDP_BAD;
finish:
- m0->m_pkthdr.csum_flags |= (csum_flags & ifp->if_csum_flags_rx);
+ m0->m_pkthdr.csum_flags = csum_flags;
}
/*