svn commit: r206032 - head/sys/netgraph

Alexander Motin mav at FreeBSD.org
Thu Apr 1 10:41:02 UTC 2010


Author: mav
Date: Thu Apr  1 10:41:01 2010
New Revision: 206032
URL: http://svn.freebsd.org/changeset/base/206032

Log:
  Remove alignment constraints.

Modified:
  head/sys/netgraph/ng_tcpmss.c

Modified: head/sys/netgraph/ng_tcpmss.c
==============================================================================
--- head/sys/netgraph/ng_tcpmss.c	Thu Apr  1 02:41:50 2010	(r206031)
+++ head/sys/netgraph/ng_tcpmss.c	Thu Apr  1 10:41:01 2010	(r206032)
@@ -47,6 +47,7 @@
 
 #include <sys/param.h>
 #include <sys/systm.h>
+#include <sys/endian.h>
 #include <sys/errno.h>
 #include <sys/kernel.h>
 #include <sys/malloc.h>
@@ -410,9 +411,9 @@ correct_mss(struct tcphdr *tc, int hlen,
 {
 	int olen, optlen;
 	u_char *opt;
-	uint16_t *mss;
 	int accumulate;
 	int res = 0;
+	uint16_t sum;
 
 	for (olen = hlen - sizeof(struct tcphdr), opt = (u_char *)(tc + 1);
 	     olen > 0; olen -= optlen, opt += optlen) {
@@ -427,13 +428,15 @@ correct_mss(struct tcphdr *tc, int hlen,
 			if (*opt == TCPOPT_MAXSEG) {
 				if (optlen != TCPOLEN_MAXSEG)
 					continue;
-				mss = (uint16_t *)(opt + 2);
-				if (ntohs(*mss) > maxmss) {
-					accumulate = *mss;
-					*mss = htons(maxmss);
-					accumulate -= *mss;
-					if ((flags & CSUM_TCP) == 0)
-						TCPMSS_ADJUST_CHECKSUM(accumulate, tc->th_sum);
+				accumulate = be16dec(opt + 2);
+				if (accumulate > maxmss) {
+					if ((flags & CSUM_TCP) == 0) {
+						accumulate -= maxmss;
+						sum = be16dec(&tc->th_sum);
+						TCPMSS_ADJUST_CHECKSUM(accumulate, sum);
+						be16enc(&tc->th_sum, sum);
+					}
+					be16enc(opt + 2, maxmss);
 					res = 1;
 				}
 			}


More information about the svn-src-all mailing list