inet: rename some inet_sock fields
In order to have better cache layouts of struct sock (separate zones for rx/tx paths), we need this preliminary patch. Goal is to transfert fields used at lookup time in the first read-mostly cache line (inside struct sock_common) and move sk_refcnt to a separate cache line (only written by rx path) This patch adds inet_ prefix to daddr, rcv_saddr, dport, num, saddr, sport and id fields. This allows a future patch to define these fields as macros, like sk_refcnt, without name clashes. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
988ade6b8e
commit
c720c7e838
@@ -185,7 +185,7 @@ lookup_protocol:
|
||||
inet->is_icsk = (INET_PROTOSW_ICSK & answer_flags) != 0;
|
||||
|
||||
if (SOCK_RAW == sock->type) {
|
||||
inet->num = protocol;
|
||||
inet->inet_num = protocol;
|
||||
if (IPPROTO_RAW == protocol)
|
||||
inet->hdrincl = 1;
|
||||
}
|
||||
@@ -228,12 +228,12 @@ lookup_protocol:
|
||||
*/
|
||||
sk_refcnt_debug_inc(sk);
|
||||
|
||||
if (inet->num) {
|
||||
if (inet->inet_num) {
|
||||
/* It assumes that any protocol which allows
|
||||
* the user to assign a number at socket
|
||||
* creation time automatically shares.
|
||||
*/
|
||||
inet->sport = htons(inet->num);
|
||||
inet->inet_sport = htons(inet->inet_num);
|
||||
sk->sk_prot->hash(sk);
|
||||
}
|
||||
if (sk->sk_prot->init) {
|
||||
@@ -281,7 +281,7 @@ int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
||||
lock_sock(sk);
|
||||
|
||||
/* Check these errors (active socket, double bind). */
|
||||
if (sk->sk_state != TCP_CLOSE || inet->num) {
|
||||
if (sk->sk_state != TCP_CLOSE || inet->inet_num) {
|
||||
err = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
@@ -353,8 +353,8 @@ int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
||||
}
|
||||
}
|
||||
|
||||
inet->rcv_saddr = v4addr;
|
||||
inet->saddr = v4addr;
|
||||
inet->inet_rcv_saddr = v4addr;
|
||||
inet->inet_saddr = v4addr;
|
||||
|
||||
ipv6_addr_copy(&np->rcv_saddr, &addr->sin6_addr);
|
||||
|
||||
@@ -375,9 +375,9 @@ int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
||||
}
|
||||
if (snum)
|
||||
sk->sk_userlocks |= SOCK_BINDPORT_LOCK;
|
||||
inet->sport = htons(inet->num);
|
||||
inet->dport = 0;
|
||||
inet->daddr = 0;
|
||||
inet->inet_sport = htons(inet->inet_num);
|
||||
inet->inet_dport = 0;
|
||||
inet->inet_daddr = 0;
|
||||
out:
|
||||
release_sock(sk);
|
||||
return err;
|
||||
@@ -441,12 +441,12 @@ int inet6_getname(struct socket *sock, struct sockaddr *uaddr,
|
||||
sin->sin6_flowinfo = 0;
|
||||
sin->sin6_scope_id = 0;
|
||||
if (peer) {
|
||||
if (!inet->dport)
|
||||
if (!inet->inet_dport)
|
||||
return -ENOTCONN;
|
||||
if (((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_SYN_SENT)) &&
|
||||
peer == 1)
|
||||
return -ENOTCONN;
|
||||
sin->sin6_port = inet->dport;
|
||||
sin->sin6_port = inet->inet_dport;
|
||||
ipv6_addr_copy(&sin->sin6_addr, &np->daddr);
|
||||
if (np->sndflow)
|
||||
sin->sin6_flowinfo = np->flow_label;
|
||||
@@ -456,7 +456,7 @@ int inet6_getname(struct socket *sock, struct sockaddr *uaddr,
|
||||
else
|
||||
ipv6_addr_copy(&sin->sin6_addr, &np->rcv_saddr);
|
||||
|
||||
sin->sin6_port = inet->sport;
|
||||
sin->sin6_port = inet->inet_sport;
|
||||
}
|
||||
if (ipv6_addr_type(&sin->sin6_addr) & IPV6_ADDR_LINKLOCAL)
|
||||
sin->sin6_scope_id = sk->sk_bound_dev_if;
|
||||
@@ -655,8 +655,8 @@ int inet6_sk_rebuild_header(struct sock *sk)
|
||||
fl.fl6_flowlabel = np->flow_label;
|
||||
fl.oif = sk->sk_bound_dev_if;
|
||||
fl.mark = sk->sk_mark;
|
||||
fl.fl_ip_dport = inet->dport;
|
||||
fl.fl_ip_sport = inet->sport;
|
||||
fl.fl_ip_dport = inet->inet_dport;
|
||||
fl.fl_ip_sport = inet->inet_sport;
|
||||
security_sk_classify_flow(sk, &fl);
|
||||
|
||||
if (np->opt && np->opt->srcrt) {
|
||||
|
@@ -98,13 +98,14 @@ ipv4_connected:
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
ipv6_addr_set_v4mapped(inet->daddr, &np->daddr);
|
||||
ipv6_addr_set_v4mapped(inet->inet_daddr, &np->daddr);
|
||||
|
||||
if (ipv6_addr_any(&np->saddr))
|
||||
ipv6_addr_set_v4mapped(inet->saddr, &np->saddr);
|
||||
ipv6_addr_set_v4mapped(inet->inet_saddr, &np->saddr);
|
||||
|
||||
if (ipv6_addr_any(&np->rcv_saddr))
|
||||
ipv6_addr_set_v4mapped(inet->rcv_saddr, &np->rcv_saddr);
|
||||
ipv6_addr_set_v4mapped(inet->inet_rcv_saddr,
|
||||
&np->rcv_saddr);
|
||||
|
||||
goto out;
|
||||
}
|
||||
@@ -133,7 +134,7 @@ ipv4_connected:
|
||||
ipv6_addr_copy(&np->daddr, daddr);
|
||||
np->flow_label = fl.fl6_flowlabel;
|
||||
|
||||
inet->dport = usin->sin6_port;
|
||||
inet->inet_dport = usin->sin6_port;
|
||||
|
||||
/*
|
||||
* Check for a route to destination an obtain the
|
||||
@@ -145,8 +146,8 @@ ipv4_connected:
|
||||
ipv6_addr_copy(&fl.fl6_src, &np->saddr);
|
||||
fl.oif = sk->sk_bound_dev_if;
|
||||
fl.mark = sk->sk_mark;
|
||||
fl.fl_ip_dport = inet->dport;
|
||||
fl.fl_ip_sport = inet->sport;
|
||||
fl.fl_ip_dport = inet->inet_dport;
|
||||
fl.fl_ip_sport = inet->inet_sport;
|
||||
|
||||
if (!fl.oif && (addr_type&IPV6_ADDR_MULTICAST))
|
||||
fl.oif = np->mcast_oif;
|
||||
@@ -188,7 +189,7 @@ ipv4_connected:
|
||||
|
||||
if (ipv6_addr_any(&np->rcv_saddr)) {
|
||||
ipv6_addr_copy(&np->rcv_saddr, &fl.fl6_src);
|
||||
inet->rcv_saddr = LOOPBACK4_IPV6;
|
||||
inet->inet_rcv_saddr = LOOPBACK4_IPV6;
|
||||
}
|
||||
|
||||
ip6_dst_store(sk, dst,
|
||||
|
@@ -132,7 +132,7 @@ void inet6_csk_addr2sockaddr(struct sock *sk, struct sockaddr * uaddr)
|
||||
|
||||
sin6->sin6_family = AF_INET6;
|
||||
ipv6_addr_copy(&sin6->sin6_addr, &np->daddr);
|
||||
sin6->sin6_port = inet_sk(sk)->dport;
|
||||
sin6->sin6_port = inet_sk(sk)->inet_dport;
|
||||
/* We do not store received flowlabel for TCP */
|
||||
sin6->sin6_flowinfo = 0;
|
||||
sin6->sin6_scope_id = 0;
|
||||
@@ -195,8 +195,8 @@ int inet6_csk_xmit(struct sk_buff *skb, int ipfragok)
|
||||
IP6_ECN_flow_xmit(sk, fl.fl6_flowlabel);
|
||||
fl.oif = sk->sk_bound_dev_if;
|
||||
fl.mark = sk->sk_mark;
|
||||
fl.fl_ip_sport = inet->sport;
|
||||
fl.fl_ip_dport = inet->dport;
|
||||
fl.fl_ip_sport = inet->inet_sport;
|
||||
fl.fl_ip_dport = inet->inet_dport;
|
||||
security_sk_classify_flow(sk, &fl);
|
||||
|
||||
if (np->opt && np->opt->srcrt) {
|
||||
|
@@ -125,7 +125,7 @@ static int inline compute_score(struct sock *sk, struct net *net,
|
||||
{
|
||||
int score = -1;
|
||||
|
||||
if (net_eq(sock_net(sk), net) && inet_sk(sk)->num == hnum &&
|
||||
if (net_eq(sock_net(sk), net) && inet_sk(sk)->inet_num == hnum &&
|
||||
sk->sk_family == PF_INET6) {
|
||||
const struct ipv6_pinfo *np = inet6_sk(sk);
|
||||
|
||||
@@ -214,10 +214,10 @@ static int __inet6_check_established(struct inet_timewait_death_row *death_row,
|
||||
const struct in6_addr *daddr = &np->rcv_saddr;
|
||||
const struct in6_addr *saddr = &np->daddr;
|
||||
const int dif = sk->sk_bound_dev_if;
|
||||
const __portpair ports = INET_COMBINED_PORTS(inet->dport, lport);
|
||||
const __portpair ports = INET_COMBINED_PORTS(inet->inet_dport, lport);
|
||||
struct net *net = sock_net(sk);
|
||||
const unsigned int hash = inet6_ehashfn(net, daddr, lport, saddr,
|
||||
inet->dport);
|
||||
inet->inet_dport);
|
||||
struct inet_ehash_bucket *head = inet_ehash_bucket(hinfo, hash);
|
||||
spinlock_t *lock = inet_ehash_lockp(hinfo, hash);
|
||||
struct sock *sk2;
|
||||
@@ -248,8 +248,8 @@ static int __inet6_check_established(struct inet_timewait_death_row *death_row,
|
||||
unique:
|
||||
/* Must record num and sport now. Otherwise we will see
|
||||
* in hash table socket with a funny identity. */
|
||||
inet->num = lport;
|
||||
inet->sport = htons(lport);
|
||||
inet->inet_num = lport;
|
||||
inet->inet_sport = htons(lport);
|
||||
WARN_ON(!sk_unhashed(sk));
|
||||
__sk_nulls_add_node_rcu(sk, &head->chain);
|
||||
sk->sk_hash = hash;
|
||||
@@ -279,7 +279,7 @@ static inline u32 inet6_sk_port_offset(const struct sock *sk)
|
||||
const struct ipv6_pinfo *np = inet6_sk(sk);
|
||||
return secure_ipv6_port_ephemeral(np->rcv_saddr.s6_addr32,
|
||||
np->daddr.s6_addr32,
|
||||
inet->dport);
|
||||
inet->inet_dport);
|
||||
}
|
||||
|
||||
int inet6_hash_connect(struct inet_timewait_death_row *death_row,
|
||||
|
@@ -1297,7 +1297,7 @@ int ip6_mroute_setsockopt(struct sock *sk, int optname, char __user *optval, uns
|
||||
switch (optname) {
|
||||
case MRT6_INIT:
|
||||
if (sk->sk_type != SOCK_RAW ||
|
||||
inet_sk(sk)->num != IPPROTO_ICMPV6)
|
||||
inet_sk(sk)->inet_num != IPPROTO_ICMPV6)
|
||||
return -EOPNOTSUPP;
|
||||
if (optlen < sizeof(int))
|
||||
return -EINVAL;
|
||||
|
@@ -64,7 +64,7 @@ int ip6_ra_control(struct sock *sk, int sel)
|
||||
struct ip6_ra_chain *ra, *new_ra, **rap;
|
||||
|
||||
/* RA packet may be delivered ONLY to IPPROTO_RAW socket */
|
||||
if (sk->sk_type != SOCK_RAW || inet_sk(sk)->num != IPPROTO_RAW)
|
||||
if (sk->sk_type != SOCK_RAW || inet_sk(sk)->inet_num != IPPROTO_RAW)
|
||||
return -ENOPROTOOPT;
|
||||
|
||||
new_ra = (sel>=0) ? kmalloc(sizeof(*new_ra), GFP_KERNEL) : NULL;
|
||||
@@ -106,7 +106,7 @@ struct ipv6_txoptions *ipv6_update_options(struct sock *sk,
|
||||
if (inet_sk(sk)->is_icsk) {
|
||||
if (opt &&
|
||||
!((1 << sk->sk_state) & (TCPF_LISTEN | TCPF_CLOSE)) &&
|
||||
inet_sk(sk)->daddr != LOOPBACK4_IPV6) {
|
||||
inet_sk(sk)->inet_daddr != LOOPBACK4_IPV6) {
|
||||
struct inet_connection_sock *icsk = inet_csk(sk);
|
||||
icsk->icsk_ext_hdr_len = opt->opt_flen + opt->opt_nflen;
|
||||
icsk->icsk_sync_mss(sk, icsk->icsk_pmtu_cookie);
|
||||
@@ -234,7 +234,7 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname,
|
||||
|
||||
case IPV6_V6ONLY:
|
||||
if (optlen < sizeof(int) ||
|
||||
inet_sk(sk)->num)
|
||||
inet_sk(sk)->inet_num)
|
||||
goto e_inval;
|
||||
np->ipv6only = valbool;
|
||||
retv = 0;
|
||||
|
@@ -72,7 +72,7 @@ static struct sock *__raw_v6_lookup(struct net *net, struct sock *sk,
|
||||
int is_multicast = ipv6_addr_is_multicast(loc_addr);
|
||||
|
||||
sk_for_each_from(sk, node)
|
||||
if (inet_sk(sk)->num == num) {
|
||||
if (inet_sk(sk)->inet_num == num) {
|
||||
struct ipv6_pinfo *np = inet6_sk(sk);
|
||||
|
||||
if (!net_eq(sock_net(sk), net))
|
||||
@@ -298,7 +298,7 @@ static int rawv6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||
dev_put(dev);
|
||||
}
|
||||
|
||||
inet->rcv_saddr = inet->saddr = v4addr;
|
||||
inet->inet_rcv_saddr = inet->inet_saddr = v4addr;
|
||||
ipv6_addr_copy(&np->rcv_saddr, &addr->sin6_addr);
|
||||
if (!(addr_type & IPV6_ADDR_MULTICAST))
|
||||
ipv6_addr_copy(&np->saddr, &addr->sin6_addr);
|
||||
@@ -415,14 +415,14 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb)
|
||||
skb_network_header_len(skb));
|
||||
if (!csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
|
||||
&ipv6_hdr(skb)->daddr,
|
||||
skb->len, inet->num, skb->csum))
|
||||
skb->len, inet->inet_num, skb->csum))
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
}
|
||||
if (!skb_csum_unnecessary(skb))
|
||||
skb->csum = ~csum_unfold(csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
|
||||
&ipv6_hdr(skb)->daddr,
|
||||
skb->len,
|
||||
inet->num, 0));
|
||||
inet->inet_num, 0));
|
||||
|
||||
if (inet->hdrincl) {
|
||||
if (skb_checksum_complete(skb)) {
|
||||
@@ -765,8 +765,8 @@ static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk,
|
||||
proto = ntohs(sin6->sin6_port);
|
||||
|
||||
if (!proto)
|
||||
proto = inet->num;
|
||||
else if (proto != inet->num)
|
||||
proto = inet->inet_num;
|
||||
else if (proto != inet->inet_num)
|
||||
return(-EINVAL);
|
||||
|
||||
if (proto > 255)
|
||||
@@ -799,7 +799,7 @@ static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk,
|
||||
if (sk->sk_state != TCP_ESTABLISHED)
|
||||
return -EDESTADDRREQ;
|
||||
|
||||
proto = inet->num;
|
||||
proto = inet->inet_num;
|
||||
daddr = &np->daddr;
|
||||
fl.fl6_flowlabel = np->flow_label;
|
||||
}
|
||||
@@ -966,7 +966,7 @@ static int do_rawv6_setsockopt(struct sock *sk, int level, int optname,
|
||||
|
||||
switch (optname) {
|
||||
case IPV6_CHECKSUM:
|
||||
if (inet_sk(sk)->num == IPPROTO_ICMPV6 &&
|
||||
if (inet_sk(sk)->inet_num == IPPROTO_ICMPV6 &&
|
||||
level == IPPROTO_IPV6) {
|
||||
/*
|
||||
* RFC3542 tells that IPV6_CHECKSUM socket
|
||||
@@ -1006,7 +1006,7 @@ static int rawv6_setsockopt(struct sock *sk, int level, int optname,
|
||||
break;
|
||||
|
||||
case SOL_ICMPV6:
|
||||
if (inet_sk(sk)->num != IPPROTO_ICMPV6)
|
||||
if (inet_sk(sk)->inet_num != IPPROTO_ICMPV6)
|
||||
return -EOPNOTSUPP;
|
||||
return rawv6_seticmpfilter(sk, level, optname, optval,
|
||||
optlen);
|
||||
@@ -1029,7 +1029,7 @@ static int compat_rawv6_setsockopt(struct sock *sk, int level, int optname,
|
||||
case SOL_RAW:
|
||||
break;
|
||||
case SOL_ICMPV6:
|
||||
if (inet_sk(sk)->num != IPPROTO_ICMPV6)
|
||||
if (inet_sk(sk)->inet_num != IPPROTO_ICMPV6)
|
||||
return -EOPNOTSUPP;
|
||||
return rawv6_seticmpfilter(sk, level, optname, optval, optlen);
|
||||
case SOL_IPV6:
|
||||
@@ -1086,7 +1086,7 @@ static int rawv6_getsockopt(struct sock *sk, int level, int optname,
|
||||
break;
|
||||
|
||||
case SOL_ICMPV6:
|
||||
if (inet_sk(sk)->num != IPPROTO_ICMPV6)
|
||||
if (inet_sk(sk)->inet_num != IPPROTO_ICMPV6)
|
||||
return -EOPNOTSUPP;
|
||||
return rawv6_geticmpfilter(sk, level, optname, optval,
|
||||
optlen);
|
||||
@@ -1109,7 +1109,7 @@ static int compat_rawv6_getsockopt(struct sock *sk, int level, int optname,
|
||||
case SOL_RAW:
|
||||
break;
|
||||
case SOL_ICMPV6:
|
||||
if (inet_sk(sk)->num != IPPROTO_ICMPV6)
|
||||
if (inet_sk(sk)->inet_num != IPPROTO_ICMPV6)
|
||||
return -EOPNOTSUPP;
|
||||
return rawv6_geticmpfilter(sk, level, optname, optval, optlen);
|
||||
case SOL_IPV6:
|
||||
@@ -1156,7 +1156,7 @@ static int rawv6_ioctl(struct sock *sk, int cmd, unsigned long arg)
|
||||
|
||||
static void rawv6_close(struct sock *sk, long timeout)
|
||||
{
|
||||
if (inet_sk(sk)->num == IPPROTO_RAW)
|
||||
if (inet_sk(sk)->inet_num == IPPROTO_RAW)
|
||||
ip6_ra_control(sk, -1);
|
||||
ip6mr_sk_done(sk);
|
||||
sk_common_release(sk);
|
||||
@@ -1175,7 +1175,7 @@ static int rawv6_init_sk(struct sock *sk)
|
||||
{
|
||||
struct raw6_sock *rp = raw6_sk(sk);
|
||||
|
||||
switch (inet_sk(sk)->num) {
|
||||
switch (inet_sk(sk)->inet_num) {
|
||||
case IPPROTO_ICMPV6:
|
||||
rp->checksum = 1;
|
||||
rp->offset = 2;
|
||||
@@ -1225,7 +1225,7 @@ static void raw6_sock_seq_show(struct seq_file *seq, struct sock *sp, int i)
|
||||
dest = &np->daddr;
|
||||
src = &np->rcv_saddr;
|
||||
destp = 0;
|
||||
srcp = inet_sk(sp)->num;
|
||||
srcp = inet_sk(sp)->inet_num;
|
||||
seq_printf(seq,
|
||||
"%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
|
||||
"%02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p %d\n",
|
||||
|
@@ -254,7 +254,7 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb)
|
||||
fl.oif = sk->sk_bound_dev_if;
|
||||
fl.mark = sk->sk_mark;
|
||||
fl.fl_ip_dport = inet_rsk(req)->rmt_port;
|
||||
fl.fl_ip_sport = inet_sk(sk)->sport;
|
||||
fl.fl_ip_sport = inet_sk(sk)->inet_sport;
|
||||
security_req_classify_flow(req, &fl);
|
||||
if (ip6_dst_lookup(sk, &dst, &fl))
|
||||
goto out_free;
|
||||
|
@@ -226,8 +226,9 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||
#endif
|
||||
goto failure;
|
||||
} else {
|
||||
ipv6_addr_set_v4mapped(inet->saddr, &np->saddr);
|
||||
ipv6_addr_set_v4mapped(inet->rcv_saddr, &np->rcv_saddr);
|
||||
ipv6_addr_set_v4mapped(inet->inet_saddr, &np->saddr);
|
||||
ipv6_addr_set_v4mapped(inet->inet_rcv_saddr,
|
||||
&np->rcv_saddr);
|
||||
}
|
||||
|
||||
return err;
|
||||
@@ -243,7 +244,7 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||
fl.oif = sk->sk_bound_dev_if;
|
||||
fl.mark = sk->sk_mark;
|
||||
fl.fl_ip_dport = usin->sin6_port;
|
||||
fl.fl_ip_sport = inet->sport;
|
||||
fl.fl_ip_sport = inet->inet_sport;
|
||||
|
||||
if (np->opt && np->opt->srcrt) {
|
||||
struct rt0_hdr *rt0 = (struct rt0_hdr *)np->opt->srcrt;
|
||||
@@ -275,7 +276,7 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||
|
||||
/* set the source address */
|
||||
ipv6_addr_copy(&np->saddr, saddr);
|
||||
inet->rcv_saddr = LOOPBACK4_IPV6;
|
||||
inet->inet_rcv_saddr = LOOPBACK4_IPV6;
|
||||
|
||||
sk->sk_gso_type = SKB_GSO_TCPV6;
|
||||
__ip6_dst_store(sk, dst, NULL, NULL);
|
||||
@@ -287,7 +288,7 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||
|
||||
tp->rx_opt.mss_clamp = IPV6_MIN_MTU - sizeof(struct tcphdr) - sizeof(struct ipv6hdr);
|
||||
|
||||
inet->dport = usin->sin6_port;
|
||||
inet->inet_dport = usin->sin6_port;
|
||||
|
||||
tcp_set_state(sk, TCP_SYN_SENT);
|
||||
err = inet6_hash_connect(&tcp_death_row, sk);
|
||||
@@ -297,8 +298,8 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||
if (!tp->write_seq)
|
||||
tp->write_seq = secure_tcpv6_sequence_number(np->saddr.s6_addr32,
|
||||
np->daddr.s6_addr32,
|
||||
inet->sport,
|
||||
inet->dport);
|
||||
inet->inet_sport,
|
||||
inet->inet_dport);
|
||||
|
||||
err = tcp_connect(sk);
|
||||
if (err)
|
||||
@@ -310,7 +311,7 @@ late_failure:
|
||||
tcp_set_state(sk, TCP_CLOSE);
|
||||
__sk_dst_reset(sk);
|
||||
failure:
|
||||
inet->dport = 0;
|
||||
inet->inet_dport = 0;
|
||||
sk->sk_route_caps = 0;
|
||||
return err;
|
||||
}
|
||||
@@ -383,8 +384,8 @@ static void tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
|
||||
ipv6_addr_copy(&fl.fl6_src, &np->saddr);
|
||||
fl.oif = sk->sk_bound_dev_if;
|
||||
fl.mark = sk->sk_mark;
|
||||
fl.fl_ip_dport = inet->dport;
|
||||
fl.fl_ip_sport = inet->sport;
|
||||
fl.fl_ip_dport = inet->inet_dport;
|
||||
fl.fl_ip_sport = inet->inet_sport;
|
||||
security_skb_classify_flow(skb, &fl);
|
||||
|
||||
if ((err = ip6_dst_lookup(sk, &dst, &fl))) {
|
||||
@@ -1291,9 +1292,9 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
|
||||
|
||||
memcpy(newnp, np, sizeof(struct ipv6_pinfo));
|
||||
|
||||
ipv6_addr_set_v4mapped(newinet->daddr, &newnp->daddr);
|
||||
ipv6_addr_set_v4mapped(newinet->inet_daddr, &newnp->daddr);
|
||||
|
||||
ipv6_addr_set_v4mapped(newinet->saddr, &newnp->saddr);
|
||||
ipv6_addr_set_v4mapped(newinet->inet_saddr, &newnp->saddr);
|
||||
|
||||
ipv6_addr_copy(&newnp->rcv_saddr, &newnp->saddr);
|
||||
|
||||
@@ -1431,7 +1432,8 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
|
||||
newtp->advmss = dst_metric(dst, RTAX_ADVMSS);
|
||||
tcp_initialize_rcv_mss(newsk);
|
||||
|
||||
newinet->daddr = newinet->saddr = newinet->rcv_saddr = LOOPBACK4_IPV6;
|
||||
newinet->inet_daddr = newinet->inet_saddr = LOOPBACK4_IPV6;
|
||||
newinet->inet_rcv_saddr = LOOPBACK4_IPV6;
|
||||
|
||||
#ifdef CONFIG_TCP_MD5SIG
|
||||
/* Copy over the MD5 key from the original socket */
|
||||
@@ -1931,8 +1933,8 @@ static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i)
|
||||
|
||||
dest = &np->daddr;
|
||||
src = &np->rcv_saddr;
|
||||
destp = ntohs(inet->dport);
|
||||
srcp = ntohs(inet->sport);
|
||||
destp = ntohs(inet->inet_dport);
|
||||
srcp = ntohs(inet->inet_sport);
|
||||
|
||||
if (icsk->icsk_pending == ICSK_TIME_RETRANS) {
|
||||
timer_active = 1;
|
||||
|
@@ -53,7 +53,7 @@ int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2)
|
||||
{
|
||||
const struct in6_addr *sk_rcv_saddr6 = &inet6_sk(sk)->rcv_saddr;
|
||||
const struct in6_addr *sk2_rcv_saddr6 = inet6_rcv_saddr(sk2);
|
||||
__be32 sk_rcv_saddr = inet_sk(sk)->rcv_saddr;
|
||||
__be32 sk1_rcv_saddr = inet_sk(sk)->inet_rcv_saddr;
|
||||
__be32 sk2_rcv_saddr = inet_rcv_saddr(sk2);
|
||||
int sk_ipv6only = ipv6_only_sock(sk);
|
||||
int sk2_ipv6only = inet_v6_ipv6only(sk2);
|
||||
@@ -63,8 +63,8 @@ int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2)
|
||||
/* if both are mapped, treat as IPv4 */
|
||||
if (addr_type == IPV6_ADDR_MAPPED && addr_type2 == IPV6_ADDR_MAPPED)
|
||||
return (!sk2_ipv6only &&
|
||||
(!sk_rcv_saddr || !sk2_rcv_saddr ||
|
||||
sk_rcv_saddr == sk2_rcv_saddr));
|
||||
(!sk1_rcv_saddr || !sk2_rcv_saddr ||
|
||||
sk1_rcv_saddr == sk2_rcv_saddr));
|
||||
|
||||
if (addr_type2 == IPV6_ADDR_ANY &&
|
||||
!(sk2_ipv6only && addr_type == IPV6_ADDR_MAPPED))
|
||||
@@ -100,8 +100,8 @@ static inline int compute_score(struct sock *sk, struct net *net,
|
||||
struct inet_sock *inet = inet_sk(sk);
|
||||
|
||||
score = 0;
|
||||
if (inet->dport) {
|
||||
if (inet->dport != sport)
|
||||
if (inet->inet_dport) {
|
||||
if (inet->inet_dport != sport)
|
||||
return -1;
|
||||
score++;
|
||||
}
|
||||
@@ -417,8 +417,8 @@ static struct sock *udp_v6_mcast_next(struct net *net, struct sock *sk,
|
||||
|
||||
if (s->sk_hash == num && s->sk_family == PF_INET6) {
|
||||
struct ipv6_pinfo *np = inet6_sk(s);
|
||||
if (inet->dport) {
|
||||
if (inet->dport != rmt_port)
|
||||
if (inet->inet_dport) {
|
||||
if (inet->inet_dport != rmt_port)
|
||||
continue;
|
||||
}
|
||||
if (!ipv6_addr_any(&np->daddr) &&
|
||||
@@ -792,7 +792,7 @@ int udpv6_sendmsg(struct kiocb *iocb, struct sock *sk,
|
||||
if (ipv6_addr_v4mapped(daddr)) {
|
||||
struct sockaddr_in sin;
|
||||
sin.sin_family = AF_INET;
|
||||
sin.sin_port = sin6 ? sin6->sin6_port : inet->dport;
|
||||
sin.sin_port = sin6 ? sin6->sin6_port : inet->inet_dport;
|
||||
sin.sin_addr.s_addr = daddr->s6_addr32[3];
|
||||
msg->msg_name = &sin;
|
||||
msg->msg_namelen = sizeof(sin);
|
||||
@@ -865,7 +865,7 @@ do_udp_sendmsg:
|
||||
if (sk->sk_state != TCP_ESTABLISHED)
|
||||
return -EDESTADDRREQ;
|
||||
|
||||
fl.fl_ip_dport = inet->dport;
|
||||
fl.fl_ip_dport = inet->inet_dport;
|
||||
daddr = &np->daddr;
|
||||
fl.fl6_flowlabel = np->flow_label;
|
||||
connected = 1;
|
||||
@@ -911,7 +911,7 @@ do_udp_sendmsg:
|
||||
fl.fl6_dst.s6_addr[15] = 0x1; /* :: means loopback (BSD'ism) */
|
||||
if (ipv6_addr_any(&fl.fl6_src) && !ipv6_addr_any(&np->saddr))
|
||||
ipv6_addr_copy(&fl.fl6_src, &np->saddr);
|
||||
fl.fl_ip_sport = inet->sport;
|
||||
fl.fl_ip_sport = inet->inet_sport;
|
||||
|
||||
/* merge ip6_build_xmit from ip6_output */
|
||||
if (opt && opt->srcrt) {
|
||||
@@ -1192,8 +1192,8 @@ static void udp6_sock_seq_show(struct seq_file *seq, struct sock *sp, int bucket
|
||||
|
||||
dest = &np->daddr;
|
||||
src = &np->rcv_saddr;
|
||||
destp = ntohs(inet->dport);
|
||||
srcp = ntohs(inet->sport);
|
||||
destp = ntohs(inet->inet_dport);
|
||||
srcp = ntohs(inet->inet_sport);
|
||||
seq_printf(seq,
|
||||
"%5d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
|
||||
"%02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p %d\n",
|
||||
|
Reference in New Issue
Block a user