mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-27 06:04:23 +08:00
[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
@ -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 New Issue
Block a user