Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Mar 2010 23:00:16 GMT
From:      dfilter@FreeBSD.ORG (dfilter service)
To:        freebsd-net@FreeBSD.org
Subject:   Re: kern/144529: commit references a PR
Message-ID:  <201003122300.o2CN0Gxf022543@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 22:59:06 +0000 (UTC)

 Author: rrs
 Date: Fri Mar 12 22:58:52 2010
 New Revision: 205104
 URL: http://svn.freebsd.org/changeset/base/205104
 
 Log:
   The proper fix for the delayed SCTP checksum is to
   have the delayed function take an argument as to the offset
   to the SCTP header. This allows it to work for V4 and V6.
   This of course means changing all callers of the function
   to either pass the header len, if they have it, or create
   it (ip_hl << 2 or sizeof(ip6_hdr)).
   PR:		144529
   MFC after:	2 weeks
 
 Modified:
   head/sys/dev/xen/netback/netback.c
   head/sys/netinet/ip_divert.c
   head/sys/netinet/ip_ipsec.c
   head/sys/netinet/ip_output.c
   head/sys/netinet/sctp_crc32.c
   head/sys/netinet/sctp_crc32.h
   head/sys/netinet6/ip6_output.c
 
 Modified: head/sys/dev/xen/netback/netback.c
 ==============================================================================
 --- head/sys/dev/xen/netback/netback.c	Fri Mar 12 22:39:35 2010	(r205103)
 +++ head/sys/dev/xen/netback/netback.c	Fri Mar 12 22:58:52 2010	(r205104)
 @@ -302,7 +302,7 @@ fixup_checksum(struct mbuf *m)
  		m->m_pkthdr.csum_flags &= ~CSUM_TCP;
  #ifdef SCTP
  	} else if (sw_csum & CSUM_SCTP) {
 -		sctp_delayed_cksum(m);
 +		sctp_delayed_cksum(m, iphlen);
  		sw_csum &= ~CSUM_SCTP;
  #endif
  	} else {
 
 Modified: head/sys/netinet/ip_divert.c
 ==============================================================================
 --- head/sys/netinet/ip_divert.c	Fri Mar 12 22:39:35 2010	(r205103)
 +++ head/sys/netinet/ip_divert.c	Fri Mar 12 22:58:52 2010	(r205104)
 @@ -227,7 +227,7 @@ divert_packet(struct mbuf *m, int incomi
  #ifdef SCTP
  	if (m->m_pkthdr.csum_flags & CSUM_SCTP) {
  		ip->ip_len = ntohs(ip->ip_len);
 -		sctp_delayed_cksum(m);
 +		sctp_delayed_cksum(m, (uint32_t)(ip->ip_hl << 2));
  		m->m_pkthdr.csum_flags &= ~CSUM_SCTP;
  		ip->ip_len = htons(ip->ip_len);
  	}
 
 Modified: head/sys/netinet/ip_ipsec.c
 ==============================================================================
 --- head/sys/netinet/ip_ipsec.c	Fri Mar 12 22:39:35 2010	(r205103)
 +++ head/sys/netinet/ip_ipsec.c	Fri Mar 12 22:58:52 2010	(r205104)
 @@ -342,7 +342,7 @@ ip_ipsec_output(struct mbuf **m, struct 
  		}
  #ifdef SCTP
  		if ((*m)->m_pkthdr.csum_flags & CSUM_SCTP) {
 -			sctp_delayed_cksum(*m);
 +			sctp_delayed_cksum(*m, (uint32_t)(ip->ip_hl << 2));
  			(*m)->m_pkthdr.csum_flags &= ~CSUM_SCTP;
  		}
  #endif
 
 Modified: head/sys/netinet/ip_output.c
 ==============================================================================
 --- head/sys/netinet/ip_output.c	Fri Mar 12 22:39:35 2010	(r205103)
 +++ head/sys/netinet/ip_output.c	Fri Mar 12 22:58:52 2010	(r205104)
 @@ -583,7 +583,7 @@ passout:
  	}
  #ifdef SCTP
  	if (sw_csum & CSUM_SCTP) {
 -		sctp_delayed_cksum(m);
 +		sctp_delayed_cksum(m, (uint32_t)(ip->ip_hl << 2));
  		sw_csum &= ~CSUM_SCTP;
  	}
  #endif
 @@ -725,7 +725,7 @@ ip_fragment(struct ip *ip, struct mbuf *
  #ifdef SCTP
  	if (m0->m_pkthdr.csum_flags & CSUM_SCTP &&
  	    (if_hwassist_flags & CSUM_IP_FRAGS) == 0) {
 -		sctp_delayed_cksum(m0);
 +		sctp_delayed_cksum(m0, hlen);
  		m0->m_pkthdr.csum_flags &= ~CSUM_SCTP;
  	}
  #endif
 
 Modified: head/sys/netinet/sctp_crc32.c
 ==============================================================================
 --- head/sys/netinet/sctp_crc32.c	Fri Mar 12 22:39:35 2010	(r205103)
 +++ head/sys/netinet/sctp_crc32.c	Fri Mar 12 22:58:52 2010	(r205104)
 @@ -127,14 +127,12 @@ sctp_calculate_cksum(struct mbuf *m, uin
  
  
  void
 -sctp_delayed_cksum(struct mbuf *m)
 +sctp_delayed_cksum(struct mbuf *m, uint32_t offset)
  {
  	struct ip *ip;
  	uint32_t checksum;
 -	uint32_t offset;
  
  	ip = mtod(m, struct ip *);
 -	offset = ip->ip_hl << 2;
  	checksum = sctp_calculate_cksum(m, offset);
  	SCTP_STAT_DECR(sctps_sendhwcrc);
  	SCTP_STAT_INCR(sctps_sendswcrc);
 
 Modified: head/sys/netinet/sctp_crc32.h
 ==============================================================================
 --- head/sys/netinet/sctp_crc32.h	Fri Mar 12 22:39:35 2010	(r205103)
 +++ head/sys/netinet/sctp_crc32.h	Fri Mar 12 22:58:52 2010	(r205104)
 @@ -39,7 +39,7 @@ __FBSDID("$FreeBSD$");
  #if defined(_KERNEL) || defined(__Userspace__)
  
  uint32_t sctp_calculate_cksum(struct mbuf *, uint32_t);
 -void sctp_delayed_cksum(struct mbuf *);
 +void sctp_delayed_cksum(struct mbuf *, uint32_t offset);
  
  #endif				/* _KERNEL */
  
 
 Modified: head/sys/netinet6/ip6_output.c
 ==============================================================================
 --- head/sys/netinet6/ip6_output.c	Fri Mar 12 22:39:35 2010	(r205103)
 +++ head/sys/netinet6/ip6_output.c	Fri Mar 12 22:58:52 2010	(r205104)
 @@ -872,7 +872,7 @@ passout:
  #ifdef SCTP
  	sw_csum = m->m_pkthdr.csum_flags & ~ifp->if_hwassist;
  	if (sw_csum & CSUM_SCTP) {
 -		sctp_delayed_cksum(m);
 +		sctp_delayed_cksum(m, sizeof(struct ip6_hdr));
  		sw_csum &= ~CSUM_SCTP;
  	}
  #endif
 _______________________________________________
 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?201003122300.o2CN0Gxf022543>