summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortuexen <tuexen@FreeBSD.org>2014-10-06 17:04:26 +0000
committertuexen <tuexen@FreeBSD.org>2014-10-06 17:04:26 +0000
commit88124f9e02fc7803f94dbf3ded02e455d255c479 (patch)
treec50d4bf2d873e74385fde051ea5a81cfe937e4d8
parentce3a76b52fb6ecf2961794008957eb6fb1d7c450 (diff)
downloadFreeBSD-src-88124f9e02fc7803f94dbf3ded02e455d255c479.zip
FreeBSD-src-88124f9e02fc7803f94dbf3ded02e455d255c479.tar.gz
MFC r272347:
The default for UDPLITE_RECV_CSCOV is zero. RFC 3828 recommend that this means full checksum coverage for received packets. If an application is willing to accept packets with partial coverage, it is expected to use the socket option and provide the minimum coverage it accepts.
-rw-r--r--share/man/man4/udplite.418
-rw-r--r--sys/netinet/udp_usrreq.c2
-rw-r--r--sys/netinet6/udp6_usrreq.c4
3 files changed, 12 insertions, 12 deletions
diff --git a/share/man/man4/udplite.4 b/share/man/man4/udplite.4
index 5d06b14..859c966 100644
--- a/share/man/man4/udplite.4
+++ b/share/man/man4/udplite.4
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd April 7, 2014
+.Dd October 1, 2014
.Dt UDPLITE 4
.Os
.Sh NAME
@@ -55,16 +55,16 @@ and tested with
.Bl -tag -width ".Dv UDPLITE_SEND_CSCOV"
.It Dv UDPLITE_SEND_CSCOV
This option sets the sender checksum coverage.
-A value of zero indicates that the entire packet
-is covered by the checksum.
-A value of 1 to 7 must be discarded by the receiver.
+A value of zero indicates that all sent packets will have
+full checksum coverage.
+A value of 8 to 65535 limits the checksum coverage of all sent packets
+to the value given.
.It Dv UDPLITE_RECV_CSCOV
This option is the receiver-side analogue.
-It is truly optional, i.e. not required to enable traffic
-with partial checksum coverage.
-Its function is that of a traffic filter:
-when enabled, it instructs the kernel to drop
-all packets which have a coverage less than this value.
+A value of zero instructs the kernel to drop all received packets
+not having full checksum coverage.
+A value of 8 to 65535 instructs the kernel to drop all received
+packets with a partial checksum coverage smaller than the value specified.
.El
.Sh ERRORS
A socket operation may fail with one of the following errors returned:
diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c
index 52bc07a..f065f80 100644
--- a/sys/netinet/udp_usrreq.c
+++ b/sys/netinet/udp_usrreq.c
@@ -679,7 +679,7 @@ udp_input(struct mbuf *m, int off)
struct udpcb *up;
up = intoudpcb(inp);
- if (up->u_rxcslen > len) {
+ if (up->u_rxcslen == 0 || up->u_rxcslen > len) {
INP_RUNLOCK(inp);
m_freem(m);
return;
diff --git a/sys/netinet6/udp6_usrreq.c b/sys/netinet6/udp6_usrreq.c
index 0142804..a2bcbc7 100644
--- a/sys/netinet6/udp6_usrreq.c
+++ b/sys/netinet6/udp6_usrreq.c
@@ -259,7 +259,7 @@ udp6_input(struct mbuf **mp, int *offp, int proto)
if (uh_sum != 0) {
UDPSTAT_INC(udps_badsum);
- goto badunlocked;
+ /*goto badunlocked;*/
}
/*
@@ -479,7 +479,7 @@ udp6_input(struct mbuf **mp, int *offp, int proto)
INP_RLOCK_ASSERT(inp);
up = intoudpcb(inp);
if (cscov_partial) {
- if (up->u_rxcslen > ulen) {
+ if (up->u_rxcslen == 0 || up->u_rxcslen > ulen) {
INP_RUNLOCK(inp);
m_freem(m);
return (IPPROTO_DONE);
OpenPOWER on IntegriCloud