kern/130657: ipv6 bugfix, need review.

Alfred Perlstein alfred at FreeBSD.org
Sat Jan 17 12:30:02 PST 2009


>Number:         130657
>Category:       kern
>Synopsis:       ipv6 bugfix, need review.
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Jan 17 20:30:01 UTC 2009
>Closed-Date:
>Last-Modified:
>Originator:     Alfred Perlstein
>Release:        FreeBSD 7.1-PRERELEASE i386
>Organization:
Juniper Networks
>Environment:
System: FreeBSD freefall.freebsd.org 7.1-PRERELEASE FreeBSD 7.1-PRERELEASE #36: Mon Dec 29 15:15:30 UTC 2008 simon at freefall.freebsd.org:/usr/src/sys/i386/compile/FREEFALL i386


>Description:
	This is in a private version of FreeBSD we have, but the code
        seems to be somewhat close to what we have in FreeBSD.
        
>How-To-Repeat:
	Source inspection, see email audit trail for more information.
>Fix:

Index: bsd/sys/netinet/tcp_syncache.c                                           
===================================================================             
RCS file: /cvs/junos-2008/bsd/sys/netinet/tcp_syncache.c,v                      
retrieving revision 1.24                                                        
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                                                                  


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list