diff -p -u -r1.24 tcp_syncache.c --- bsd/sys/netinet/tcp_syncache.c 29 Jul 2008 17:07:43 -0000 1.24 +++ bsd/sys/netinet/tcp_syncache.c 16 Dec 2008 19:23:31 -0000 @@ -1271,6 +1271,7 @@ syncache_respond(sc, m) struct inpcb *inp; #ifdef INET6 struct ip6_hdr *ip6 = NULL; + int inp_tclass; #endif struct rt_nexthop *minmtu_nh; struct route_table *rtb = NULL; @@ -1387,6 +1388,12 @@ syncache_respond(sc, m) /* ip6_hlim is set after checksum */ ip6->ip6_flow &= ~IPV6_FLOWLABEL_MASK; ip6->ip6_flow |= sc->sc_flowlabel; + /* Set the TC for IPv6 just like TOS for IPv4 */ + ip6->ip6_flow &= ~IPV6_CLASS_MASK; + if (inp) { + inp_tclass = IPV6_GET_CLASS(inp->in6p_flowinfo); + ip6->ip6_flow |= IPV6_SET_CLASS(inp_tclass); + } th = (struct tcphdr *)(ip6 + 1); } else