forked from mirrors/linux
		
	[DCCP]: Introduce DCCPv6
Still needs mucho polishing, specially in the checksum code, but works just fine, inet_diag/iproute2 and all 8) Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									399c07def6
								
							
						
					
					
						commit
						3df80d9320
					
				
					 4 changed files with 1490 additions and 0 deletions
				
			
		|  | @ -1,3 +1,7 @@ | |||
| obj-$(CONFIG_IPV6) += dccp_ipv6.o | ||||
| 
 | ||||
| dccp_ipv6-y := ipv6.o | ||||
| 
 | ||||
| obj-$(CONFIG_IP_DCCP) += dccp.o | ||||
| 
 | ||||
| dccp-y := ccid.o input.o ipv4.o minisocks.o options.o output.o proto.o \
 | ||||
|  |  | |||
							
								
								
									
										1438
									
								
								net/dccp/ipv6.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1438
									
								
								net/dccp/ipv6.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										37
									
								
								net/dccp/ipv6.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								net/dccp/ipv6.h
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | |||
| #ifndef _DCCP_IPV6_H | ||||
| #define _DCCP_IPV6_H | ||||
| /*
 | ||||
|  *  net/dccp/ipv6.h | ||||
|  * | ||||
|  *  An implementation of the DCCP protocol | ||||
|  *  Copyright (c) 2005 Arnaldo Carvalho de Melo <acme@ghostprotocols.net> | ||||
|  * | ||||
|  *	This program is free software; you can redistribute it and/or modify it | ||||
|  *	under the terms of the GNU General Public License version 2 as | ||||
|  *	published by the Free Software Foundation. | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/config.h> | ||||
| #include <linux/dccp.h> | ||||
| #include <linux/ipv6.h> | ||||
| 
 | ||||
| struct dccp6_sock { | ||||
| 	struct dccp_sock  dccp; | ||||
| 	/*
 | ||||
| 	 * ipv6_pinfo has to be the last member of dccp6_sock, | ||||
| 	 * see inet6_sk_generic. | ||||
| 	 */ | ||||
| 	struct ipv6_pinfo inet6; | ||||
| }; | ||||
| 
 | ||||
| struct dccp6_request_sock { | ||||
| 	struct dccp_request_sock  dccp; | ||||
| 	struct inet6_request_sock inet6; | ||||
| }; | ||||
| 
 | ||||
| struct dccp6_timewait_sock { | ||||
| 	struct inet_timewait_sock   inet; | ||||
| 	struct inet6_timewait_sock  tw6; | ||||
| }; | ||||
| 
 | ||||
| #endif /* _DCCP_IPV6_H */ | ||||
|  | @ -52,7 +52,18 @@ void dccp_time_wait(struct sock *sk, int state, int timeo) | |||
| 	if (tw != NULL) { | ||||
| 		const struct inet_connection_sock *icsk = inet_csk(sk); | ||||
| 		const int rto = (icsk->icsk_rto << 2) - (icsk->icsk_rto >> 1); | ||||
| #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) | ||||
| 		if (tw->tw_family == PF_INET6) { | ||||
| 			const struct ipv6_pinfo *np = inet6_sk(sk); | ||||
| 			struct inet6_timewait_sock *tw6; | ||||
| 
 | ||||
| 			tw->tw_ipv6_offset = inet6_tw_offset(sk->sk_prot); | ||||
| 			tw6 = inet6_twsk((struct sock *)tw); | ||||
| 			ipv6_addr_copy(&tw6->tw_v6_daddr, &np->daddr); | ||||
| 			ipv6_addr_copy(&tw6->tw_v6_rcv_saddr, &np->rcv_saddr); | ||||
| 			tw->tw_ipv6only = np->ipv6only; | ||||
| 		} | ||||
| #endif | ||||
| 		/* Linkage updates. */ | ||||
| 		__inet_twsk_hashdance(tw, sk, &dccp_hashinfo); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Arnaldo Carvalho de Melo
						Arnaldo Carvalho de Melo