Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Mar 2010 08:20:04 GMT
From:      dfilter@FreeBSD.ORG (dfilter service)
To:        freebsd-net@FreeBSD.org
Subject:   Re: kern/144529: commit references a PR
Message-ID:  <201003120820.o2C8K4dq020260@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/144529; it has been noted by GNATS.

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/144529: commit references a PR
Date: Fri, 12 Mar 2010 08:10:42 +0000 (UTC)

 Author: rrs
 Date: Fri Mar 12 08:10:30 2010
 New Revision: 205075
 URL: http://svn.freebsd.org/changeset/base/205075
 
 Log:
   With the recent change of the sctp checksum  to support offload,
   no delayed checksum was added to the ip6 output code. This
   causes cards that do not support SCTP checksum offload to
   have SCTP packets that are IPv6 NOT have the sctp checksum
   performed. Thus you could not communicate with a peer. This
   adds the missing bits to make the checksum happen for these cards.
   
   PR:		144529
   MFC after:	2 weeks
 
 Modified:
   head/sys/netinet6/ip6_output.c
 
 Modified: head/sys/netinet6/ip6_output.c
 ==============================================================================
 --- head/sys/netinet6/ip6_output.c	Fri Mar 12 07:49:10 2010	(r205074)
 +++ head/sys/netinet6/ip6_output.c	Fri Mar 12 08:10:30 2010	(r205075)
 @@ -66,6 +66,7 @@ __FBSDID("$FreeBSD$");
  #include "opt_inet.h"
  #include "opt_inet6.h"
  #include "opt_ipsec.h"
 +#include "opt_sctp.h"
  
  #include <sys/param.h>
  #include <sys/kernel.h>
 @@ -102,6 +103,10 @@ __FBSDID("$FreeBSD$");
  #include <netipsec/key.h>
  #include <netinet6/ip6_ipsec.h>
  #endif /* IPSEC */
 +#ifdef SCTP
 +#include <netinet/sctp.h>
 +#include <netinet/sctp_crc32.h>
 +#endif
  
  #include <netinet6/ip6protosw.h>
  #include <netinet6/scope6_var.h>
 @@ -208,6 +213,9 @@ ip6_output(struct mbuf *m0, struct ip6_p
  	struct route_in6 *ro_pmtu = NULL;
  	int hdrsplit = 0;
  	int needipsec = 0;
 +#ifdef SCTP
 +	int sw_csum;
 +#endif
  #ifdef IPSEC
  	struct ipsec_output_state state;
  	struct ip6_rthdr *rh = NULL;
 @@ -829,6 +837,10 @@ again:
  			}
  			m->m_pkthdr.csum_flags |=
  			    CSUM_IP_CHECKED | CSUM_IP_VALID;
 +#ifdef SCTP
 +			if (m->m_pkthdr.csum_flags & CSUM_SCTP)
 +				m->m_pkthdr.csum_flags |= CSUM_SCTP_VALID;
 +#endif
  			error = netisr_queue(NETISR_IPV6, m);
  			goto done;
  		} else
 @@ -857,6 +869,13 @@ passout:
  	 * 4: if dontfrag == 1 && alwaysfrag == 1
  	 *	error, as we cannot handle this conflicting request
  	 */
 +#ifdef SCTP
 +	sw_csum = m->m_pkthdr.csum_flags & ~ifp->if_hwassist;
 +	if (sw_csum & CSUM_SCTP) {
 +		sctp_delayed_cksum(m);
 +		sw_csum &= ~CSUM_SCTP;
 +	}
 +#endif
  	tlen = m->m_pkthdr.len;
  
  	if (opt && (opt->ip6po_flags & IP6PO_DONTFRAG))
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 



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