Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 1 Oct 2014 05:43:29 +0000 (UTC)
From:      Michael Tuexen <tuexen@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r272347 - in head: share/man/man4 sys/netinet sys/netinet6
Message-ID:  <201410010543.s915hTKc068771@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: tuexen
Date: Wed Oct  1 05:43:29 2014
New Revision: 272347
URL: https://svnweb.freebsd.org/changeset/base/272347

Log:
  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 socekt option and provice
  the minimum coverage it accepts.
  
  Reviewed by: kevlo
  MFC after: 3 days

Modified:
  head/share/man/man4/udplite.4
  head/sys/netinet/udp_usrreq.c
  head/sys/netinet6/udp6_usrreq.c

Modified: head/share/man/man4/udplite.4
==============================================================================
--- head/share/man/man4/udplite.4	Wed Oct  1 04:28:39 2014	(r272346)
+++ head/share/man/man4/udplite.4	Wed Oct  1 05:43:29 2014	(r272347)
@@ -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:

Modified: head/sys/netinet/udp_usrreq.c
==============================================================================
--- head/sys/netinet/udp_usrreq.c	Wed Oct  1 04:28:39 2014	(r272346)
+++ head/sys/netinet/udp_usrreq.c	Wed Oct  1 05:43:29 2014	(r272347)
@@ -689,7 +689,7 @@ udp_input(struct mbuf **mp, int *offp, i
 		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 (IPPROTO_DONE);

Modified: head/sys/netinet6/udp6_usrreq.c
==============================================================================
--- head/sys/netinet6/udp6_usrreq.c	Wed Oct  1 04:28:39 2014	(r272346)
+++ head/sys/netinet6/udp6_usrreq.c	Wed Oct  1 05:43:29 2014	(r272347)
@@ -261,7 +261,7 @@ udp6_input(struct mbuf **mp, int *offp, 
 
 	if (uh_sum != 0) {
 		UDPSTAT_INC(udps_badsum);
-		goto badunlocked;
+		/*goto badunlocked;*/
 	}
 
 	/*
@@ -481,7 +481,7 @@ udp6_input(struct mbuf **mp, int *offp, 
 	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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201410010543.s915hTKc068771>