From owner-svn-src-user@FreeBSD.ORG  Thu Feb  4 01:07:28 2010
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id DCB0B1065672;
	Thu,  4 Feb 2010 01:07:28 +0000 (UTC)
	(envelope-from kmacy@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id B21D18FC16;
	Thu,  4 Feb 2010 01:07:28 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o1417S90062045;
	Thu, 4 Feb 2010 01:07:28 GMT (envelope-from kmacy@svn.freebsd.org)
Received: (from kmacy@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id o1417Sk3062043;
	Thu, 4 Feb 2010 01:07:28 GMT (envelope-from kmacy@svn.freebsd.org)
Message-Id: <201002040107.o1417Sk3062043@svn.freebsd.org>
From: Kip Macy <kmacy@FreeBSD.org>
Date: Thu, 4 Feb 2010 01:07:28 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r203467 - user/kmacy/head_flowtable_v6/sys/net
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
	src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 04 Feb 2010 01:07:29 -0000

Author: kmacy
Date: Thu Feb  4 01:07:28 2010
New Revision: 203467
URL: http://svn.freebsd.org/changeset/base/203467

Log:
  - don't parse ports in ulp header if FL_HASH_ALL is not passed
  - don't track all TCP header flags in the flentry

Modified:
  user/kmacy/head_flowtable_v6/sys/net/flowtable.c

Modified: user/kmacy/head_flowtable_v6/sys/net/flowtable.c
==============================================================================
--- user/kmacy/head_flowtable_v6/sys/net/flowtable.c	Thu Feb  4 00:57:28 2010	(r203466)
+++ user/kmacy/head_flowtable_v6/sys/net/flowtable.c	Thu Feb  4 01:07:28 2010	(r203467)
@@ -452,7 +452,7 @@ ipv4_mbuf_demarshal(struct mbuf *m, stru
 	struct sctphdr *sh;
 	uint16_t sport, dport;
 
-	sport = dport = 0;
+	proto = sport = dport = 0;
 	ip = mtod(m, struct ip *);
 	dsin->sin_family = AF_INET;
 	dsin->sin_len = sizeof(*dsin);
@@ -461,6 +461,9 @@ ipv4_mbuf_demarshal(struct mbuf *m, stru
 	ssin->sin_len = sizeof(*dsin);
 	ssin->sin_addr = ip->ip_dst;	
 
+	if ((*flags & FL_HASH_ALL) == 0)
+		goto skipports;
+
 	proto = ip->ip_p;
 	iphlen = ip->ip_hl << 2; /* XXX options? */
 
@@ -469,8 +472,8 @@ ipv4_mbuf_demarshal(struct mbuf *m, stru
 		th = (struct tcphdr *)((caddr_t)ip + iphlen);
 		sport = ntohs(th->th_sport);
 		dport = ntohs(th->th_dport);
-		*flags |= th->th_flags;
-		if (*flags & TH_RST)
+		if ((*flags & FL_HASH_ALL) &&
+		    (th->th_flags & (TH_RST|TH_FIN)))
 			*flags |= FL_STALE;
 	break;
 	case IPPROTO_UDP:
@@ -491,6 +494,7 @@ ipv4_mbuf_demarshal(struct mbuf *m, stru
 	}
 
 	*flags |= proto_to_flags(proto);
+skipports:
 	ssin->sin_port = sport;
 	dsin->sin_port = dport;
 	return (0);
@@ -579,6 +583,9 @@ ipv6_mbuf_demarshal(struct mbuf *m, stru
 	hlen = sizeof(struct ip6_hdr);
 	proto = ip6->ip6_nxt;
 
+	if ((*flags & FL_HASH_ALL) == 0)
+		goto skipports;
+
 	while (ulp == NULL) {
 		switch (proto) {
 		case IPPROTO_ICMPV6:
@@ -593,8 +600,8 @@ ipv6_mbuf_demarshal(struct mbuf *m, stru
 			PULLUP_TO(hlen, ulp, struct tcphdr);
 			dst_port = TCP(ulp)->th_dport;
 			src_port = TCP(ulp)->th_sport;
-			*flags = TCP(ulp)->th_flags;
-			if (*flags & (TH_RST|TH_FIN))
+			if ((*flags & FL_HASH_ALL) &&
+			    (TCP(ulp)->th_flags & (TH_RST|TH_FIN)))
 				*flags |= FL_STALE;
 			break;
 		case IPPROTO_SCTP:
@@ -649,13 +656,16 @@ ipv6_mbuf_demarshal(struct mbuf *m, stru
 	receive_failed:
 		return (ENOTSUP);
 	}
-	
+
+skipports:
 	dsin6->sin6_family = AF_INET6;
 	dsin6->sin6_len = sizeof(*dsin6);
+	dsin6->sin6_port = dst_port;
 	memcpy(&dsin6->sin6_addr, &ip6->ip6_dst, sizeof(struct in6_addr));
 
 	ssin6->sin6_family = AF_INET6;
 	ssin6->sin6_len = sizeof(*ssin6);
+	ssin6->sin6_port = src_port;
 	memcpy(&ssin6->sin6_addr, &ip6->ip6_src, sizeof(struct in6_addr));
 	*flags |= proto_to_flags(proto);