diff options
Diffstat (limited to 'net/ipv6/inet6_connection_sock.c')
| -rw-r--r-- | net/ipv6/inet6_connection_sock.c | 42 | 
1 files changed, 20 insertions, 22 deletions
diff --git a/net/ipv6/inet6_connection_sock.c b/net/ipv6/inet6_connection_sock.c index e4311cbc8b4..a245e5ddffb 100644 --- a/net/ipv6/inet6_connection_sock.c +++ b/net/ipv6/inet6_connection_sock.c @@ -70,23 +70,23 @@ struct dst_entry *inet6_csk_route_req(struct sock *sk,  				      struct flowi6 *fl6,  				      const struct request_sock *req)  { -	struct inet6_request_sock *treq = inet6_rsk(req); +	struct inet_request_sock *ireq = inet_rsk(req);  	struct ipv6_pinfo *np = inet6_sk(sk);  	struct in6_addr *final_p, final;  	struct dst_entry *dst;  	memset(fl6, 0, sizeof(*fl6));  	fl6->flowi6_proto = IPPROTO_TCP; -	fl6->daddr = treq->rmt_addr; +	fl6->daddr = ireq->ir_v6_rmt_addr;  	final_p = fl6_update_dst(fl6, np->opt, &final); -	fl6->saddr = treq->loc_addr; -	fl6->flowi6_oif = treq->iif; -	fl6->flowi6_mark = sk->sk_mark; -	fl6->fl6_dport = inet_rsk(req)->rmt_port; -	fl6->fl6_sport = inet_rsk(req)->loc_port; +	fl6->saddr = ireq->ir_v6_loc_addr; +	fl6->flowi6_oif = ireq->ir_iif; +	fl6->flowi6_mark = ireq->ir_mark; +	fl6->fl6_dport = ireq->ir_rmt_port; +	fl6->fl6_sport = htons(ireq->ir_num);  	security_req_classify_flow(req, flowi6_to_flowi(fl6)); -	dst = ip6_dst_lookup_flow(sk, fl6, final_p, false); +	dst = ip6_dst_lookup_flow(sk, fl6, final_p);  	if (IS_ERR(dst))  		return NULL; @@ -129,13 +129,13 @@ struct request_sock *inet6_csk_search_req(const struct sock *sk,  						     lopt->nr_table_entries)];  	     (req = *prev) != NULL;  	     prev = &req->dl_next) { -		const struct inet6_request_sock *treq = inet6_rsk(req); +		const struct inet_request_sock *ireq = inet_rsk(req); -		if (inet_rsk(req)->rmt_port == rport && +		if (ireq->ir_rmt_port == rport &&  		    req->rsk_ops->family == AF_INET6 && -		    ipv6_addr_equal(&treq->rmt_addr, raddr) && -		    ipv6_addr_equal(&treq->loc_addr, laddr) && -		    (!treq->iif || treq->iif == iif)) { +		    ipv6_addr_equal(&ireq->ir_v6_rmt_addr, raddr) && +		    ipv6_addr_equal(&ireq->ir_v6_loc_addr, laddr) && +		    (!ireq->ir_iif || ireq->ir_iif == iif)) {  			WARN_ON(req->sk != NULL);  			*prevp = prev;  			return req; @@ -153,8 +153,8 @@ void inet6_csk_reqsk_queue_hash_add(struct sock *sk,  {  	struct inet_connection_sock *icsk = inet_csk(sk);  	struct listen_sock *lopt = icsk->icsk_accept_queue.listen_opt; -	const u32 h = inet6_synq_hash(&inet6_rsk(req)->rmt_addr, -				      inet_rsk(req)->rmt_port, +	const u32 h = inet6_synq_hash(&inet_rsk(req)->ir_v6_rmt_addr, +				      inet_rsk(req)->ir_rmt_port,  				      lopt->hash_rnd, lopt->nr_table_entries);  	reqsk_queue_hash_req(&icsk->icsk_accept_queue, h, req, timeout); @@ -165,11 +165,10 @@ EXPORT_SYMBOL_GPL(inet6_csk_reqsk_queue_hash_add);  void inet6_csk_addr2sockaddr(struct sock *sk, struct sockaddr * uaddr)  { -	struct ipv6_pinfo *np = inet6_sk(sk);  	struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) uaddr;  	sin6->sin6_family = AF_INET6; -	sin6->sin6_addr = np->daddr; +	sin6->sin6_addr = sk->sk_v6_daddr;  	sin6->sin6_port	= inet_sk(sk)->inet_dport;  	/* We do not store received flowlabel for TCP */  	sin6->sin6_flowinfo = 0; @@ -203,7 +202,7 @@ static struct dst_entry *inet6_csk_route_socket(struct sock *sk,  	memset(fl6, 0, sizeof(*fl6));  	fl6->flowi6_proto = sk->sk_protocol; -	fl6->daddr = np->daddr; +	fl6->daddr = sk->sk_v6_daddr;  	fl6->saddr = np->saddr;  	fl6->flowlabel = np->flow_label;  	IP6_ECN_flow_xmit(sk, fl6->flowlabel); @@ -217,7 +216,7 @@ static struct dst_entry *inet6_csk_route_socket(struct sock *sk,  	dst = __inet6_csk_dst_check(sk, np->dst_cookie);  	if (!dst) { -		dst = ip6_dst_lookup_flow(sk, fl6, final_p, false); +		dst = ip6_dst_lookup_flow(sk, fl6, final_p);  		if (!IS_ERR(dst))  			__inet6_csk_dst_store(sk, dst, NULL, NULL); @@ -225,9 +224,8 @@ static struct dst_entry *inet6_csk_route_socket(struct sock *sk,  	return dst;  } -int inet6_csk_xmit(struct sk_buff *skb, struct flowi *fl_unused) +int inet6_csk_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl_unused)  { -	struct sock *sk = skb->sk;  	struct ipv6_pinfo *np = inet6_sk(sk);  	struct flowi6 fl6;  	struct dst_entry *dst; @@ -245,7 +243,7 @@ int inet6_csk_xmit(struct sk_buff *skb, struct flowi *fl_unused)  	skb_dst_set_noref(skb, dst);  	/* Restore final destination back after routing done */ -	fl6.daddr = np->daddr; +	fl6.daddr = sk->sk_v6_daddr;  	res = ip6_xmit(sk, skb, &fl6, np->opt, np->tclass);  	rcu_read_unlock();  | 
