mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-25 08:02:56 +00:00
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:
parent
988ade6b8e
commit
c720c7e838
47 changed files with 408 additions and 388 deletions
|
@ -516,7 +516,7 @@ static inline int pppol2tp_verify_udp_checksum(struct sock *sk,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
inet = inet_sk(sk);
|
inet = inet_sk(sk);
|
||||||
psum = csum_tcpudp_nofold(inet->saddr, inet->daddr, ulen,
|
psum = csum_tcpudp_nofold(inet->inet_saddr, inet->inet_daddr, ulen,
|
||||||
IPPROTO_UDP, 0);
|
IPPROTO_UDP, 0);
|
||||||
|
|
||||||
if ((skb->ip_summed == CHECKSUM_COMPLETE) &&
|
if ((skb->ip_summed == CHECKSUM_COMPLETE) &&
|
||||||
|
@ -949,8 +949,8 @@ static int pppol2tp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msgh
|
||||||
inet = inet_sk(sk_tun);
|
inet = inet_sk(sk_tun);
|
||||||
udp_len = hdr_len + sizeof(ppph) + total_len;
|
udp_len = hdr_len + sizeof(ppph) + total_len;
|
||||||
uh = (struct udphdr *) skb->data;
|
uh = (struct udphdr *) skb->data;
|
||||||
uh->source = inet->sport;
|
uh->source = inet->inet_sport;
|
||||||
uh->dest = inet->dport;
|
uh->dest = inet->inet_dport;
|
||||||
uh->len = htons(udp_len);
|
uh->len = htons(udp_len);
|
||||||
uh->check = 0;
|
uh->check = 0;
|
||||||
skb_put(skb, sizeof(struct udphdr));
|
skb_put(skb, sizeof(struct udphdr));
|
||||||
|
@ -978,7 +978,8 @@ static int pppol2tp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msgh
|
||||||
else if (!(skb_dst(skb)->dev->features & NETIF_F_V4_CSUM)) {
|
else if (!(skb_dst(skb)->dev->features & NETIF_F_V4_CSUM)) {
|
||||||
skb->ip_summed = CHECKSUM_COMPLETE;
|
skb->ip_summed = CHECKSUM_COMPLETE;
|
||||||
csum = skb_checksum(skb, 0, udp_len, 0);
|
csum = skb_checksum(skb, 0, udp_len, 0);
|
||||||
uh->check = csum_tcpudp_magic(inet->saddr, inet->daddr,
|
uh->check = csum_tcpudp_magic(inet->inet_saddr,
|
||||||
|
inet->inet_daddr,
|
||||||
udp_len, IPPROTO_UDP, csum);
|
udp_len, IPPROTO_UDP, csum);
|
||||||
if (uh->check == 0)
|
if (uh->check == 0)
|
||||||
uh->check = CSUM_MANGLED_0;
|
uh->check = CSUM_MANGLED_0;
|
||||||
|
@ -986,7 +987,8 @@ static int pppol2tp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msgh
|
||||||
skb->ip_summed = CHECKSUM_PARTIAL;
|
skb->ip_summed = CHECKSUM_PARTIAL;
|
||||||
skb->csum_start = skb_transport_header(skb) - skb->head;
|
skb->csum_start = skb_transport_header(skb) - skb->head;
|
||||||
skb->csum_offset = offsetof(struct udphdr, check);
|
skb->csum_offset = offsetof(struct udphdr, check);
|
||||||
uh->check = ~csum_tcpudp_magic(inet->saddr, inet->daddr,
|
uh->check = ~csum_tcpudp_magic(inet->inet_saddr,
|
||||||
|
inet->inet_daddr,
|
||||||
udp_len, IPPROTO_UDP, 0);
|
udp_len, IPPROTO_UDP, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1136,8 +1138,8 @@ static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb)
|
||||||
__skb_push(skb, sizeof(*uh));
|
__skb_push(skb, sizeof(*uh));
|
||||||
skb_reset_transport_header(skb);
|
skb_reset_transport_header(skb);
|
||||||
uh = udp_hdr(skb);
|
uh = udp_hdr(skb);
|
||||||
uh->source = inet->sport;
|
uh->source = inet->inet_sport;
|
||||||
uh->dest = inet->dport;
|
uh->dest = inet->inet_dport;
|
||||||
uh->len = htons(udp_len);
|
uh->len = htons(udp_len);
|
||||||
uh->check = 0;
|
uh->check = 0;
|
||||||
|
|
||||||
|
@ -1181,7 +1183,8 @@ static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb)
|
||||||
else if (!(skb_dst(skb)->dev->features & NETIF_F_V4_CSUM)) {
|
else if (!(skb_dst(skb)->dev->features & NETIF_F_V4_CSUM)) {
|
||||||
skb->ip_summed = CHECKSUM_COMPLETE;
|
skb->ip_summed = CHECKSUM_COMPLETE;
|
||||||
csum = skb_checksum(skb, 0, udp_len, 0);
|
csum = skb_checksum(skb, 0, udp_len, 0);
|
||||||
uh->check = csum_tcpudp_magic(inet->saddr, inet->daddr,
|
uh->check = csum_tcpudp_magic(inet->inet_saddr,
|
||||||
|
inet->inet_daddr,
|
||||||
udp_len, IPPROTO_UDP, csum);
|
udp_len, IPPROTO_UDP, csum);
|
||||||
if (uh->check == 0)
|
if (uh->check == 0)
|
||||||
uh->check = CSUM_MANGLED_0;
|
uh->check = CSUM_MANGLED_0;
|
||||||
|
@ -1189,7 +1192,8 @@ static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb)
|
||||||
skb->ip_summed = CHECKSUM_PARTIAL;
|
skb->ip_summed = CHECKSUM_PARTIAL;
|
||||||
skb->csum_start = skb_transport_header(skb) - skb->head;
|
skb->csum_start = skb_transport_header(skb) - skb->head;
|
||||||
skb->csum_offset = offsetof(struct udphdr, check);
|
skb->csum_offset = offsetof(struct udphdr, check);
|
||||||
uh->check = ~csum_tcpudp_magic(inet->saddr, inet->daddr,
|
uh->check = ~csum_tcpudp_magic(inet->inet_saddr,
|
||||||
|
inet->inet_daddr,
|
||||||
udp_len, IPPROTO_UDP, 0);
|
udp_len, IPPROTO_UDP, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -294,10 +294,10 @@ static int sc_seq_show(struct seq_file *seq, void *v)
|
||||||
if (sc->sc_sock) {
|
if (sc->sc_sock) {
|
||||||
inet = inet_sk(sc->sc_sock->sk);
|
inet = inet_sk(sc->sc_sock->sk);
|
||||||
/* the stack's structs aren't sparse endian clean */
|
/* the stack's structs aren't sparse endian clean */
|
||||||
saddr = (__force __be32)inet->saddr;
|
saddr = (__force __be32)inet->inet_saddr;
|
||||||
daddr = (__force __be32)inet->daddr;
|
daddr = (__force __be32)inet->inet_daddr;
|
||||||
sport = (__force __be16)inet->sport;
|
sport = (__force __be16)inet->inet_sport;
|
||||||
dport = (__force __be16)inet->dport;
|
dport = (__force __be16)inet->inet_dport;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* XXX sigh, inet-> doesn't have sparse annotation so any
|
/* XXX sigh, inet-> doesn't have sparse annotation so any
|
||||||
|
|
|
@ -505,7 +505,7 @@ static inline struct raw6_sock *raw6_sk(const struct sock *sk)
|
||||||
|
|
||||||
#define INET6_MATCH(__sk, __net, __hash, __saddr, __daddr, __ports, __dif)\
|
#define INET6_MATCH(__sk, __net, __hash, __saddr, __daddr, __ports, __dif)\
|
||||||
(((__sk)->sk_hash == (__hash)) && sock_net((__sk)) == (__net) && \
|
(((__sk)->sk_hash == (__hash)) && sock_net((__sk)) == (__net) && \
|
||||||
((*((__portpair *)&(inet_sk(__sk)->dport))) == (__ports)) && \
|
((*((__portpair *)&(inet_sk(__sk)->inet_dport))) == (__ports)) && \
|
||||||
((__sk)->sk_family == AF_INET6) && \
|
((__sk)->sk_family == AF_INET6) && \
|
||||||
ipv6_addr_equal(&inet6_sk(__sk)->daddr, (__saddr)) && \
|
ipv6_addr_equal(&inet6_sk(__sk)->daddr, (__saddr)) && \
|
||||||
ipv6_addr_equal(&inet6_sk(__sk)->rcv_saddr, (__daddr)) && \
|
ipv6_addr_equal(&inet6_sk(__sk)->rcv_saddr, (__daddr)) && \
|
||||||
|
|
|
@ -46,8 +46,8 @@ static inline int inet6_sk_ehashfn(const struct sock *sk)
|
||||||
const struct ipv6_pinfo *np = inet6_sk(sk);
|
const struct ipv6_pinfo *np = inet6_sk(sk);
|
||||||
const struct in6_addr *laddr = &np->rcv_saddr;
|
const struct in6_addr *laddr = &np->rcv_saddr;
|
||||||
const struct in6_addr *faddr = &np->daddr;
|
const struct in6_addr *faddr = &np->daddr;
|
||||||
const __u16 lport = inet->num;
|
const __u16 lport = inet->inet_num;
|
||||||
const __be16 fport = inet->dport;
|
const __be16 fport = inet->inet_dport;
|
||||||
struct net *net = sock_net(sk);
|
struct net *net = sock_net(sk);
|
||||||
|
|
||||||
return inet6_ehashfn(net, laddr, lport, faddr, fport);
|
return inet6_ehashfn(net, laddr, lport, faddr, fport);
|
||||||
|
|
|
@ -241,7 +241,7 @@ static inline int inet_lhashfn(struct net *net, const unsigned short num)
|
||||||
|
|
||||||
static inline int inet_sk_listen_hashfn(const struct sock *sk)
|
static inline int inet_sk_listen_hashfn(const struct sock *sk)
|
||||||
{
|
{
|
||||||
return inet_lhashfn(sock_net(sk), inet_sk(sk)->num);
|
return inet_lhashfn(sock_net(sk), inet_sk(sk)->inet_num);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Caller must disable local BH processing. */
|
/* Caller must disable local BH processing. */
|
||||||
|
@ -301,8 +301,8 @@ typedef __u64 __bitwise __addrpair;
|
||||||
#endif /* __BIG_ENDIAN */
|
#endif /* __BIG_ENDIAN */
|
||||||
#define INET_MATCH(__sk, __net, __hash, __cookie, __saddr, __daddr, __ports, __dif)\
|
#define INET_MATCH(__sk, __net, __hash, __cookie, __saddr, __daddr, __ports, __dif)\
|
||||||
(((__sk)->sk_hash == (__hash)) && net_eq(sock_net(__sk), (__net)) && \
|
(((__sk)->sk_hash == (__hash)) && net_eq(sock_net(__sk), (__net)) && \
|
||||||
((*((__addrpair *)&(inet_sk(__sk)->daddr))) == (__cookie)) && \
|
((*((__addrpair *)&(inet_sk(__sk)->inet_daddr))) == (__cookie)) && \
|
||||||
((*((__portpair *)&(inet_sk(__sk)->dport))) == (__ports)) && \
|
((*((__portpair *)&(inet_sk(__sk)->inet_dport))) == (__ports)) && \
|
||||||
(!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))
|
(!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))
|
||||||
#define INET_TW_MATCH(__sk, __net, __hash, __cookie, __saddr, __daddr, __ports, __dif)\
|
#define INET_TW_MATCH(__sk, __net, __hash, __cookie, __saddr, __daddr, __ports, __dif)\
|
||||||
(((__sk)->sk_hash == (__hash)) && net_eq(sock_net(__sk), (__net)) && \
|
(((__sk)->sk_hash == (__hash)) && net_eq(sock_net(__sk), (__net)) && \
|
||||||
|
@ -313,9 +313,9 @@ typedef __u64 __bitwise __addrpair;
|
||||||
#define INET_ADDR_COOKIE(__name, __saddr, __daddr)
|
#define INET_ADDR_COOKIE(__name, __saddr, __daddr)
|
||||||
#define INET_MATCH(__sk, __net, __hash, __cookie, __saddr, __daddr, __ports, __dif) \
|
#define INET_MATCH(__sk, __net, __hash, __cookie, __saddr, __daddr, __ports, __dif) \
|
||||||
(((__sk)->sk_hash == (__hash)) && net_eq(sock_net(__sk), (__net)) && \
|
(((__sk)->sk_hash == (__hash)) && net_eq(sock_net(__sk), (__net)) && \
|
||||||
(inet_sk(__sk)->daddr == (__saddr)) && \
|
(inet_sk(__sk)->inet_daddr == (__saddr)) && \
|
||||||
(inet_sk(__sk)->rcv_saddr == (__daddr)) && \
|
(inet_sk(__sk)->inet_rcv_saddr == (__daddr)) && \
|
||||||
((*((__portpair *)&(inet_sk(__sk)->dport))) == (__ports)) && \
|
((*((__portpair *)&(inet_sk(__sk)->inet_dport))) == (__ports)) && \
|
||||||
(!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))
|
(!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))
|
||||||
#define INET_TW_MATCH(__sk, __net, __hash,__cookie, __saddr, __daddr, __ports, __dif) \
|
#define INET_TW_MATCH(__sk, __net, __hash,__cookie, __saddr, __daddr, __ports, __dif) \
|
||||||
(((__sk)->sk_hash == (__hash)) && net_eq(sock_net(__sk), (__net)) && \
|
(((__sk)->sk_hash == (__hash)) && net_eq(sock_net(__sk), (__net)) && \
|
||||||
|
|
|
@ -93,14 +93,14 @@ struct rtable;
|
||||||
*
|
*
|
||||||
* @sk - ancestor class
|
* @sk - ancestor class
|
||||||
* @pinet6 - pointer to IPv6 control block
|
* @pinet6 - pointer to IPv6 control block
|
||||||
* @daddr - Foreign IPv4 addr
|
* @inet_daddr - Foreign IPv4 addr
|
||||||
* @rcv_saddr - Bound local IPv4 addr
|
* @inet_rcv_saddr - Bound local IPv4 addr
|
||||||
* @dport - Destination port
|
* @inet_dport - Destination port
|
||||||
* @num - Local port
|
* @inet_num - Local port
|
||||||
* @saddr - Sending source
|
* @inet_saddr - Sending source
|
||||||
* @uc_ttl - Unicast TTL
|
* @uc_ttl - Unicast TTL
|
||||||
* @sport - Source port
|
* @inet_sport - Source port
|
||||||
* @id - ID counter for DF pkts
|
* @inet_id - ID counter for DF pkts
|
||||||
* @tos - TOS
|
* @tos - TOS
|
||||||
* @mc_ttl - Multicasting TTL
|
* @mc_ttl - Multicasting TTL
|
||||||
* @is_icsk - is this an inet_connection_sock?
|
* @is_icsk - is this an inet_connection_sock?
|
||||||
|
@ -115,16 +115,16 @@ struct inet_sock {
|
||||||
struct ipv6_pinfo *pinet6;
|
struct ipv6_pinfo *pinet6;
|
||||||
#endif
|
#endif
|
||||||
/* Socket demultiplex comparisons on incoming packets. */
|
/* Socket demultiplex comparisons on incoming packets. */
|
||||||
__be32 daddr;
|
__be32 inet_daddr;
|
||||||
__be32 rcv_saddr;
|
__be32 inet_rcv_saddr;
|
||||||
__be16 dport;
|
__be16 inet_dport;
|
||||||
__u16 num;
|
__u16 inet_num;
|
||||||
__be32 saddr;
|
__be32 inet_saddr;
|
||||||
__s16 uc_ttl;
|
__s16 uc_ttl;
|
||||||
__u16 cmsg_flags;
|
__u16 cmsg_flags;
|
||||||
struct ip_options *opt;
|
struct ip_options *opt;
|
||||||
__be16 sport;
|
__be16 inet_sport;
|
||||||
__u16 id;
|
__u16 inet_id;
|
||||||
__u8 tos;
|
__u8 tos;
|
||||||
__u8 mc_ttl;
|
__u8 mc_ttl;
|
||||||
__u8 pmtudisc;
|
__u8 pmtudisc;
|
||||||
|
@ -190,10 +190,10 @@ static inline unsigned int inet_ehashfn(struct net *net,
|
||||||
static inline int inet_sk_ehashfn(const struct sock *sk)
|
static inline int inet_sk_ehashfn(const struct sock *sk)
|
||||||
{
|
{
|
||||||
const struct inet_sock *inet = inet_sk(sk);
|
const struct inet_sock *inet = inet_sk(sk);
|
||||||
const __be32 laddr = inet->rcv_saddr;
|
const __be32 laddr = inet->inet_rcv_saddr;
|
||||||
const __u16 lport = inet->num;
|
const __u16 lport = inet->inet_num;
|
||||||
const __be32 faddr = inet->daddr;
|
const __be32 faddr = inet->inet_daddr;
|
||||||
const __be16 fport = inet->dport;
|
const __be16 fport = inet->inet_dport;
|
||||||
struct net *net = sock_net(sk);
|
struct net *net = sock_net(sk);
|
||||||
|
|
||||||
return inet_ehashfn(net, laddr, lport, faddr, fport);
|
return inet_ehashfn(net, laddr, lport, faddr, fport);
|
||||||
|
|
|
@ -194,7 +194,7 @@ static inline struct inet_timewait_sock *inet_twsk(const struct sock *sk)
|
||||||
static inline __be32 inet_rcv_saddr(const struct sock *sk)
|
static inline __be32 inet_rcv_saddr(const struct sock *sk)
|
||||||
{
|
{
|
||||||
return likely(sk->sk_state != TCP_TIME_WAIT) ?
|
return likely(sk->sk_state != TCP_TIME_WAIT) ?
|
||||||
inet_sk(sk)->rcv_saddr : inet_twsk(sk)->tw_rcv_saddr;
|
inet_sk(sk)->inet_rcv_saddr : inet_twsk(sk)->tw_rcv_saddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void inet_twsk_put(struct inet_timewait_sock *tw);
|
extern void inet_twsk_put(struct inet_timewait_sock *tw);
|
||||||
|
|
|
@ -240,8 +240,8 @@ static inline void ip_select_ident(struct iphdr *iph, struct dst_entry *dst, str
|
||||||
* does not change, they drop every other packet in
|
* does not change, they drop every other packet in
|
||||||
* a TCP stream using header compression.
|
* a TCP stream using header compression.
|
||||||
*/
|
*/
|
||||||
iph->id = (sk && inet_sk(sk)->daddr) ?
|
iph->id = (sk && inet_sk(sk)->inet_daddr) ?
|
||||||
htons(inet_sk(sk)->id++) : 0;
|
htons(inet_sk(sk)->inet_id++) : 0;
|
||||||
} else
|
} else
|
||||||
__ip_select_ident(iph, dst, 0);
|
__ip_select_ident(iph, dst, 0);
|
||||||
}
|
}
|
||||||
|
@ -249,9 +249,9 @@ static inline void ip_select_ident(struct iphdr *iph, struct dst_entry *dst, str
|
||||||
static inline void ip_select_ident_more(struct iphdr *iph, struct dst_entry *dst, struct sock *sk, int more)
|
static inline void ip_select_ident_more(struct iphdr *iph, struct dst_entry *dst, struct sock *sk, int more)
|
||||||
{
|
{
|
||||||
if (iph->frag_off & htons(IP_DF)) {
|
if (iph->frag_off & htons(IP_DF)) {
|
||||||
if (sk && inet_sk(sk)->daddr) {
|
if (sk && inet_sk(sk)->inet_daddr) {
|
||||||
iph->id = htons(inet_sk(sk)->id);
|
iph->id = htons(inet_sk(sk)->inet_id);
|
||||||
inet_sk(sk)->id += 1 + more;
|
inet_sk(sk)->inet_id += 1 + more;
|
||||||
} else
|
} else
|
||||||
iph->id = 0;
|
iph->id = 0;
|
||||||
} else
|
} else
|
||||||
|
@ -317,7 +317,7 @@ static inline void ip_ib_mc_map(__be32 naddr, const unsigned char *broadcast, ch
|
||||||
|
|
||||||
static __inline__ void inet_reset_saddr(struct sock *sk)
|
static __inline__ void inet_reset_saddr(struct sock *sk)
|
||||||
{
|
{
|
||||||
inet_sk(sk)->rcv_saddr = inet_sk(sk)->saddr = 0;
|
inet_sk(sk)->inet_rcv_saddr = inet_sk(sk)->inet_saddr = 0;
|
||||||
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
|
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
|
||||||
if (sk->sk_family == PF_INET6) {
|
if (sk->sk_family == PF_INET6) {
|
||||||
struct ipv6_pinfo *np = inet6_sk(sk);
|
struct ipv6_pinfo *np = inet6_sk(sk);
|
||||||
|
|
|
@ -62,10 +62,10 @@ int dccp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||||
nexthop = inet->opt->faddr;
|
nexthop = inet->opt->faddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp = ip_route_connect(&rt, nexthop, inet->saddr,
|
tmp = ip_route_connect(&rt, nexthop, inet->inet_saddr,
|
||||||
RT_CONN_FLAGS(sk), sk->sk_bound_dev_if,
|
RT_CONN_FLAGS(sk), sk->sk_bound_dev_if,
|
||||||
IPPROTO_DCCP,
|
IPPROTO_DCCP,
|
||||||
inet->sport, usin->sin_port, sk, 1);
|
inet->inet_sport, usin->sin_port, sk, 1);
|
||||||
if (tmp < 0)
|
if (tmp < 0)
|
||||||
return tmp;
|
return tmp;
|
||||||
|
|
||||||
|
@ -77,12 +77,12 @@ int dccp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||||
if (inet->opt == NULL || !inet->opt->srr)
|
if (inet->opt == NULL || !inet->opt->srr)
|
||||||
daddr = rt->rt_dst;
|
daddr = rt->rt_dst;
|
||||||
|
|
||||||
if (inet->saddr == 0)
|
if (inet->inet_saddr == 0)
|
||||||
inet->saddr = rt->rt_src;
|
inet->inet_saddr = rt->rt_src;
|
||||||
inet->rcv_saddr = inet->saddr;
|
inet->inet_rcv_saddr = inet->inet_saddr;
|
||||||
|
|
||||||
inet->dport = usin->sin_port;
|
inet->inet_dport = usin->sin_port;
|
||||||
inet->daddr = daddr;
|
inet->inet_daddr = daddr;
|
||||||
|
|
||||||
inet_csk(sk)->icsk_ext_hdr_len = 0;
|
inet_csk(sk)->icsk_ext_hdr_len = 0;
|
||||||
if (inet->opt != NULL)
|
if (inet->opt != NULL)
|
||||||
|
@ -98,17 +98,19 @@ int dccp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||||
if (err != 0)
|
if (err != 0)
|
||||||
goto failure;
|
goto failure;
|
||||||
|
|
||||||
err = ip_route_newports(&rt, IPPROTO_DCCP, inet->sport, inet->dport,
|
err = ip_route_newports(&rt, IPPROTO_DCCP, inet->inet_sport,
|
||||||
sk);
|
inet->inet_dport, sk);
|
||||||
if (err != 0)
|
if (err != 0)
|
||||||
goto failure;
|
goto failure;
|
||||||
|
|
||||||
/* OK, now commit destination to socket. */
|
/* OK, now commit destination to socket. */
|
||||||
sk_setup_caps(sk, &rt->u.dst);
|
sk_setup_caps(sk, &rt->u.dst);
|
||||||
|
|
||||||
dp->dccps_iss = secure_dccp_sequence_number(inet->saddr, inet->daddr,
|
dp->dccps_iss = secure_dccp_sequence_number(inet->inet_saddr,
|
||||||
inet->sport, inet->dport);
|
inet->inet_daddr,
|
||||||
inet->id = dp->dccps_iss ^ jiffies;
|
inet->inet_sport,
|
||||||
|
inet->inet_dport);
|
||||||
|
inet->inet_id = dp->dccps_iss ^ jiffies;
|
||||||
|
|
||||||
err = dccp_connect(sk);
|
err = dccp_connect(sk);
|
||||||
rt = NULL;
|
rt = NULL;
|
||||||
|
@ -123,7 +125,7 @@ failure:
|
||||||
dccp_set_state(sk, DCCP_CLOSED);
|
dccp_set_state(sk, DCCP_CLOSED);
|
||||||
ip_rt_put(rt);
|
ip_rt_put(rt);
|
||||||
sk->sk_route_caps = 0;
|
sk->sk_route_caps = 0;
|
||||||
inet->dport = 0;
|
inet->inet_dport = 0;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -352,7 +354,9 @@ void dccp_v4_send_check(struct sock *sk, int unused, struct sk_buff *skb)
|
||||||
struct dccp_hdr *dh = dccp_hdr(skb);
|
struct dccp_hdr *dh = dccp_hdr(skb);
|
||||||
|
|
||||||
dccp_csum_outgoing(skb);
|
dccp_csum_outgoing(skb);
|
||||||
dh->dccph_checksum = dccp_v4_csum_finish(skb, inet->saddr, inet->daddr);
|
dh->dccph_checksum = dccp_v4_csum_finish(skb,
|
||||||
|
inet->inet_saddr,
|
||||||
|
inet->inet_daddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL_GPL(dccp_v4_send_check);
|
EXPORT_SYMBOL_GPL(dccp_v4_send_check);
|
||||||
|
@ -393,14 +397,14 @@ struct sock *dccp_v4_request_recv_sock(struct sock *sk, struct sk_buff *skb,
|
||||||
|
|
||||||
newinet = inet_sk(newsk);
|
newinet = inet_sk(newsk);
|
||||||
ireq = inet_rsk(req);
|
ireq = inet_rsk(req);
|
||||||
newinet->daddr = ireq->rmt_addr;
|
newinet->inet_daddr = ireq->rmt_addr;
|
||||||
newinet->rcv_saddr = ireq->loc_addr;
|
newinet->inet_rcv_saddr = ireq->loc_addr;
|
||||||
newinet->saddr = ireq->loc_addr;
|
newinet->inet_saddr = ireq->loc_addr;
|
||||||
newinet->opt = ireq->opt;
|
newinet->opt = ireq->opt;
|
||||||
ireq->opt = NULL;
|
ireq->opt = NULL;
|
||||||
newinet->mc_index = inet_iif(skb);
|
newinet->mc_index = inet_iif(skb);
|
||||||
newinet->mc_ttl = ip_hdr(skb)->ttl;
|
newinet->mc_ttl = ip_hdr(skb)->ttl;
|
||||||
newinet->id = jiffies;
|
newinet->inet_id = jiffies;
|
||||||
|
|
||||||
dccp_sync_mss(newsk, dst_mtu(dst));
|
dccp_sync_mss(newsk, dst_mtu(dst));
|
||||||
|
|
||||||
|
|
|
@ -158,8 +158,8 @@ static void dccp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
|
||||||
ipv6_addr_copy(&fl.fl6_dst, &np->daddr);
|
ipv6_addr_copy(&fl.fl6_dst, &np->daddr);
|
||||||
ipv6_addr_copy(&fl.fl6_src, &np->saddr);
|
ipv6_addr_copy(&fl.fl6_src, &np->saddr);
|
||||||
fl.oif = sk->sk_bound_dev_if;
|
fl.oif = sk->sk_bound_dev_if;
|
||||||
fl.fl_ip_dport = inet->dport;
|
fl.fl_ip_dport = inet->inet_dport;
|
||||||
fl.fl_ip_sport = inet->sport;
|
fl.fl_ip_sport = inet->inet_sport;
|
||||||
security_sk_classify_flow(sk, &fl);
|
security_sk_classify_flow(sk, &fl);
|
||||||
|
|
||||||
err = ip6_dst_lookup(sk, &dst, &fl);
|
err = ip6_dst_lookup(sk, &dst, &fl);
|
||||||
|
@ -510,9 +510,9 @@ static struct sock *dccp_v6_request_recv_sock(struct sock *sk,
|
||||||
|
|
||||||
memcpy(newnp, np, sizeof(struct ipv6_pinfo));
|
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);
|
ipv6_addr_copy(&newnp->rcv_saddr, &newnp->saddr);
|
||||||
|
|
||||||
|
@ -640,7 +640,8 @@ static struct sock *dccp_v6_request_recv_sock(struct sock *sk,
|
||||||
|
|
||||||
dccp_sync_mss(newsk, dst_mtu(dst));
|
dccp_sync_mss(newsk, dst_mtu(dst));
|
||||||
|
|
||||||
newinet->daddr = newinet->saddr = newinet->rcv_saddr = LOOPBACK4_IPV6;
|
newinet->inet_daddr = newinet->inet_saddr = LOOPBACK4_IPV6;
|
||||||
|
newinet->inet_rcv_saddr = LOOPBACK4_IPV6;
|
||||||
|
|
||||||
__inet6_hash(newsk);
|
__inet6_hash(newsk);
|
||||||
__inet_inherit_port(sk, newsk);
|
__inet_inherit_port(sk, newsk);
|
||||||
|
@ -968,10 +969,9 @@ static int dccp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||||
icsk->icsk_af_ops = &dccp_ipv6_af_ops;
|
icsk->icsk_af_ops = &dccp_ipv6_af_ops;
|
||||||
sk->sk_backlog_rcv = dccp_v6_do_rcv;
|
sk->sk_backlog_rcv = dccp_v6_do_rcv;
|
||||||
goto failure;
|
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;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -984,7 +984,7 @@ static int dccp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||||
ipv6_addr_copy(&fl.fl6_src, saddr ? saddr : &np->saddr);
|
ipv6_addr_copy(&fl.fl6_src, saddr ? saddr : &np->saddr);
|
||||||
fl.oif = sk->sk_bound_dev_if;
|
fl.oif = sk->sk_bound_dev_if;
|
||||||
fl.fl_ip_dport = usin->sin6_port;
|
fl.fl_ip_dport = usin->sin6_port;
|
||||||
fl.fl_ip_sport = inet->sport;
|
fl.fl_ip_sport = inet->inet_sport;
|
||||||
security_sk_classify_flow(sk, &fl);
|
security_sk_classify_flow(sk, &fl);
|
||||||
|
|
||||||
if (np->opt != NULL && np->opt->srcrt != NULL) {
|
if (np->opt != NULL && np->opt->srcrt != NULL) {
|
||||||
|
@ -1017,7 +1017,7 @@ static int dccp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||||
|
|
||||||
/* set the source address */
|
/* set the source address */
|
||||||
ipv6_addr_copy(&np->saddr, saddr);
|
ipv6_addr_copy(&np->saddr, saddr);
|
||||||
inet->rcv_saddr = LOOPBACK4_IPV6;
|
inet->inet_rcv_saddr = LOOPBACK4_IPV6;
|
||||||
|
|
||||||
__ip6_dst_store(sk, dst, NULL, NULL);
|
__ip6_dst_store(sk, dst, NULL, NULL);
|
||||||
|
|
||||||
|
@ -1026,7 +1026,7 @@ static int dccp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||||
icsk->icsk_ext_hdr_len = (np->opt->opt_flen +
|
icsk->icsk_ext_hdr_len = (np->opt->opt_flen +
|
||||||
np->opt->opt_nflen);
|
np->opt->opt_nflen);
|
||||||
|
|
||||||
inet->dport = usin->sin6_port;
|
inet->inet_dport = usin->sin6_port;
|
||||||
|
|
||||||
dccp_set_state(sk, DCCP_REQUESTING);
|
dccp_set_state(sk, DCCP_REQUESTING);
|
||||||
err = inet6_hash_connect(&dccp_death_row, sk);
|
err = inet6_hash_connect(&dccp_death_row, sk);
|
||||||
|
@ -1035,7 +1035,8 @@ static int dccp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||||
|
|
||||||
dp->dccps_iss = secure_dccpv6_sequence_number(np->saddr.s6_addr32,
|
dp->dccps_iss = secure_dccpv6_sequence_number(np->saddr.s6_addr32,
|
||||||
np->daddr.s6_addr32,
|
np->daddr.s6_addr32,
|
||||||
inet->sport, inet->dport);
|
inet->inet_sport,
|
||||||
|
inet->inet_dport);
|
||||||
err = dccp_connect(sk);
|
err = dccp_connect(sk);
|
||||||
if (err)
|
if (err)
|
||||||
goto late_failure;
|
goto late_failure;
|
||||||
|
@ -1046,7 +1047,7 @@ late_failure:
|
||||||
dccp_set_state(sk, DCCP_CLOSED);
|
dccp_set_state(sk, DCCP_CLOSED);
|
||||||
__sk_dst_reset(sk);
|
__sk_dst_reset(sk);
|
||||||
failure:
|
failure:
|
||||||
inet->dport = 0;
|
inet->inet_dport = 0;
|
||||||
sk->sk_route_caps = 0;
|
sk->sk_route_caps = 0;
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,8 +99,8 @@ static int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
|
||||||
/* Build DCCP header and checksum it. */
|
/* Build DCCP header and checksum it. */
|
||||||
dh = dccp_zeroed_hdr(skb, dccp_header_size);
|
dh = dccp_zeroed_hdr(skb, dccp_header_size);
|
||||||
dh->dccph_type = dcb->dccpd_type;
|
dh->dccph_type = dcb->dccpd_type;
|
||||||
dh->dccph_sport = inet->sport;
|
dh->dccph_sport = inet->inet_sport;
|
||||||
dh->dccph_dport = inet->dport;
|
dh->dccph_dport = inet->inet_dport;
|
||||||
dh->dccph_doff = (dccp_header_size + dcb->dccpd_opt_len) / 4;
|
dh->dccph_doff = (dccp_header_size + dcb->dccpd_opt_len) / 4;
|
||||||
dh->dccph_ccval = dcb->dccpd_ccval;
|
dh->dccph_ccval = dcb->dccpd_ccval;
|
||||||
dh->dccph_cscov = dp->dccps_pcslen;
|
dh->dccph_cscov = dp->dccps_pcslen;
|
||||||
|
|
|
@ -80,19 +80,20 @@ static int jdccp_sendmsg(struct kiocb *iocb, struct sock *sk,
|
||||||
if (ccid_get_current_tx_ccid(dccp_sk(sk)) == DCCPC_CCID3)
|
if (ccid_get_current_tx_ccid(dccp_sk(sk)) == DCCPC_CCID3)
|
||||||
hc = ccid3_hc_tx_sk(sk);
|
hc = ccid3_hc_tx_sk(sk);
|
||||||
|
|
||||||
if (port == 0 || ntohs(inet->dport) == port ||
|
if (port == 0 || ntohs(inet->inet_dport) == port ||
|
||||||
ntohs(inet->sport) == port) {
|
ntohs(inet->inet_sport) == port) {
|
||||||
if (hc)
|
if (hc)
|
||||||
printl("%pI4:%u %pI4:%u %d %d %d %d %u %llu %llu %d\n",
|
printl("%pI4:%u %pI4:%u %d %d %d %d %u %llu %llu %d\n",
|
||||||
&inet->saddr, ntohs(inet->sport),
|
&inet->inet_saddr, ntohs(inet->inet_sport),
|
||||||
&inet->daddr, ntohs(inet->dport), size,
|
&inet->inet_daddr, ntohs(inet->inet_dport), size,
|
||||||
hc->tx_s, hc->tx_rtt, hc->tx_p,
|
hc->tx_s, hc->tx_rtt, hc->tx_p,
|
||||||
hc->tx_x_calc, hc->tx_x_recv >> 6,
|
hc->tx_x_calc, hc->tx_x_recv >> 6,
|
||||||
hc->tx_x >> 6, hc->tx_t_ipi);
|
hc->tx_x >> 6, hc->tx_t_ipi);
|
||||||
else
|
else
|
||||||
printl("%pI4:%u %pI4:%u %d\n",
|
printl("%pI4:%u %pI4:%u %d\n",
|
||||||
&inet->saddr, ntohs(inet->sport),
|
&inet->inet_saddr, ntohs(inet->inet_sport),
|
||||||
&inet->daddr, ntohs(inet->dport), size);
|
&inet->inet_daddr, ntohs(inet->inet_dport),
|
||||||
|
size);
|
||||||
}
|
}
|
||||||
|
|
||||||
jprobe_return();
|
jprobe_return();
|
||||||
|
|
|
@ -278,7 +278,7 @@ int dccp_disconnect(struct sock *sk, int flags)
|
||||||
sk->sk_send_head = NULL;
|
sk->sk_send_head = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
inet->dport = 0;
|
inet->inet_dport = 0;
|
||||||
|
|
||||||
if (!(sk->sk_userlocks & SOCK_BINDADDR_LOCK))
|
if (!(sk->sk_userlocks & SOCK_BINDADDR_LOCK))
|
||||||
inet_reset_saddr(sk);
|
inet_reset_saddr(sk);
|
||||||
|
@ -290,7 +290,7 @@ int dccp_disconnect(struct sock *sk, int flags)
|
||||||
inet_csk_delack_init(sk);
|
inet_csk_delack_init(sk);
|
||||||
__sk_dst_reset(sk);
|
__sk_dst_reset(sk);
|
||||||
|
|
||||||
WARN_ON(inet->num && !icsk->icsk_bind_hash);
|
WARN_ON(inet->inet_num && !icsk->icsk_bind_hash);
|
||||||
|
|
||||||
sk->sk_error_report(sk);
|
sk->sk_error_report(sk);
|
||||||
return err;
|
return err;
|
||||||
|
|
|
@ -174,12 +174,12 @@ static int inet_autobind(struct sock *sk)
|
||||||
/* We may need to bind the socket. */
|
/* We may need to bind the socket. */
|
||||||
lock_sock(sk);
|
lock_sock(sk);
|
||||||
inet = inet_sk(sk);
|
inet = inet_sk(sk);
|
||||||
if (!inet->num) {
|
if (!inet->inet_num) {
|
||||||
if (sk->sk_prot->get_port(sk, 0)) {
|
if (sk->sk_prot->get_port(sk, 0)) {
|
||||||
release_sock(sk);
|
release_sock(sk);
|
||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
}
|
}
|
||||||
inet->sport = htons(inet->num);
|
inet->inet_sport = htons(inet->inet_num);
|
||||||
}
|
}
|
||||||
release_sock(sk);
|
release_sock(sk);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -354,7 +354,7 @@ lookup_protocol:
|
||||||
inet->is_icsk = (INET_PROTOSW_ICSK & answer_flags) != 0;
|
inet->is_icsk = (INET_PROTOSW_ICSK & answer_flags) != 0;
|
||||||
|
|
||||||
if (SOCK_RAW == sock->type) {
|
if (SOCK_RAW == sock->type) {
|
||||||
inet->num = protocol;
|
inet->inet_num = protocol;
|
||||||
if (IPPROTO_RAW == protocol)
|
if (IPPROTO_RAW == protocol)
|
||||||
inet->hdrincl = 1;
|
inet->hdrincl = 1;
|
||||||
}
|
}
|
||||||
|
@ -364,7 +364,7 @@ lookup_protocol:
|
||||||
else
|
else
|
||||||
inet->pmtudisc = IP_PMTUDISC_WANT;
|
inet->pmtudisc = IP_PMTUDISC_WANT;
|
||||||
|
|
||||||
inet->id = 0;
|
inet->inet_id = 0;
|
||||||
|
|
||||||
sock_init_data(sock, sk);
|
sock_init_data(sock, sk);
|
||||||
|
|
||||||
|
@ -381,13 +381,13 @@ lookup_protocol:
|
||||||
|
|
||||||
sk_refcnt_debug_inc(sk);
|
sk_refcnt_debug_inc(sk);
|
||||||
|
|
||||||
if (inet->num) {
|
if (inet->inet_num) {
|
||||||
/* It assumes that any protocol which allows
|
/* It assumes that any protocol which allows
|
||||||
* the user to assign a number at socket
|
* the user to assign a number at socket
|
||||||
* creation time automatically
|
* creation time automatically
|
||||||
* shares.
|
* shares.
|
||||||
*/
|
*/
|
||||||
inet->sport = htons(inet->num);
|
inet->inet_sport = htons(inet->inet_num);
|
||||||
/* Add to protocol hash chains. */
|
/* Add to protocol hash chains. */
|
||||||
sk->sk_prot->hash(sk);
|
sk->sk_prot->hash(sk);
|
||||||
}
|
}
|
||||||
|
@ -494,27 +494,27 @@ int inet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
||||||
|
|
||||||
/* Check these errors (active socket, double bind). */
|
/* Check these errors (active socket, double bind). */
|
||||||
err = -EINVAL;
|
err = -EINVAL;
|
||||||
if (sk->sk_state != TCP_CLOSE || inet->num)
|
if (sk->sk_state != TCP_CLOSE || inet->inet_num)
|
||||||
goto out_release_sock;
|
goto out_release_sock;
|
||||||
|
|
||||||
inet->rcv_saddr = inet->saddr = addr->sin_addr.s_addr;
|
inet->inet_rcv_saddr = inet->inet_saddr = addr->sin_addr.s_addr;
|
||||||
if (chk_addr_ret == RTN_MULTICAST || chk_addr_ret == RTN_BROADCAST)
|
if (chk_addr_ret == RTN_MULTICAST || chk_addr_ret == RTN_BROADCAST)
|
||||||
inet->saddr = 0; /* Use device */
|
inet->inet_saddr = 0; /* Use device */
|
||||||
|
|
||||||
/* Make sure we are allowed to bind here. */
|
/* Make sure we are allowed to bind here. */
|
||||||
if (sk->sk_prot->get_port(sk, snum)) {
|
if (sk->sk_prot->get_port(sk, snum)) {
|
||||||
inet->saddr = inet->rcv_saddr = 0;
|
inet->inet_saddr = inet->inet_rcv_saddr = 0;
|
||||||
err = -EADDRINUSE;
|
err = -EADDRINUSE;
|
||||||
goto out_release_sock;
|
goto out_release_sock;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inet->rcv_saddr)
|
if (inet->inet_rcv_saddr)
|
||||||
sk->sk_userlocks |= SOCK_BINDADDR_LOCK;
|
sk->sk_userlocks |= SOCK_BINDADDR_LOCK;
|
||||||
if (snum)
|
if (snum)
|
||||||
sk->sk_userlocks |= SOCK_BINDPORT_LOCK;
|
sk->sk_userlocks |= SOCK_BINDPORT_LOCK;
|
||||||
inet->sport = htons(inet->num);
|
inet->inet_sport = htons(inet->inet_num);
|
||||||
inet->daddr = 0;
|
inet->inet_daddr = 0;
|
||||||
inet->dport = 0;
|
inet->inet_dport = 0;
|
||||||
sk_dst_reset(sk);
|
sk_dst_reset(sk);
|
||||||
err = 0;
|
err = 0;
|
||||||
out_release_sock:
|
out_release_sock:
|
||||||
|
@ -532,7 +532,7 @@ int inet_dgram_connect(struct socket *sock, struct sockaddr * uaddr,
|
||||||
if (uaddr->sa_family == AF_UNSPEC)
|
if (uaddr->sa_family == AF_UNSPEC)
|
||||||
return sk->sk_prot->disconnect(sk, flags);
|
return sk->sk_prot->disconnect(sk, flags);
|
||||||
|
|
||||||
if (!inet_sk(sk)->num && inet_autobind(sk))
|
if (!inet_sk(sk)->inet_num && inet_autobind(sk))
|
||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
return sk->sk_prot->connect(sk, (struct sockaddr *)uaddr, addr_len);
|
return sk->sk_prot->connect(sk, (struct sockaddr *)uaddr, addr_len);
|
||||||
}
|
}
|
||||||
|
@ -689,17 +689,17 @@ int inet_getname(struct socket *sock, struct sockaddr *uaddr,
|
||||||
|
|
||||||
sin->sin_family = AF_INET;
|
sin->sin_family = AF_INET;
|
||||||
if (peer) {
|
if (peer) {
|
||||||
if (!inet->dport ||
|
if (!inet->inet_dport ||
|
||||||
(((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_SYN_SENT)) &&
|
(((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_SYN_SENT)) &&
|
||||||
peer == 1))
|
peer == 1))
|
||||||
return -ENOTCONN;
|
return -ENOTCONN;
|
||||||
sin->sin_port = inet->dport;
|
sin->sin_port = inet->inet_dport;
|
||||||
sin->sin_addr.s_addr = inet->daddr;
|
sin->sin_addr.s_addr = inet->inet_daddr;
|
||||||
} else {
|
} else {
|
||||||
__be32 addr = inet->rcv_saddr;
|
__be32 addr = inet->inet_rcv_saddr;
|
||||||
if (!addr)
|
if (!addr)
|
||||||
addr = inet->saddr;
|
addr = inet->inet_saddr;
|
||||||
sin->sin_port = inet->sport;
|
sin->sin_port = inet->inet_sport;
|
||||||
sin->sin_addr.s_addr = addr;
|
sin->sin_addr.s_addr = addr;
|
||||||
}
|
}
|
||||||
memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
|
memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
|
||||||
|
@ -714,7 +714,7 @@ int inet_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,
|
||||||
struct sock *sk = sock->sk;
|
struct sock *sk = sock->sk;
|
||||||
|
|
||||||
/* We may need to bind the socket. */
|
/* We may need to bind the socket. */
|
||||||
if (!inet_sk(sk)->num && inet_autobind(sk))
|
if (!inet_sk(sk)->inet_num && inet_autobind(sk))
|
||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
|
|
||||||
return sk->sk_prot->sendmsg(iocb, sk, msg, size);
|
return sk->sk_prot->sendmsg(iocb, sk, msg, size);
|
||||||
|
@ -728,7 +728,7 @@ static ssize_t inet_sendpage(struct socket *sock, struct page *page, int offset,
|
||||||
struct sock *sk = sock->sk;
|
struct sock *sk = sock->sk;
|
||||||
|
|
||||||
/* We may need to bind the socket. */
|
/* We may need to bind the socket. */
|
||||||
if (!inet_sk(sk)->num && inet_autobind(sk))
|
if (!inet_sk(sk)->inet_num && inet_autobind(sk))
|
||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
|
|
||||||
if (sk->sk_prot->sendpage)
|
if (sk->sk_prot->sendpage)
|
||||||
|
@ -1059,9 +1059,9 @@ static int inet_sk_reselect_saddr(struct sock *sk)
|
||||||
struct inet_sock *inet = inet_sk(sk);
|
struct inet_sock *inet = inet_sk(sk);
|
||||||
int err;
|
int err;
|
||||||
struct rtable *rt;
|
struct rtable *rt;
|
||||||
__be32 old_saddr = inet->saddr;
|
__be32 old_saddr = inet->inet_saddr;
|
||||||
__be32 new_saddr;
|
__be32 new_saddr;
|
||||||
__be32 daddr = inet->daddr;
|
__be32 daddr = inet->inet_daddr;
|
||||||
|
|
||||||
if (inet->opt && inet->opt->srr)
|
if (inet->opt && inet->opt->srr)
|
||||||
daddr = inet->opt->faddr;
|
daddr = inet->opt->faddr;
|
||||||
|
@ -1071,7 +1071,7 @@ static int inet_sk_reselect_saddr(struct sock *sk)
|
||||||
RT_CONN_FLAGS(sk),
|
RT_CONN_FLAGS(sk),
|
||||||
sk->sk_bound_dev_if,
|
sk->sk_bound_dev_if,
|
||||||
sk->sk_protocol,
|
sk->sk_protocol,
|
||||||
inet->sport, inet->dport, sk, 0);
|
inet->inet_sport, inet->inet_dport, sk, 0);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
@ -1087,7 +1087,7 @@ static int inet_sk_reselect_saddr(struct sock *sk)
|
||||||
__func__, &old_saddr, &new_saddr);
|
__func__, &old_saddr, &new_saddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
inet->saddr = inet->rcv_saddr = new_saddr;
|
inet->inet_saddr = inet->inet_rcv_saddr = new_saddr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XXX The only one ugly spot where we need to
|
* XXX The only one ugly spot where we need to
|
||||||
|
@ -1113,7 +1113,7 @@ int inet_sk_rebuild_header(struct sock *sk)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Reroute. */
|
/* Reroute. */
|
||||||
daddr = inet->daddr;
|
daddr = inet->inet_daddr;
|
||||||
if (inet->opt && inet->opt->srr)
|
if (inet->opt && inet->opt->srr)
|
||||||
daddr = inet->opt->faddr;
|
daddr = inet->opt->faddr;
|
||||||
{
|
{
|
||||||
|
@ -1123,7 +1123,7 @@ int inet_sk_rebuild_header(struct sock *sk)
|
||||||
.nl_u = {
|
.nl_u = {
|
||||||
.ip4_u = {
|
.ip4_u = {
|
||||||
.daddr = daddr,
|
.daddr = daddr,
|
||||||
.saddr = inet->saddr,
|
.saddr = inet->inet_saddr,
|
||||||
.tos = RT_CONN_FLAGS(sk),
|
.tos = RT_CONN_FLAGS(sk),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -1131,8 +1131,8 @@ int inet_sk_rebuild_header(struct sock *sk)
|
||||||
.flags = inet_sk_flowi_flags(sk),
|
.flags = inet_sk_flowi_flags(sk),
|
||||||
.uli_u = {
|
.uli_u = {
|
||||||
.ports = {
|
.ports = {
|
||||||
.sport = inet->sport,
|
.sport = inet->inet_sport,
|
||||||
.dport = inet->dport,
|
.dport = inet->inet_dport,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -39,7 +39,7 @@ int ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||||
sk_dst_reset(sk);
|
sk_dst_reset(sk);
|
||||||
|
|
||||||
oif = sk->sk_bound_dev_if;
|
oif = sk->sk_bound_dev_if;
|
||||||
saddr = inet->saddr;
|
saddr = inet->inet_saddr;
|
||||||
if (ipv4_is_multicast(usin->sin_addr.s_addr)) {
|
if (ipv4_is_multicast(usin->sin_addr.s_addr)) {
|
||||||
if (!oif)
|
if (!oif)
|
||||||
oif = inet->mc_index;
|
oif = inet->mc_index;
|
||||||
|
@ -49,7 +49,7 @@ int ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||||
err = ip_route_connect(&rt, usin->sin_addr.s_addr, saddr,
|
err = ip_route_connect(&rt, usin->sin_addr.s_addr, saddr,
|
||||||
RT_CONN_FLAGS(sk), oif,
|
RT_CONN_FLAGS(sk), oif,
|
||||||
sk->sk_protocol,
|
sk->sk_protocol,
|
||||||
inet->sport, usin->sin_port, sk, 1);
|
inet->inet_sport, usin->sin_port, sk, 1);
|
||||||
if (err) {
|
if (err) {
|
||||||
if (err == -ENETUNREACH)
|
if (err == -ENETUNREACH)
|
||||||
IP_INC_STATS_BH(sock_net(sk), IPSTATS_MIB_OUTNOROUTES);
|
IP_INC_STATS_BH(sock_net(sk), IPSTATS_MIB_OUTNOROUTES);
|
||||||
|
@ -60,14 +60,14 @@ int ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||||
ip_rt_put(rt);
|
ip_rt_put(rt);
|
||||||
return -EACCES;
|
return -EACCES;
|
||||||
}
|
}
|
||||||
if (!inet->saddr)
|
if (!inet->inet_saddr)
|
||||||
inet->saddr = rt->rt_src; /* Update source address */
|
inet->inet_saddr = rt->rt_src; /* Update source address */
|
||||||
if (!inet->rcv_saddr)
|
if (!inet->inet_rcv_saddr)
|
||||||
inet->rcv_saddr = rt->rt_src;
|
inet->inet_rcv_saddr = rt->rt_src;
|
||||||
inet->daddr = rt->rt_dst;
|
inet->inet_daddr = rt->rt_dst;
|
||||||
inet->dport = usin->sin_port;
|
inet->inet_dport = usin->sin_port;
|
||||||
sk->sk_state = TCP_ESTABLISHED;
|
sk->sk_state = TCP_ESTABLISHED;
|
||||||
inet->id = jiffies;
|
inet->inet_id = jiffies;
|
||||||
|
|
||||||
sk_dst_set(sk, &rt->u.dst);
|
sk_dst_set(sk, &rt->u.dst);
|
||||||
return(0);
|
return(0);
|
||||||
|
|
|
@ -368,7 +368,7 @@ struct dst_entry *inet_csk_route_req(struct sock *sk,
|
||||||
.proto = sk->sk_protocol,
|
.proto = sk->sk_protocol,
|
||||||
.flags = inet_sk_flowi_flags(sk),
|
.flags = inet_sk_flowi_flags(sk),
|
||||||
.uli_u = { .ports =
|
.uli_u = { .ports =
|
||||||
{ .sport = inet_sk(sk)->sport,
|
{ .sport = inet_sk(sk)->inet_sport,
|
||||||
.dport = ireq->rmt_port } } };
|
.dport = ireq->rmt_port } } };
|
||||||
struct net *net = sock_net(sk);
|
struct net *net = sock_net(sk);
|
||||||
|
|
||||||
|
@ -547,9 +547,9 @@ struct sock *inet_csk_clone(struct sock *sk, const struct request_sock *req,
|
||||||
newsk->sk_state = TCP_SYN_RECV;
|
newsk->sk_state = TCP_SYN_RECV;
|
||||||
newicsk->icsk_bind_hash = NULL;
|
newicsk->icsk_bind_hash = NULL;
|
||||||
|
|
||||||
inet_sk(newsk)->dport = inet_rsk(req)->rmt_port;
|
inet_sk(newsk)->inet_dport = inet_rsk(req)->rmt_port;
|
||||||
inet_sk(newsk)->num = ntohs(inet_rsk(req)->loc_port);
|
inet_sk(newsk)->inet_num = ntohs(inet_rsk(req)->loc_port);
|
||||||
inet_sk(newsk)->sport = inet_rsk(req)->loc_port;
|
inet_sk(newsk)->inet_sport = inet_rsk(req)->loc_port;
|
||||||
newsk->sk_write_space = sk_stream_write_space;
|
newsk->sk_write_space = sk_stream_write_space;
|
||||||
|
|
||||||
newicsk->icsk_retransmits = 0;
|
newicsk->icsk_retransmits = 0;
|
||||||
|
@ -580,8 +580,8 @@ void inet_csk_destroy_sock(struct sock *sk)
|
||||||
/* It cannot be in hash table! */
|
/* It cannot be in hash table! */
|
||||||
WARN_ON(!sk_unhashed(sk));
|
WARN_ON(!sk_unhashed(sk));
|
||||||
|
|
||||||
/* If it has not 0 inet_sk(sk)->num, it must be bound */
|
/* If it has not 0 inet_sk(sk)->inet_num, it must be bound */
|
||||||
WARN_ON(inet_sk(sk)->num && !inet_csk(sk)->icsk_bind_hash);
|
WARN_ON(inet_sk(sk)->inet_num && !inet_csk(sk)->icsk_bind_hash);
|
||||||
|
|
||||||
sk->sk_prot->destroy(sk);
|
sk->sk_prot->destroy(sk);
|
||||||
|
|
||||||
|
@ -616,8 +616,8 @@ int inet_csk_listen_start(struct sock *sk, const int nr_table_entries)
|
||||||
* after validation is complete.
|
* after validation is complete.
|
||||||
*/
|
*/
|
||||||
sk->sk_state = TCP_LISTEN;
|
sk->sk_state = TCP_LISTEN;
|
||||||
if (!sk->sk_prot->get_port(sk, inet->num)) {
|
if (!sk->sk_prot->get_port(sk, inet->inet_num)) {
|
||||||
inet->sport = htons(inet->num);
|
inet->inet_sport = htons(inet->inet_num);
|
||||||
|
|
||||||
sk_dst_reset(sk);
|
sk_dst_reset(sk);
|
||||||
sk->sk_prot->hash(sk);
|
sk->sk_prot->hash(sk);
|
||||||
|
@ -693,8 +693,8 @@ void inet_csk_addr2sockaddr(struct sock *sk, struct sockaddr *uaddr)
|
||||||
const struct inet_sock *inet = inet_sk(sk);
|
const struct inet_sock *inet = inet_sk(sk);
|
||||||
|
|
||||||
sin->sin_family = AF_INET;
|
sin->sin_family = AF_INET;
|
||||||
sin->sin_addr.s_addr = inet->daddr;
|
sin->sin_addr.s_addr = inet->inet_daddr;
|
||||||
sin->sin_port = inet->dport;
|
sin->sin_port = inet->inet_dport;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL_GPL(inet_csk_addr2sockaddr);
|
EXPORT_SYMBOL_GPL(inet_csk_addr2sockaddr);
|
||||||
|
|
|
@ -116,10 +116,10 @@ static int inet_csk_diag_fill(struct sock *sk,
|
||||||
r->id.idiag_cookie[0] = (u32)(unsigned long)sk;
|
r->id.idiag_cookie[0] = (u32)(unsigned long)sk;
|
||||||
r->id.idiag_cookie[1] = (u32)(((unsigned long)sk >> 31) >> 1);
|
r->id.idiag_cookie[1] = (u32)(((unsigned long)sk >> 31) >> 1);
|
||||||
|
|
||||||
r->id.idiag_sport = inet->sport;
|
r->id.idiag_sport = inet->inet_sport;
|
||||||
r->id.idiag_dport = inet->dport;
|
r->id.idiag_dport = inet->inet_dport;
|
||||||
r->id.idiag_src[0] = inet->rcv_saddr;
|
r->id.idiag_src[0] = inet->inet_rcv_saddr;
|
||||||
r->id.idiag_dst[0] = inet->daddr;
|
r->id.idiag_dst[0] = inet->inet_daddr;
|
||||||
|
|
||||||
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
|
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
|
||||||
if (r->idiag_family == AF_INET6) {
|
if (r->idiag_family == AF_INET6) {
|
||||||
|
@ -504,11 +504,11 @@ static int inet_csk_diag_dump(struct sock *sk,
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
entry.saddr = &inet->rcv_saddr;
|
entry.saddr = &inet->inet_rcv_saddr;
|
||||||
entry.daddr = &inet->daddr;
|
entry.daddr = &inet->inet_daddr;
|
||||||
}
|
}
|
||||||
entry.sport = inet->num;
|
entry.sport = inet->inet_num;
|
||||||
entry.dport = ntohs(inet->dport);
|
entry.dport = ntohs(inet->inet_dport);
|
||||||
entry.userlocks = sk->sk_userlocks;
|
entry.userlocks = sk->sk_userlocks;
|
||||||
|
|
||||||
if (!inet_diag_bc_run(RTA_DATA(bc), RTA_PAYLOAD(bc), &entry))
|
if (!inet_diag_bc_run(RTA_DATA(bc), RTA_PAYLOAD(bc), &entry))
|
||||||
|
@ -584,7 +584,7 @@ static int inet_diag_fill_req(struct sk_buff *skb, struct sock *sk,
|
||||||
if (tmo < 0)
|
if (tmo < 0)
|
||||||
tmo = 0;
|
tmo = 0;
|
||||||
|
|
||||||
r->id.idiag_sport = inet->sport;
|
r->id.idiag_sport = inet->inet_sport;
|
||||||
r->id.idiag_dport = ireq->rmt_port;
|
r->id.idiag_dport = ireq->rmt_port;
|
||||||
r->id.idiag_src[0] = ireq->loc_addr;
|
r->id.idiag_src[0] = ireq->loc_addr;
|
||||||
r->id.idiag_dst[0] = ireq->rmt_addr;
|
r->id.idiag_dst[0] = ireq->rmt_addr;
|
||||||
|
@ -639,7 +639,7 @@ static int inet_diag_dump_reqs(struct sk_buff *skb, struct sock *sk,
|
||||||
|
|
||||||
if (cb->nlh->nlmsg_len > 4 + NLMSG_SPACE(sizeof(*r))) {
|
if (cb->nlh->nlmsg_len > 4 + NLMSG_SPACE(sizeof(*r))) {
|
||||||
bc = (struct rtattr *)(r + 1);
|
bc = (struct rtattr *)(r + 1);
|
||||||
entry.sport = inet->num;
|
entry.sport = inet->inet_num;
|
||||||
entry.userlocks = sk->sk_userlocks;
|
entry.userlocks = sk->sk_userlocks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -732,7 +732,7 @@ static int inet_diag_dump(struct sk_buff *skb, struct netlink_callback *cb)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r->id.idiag_sport != inet->sport &&
|
if (r->id.idiag_sport != inet->inet_sport &&
|
||||||
r->id.idiag_sport)
|
r->id.idiag_sport)
|
||||||
goto next_listen;
|
goto next_listen;
|
||||||
|
|
||||||
|
@ -797,10 +797,10 @@ skip_listen_ht:
|
||||||
goto next_normal;
|
goto next_normal;
|
||||||
if (!(r->idiag_states & (1 << sk->sk_state)))
|
if (!(r->idiag_states & (1 << sk->sk_state)))
|
||||||
goto next_normal;
|
goto next_normal;
|
||||||
if (r->id.idiag_sport != inet->sport &&
|
if (r->id.idiag_sport != inet->inet_sport &&
|
||||||
r->id.idiag_sport)
|
r->id.idiag_sport)
|
||||||
goto next_normal;
|
goto next_normal;
|
||||||
if (r->id.idiag_dport != inet->dport &&
|
if (r->id.idiag_dport != inet->inet_dport &&
|
||||||
r->id.idiag_dport)
|
r->id.idiag_dport)
|
||||||
goto next_normal;
|
goto next_normal;
|
||||||
if (inet_csk_diag_dump(sk, skb, cb) < 0) {
|
if (inet_csk_diag_dump(sk, skb, cb) < 0) {
|
||||||
|
|
|
@ -64,7 +64,7 @@ void inet_bind_hash(struct sock *sk, struct inet_bind_bucket *tb,
|
||||||
|
|
||||||
atomic_inc(&hashinfo->bsockets);
|
atomic_inc(&hashinfo->bsockets);
|
||||||
|
|
||||||
inet_sk(sk)->num = snum;
|
inet_sk(sk)->inet_num = snum;
|
||||||
sk_add_bind_node(sk, &tb->owners);
|
sk_add_bind_node(sk, &tb->owners);
|
||||||
tb->num_owners++;
|
tb->num_owners++;
|
||||||
inet_csk(sk)->icsk_bind_hash = tb;
|
inet_csk(sk)->icsk_bind_hash = tb;
|
||||||
|
@ -76,7 +76,7 @@ void inet_bind_hash(struct sock *sk, struct inet_bind_bucket *tb,
|
||||||
static void __inet_put_port(struct sock *sk)
|
static void __inet_put_port(struct sock *sk)
|
||||||
{
|
{
|
||||||
struct inet_hashinfo *hashinfo = sk->sk_prot->h.hashinfo;
|
struct inet_hashinfo *hashinfo = sk->sk_prot->h.hashinfo;
|
||||||
const int bhash = inet_bhashfn(sock_net(sk), inet_sk(sk)->num,
|
const int bhash = inet_bhashfn(sock_net(sk), inet_sk(sk)->inet_num,
|
||||||
hashinfo->bhash_size);
|
hashinfo->bhash_size);
|
||||||
struct inet_bind_hashbucket *head = &hashinfo->bhash[bhash];
|
struct inet_bind_hashbucket *head = &hashinfo->bhash[bhash];
|
||||||
struct inet_bind_bucket *tb;
|
struct inet_bind_bucket *tb;
|
||||||
|
@ -88,7 +88,7 @@ static void __inet_put_port(struct sock *sk)
|
||||||
__sk_del_bind_node(sk);
|
__sk_del_bind_node(sk);
|
||||||
tb->num_owners--;
|
tb->num_owners--;
|
||||||
inet_csk(sk)->icsk_bind_hash = NULL;
|
inet_csk(sk)->icsk_bind_hash = NULL;
|
||||||
inet_sk(sk)->num = 0;
|
inet_sk(sk)->inet_num = 0;
|
||||||
inet_bind_bucket_destroy(hashinfo->bind_bucket_cachep, tb);
|
inet_bind_bucket_destroy(hashinfo->bind_bucket_cachep, tb);
|
||||||
spin_unlock(&head->lock);
|
spin_unlock(&head->lock);
|
||||||
}
|
}
|
||||||
|
@ -105,7 +105,7 @@ EXPORT_SYMBOL(inet_put_port);
|
||||||
void __inet_inherit_port(struct sock *sk, struct sock *child)
|
void __inet_inherit_port(struct sock *sk, struct sock *child)
|
||||||
{
|
{
|
||||||
struct inet_hashinfo *table = sk->sk_prot->h.hashinfo;
|
struct inet_hashinfo *table = sk->sk_prot->h.hashinfo;
|
||||||
const int bhash = inet_bhashfn(sock_net(sk), inet_sk(child)->num,
|
const int bhash = inet_bhashfn(sock_net(sk), inet_sk(child)->inet_num,
|
||||||
table->bhash_size);
|
table->bhash_size);
|
||||||
struct inet_bind_hashbucket *head = &table->bhash[bhash];
|
struct inet_bind_hashbucket *head = &table->bhash[bhash];
|
||||||
struct inet_bind_bucket *tb;
|
struct inet_bind_bucket *tb;
|
||||||
|
@ -126,9 +126,9 @@ static inline int compute_score(struct sock *sk, struct net *net,
|
||||||
int score = -1;
|
int score = -1;
|
||||||
struct inet_sock *inet = inet_sk(sk);
|
struct inet_sock *inet = inet_sk(sk);
|
||||||
|
|
||||||
if (net_eq(sock_net(sk), net) && inet->num == hnum &&
|
if (net_eq(sock_net(sk), net) && inet->inet_num == hnum &&
|
||||||
!ipv6_only_sock(sk)) {
|
!ipv6_only_sock(sk)) {
|
||||||
__be32 rcv_saddr = inet->rcv_saddr;
|
__be32 rcv_saddr = inet->inet_rcv_saddr;
|
||||||
score = sk->sk_family == PF_INET ? 1 : 0;
|
score = sk->sk_family == PF_INET ? 1 : 0;
|
||||||
if (rcv_saddr) {
|
if (rcv_saddr) {
|
||||||
if (rcv_saddr != daddr)
|
if (rcv_saddr != daddr)
|
||||||
|
@ -273,13 +273,14 @@ static int __inet_check_established(struct inet_timewait_death_row *death_row,
|
||||||
{
|
{
|
||||||
struct inet_hashinfo *hinfo = death_row->hashinfo;
|
struct inet_hashinfo *hinfo = death_row->hashinfo;
|
||||||
struct inet_sock *inet = inet_sk(sk);
|
struct inet_sock *inet = inet_sk(sk);
|
||||||
__be32 daddr = inet->rcv_saddr;
|
__be32 daddr = inet->inet_rcv_saddr;
|
||||||
__be32 saddr = inet->daddr;
|
__be32 saddr = inet->inet_daddr;
|
||||||
int dif = sk->sk_bound_dev_if;
|
int dif = sk->sk_bound_dev_if;
|
||||||
INET_ADDR_COOKIE(acookie, saddr, daddr)
|
INET_ADDR_COOKIE(acookie, saddr, daddr)
|
||||||
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);
|
struct net *net = sock_net(sk);
|
||||||
unsigned int hash = inet_ehashfn(net, daddr, lport, saddr, inet->dport);
|
unsigned int hash = inet_ehashfn(net, daddr, lport,
|
||||||
|
saddr, inet->inet_dport);
|
||||||
struct inet_ehash_bucket *head = inet_ehash_bucket(hinfo, hash);
|
struct inet_ehash_bucket *head = inet_ehash_bucket(hinfo, hash);
|
||||||
spinlock_t *lock = inet_ehash_lockp(hinfo, hash);
|
spinlock_t *lock = inet_ehash_lockp(hinfo, hash);
|
||||||
struct sock *sk2;
|
struct sock *sk2;
|
||||||
|
@ -312,8 +313,8 @@ static int __inet_check_established(struct inet_timewait_death_row *death_row,
|
||||||
unique:
|
unique:
|
||||||
/* Must record num and sport now. Otherwise we will see
|
/* Must record num and sport now. Otherwise we will see
|
||||||
* in hash table socket with a funny identity. */
|
* in hash table socket with a funny identity. */
|
||||||
inet->num = lport;
|
inet->inet_num = lport;
|
||||||
inet->sport = htons(lport);
|
inet->inet_sport = htons(lport);
|
||||||
sk->sk_hash = hash;
|
sk->sk_hash = hash;
|
||||||
WARN_ON(!sk_unhashed(sk));
|
WARN_ON(!sk_unhashed(sk));
|
||||||
__sk_nulls_add_node_rcu(sk, &head->chain);
|
__sk_nulls_add_node_rcu(sk, &head->chain);
|
||||||
|
@ -341,8 +342,9 @@ not_unique:
|
||||||
static inline u32 inet_sk_port_offset(const struct sock *sk)
|
static inline u32 inet_sk_port_offset(const struct sock *sk)
|
||||||
{
|
{
|
||||||
const struct inet_sock *inet = inet_sk(sk);
|
const struct inet_sock *inet = inet_sk(sk);
|
||||||
return secure_ipv4_port_ephemeral(inet->rcv_saddr, inet->daddr,
|
return secure_ipv4_port_ephemeral(inet->inet_rcv_saddr,
|
||||||
inet->dport);
|
inet->inet_daddr,
|
||||||
|
inet->inet_dport);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __inet_hash_nolisten(struct sock *sk)
|
void __inet_hash_nolisten(struct sock *sk)
|
||||||
|
@ -424,7 +426,7 @@ int __inet_hash_connect(struct inet_timewait_death_row *death_row,
|
||||||
void (*hash)(struct sock *sk))
|
void (*hash)(struct sock *sk))
|
||||||
{
|
{
|
||||||
struct inet_hashinfo *hinfo = death_row->hashinfo;
|
struct inet_hashinfo *hinfo = death_row->hashinfo;
|
||||||
const unsigned short snum = inet_sk(sk)->num;
|
const unsigned short snum = inet_sk(sk)->inet_num;
|
||||||
struct inet_bind_hashbucket *head;
|
struct inet_bind_hashbucket *head;
|
||||||
struct inet_bind_bucket *tb;
|
struct inet_bind_bucket *tb;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -485,7 +487,7 @@ ok:
|
||||||
/* Head lock still held and bh's disabled */
|
/* Head lock still held and bh's disabled */
|
||||||
inet_bind_hash(sk, tb, port);
|
inet_bind_hash(sk, tb, port);
|
||||||
if (sk_unhashed(sk)) {
|
if (sk_unhashed(sk)) {
|
||||||
inet_sk(sk)->sport = htons(port);
|
inet_sk(sk)->inet_sport = htons(port);
|
||||||
hash(sk);
|
hash(sk);
|
||||||
}
|
}
|
||||||
spin_unlock(&head->lock);
|
spin_unlock(&head->lock);
|
||||||
|
|
|
@ -86,7 +86,7 @@ void __inet_twsk_hashdance(struct inet_timewait_sock *tw, struct sock *sk,
|
||||||
Note, that any socket with inet->num != 0 MUST be bound in
|
Note, that any socket with inet->num != 0 MUST be bound in
|
||||||
binding cache, even if it is closed.
|
binding cache, even if it is closed.
|
||||||
*/
|
*/
|
||||||
bhead = &hashinfo->bhash[inet_bhashfn(twsk_net(tw), inet->num,
|
bhead = &hashinfo->bhash[inet_bhashfn(twsk_net(tw), inet->inet_num,
|
||||||
hashinfo->bhash_size)];
|
hashinfo->bhash_size)];
|
||||||
spin_lock(&bhead->lock);
|
spin_lock(&bhead->lock);
|
||||||
tw->tw_tb = icsk->icsk_bind_hash;
|
tw->tw_tb = icsk->icsk_bind_hash;
|
||||||
|
@ -124,14 +124,14 @@ struct inet_timewait_sock *inet_twsk_alloc(const struct sock *sk, const int stat
|
||||||
kmemcheck_annotate_bitfield(tw, flags);
|
kmemcheck_annotate_bitfield(tw, flags);
|
||||||
|
|
||||||
/* Give us an identity. */
|
/* Give us an identity. */
|
||||||
tw->tw_daddr = inet->daddr;
|
tw->tw_daddr = inet->inet_daddr;
|
||||||
tw->tw_rcv_saddr = inet->rcv_saddr;
|
tw->tw_rcv_saddr = inet->inet_rcv_saddr;
|
||||||
tw->tw_bound_dev_if = sk->sk_bound_dev_if;
|
tw->tw_bound_dev_if = sk->sk_bound_dev_if;
|
||||||
tw->tw_num = inet->num;
|
tw->tw_num = inet->inet_num;
|
||||||
tw->tw_state = TCP_TIME_WAIT;
|
tw->tw_state = TCP_TIME_WAIT;
|
||||||
tw->tw_substate = state;
|
tw->tw_substate = state;
|
||||||
tw->tw_sport = inet->sport;
|
tw->tw_sport = inet->inet_sport;
|
||||||
tw->tw_dport = inet->dport;
|
tw->tw_dport = inet->inet_dport;
|
||||||
tw->tw_family = sk->sk_family;
|
tw->tw_family = sk->sk_family;
|
||||||
tw->tw_reuse = sk->sk_reuse;
|
tw->tw_reuse = sk->sk_reuse;
|
||||||
tw->tw_hash = sk->sk_hash;
|
tw->tw_hash = sk->sk_hash;
|
||||||
|
|
|
@ -161,7 +161,7 @@ int ip_call_ra_chain(struct sk_buff *skb)
|
||||||
/* If socket is bound to an interface, only report
|
/* If socket is bound to an interface, only report
|
||||||
* the packet if it came from that interface.
|
* the packet if it came from that interface.
|
||||||
*/
|
*/
|
||||||
if (sk && inet_sk(sk)->num == protocol &&
|
if (sk && inet_sk(sk)->inet_num == protocol &&
|
||||||
(!sk->sk_bound_dev_if ||
|
(!sk->sk_bound_dev_if ||
|
||||||
sk->sk_bound_dev_if == dev->ifindex) &&
|
sk->sk_bound_dev_if == dev->ifindex) &&
|
||||||
sock_net(sk) == dev_net(dev)) {
|
sock_net(sk) == dev_net(dev)) {
|
||||||
|
|
|
@ -329,7 +329,7 @@ int ip_queue_xmit(struct sk_buff *skb, int ipfragok)
|
||||||
__be32 daddr;
|
__be32 daddr;
|
||||||
|
|
||||||
/* Use correct destination address if we have options. */
|
/* Use correct destination address if we have options. */
|
||||||
daddr = inet->daddr;
|
daddr = inet->inet_daddr;
|
||||||
if(opt && opt->srr)
|
if(opt && opt->srr)
|
||||||
daddr = opt->faddr;
|
daddr = opt->faddr;
|
||||||
|
|
||||||
|
@ -338,13 +338,13 @@ int ip_queue_xmit(struct sk_buff *skb, int ipfragok)
|
||||||
.mark = sk->sk_mark,
|
.mark = sk->sk_mark,
|
||||||
.nl_u = { .ip4_u =
|
.nl_u = { .ip4_u =
|
||||||
{ .daddr = daddr,
|
{ .daddr = daddr,
|
||||||
.saddr = inet->saddr,
|
.saddr = inet->inet_saddr,
|
||||||
.tos = RT_CONN_FLAGS(sk) } },
|
.tos = RT_CONN_FLAGS(sk) } },
|
||||||
.proto = sk->sk_protocol,
|
.proto = sk->sk_protocol,
|
||||||
.flags = inet_sk_flowi_flags(sk),
|
.flags = inet_sk_flowi_flags(sk),
|
||||||
.uli_u = { .ports =
|
.uli_u = { .ports =
|
||||||
{ .sport = inet->sport,
|
{ .sport = inet->inet_sport,
|
||||||
.dport = inet->dport } } };
|
.dport = inet->inet_dport } } };
|
||||||
|
|
||||||
/* If this fails, retransmit mechanism of transport layer will
|
/* If this fails, retransmit mechanism of transport layer will
|
||||||
* keep trying until route appears or the connection times
|
* keep trying until route appears or the connection times
|
||||||
|
@ -379,7 +379,7 @@ packet_routed:
|
||||||
|
|
||||||
if (opt && opt->optlen) {
|
if (opt && opt->optlen) {
|
||||||
iph->ihl += opt->optlen >> 2;
|
iph->ihl += opt->optlen >> 2;
|
||||||
ip_options_build(skb, opt, inet->daddr, rt, 0);
|
ip_options_build(skb, opt, inet->inet_daddr, rt, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
ip_select_ident_more(iph, &rt->u.dst, sk,
|
ip_select_ident_more(iph, &rt->u.dst, sk,
|
||||||
|
@ -846,7 +846,8 @@ int ip_append_data(struct sock *sk,
|
||||||
maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen;
|
maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen;
|
||||||
|
|
||||||
if (inet->cork.length + length > 0xFFFF - fragheaderlen) {
|
if (inet->cork.length + length > 0xFFFF - fragheaderlen) {
|
||||||
ip_local_error(sk, EMSGSIZE, rt->rt_dst, inet->dport, mtu-exthdrlen);
|
ip_local_error(sk, EMSGSIZE, rt->rt_dst, inet->inet_dport,
|
||||||
|
mtu-exthdrlen);
|
||||||
return -EMSGSIZE;
|
return -EMSGSIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1100,7 +1101,7 @@ ssize_t ip_append_page(struct sock *sk, struct page *page,
|
||||||
maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen;
|
maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen;
|
||||||
|
|
||||||
if (inet->cork.length + size > 0xFFFF - fragheaderlen) {
|
if (inet->cork.length + size > 0xFFFF - fragheaderlen) {
|
||||||
ip_local_error(sk, EMSGSIZE, rt->rt_dst, inet->dport, mtu);
|
ip_local_error(sk, EMSGSIZE, rt->rt_dst, inet->inet_dport, mtu);
|
||||||
return -EMSGSIZE;
|
return -EMSGSIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -245,7 +245,7 @@ int ip_ra_control(struct sock *sk, unsigned char on,
|
||||||
{
|
{
|
||||||
struct ip_ra_chain *ra, *new_ra, **rap;
|
struct ip_ra_chain *ra, *new_ra, **rap;
|
||||||
|
|
||||||
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 -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
new_ra = on ? kmalloc(sizeof(*new_ra), GFP_KERNEL) : NULL;
|
new_ra = on ? kmalloc(sizeof(*new_ra), GFP_KERNEL) : NULL;
|
||||||
|
@ -492,7 +492,7 @@ static int do_ip_setsockopt(struct sock *sk, int level,
|
||||||
if (sk->sk_family == PF_INET ||
|
if (sk->sk_family == PF_INET ||
|
||||||
(!((1 << sk->sk_state) &
|
(!((1 << sk->sk_state) &
|
||||||
(TCPF_LISTEN | TCPF_CLOSE)) &&
|
(TCPF_LISTEN | TCPF_CLOSE)) &&
|
||||||
inet->daddr != LOOPBACK4_IPV6)) {
|
inet->inet_daddr != LOOPBACK4_IPV6)) {
|
||||||
#endif
|
#endif
|
||||||
if (inet->opt)
|
if (inet->opt)
|
||||||
icsk->icsk_ext_hdr_len -= inet->opt->optlen;
|
icsk->icsk_ext_hdr_len -= inet->opt->optlen;
|
||||||
|
@ -1181,8 +1181,8 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname,
|
||||||
if (inet->cmsg_flags & IP_CMSG_PKTINFO) {
|
if (inet->cmsg_flags & IP_CMSG_PKTINFO) {
|
||||||
struct in_pktinfo info;
|
struct in_pktinfo info;
|
||||||
|
|
||||||
info.ipi_addr.s_addr = inet->rcv_saddr;
|
info.ipi_addr.s_addr = inet->inet_rcv_saddr;
|
||||||
info.ipi_spec_dst.s_addr = inet->rcv_saddr;
|
info.ipi_spec_dst.s_addr = inet->inet_rcv_saddr;
|
||||||
info.ipi_ifindex = inet->mc_index;
|
info.ipi_ifindex = inet->mc_index;
|
||||||
put_cmsg(&msg, SOL_IP, IP_PKTINFO, sizeof(info), &info);
|
put_cmsg(&msg, SOL_IP, IP_PKTINFO, sizeof(info), &info);
|
||||||
}
|
}
|
||||||
|
|
|
@ -956,7 +956,7 @@ int ip_mroute_setsockopt(struct sock *sk, int optname, char __user *optval, unsi
|
||||||
switch (optname) {
|
switch (optname) {
|
||||||
case MRT_INIT:
|
case MRT_INIT:
|
||||||
if (sk->sk_type != SOCK_RAW ||
|
if (sk->sk_type != SOCK_RAW ||
|
||||||
inet_sk(sk)->num != IPPROTO_IGMP)
|
inet_sk(sk)->inet_num != IPPROTO_IGMP)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
if (optlen != sizeof(int))
|
if (optlen != sizeof(int))
|
||||||
return -ENOPROTOOPT;
|
return -ENOPROTOOPT;
|
||||||
|
|
|
@ -255,10 +255,10 @@ getorigdst(struct sock *sk, int optval, void __user *user, int *len)
|
||||||
struct nf_conntrack_tuple tuple;
|
struct nf_conntrack_tuple tuple;
|
||||||
|
|
||||||
memset(&tuple, 0, sizeof(tuple));
|
memset(&tuple, 0, sizeof(tuple));
|
||||||
tuple.src.u3.ip = inet->rcv_saddr;
|
tuple.src.u3.ip = inet->inet_rcv_saddr;
|
||||||
tuple.src.u.tcp.port = inet->sport;
|
tuple.src.u.tcp.port = inet->inet_sport;
|
||||||
tuple.dst.u3.ip = inet->daddr;
|
tuple.dst.u3.ip = inet->inet_daddr;
|
||||||
tuple.dst.u.tcp.port = inet->dport;
|
tuple.dst.u.tcp.port = inet->inet_dport;
|
||||||
tuple.src.l3num = PF_INET;
|
tuple.src.l3num = PF_INET;
|
||||||
tuple.dst.protonum = sk->sk_protocol;
|
tuple.dst.protonum = sk->sk_protocol;
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,7 @@ void raw_hash_sk(struct sock *sk)
|
||||||
struct raw_hashinfo *h = sk->sk_prot->h.raw_hash;
|
struct raw_hashinfo *h = sk->sk_prot->h.raw_hash;
|
||||||
struct hlist_head *head;
|
struct hlist_head *head;
|
||||||
|
|
||||||
head = &h->ht[inet_sk(sk)->num & (RAW_HTABLE_SIZE - 1)];
|
head = &h->ht[inet_sk(sk)->inet_num & (RAW_HTABLE_SIZE - 1)];
|
||||||
|
|
||||||
write_lock_bh(&h->lock);
|
write_lock_bh(&h->lock);
|
||||||
sk_add_node(sk, head);
|
sk_add_node(sk, head);
|
||||||
|
@ -115,9 +115,9 @@ static struct sock *__raw_v4_lookup(struct net *net, struct sock *sk,
|
||||||
sk_for_each_from(sk, node) {
|
sk_for_each_from(sk, node) {
|
||||||
struct inet_sock *inet = inet_sk(sk);
|
struct inet_sock *inet = inet_sk(sk);
|
||||||
|
|
||||||
if (net_eq(sock_net(sk), net) && inet->num == num &&
|
if (net_eq(sock_net(sk), net) && inet->inet_num == num &&
|
||||||
!(inet->daddr && inet->daddr != raddr) &&
|
!(inet->inet_daddr && inet->inet_daddr != raddr) &&
|
||||||
!(inet->rcv_saddr && inet->rcv_saddr != laddr) &&
|
!(inet->inet_rcv_saddr && inet->inet_rcv_saddr != laddr) &&
|
||||||
!(sk->sk_bound_dev_if && sk->sk_bound_dev_if != dif))
|
!(sk->sk_bound_dev_if && sk->sk_bound_dev_if != dif))
|
||||||
goto found; /* gotcha */
|
goto found; /* gotcha */
|
||||||
}
|
}
|
||||||
|
@ -326,7 +326,7 @@ static int raw_send_hdrinc(struct sock *sk, void *from, size_t length,
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (length > rt->u.dst.dev->mtu) {
|
if (length > rt->u.dst.dev->mtu) {
|
||||||
ip_local_error(sk, EMSGSIZE, rt->rt_dst, inet->dport,
|
ip_local_error(sk, EMSGSIZE, rt->rt_dst, inet->inet_dport,
|
||||||
rt->u.dst.dev->mtu);
|
rt->u.dst.dev->mtu);
|
||||||
return -EMSGSIZE;
|
return -EMSGSIZE;
|
||||||
}
|
}
|
||||||
|
@ -489,10 +489,10 @@ static int raw_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
||||||
err = -EDESTADDRREQ;
|
err = -EDESTADDRREQ;
|
||||||
if (sk->sk_state != TCP_ESTABLISHED)
|
if (sk->sk_state != TCP_ESTABLISHED)
|
||||||
goto out;
|
goto out;
|
||||||
daddr = inet->daddr;
|
daddr = inet->inet_daddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
ipc.addr = inet->saddr;
|
ipc.addr = inet->inet_saddr;
|
||||||
ipc.opt = NULL;
|
ipc.opt = NULL;
|
||||||
ipc.shtx.flags = 0;
|
ipc.shtx.flags = 0;
|
||||||
ipc.oif = sk->sk_bound_dev_if;
|
ipc.oif = sk->sk_bound_dev_if;
|
||||||
|
@ -634,9 +634,9 @@ static int raw_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||||
if (addr->sin_addr.s_addr && chk_addr_ret != RTN_LOCAL &&
|
if (addr->sin_addr.s_addr && chk_addr_ret != RTN_LOCAL &&
|
||||||
chk_addr_ret != RTN_MULTICAST && chk_addr_ret != RTN_BROADCAST)
|
chk_addr_ret != RTN_MULTICAST && chk_addr_ret != RTN_BROADCAST)
|
||||||
goto out;
|
goto out;
|
||||||
inet->rcv_saddr = inet->saddr = addr->sin_addr.s_addr;
|
inet->inet_rcv_saddr = inet->inet_saddr = addr->sin_addr.s_addr;
|
||||||
if (chk_addr_ret == RTN_MULTICAST || chk_addr_ret == RTN_BROADCAST)
|
if (chk_addr_ret == RTN_MULTICAST || chk_addr_ret == RTN_BROADCAST)
|
||||||
inet->saddr = 0; /* Use device */
|
inet->inet_saddr = 0; /* Use device */
|
||||||
sk_dst_reset(sk);
|
sk_dst_reset(sk);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
out: return ret;
|
out: return ret;
|
||||||
|
@ -706,7 +706,7 @@ static int raw_init(struct sock *sk)
|
||||||
{
|
{
|
||||||
struct raw_sock *rp = raw_sk(sk);
|
struct raw_sock *rp = raw_sk(sk);
|
||||||
|
|
||||||
if (inet_sk(sk)->num == IPPROTO_ICMP)
|
if (inet_sk(sk)->inet_num == IPPROTO_ICMP)
|
||||||
memset(&rp->filter, 0, sizeof(rp->filter));
|
memset(&rp->filter, 0, sizeof(rp->filter));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -743,7 +743,7 @@ static int do_raw_setsockopt(struct sock *sk, int level, int optname,
|
||||||
char __user *optval, unsigned int optlen)
|
char __user *optval, unsigned int optlen)
|
||||||
{
|
{
|
||||||
if (optname == ICMP_FILTER) {
|
if (optname == ICMP_FILTER) {
|
||||||
if (inet_sk(sk)->num != IPPROTO_ICMP)
|
if (inet_sk(sk)->inet_num != IPPROTO_ICMP)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
else
|
else
|
||||||
return raw_seticmpfilter(sk, optval, optlen);
|
return raw_seticmpfilter(sk, optval, optlen);
|
||||||
|
@ -773,7 +773,7 @@ static int do_raw_getsockopt(struct sock *sk, int level, int optname,
|
||||||
char __user *optval, int __user *optlen)
|
char __user *optval, int __user *optlen)
|
||||||
{
|
{
|
||||||
if (optname == ICMP_FILTER) {
|
if (optname == ICMP_FILTER) {
|
||||||
if (inet_sk(sk)->num != IPPROTO_ICMP)
|
if (inet_sk(sk)->inet_num != IPPROTO_ICMP)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
else
|
else
|
||||||
return raw_geticmpfilter(sk, optval, optlen);
|
return raw_geticmpfilter(sk, optval, optlen);
|
||||||
|
@ -932,10 +932,10 @@ EXPORT_SYMBOL_GPL(raw_seq_stop);
|
||||||
static void raw_sock_seq_show(struct seq_file *seq, struct sock *sp, int i)
|
static void raw_sock_seq_show(struct seq_file *seq, struct sock *sp, int i)
|
||||||
{
|
{
|
||||||
struct inet_sock *inet = inet_sk(sp);
|
struct inet_sock *inet = inet_sk(sp);
|
||||||
__be32 dest = inet->daddr,
|
__be32 dest = inet->inet_daddr,
|
||||||
src = inet->rcv_saddr;
|
src = inet->inet_rcv_saddr;
|
||||||
__u16 destp = 0,
|
__u16 destp = 0,
|
||||||
srcp = inet->num;
|
srcp = inet->inet_num;
|
||||||
|
|
||||||
seq_printf(seq, "%4d: %08X:%04X %08X:%04X"
|
seq_printf(seq, "%4d: %08X:%04X %08X:%04X"
|
||||||
" %02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p %d\n",
|
" %02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p %d\n",
|
||||||
|
|
|
@ -1998,7 +1998,7 @@ int tcp_disconnect(struct sock *sk, int flags)
|
||||||
__skb_queue_purge(&sk->sk_async_wait_queue);
|
__skb_queue_purge(&sk->sk_async_wait_queue);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
inet->dport = 0;
|
inet->inet_dport = 0;
|
||||||
|
|
||||||
if (!(sk->sk_userlocks & SOCK_BINDADDR_LOCK))
|
if (!(sk->sk_userlocks & SOCK_BINDADDR_LOCK))
|
||||||
inet_reset_saddr(sk);
|
inet_reset_saddr(sk);
|
||||||
|
@ -2022,7 +2022,7 @@ int tcp_disconnect(struct sock *sk, int flags)
|
||||||
memset(&tp->rx_opt, 0, sizeof(tp->rx_opt));
|
memset(&tp->rx_opt, 0, sizeof(tp->rx_opt));
|
||||||
__sk_dst_reset(sk);
|
__sk_dst_reset(sk);
|
||||||
|
|
||||||
WARN_ON(inet->num && !icsk->icsk_bind_hash);
|
WARN_ON(inet->inet_num && !icsk->icsk_bind_hash);
|
||||||
|
|
||||||
sk->sk_error_report(sk);
|
sk->sk_error_report(sk);
|
||||||
return err;
|
return err;
|
||||||
|
|
|
@ -165,10 +165,10 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||||
nexthop = inet->opt->faddr;
|
nexthop = inet->opt->faddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp = ip_route_connect(&rt, nexthop, inet->saddr,
|
tmp = ip_route_connect(&rt, nexthop, inet->inet_saddr,
|
||||||
RT_CONN_FLAGS(sk), sk->sk_bound_dev_if,
|
RT_CONN_FLAGS(sk), sk->sk_bound_dev_if,
|
||||||
IPPROTO_TCP,
|
IPPROTO_TCP,
|
||||||
inet->sport, usin->sin_port, sk, 1);
|
inet->inet_sport, usin->sin_port, sk, 1);
|
||||||
if (tmp < 0) {
|
if (tmp < 0) {
|
||||||
if (tmp == -ENETUNREACH)
|
if (tmp == -ENETUNREACH)
|
||||||
IP_INC_STATS_BH(sock_net(sk), IPSTATS_MIB_OUTNOROUTES);
|
IP_INC_STATS_BH(sock_net(sk), IPSTATS_MIB_OUTNOROUTES);
|
||||||
|
@ -183,11 +183,11 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||||
if (!inet->opt || !inet->opt->srr)
|
if (!inet->opt || !inet->opt->srr)
|
||||||
daddr = rt->rt_dst;
|
daddr = rt->rt_dst;
|
||||||
|
|
||||||
if (!inet->saddr)
|
if (!inet->inet_saddr)
|
||||||
inet->saddr = rt->rt_src;
|
inet->inet_saddr = rt->rt_src;
|
||||||
inet->rcv_saddr = inet->saddr;
|
inet->inet_rcv_saddr = inet->inet_saddr;
|
||||||
|
|
||||||
if (tp->rx_opt.ts_recent_stamp && inet->daddr != daddr) {
|
if (tp->rx_opt.ts_recent_stamp && inet->inet_daddr != daddr) {
|
||||||
/* Reset inherited state */
|
/* Reset inherited state */
|
||||||
tp->rx_opt.ts_recent = 0;
|
tp->rx_opt.ts_recent = 0;
|
||||||
tp->rx_opt.ts_recent_stamp = 0;
|
tp->rx_opt.ts_recent_stamp = 0;
|
||||||
|
@ -210,8 +210,8 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inet->dport = usin->sin_port;
|
inet->inet_dport = usin->sin_port;
|
||||||
inet->daddr = daddr;
|
inet->inet_daddr = daddr;
|
||||||
|
|
||||||
inet_csk(sk)->icsk_ext_hdr_len = 0;
|
inet_csk(sk)->icsk_ext_hdr_len = 0;
|
||||||
if (inet->opt)
|
if (inet->opt)
|
||||||
|
@ -230,7 +230,7 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||||
goto failure;
|
goto failure;
|
||||||
|
|
||||||
err = ip_route_newports(&rt, IPPROTO_TCP,
|
err = ip_route_newports(&rt, IPPROTO_TCP,
|
||||||
inet->sport, inet->dport, sk);
|
inet->inet_sport, inet->inet_dport, sk);
|
||||||
if (err)
|
if (err)
|
||||||
goto failure;
|
goto failure;
|
||||||
|
|
||||||
|
@ -239,12 +239,12 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||||
sk_setup_caps(sk, &rt->u.dst);
|
sk_setup_caps(sk, &rt->u.dst);
|
||||||
|
|
||||||
if (!tp->write_seq)
|
if (!tp->write_seq)
|
||||||
tp->write_seq = secure_tcp_sequence_number(inet->saddr,
|
tp->write_seq = secure_tcp_sequence_number(inet->inet_saddr,
|
||||||
inet->daddr,
|
inet->inet_daddr,
|
||||||
inet->sport,
|
inet->inet_sport,
|
||||||
usin->sin_port);
|
usin->sin_port);
|
||||||
|
|
||||||
inet->id = tp->write_seq ^ jiffies;
|
inet->inet_id = tp->write_seq ^ jiffies;
|
||||||
|
|
||||||
err = tcp_connect(sk);
|
err = tcp_connect(sk);
|
||||||
rt = NULL;
|
rt = NULL;
|
||||||
|
@ -261,7 +261,7 @@ failure:
|
||||||
tcp_set_state(sk, TCP_CLOSE);
|
tcp_set_state(sk, TCP_CLOSE);
|
||||||
ip_rt_put(rt);
|
ip_rt_put(rt);
|
||||||
sk->sk_route_caps = 0;
|
sk->sk_route_caps = 0;
|
||||||
inet->dport = 0;
|
inet->inet_dport = 0;
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -520,12 +520,13 @@ void tcp_v4_send_check(struct sock *sk, int len, struct sk_buff *skb)
|
||||||
struct tcphdr *th = tcp_hdr(skb);
|
struct tcphdr *th = tcp_hdr(skb);
|
||||||
|
|
||||||
if (skb->ip_summed == CHECKSUM_PARTIAL) {
|
if (skb->ip_summed == CHECKSUM_PARTIAL) {
|
||||||
th->check = ~tcp_v4_check(len, inet->saddr,
|
th->check = ~tcp_v4_check(len, inet->inet_saddr,
|
||||||
inet->daddr, 0);
|
inet->inet_daddr, 0);
|
||||||
skb->csum_start = skb_transport_header(skb) - skb->head;
|
skb->csum_start = skb_transport_header(skb) - skb->head;
|
||||||
skb->csum_offset = offsetof(struct tcphdr, check);
|
skb->csum_offset = offsetof(struct tcphdr, check);
|
||||||
} else {
|
} else {
|
||||||
th->check = tcp_v4_check(len, inet->saddr, inet->daddr,
|
th->check = tcp_v4_check(len, inet->inet_saddr,
|
||||||
|
inet->inet_daddr,
|
||||||
csum_partial(th,
|
csum_partial(th,
|
||||||
th->doff << 2,
|
th->doff << 2,
|
||||||
skb->csum));
|
skb->csum));
|
||||||
|
@ -848,7 +849,7 @@ static struct tcp_md5sig_key *
|
||||||
struct tcp_md5sig_key *tcp_v4_md5_lookup(struct sock *sk,
|
struct tcp_md5sig_key *tcp_v4_md5_lookup(struct sock *sk,
|
||||||
struct sock *addr_sk)
|
struct sock *addr_sk)
|
||||||
{
|
{
|
||||||
return tcp_v4_md5_do_lookup(sk, inet_sk(addr_sk)->daddr);
|
return tcp_v4_md5_do_lookup(sk, inet_sk(addr_sk)->inet_daddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(tcp_v4_md5_lookup);
|
EXPORT_SYMBOL(tcp_v4_md5_lookup);
|
||||||
|
@ -923,7 +924,7 @@ EXPORT_SYMBOL(tcp_v4_md5_do_add);
|
||||||
static int tcp_v4_md5_add_func(struct sock *sk, struct sock *addr_sk,
|
static int tcp_v4_md5_add_func(struct sock *sk, struct sock *addr_sk,
|
||||||
u8 *newkey, u8 newkeylen)
|
u8 *newkey, u8 newkeylen)
|
||||||
{
|
{
|
||||||
return tcp_v4_md5_do_add(sk, inet_sk(addr_sk)->daddr,
|
return tcp_v4_md5_do_add(sk, inet_sk(addr_sk)->inet_daddr,
|
||||||
newkey, newkeylen);
|
newkey, newkeylen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1089,8 +1090,8 @@ int tcp_v4_md5_hash_skb(char *md5_hash, struct tcp_md5sig_key *key,
|
||||||
__be32 saddr, daddr;
|
__be32 saddr, daddr;
|
||||||
|
|
||||||
if (sk) {
|
if (sk) {
|
||||||
saddr = inet_sk(sk)->saddr;
|
saddr = inet_sk(sk)->inet_saddr;
|
||||||
daddr = inet_sk(sk)->daddr;
|
daddr = inet_sk(sk)->inet_daddr;
|
||||||
} else if (req) {
|
} else if (req) {
|
||||||
saddr = inet_rsk(req)->loc_addr;
|
saddr = inet_rsk(req)->loc_addr;
|
||||||
daddr = inet_rsk(req)->rmt_addr;
|
daddr = inet_rsk(req)->rmt_addr;
|
||||||
|
@ -1380,9 +1381,9 @@ struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
|
||||||
newtp = tcp_sk(newsk);
|
newtp = tcp_sk(newsk);
|
||||||
newinet = inet_sk(newsk);
|
newinet = inet_sk(newsk);
|
||||||
ireq = inet_rsk(req);
|
ireq = inet_rsk(req);
|
||||||
newinet->daddr = ireq->rmt_addr;
|
newinet->inet_daddr = ireq->rmt_addr;
|
||||||
newinet->rcv_saddr = ireq->loc_addr;
|
newinet->inet_rcv_saddr = ireq->loc_addr;
|
||||||
newinet->saddr = ireq->loc_addr;
|
newinet->inet_saddr = ireq->loc_addr;
|
||||||
newinet->opt = ireq->opt;
|
newinet->opt = ireq->opt;
|
||||||
ireq->opt = NULL;
|
ireq->opt = NULL;
|
||||||
newinet->mc_index = inet_iif(skb);
|
newinet->mc_index = inet_iif(skb);
|
||||||
|
@ -1390,7 +1391,7 @@ struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
|
||||||
inet_csk(newsk)->icsk_ext_hdr_len = 0;
|
inet_csk(newsk)->icsk_ext_hdr_len = 0;
|
||||||
if (newinet->opt)
|
if (newinet->opt)
|
||||||
inet_csk(newsk)->icsk_ext_hdr_len = newinet->opt->optlen;
|
inet_csk(newsk)->icsk_ext_hdr_len = newinet->opt->optlen;
|
||||||
newinet->id = newtp->write_seq ^ jiffies;
|
newinet->inet_id = newtp->write_seq ^ jiffies;
|
||||||
|
|
||||||
tcp_mtup_init(newsk);
|
tcp_mtup_init(newsk);
|
||||||
tcp_sync_mss(newsk, dst_mtu(dst));
|
tcp_sync_mss(newsk, dst_mtu(dst));
|
||||||
|
@ -1403,7 +1404,8 @@ struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
|
||||||
|
|
||||||
#ifdef CONFIG_TCP_MD5SIG
|
#ifdef CONFIG_TCP_MD5SIG
|
||||||
/* Copy over the MD5 key from the original socket */
|
/* Copy over the MD5 key from the original socket */
|
||||||
if ((key = tcp_v4_md5_do_lookup(sk, newinet->daddr)) != NULL) {
|
key = tcp_v4_md5_do_lookup(sk, newinet->inet_daddr);
|
||||||
|
if (key != NULL) {
|
||||||
/*
|
/*
|
||||||
* We're using one, so create a matching key
|
* We're using one, so create a matching key
|
||||||
* on the newsk structure. If we fail to get
|
* on the newsk structure. If we fail to get
|
||||||
|
@ -1412,7 +1414,7 @@ struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
|
||||||
*/
|
*/
|
||||||
char *newkey = kmemdup(key->key, key->keylen, GFP_ATOMIC);
|
char *newkey = kmemdup(key->key, key->keylen, GFP_ATOMIC);
|
||||||
if (newkey != NULL)
|
if (newkey != NULL)
|
||||||
tcp_v4_md5_do_add(newsk, newinet->daddr,
|
tcp_v4_md5_do_add(newsk, newinet->inet_daddr,
|
||||||
newkey, key->keylen);
|
newkey, key->keylen);
|
||||||
newsk->sk_route_caps &= ~NETIF_F_GSO_MASK;
|
newsk->sk_route_caps &= ~NETIF_F_GSO_MASK;
|
||||||
}
|
}
|
||||||
|
@ -1711,8 +1713,8 @@ int tcp_v4_remember_stamp(struct sock *sk)
|
||||||
struct inet_peer *peer = NULL;
|
struct inet_peer *peer = NULL;
|
||||||
int release_it = 0;
|
int release_it = 0;
|
||||||
|
|
||||||
if (!rt || rt->rt_dst != inet->daddr) {
|
if (!rt || rt->rt_dst != inet->inet_daddr) {
|
||||||
peer = inet_getpeer(inet->daddr, 1);
|
peer = inet_getpeer(inet->inet_daddr, 1);
|
||||||
release_it = 1;
|
release_it = 1;
|
||||||
} else {
|
} else {
|
||||||
if (!rt->peer)
|
if (!rt->peer)
|
||||||
|
@ -2225,7 +2227,7 @@ static void get_openreq4(struct sock *sk, struct request_sock *req,
|
||||||
" %02X %08X:%08X %02X:%08lX %08X %5d %8d %u %d %p%n",
|
" %02X %08X:%08X %02X:%08lX %08X %5d %8d %u %d %p%n",
|
||||||
i,
|
i,
|
||||||
ireq->loc_addr,
|
ireq->loc_addr,
|
||||||
ntohs(inet_sk(sk)->sport),
|
ntohs(inet_sk(sk)->inet_sport),
|
||||||
ireq->rmt_addr,
|
ireq->rmt_addr,
|
||||||
ntohs(ireq->rmt_port),
|
ntohs(ireq->rmt_port),
|
||||||
TCP_SYN_RECV,
|
TCP_SYN_RECV,
|
||||||
|
@ -2248,10 +2250,10 @@ static void get_tcp4_sock(struct sock *sk, struct seq_file *f, int i, int *len)
|
||||||
struct tcp_sock *tp = tcp_sk(sk);
|
struct tcp_sock *tp = tcp_sk(sk);
|
||||||
const struct inet_connection_sock *icsk = inet_csk(sk);
|
const struct inet_connection_sock *icsk = inet_csk(sk);
|
||||||
struct inet_sock *inet = inet_sk(sk);
|
struct inet_sock *inet = inet_sk(sk);
|
||||||
__be32 dest = inet->daddr;
|
__be32 dest = inet->inet_daddr;
|
||||||
__be32 src = inet->rcv_saddr;
|
__be32 src = inet->inet_rcv_saddr;
|
||||||
__u16 destp = ntohs(inet->dport);
|
__u16 destp = ntohs(inet->inet_dport);
|
||||||
__u16 srcp = ntohs(inet->sport);
|
__u16 srcp = ntohs(inet->inet_sport);
|
||||||
|
|
||||||
if (icsk->icsk_pending == ICSK_TIME_RETRANS) {
|
if (icsk->icsk_pending == ICSK_TIME_RETRANS) {
|
||||||
timer_active = 1;
|
timer_active = 1;
|
||||||
|
|
|
@ -661,8 +661,8 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,
|
||||||
|
|
||||||
/* Build TCP header and checksum it. */
|
/* Build TCP header and checksum it. */
|
||||||
th = tcp_hdr(skb);
|
th = tcp_hdr(skb);
|
||||||
th->source = inet->sport;
|
th->source = inet->inet_sport;
|
||||||
th->dest = inet->dport;
|
th->dest = inet->inet_dport;
|
||||||
th->seq = htonl(tcb->seq);
|
th->seq = htonl(tcb->seq);
|
||||||
th->ack_seq = htonl(tp->rcv_nxt);
|
th->ack_seq = htonl(tp->rcv_nxt);
|
||||||
*(((__be16 *)th) + 6) = htons(((tcp_header_size >> 2) << 12) |
|
*(((__be16 *)th) + 6) = htons(((tcp_header_size >> 2) << 12) |
|
||||||
|
|
|
@ -94,7 +94,8 @@ static int jtcp_rcv_established(struct sock *sk, struct sk_buff *skb,
|
||||||
const struct inet_sock *inet = inet_sk(sk);
|
const struct inet_sock *inet = inet_sk(sk);
|
||||||
|
|
||||||
/* Only update if port matches */
|
/* Only update if port matches */
|
||||||
if ((port == 0 || ntohs(inet->dport) == port || ntohs(inet->sport) == port)
|
if ((port == 0 || ntohs(inet->inet_dport) == port ||
|
||||||
|
ntohs(inet->inet_sport) == port)
|
||||||
&& (full || tp->snd_cwnd != tcp_probe.lastcwnd)) {
|
&& (full || tp->snd_cwnd != tcp_probe.lastcwnd)) {
|
||||||
|
|
||||||
spin_lock(&tcp_probe.lock);
|
spin_lock(&tcp_probe.lock);
|
||||||
|
@ -103,10 +104,10 @@ static int jtcp_rcv_established(struct sock *sk, struct sk_buff *skb,
|
||||||
struct tcp_log *p = tcp_probe.log + tcp_probe.head;
|
struct tcp_log *p = tcp_probe.log + tcp_probe.head;
|
||||||
|
|
||||||
p->tstamp = ktime_get();
|
p->tstamp = ktime_get();
|
||||||
p->saddr = inet->saddr;
|
p->saddr = inet->inet_saddr;
|
||||||
p->sport = inet->sport;
|
p->sport = inet->inet_sport;
|
||||||
p->daddr = inet->daddr;
|
p->daddr = inet->inet_daddr;
|
||||||
p->dport = inet->dport;
|
p->dport = inet->inet_dport;
|
||||||
p->length = skb->len;
|
p->length = skb->len;
|
||||||
p->snd_nxt = tp->snd_nxt;
|
p->snd_nxt = tp->snd_nxt;
|
||||||
p->snd_una = tp->snd_una;
|
p->snd_una = tp->snd_una;
|
||||||
|
|
|
@ -303,15 +303,15 @@ void tcp_retransmit_timer(struct sock *sk)
|
||||||
struct inet_sock *inet = inet_sk(sk);
|
struct inet_sock *inet = inet_sk(sk);
|
||||||
if (sk->sk_family == AF_INET) {
|
if (sk->sk_family == AF_INET) {
|
||||||
LIMIT_NETDEBUG(KERN_DEBUG "TCP: Peer %pI4:%u/%u unexpectedly shrunk window %u:%u (repaired)\n",
|
LIMIT_NETDEBUG(KERN_DEBUG "TCP: Peer %pI4:%u/%u unexpectedly shrunk window %u:%u (repaired)\n",
|
||||||
&inet->daddr, ntohs(inet->dport),
|
&inet->inet_daddr, ntohs(inet->inet_dport),
|
||||||
inet->num, tp->snd_una, tp->snd_nxt);
|
inet->inet_num, tp->snd_una, tp->snd_nxt);
|
||||||
}
|
}
|
||||||
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
|
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
|
||||||
else if (sk->sk_family == AF_INET6) {
|
else if (sk->sk_family == AF_INET6) {
|
||||||
struct ipv6_pinfo *np = inet6_sk(sk);
|
struct ipv6_pinfo *np = inet6_sk(sk);
|
||||||
LIMIT_NETDEBUG(KERN_DEBUG "TCP: Peer %pI6:%u/%u unexpectedly shrunk window %u:%u (repaired)\n",
|
LIMIT_NETDEBUG(KERN_DEBUG "TCP: Peer %pI6:%u/%u unexpectedly shrunk window %u:%u (repaired)\n",
|
||||||
&np->daddr, ntohs(inet->dport),
|
&np->daddr, ntohs(inet->inet_dport),
|
||||||
inet->num, tp->snd_una, tp->snd_nxt);
|
inet->inet_num, tp->snd_una, tp->snd_nxt);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -214,7 +214,7 @@ int udp_lib_get_port(struct sock *sk, unsigned short snum,
|
||||||
goto fail_unlock;
|
goto fail_unlock;
|
||||||
}
|
}
|
||||||
found:
|
found:
|
||||||
inet_sk(sk)->num = snum;
|
inet_sk(sk)->inet_num = snum;
|
||||||
sk->sk_hash = snum;
|
sk->sk_hash = snum;
|
||||||
if (sk_unhashed(sk)) {
|
if (sk_unhashed(sk)) {
|
||||||
sk_nulls_add_node_rcu(sk, &hslot->head);
|
sk_nulls_add_node_rcu(sk, &hslot->head);
|
||||||
|
@ -233,8 +233,8 @@ static int ipv4_rcv_saddr_equal(const struct sock *sk1, const struct sock *sk2)
|
||||||
struct inet_sock *inet1 = inet_sk(sk1), *inet2 = inet_sk(sk2);
|
struct inet_sock *inet1 = inet_sk(sk1), *inet2 = inet_sk(sk2);
|
||||||
|
|
||||||
return (!ipv6_only_sock(sk2) &&
|
return (!ipv6_only_sock(sk2) &&
|
||||||
(!inet1->rcv_saddr || !inet2->rcv_saddr ||
|
(!inet1->inet_rcv_saddr || !inet2->inet_rcv_saddr ||
|
||||||
inet1->rcv_saddr == inet2->rcv_saddr));
|
inet1->inet_rcv_saddr == inet2->inet_rcv_saddr));
|
||||||
}
|
}
|
||||||
|
|
||||||
int udp_v4_get_port(struct sock *sk, unsigned short snum)
|
int udp_v4_get_port(struct sock *sk, unsigned short snum)
|
||||||
|
@ -253,18 +253,18 @@ static inline int compute_score(struct sock *sk, struct net *net, __be32 saddr,
|
||||||
struct inet_sock *inet = inet_sk(sk);
|
struct inet_sock *inet = inet_sk(sk);
|
||||||
|
|
||||||
score = (sk->sk_family == PF_INET ? 1 : 0);
|
score = (sk->sk_family == PF_INET ? 1 : 0);
|
||||||
if (inet->rcv_saddr) {
|
if (inet->inet_rcv_saddr) {
|
||||||
if (inet->rcv_saddr != daddr)
|
if (inet->inet_rcv_saddr != daddr)
|
||||||
return -1;
|
return -1;
|
||||||
score += 2;
|
score += 2;
|
||||||
}
|
}
|
||||||
if (inet->daddr) {
|
if (inet->inet_daddr) {
|
||||||
if (inet->daddr != saddr)
|
if (inet->inet_daddr != saddr)
|
||||||
return -1;
|
return -1;
|
||||||
score += 2;
|
score += 2;
|
||||||
}
|
}
|
||||||
if (inet->dport) {
|
if (inet->inet_dport) {
|
||||||
if (inet->dport != sport)
|
if (inet->inet_dport != sport)
|
||||||
return -1;
|
return -1;
|
||||||
score += 2;
|
score += 2;
|
||||||
}
|
}
|
||||||
|
@ -360,9 +360,10 @@ static inline struct sock *udp_v4_mcast_next(struct net *net, struct sock *sk,
|
||||||
|
|
||||||
if (!net_eq(sock_net(s), net) ||
|
if (!net_eq(sock_net(s), net) ||
|
||||||
s->sk_hash != hnum ||
|
s->sk_hash != hnum ||
|
||||||
(inet->daddr && inet->daddr != rmt_addr) ||
|
(inet->inet_daddr && inet->inet_daddr != rmt_addr) ||
|
||||||
(inet->dport != rmt_port && inet->dport) ||
|
(inet->inet_dport != rmt_port && inet->inet_dport) ||
|
||||||
(inet->rcv_saddr && inet->rcv_saddr != loc_addr) ||
|
(inet->inet_rcv_saddr &&
|
||||||
|
inet->inet_rcv_saddr != loc_addr) ||
|
||||||
ipv6_only_sock(s) ||
|
ipv6_only_sock(s) ||
|
||||||
(s->sk_bound_dev_if && s->sk_bound_dev_if != dif))
|
(s->sk_bound_dev_if && s->sk_bound_dev_if != dif))
|
||||||
continue;
|
continue;
|
||||||
|
@ -646,14 +647,14 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
||||||
} else {
|
} else {
|
||||||
if (sk->sk_state != TCP_ESTABLISHED)
|
if (sk->sk_state != TCP_ESTABLISHED)
|
||||||
return -EDESTADDRREQ;
|
return -EDESTADDRREQ;
|
||||||
daddr = inet->daddr;
|
daddr = inet->inet_daddr;
|
||||||
dport = inet->dport;
|
dport = inet->inet_dport;
|
||||||
/* Open fast path for connected socket.
|
/* Open fast path for connected socket.
|
||||||
Route will not be used, if at least one option is set.
|
Route will not be used, if at least one option is set.
|
||||||
*/
|
*/
|
||||||
connected = 1;
|
connected = 1;
|
||||||
}
|
}
|
||||||
ipc.addr = inet->saddr;
|
ipc.addr = inet->inet_saddr;
|
||||||
|
|
||||||
ipc.oif = sk->sk_bound_dev_if;
|
ipc.oif = sk->sk_bound_dev_if;
|
||||||
err = sock_tx_timestamp(msg, sk, &ipc.shtx);
|
err = sock_tx_timestamp(msg, sk, &ipc.shtx);
|
||||||
|
@ -708,7 +709,7 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
||||||
.proto = sk->sk_protocol,
|
.proto = sk->sk_protocol,
|
||||||
.flags = inet_sk_flowi_flags(sk),
|
.flags = inet_sk_flowi_flags(sk),
|
||||||
.uli_u = { .ports =
|
.uli_u = { .ports =
|
||||||
{ .sport = inet->sport,
|
{ .sport = inet->inet_sport,
|
||||||
.dport = dport } } };
|
.dport = dport } } };
|
||||||
struct net *net = sock_net(sk);
|
struct net *net = sock_net(sk);
|
||||||
|
|
||||||
|
@ -752,7 +753,7 @@ back_from_confirm:
|
||||||
inet->cork.fl.fl4_dst = daddr;
|
inet->cork.fl.fl4_dst = daddr;
|
||||||
inet->cork.fl.fl_ip_dport = dport;
|
inet->cork.fl.fl_ip_dport = dport;
|
||||||
inet->cork.fl.fl4_src = saddr;
|
inet->cork.fl.fl4_src = saddr;
|
||||||
inet->cork.fl.fl_ip_sport = inet->sport;
|
inet->cork.fl.fl_ip_sport = inet->inet_sport;
|
||||||
up->pending = AF_INET;
|
up->pending = AF_INET;
|
||||||
|
|
||||||
do_append_data:
|
do_append_data:
|
||||||
|
@ -1029,15 +1030,15 @@ int udp_disconnect(struct sock *sk, int flags)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
sk->sk_state = TCP_CLOSE;
|
sk->sk_state = TCP_CLOSE;
|
||||||
inet->daddr = 0;
|
inet->inet_daddr = 0;
|
||||||
inet->dport = 0;
|
inet->inet_dport = 0;
|
||||||
sk->sk_bound_dev_if = 0;
|
sk->sk_bound_dev_if = 0;
|
||||||
if (!(sk->sk_userlocks & SOCK_BINDADDR_LOCK))
|
if (!(sk->sk_userlocks & SOCK_BINDADDR_LOCK))
|
||||||
inet_reset_saddr(sk);
|
inet_reset_saddr(sk);
|
||||||
|
|
||||||
if (!(sk->sk_userlocks & SOCK_BINDPORT_LOCK)) {
|
if (!(sk->sk_userlocks & SOCK_BINDPORT_LOCK)) {
|
||||||
sk->sk_prot->unhash(sk);
|
sk->sk_prot->unhash(sk);
|
||||||
inet->sport = 0;
|
inet->inet_sport = 0;
|
||||||
}
|
}
|
||||||
sk_dst_reset(sk);
|
sk_dst_reset(sk);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1053,7 +1054,7 @@ void udp_lib_unhash(struct sock *sk)
|
||||||
|
|
||||||
spin_lock_bh(&hslot->lock);
|
spin_lock_bh(&hslot->lock);
|
||||||
if (sk_nulls_del_node_init_rcu(sk)) {
|
if (sk_nulls_del_node_init_rcu(sk)) {
|
||||||
inet_sk(sk)->num = 0;
|
inet_sk(sk)->inet_num = 0;
|
||||||
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
|
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
|
||||||
}
|
}
|
||||||
spin_unlock_bh(&hslot->lock);
|
spin_unlock_bh(&hslot->lock);
|
||||||
|
@ -1752,10 +1753,10 @@ static void udp4_format_sock(struct sock *sp, struct seq_file *f,
|
||||||
int bucket, int *len)
|
int bucket, int *len)
|
||||||
{
|
{
|
||||||
struct inet_sock *inet = inet_sk(sp);
|
struct inet_sock *inet = inet_sk(sp);
|
||||||
__be32 dest = inet->daddr;
|
__be32 dest = inet->inet_daddr;
|
||||||
__be32 src = inet->rcv_saddr;
|
__be32 src = inet->inet_rcv_saddr;
|
||||||
__u16 destp = ntohs(inet->dport);
|
__u16 destp = ntohs(inet->inet_dport);
|
||||||
__u16 srcp = ntohs(inet->sport);
|
__u16 srcp = ntohs(inet->inet_sport);
|
||||||
|
|
||||||
seq_printf(f, "%5d: %08X:%04X %08X:%04X"
|
seq_printf(f, "%5d: %08X:%04X %08X:%04X"
|
||||||
" %02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p %d%n",
|
" %02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p %d%n",
|
||||||
|
|
|
@ -185,7 +185,7 @@ lookup_protocol:
|
||||||
inet->is_icsk = (INET_PROTOSW_ICSK & answer_flags) != 0;
|
inet->is_icsk = (INET_PROTOSW_ICSK & answer_flags) != 0;
|
||||||
|
|
||||||
if (SOCK_RAW == sock->type) {
|
if (SOCK_RAW == sock->type) {
|
||||||
inet->num = protocol;
|
inet->inet_num = protocol;
|
||||||
if (IPPROTO_RAW == protocol)
|
if (IPPROTO_RAW == protocol)
|
||||||
inet->hdrincl = 1;
|
inet->hdrincl = 1;
|
||||||
}
|
}
|
||||||
|
@ -228,12 +228,12 @@ lookup_protocol:
|
||||||
*/
|
*/
|
||||||
sk_refcnt_debug_inc(sk);
|
sk_refcnt_debug_inc(sk);
|
||||||
|
|
||||||
if (inet->num) {
|
if (inet->inet_num) {
|
||||||
/* It assumes that any protocol which allows
|
/* It assumes that any protocol which allows
|
||||||
* the user to assign a number at socket
|
* the user to assign a number at socket
|
||||||
* creation time automatically shares.
|
* creation time automatically shares.
|
||||||
*/
|
*/
|
||||||
inet->sport = htons(inet->num);
|
inet->inet_sport = htons(inet->inet_num);
|
||||||
sk->sk_prot->hash(sk);
|
sk->sk_prot->hash(sk);
|
||||||
}
|
}
|
||||||
if (sk->sk_prot->init) {
|
if (sk->sk_prot->init) {
|
||||||
|
@ -281,7 +281,7 @@ int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
||||||
lock_sock(sk);
|
lock_sock(sk);
|
||||||
|
|
||||||
/* Check these errors (active socket, double bind). */
|
/* 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;
|
err = -EINVAL;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -353,8 +353,8 @@ int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inet->rcv_saddr = v4addr;
|
inet->inet_rcv_saddr = v4addr;
|
||||||
inet->saddr = v4addr;
|
inet->inet_saddr = v4addr;
|
||||||
|
|
||||||
ipv6_addr_copy(&np->rcv_saddr, &addr->sin6_addr);
|
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)
|
if (snum)
|
||||||
sk->sk_userlocks |= SOCK_BINDPORT_LOCK;
|
sk->sk_userlocks |= SOCK_BINDPORT_LOCK;
|
||||||
inet->sport = htons(inet->num);
|
inet->inet_sport = htons(inet->inet_num);
|
||||||
inet->dport = 0;
|
inet->inet_dport = 0;
|
||||||
inet->daddr = 0;
|
inet->inet_daddr = 0;
|
||||||
out:
|
out:
|
||||||
release_sock(sk);
|
release_sock(sk);
|
||||||
return err;
|
return err;
|
||||||
|
@ -441,12 +441,12 @@ int inet6_getname(struct socket *sock, struct sockaddr *uaddr,
|
||||||
sin->sin6_flowinfo = 0;
|
sin->sin6_flowinfo = 0;
|
||||||
sin->sin6_scope_id = 0;
|
sin->sin6_scope_id = 0;
|
||||||
if (peer) {
|
if (peer) {
|
||||||
if (!inet->dport)
|
if (!inet->inet_dport)
|
||||||
return -ENOTCONN;
|
return -ENOTCONN;
|
||||||
if (((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_SYN_SENT)) &&
|
if (((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_SYN_SENT)) &&
|
||||||
peer == 1)
|
peer == 1)
|
||||||
return -ENOTCONN;
|
return -ENOTCONN;
|
||||||
sin->sin6_port = inet->dport;
|
sin->sin6_port = inet->inet_dport;
|
||||||
ipv6_addr_copy(&sin->sin6_addr, &np->daddr);
|
ipv6_addr_copy(&sin->sin6_addr, &np->daddr);
|
||||||
if (np->sndflow)
|
if (np->sndflow)
|
||||||
sin->sin6_flowinfo = np->flow_label;
|
sin->sin6_flowinfo = np->flow_label;
|
||||||
|
@ -456,7 +456,7 @@ int inet6_getname(struct socket *sock, struct sockaddr *uaddr,
|
||||||
else
|
else
|
||||||
ipv6_addr_copy(&sin->sin6_addr, &np->rcv_saddr);
|
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)
|
if (ipv6_addr_type(&sin->sin6_addr) & IPV6_ADDR_LINKLOCAL)
|
||||||
sin->sin6_scope_id = sk->sk_bound_dev_if;
|
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.fl6_flowlabel = np->flow_label;
|
||||||
fl.oif = sk->sk_bound_dev_if;
|
fl.oif = sk->sk_bound_dev_if;
|
||||||
fl.mark = sk->sk_mark;
|
fl.mark = sk->sk_mark;
|
||||||
fl.fl_ip_dport = inet->dport;
|
fl.fl_ip_dport = inet->inet_dport;
|
||||||
fl.fl_ip_sport = inet->sport;
|
fl.fl_ip_sport = inet->inet_sport;
|
||||||
security_sk_classify_flow(sk, &fl);
|
security_sk_classify_flow(sk, &fl);
|
||||||
|
|
||||||
if (np->opt && np->opt->srcrt) {
|
if (np->opt && np->opt->srcrt) {
|
||||||
|
|
|
@ -98,13 +98,14 @@ ipv4_connected:
|
||||||
if (err)
|
if (err)
|
||||||
goto out;
|
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))
|
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))
|
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;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -133,7 +134,7 @@ ipv4_connected:
|
||||||
ipv6_addr_copy(&np->daddr, daddr);
|
ipv6_addr_copy(&np->daddr, daddr);
|
||||||
np->flow_label = fl.fl6_flowlabel;
|
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
|
* Check for a route to destination an obtain the
|
||||||
|
@ -145,8 +146,8 @@ ipv4_connected:
|
||||||
ipv6_addr_copy(&fl.fl6_src, &np->saddr);
|
ipv6_addr_copy(&fl.fl6_src, &np->saddr);
|
||||||
fl.oif = sk->sk_bound_dev_if;
|
fl.oif = sk->sk_bound_dev_if;
|
||||||
fl.mark = sk->sk_mark;
|
fl.mark = sk->sk_mark;
|
||||||
fl.fl_ip_dport = inet->dport;
|
fl.fl_ip_dport = inet->inet_dport;
|
||||||
fl.fl_ip_sport = inet->sport;
|
fl.fl_ip_sport = inet->inet_sport;
|
||||||
|
|
||||||
if (!fl.oif && (addr_type&IPV6_ADDR_MULTICAST))
|
if (!fl.oif && (addr_type&IPV6_ADDR_MULTICAST))
|
||||||
fl.oif = np->mcast_oif;
|
fl.oif = np->mcast_oif;
|
||||||
|
@ -188,7 +189,7 @@ ipv4_connected:
|
||||||
|
|
||||||
if (ipv6_addr_any(&np->rcv_saddr)) {
|
if (ipv6_addr_any(&np->rcv_saddr)) {
|
||||||
ipv6_addr_copy(&np->rcv_saddr, &fl.fl6_src);
|
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,
|
ip6_dst_store(sk, dst,
|
||||||
|
|
|
@ -132,7 +132,7 @@ void inet6_csk_addr2sockaddr(struct sock *sk, struct sockaddr * uaddr)
|
||||||
|
|
||||||
sin6->sin6_family = AF_INET6;
|
sin6->sin6_family = AF_INET6;
|
||||||
ipv6_addr_copy(&sin6->sin6_addr, &np->daddr);
|
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 */
|
/* We do not store received flowlabel for TCP */
|
||||||
sin6->sin6_flowinfo = 0;
|
sin6->sin6_flowinfo = 0;
|
||||||
sin6->sin6_scope_id = 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);
|
IP6_ECN_flow_xmit(sk, fl.fl6_flowlabel);
|
||||||
fl.oif = sk->sk_bound_dev_if;
|
fl.oif = sk->sk_bound_dev_if;
|
||||||
fl.mark = sk->sk_mark;
|
fl.mark = sk->sk_mark;
|
||||||
fl.fl_ip_sport = inet->sport;
|
fl.fl_ip_sport = inet->inet_sport;
|
||||||
fl.fl_ip_dport = inet->dport;
|
fl.fl_ip_dport = inet->inet_dport;
|
||||||
security_sk_classify_flow(sk, &fl);
|
security_sk_classify_flow(sk, &fl);
|
||||||
|
|
||||||
if (np->opt && np->opt->srcrt) {
|
if (np->opt && np->opt->srcrt) {
|
||||||
|
|
|
@ -125,7 +125,7 @@ static int inline compute_score(struct sock *sk, struct net *net,
|
||||||
{
|
{
|
||||||
int score = -1;
|
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) {
|
sk->sk_family == PF_INET6) {
|
||||||
const struct ipv6_pinfo *np = inet6_sk(sk);
|
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 *daddr = &np->rcv_saddr;
|
||||||
const struct in6_addr *saddr = &np->daddr;
|
const struct in6_addr *saddr = &np->daddr;
|
||||||
const int dif = sk->sk_bound_dev_if;
|
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);
|
struct net *net = sock_net(sk);
|
||||||
const unsigned int hash = inet6_ehashfn(net, daddr, lport, saddr,
|
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);
|
struct inet_ehash_bucket *head = inet_ehash_bucket(hinfo, hash);
|
||||||
spinlock_t *lock = inet_ehash_lockp(hinfo, hash);
|
spinlock_t *lock = inet_ehash_lockp(hinfo, hash);
|
||||||
struct sock *sk2;
|
struct sock *sk2;
|
||||||
|
@ -248,8 +248,8 @@ static int __inet6_check_established(struct inet_timewait_death_row *death_row,
|
||||||
unique:
|
unique:
|
||||||
/* Must record num and sport now. Otherwise we will see
|
/* Must record num and sport now. Otherwise we will see
|
||||||
* in hash table socket with a funny identity. */
|
* in hash table socket with a funny identity. */
|
||||||
inet->num = lport;
|
inet->inet_num = lport;
|
||||||
inet->sport = htons(lport);
|
inet->inet_sport = htons(lport);
|
||||||
WARN_ON(!sk_unhashed(sk));
|
WARN_ON(!sk_unhashed(sk));
|
||||||
__sk_nulls_add_node_rcu(sk, &head->chain);
|
__sk_nulls_add_node_rcu(sk, &head->chain);
|
||||||
sk->sk_hash = hash;
|
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);
|
const struct ipv6_pinfo *np = inet6_sk(sk);
|
||||||
return secure_ipv6_port_ephemeral(np->rcv_saddr.s6_addr32,
|
return secure_ipv6_port_ephemeral(np->rcv_saddr.s6_addr32,
|
||||||
np->daddr.s6_addr32,
|
np->daddr.s6_addr32,
|
||||||
inet->dport);
|
inet->inet_dport);
|
||||||
}
|
}
|
||||||
|
|
||||||
int inet6_hash_connect(struct inet_timewait_death_row *death_row,
|
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) {
|
switch (optname) {
|
||||||
case MRT6_INIT:
|
case MRT6_INIT:
|
||||||
if (sk->sk_type != SOCK_RAW ||
|
if (sk->sk_type != SOCK_RAW ||
|
||||||
inet_sk(sk)->num != IPPROTO_ICMPV6)
|
inet_sk(sk)->inet_num != IPPROTO_ICMPV6)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
if (optlen < sizeof(int))
|
if (optlen < sizeof(int))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
|
@ -64,7 +64,7 @@ int ip6_ra_control(struct sock *sk, int sel)
|
||||||
struct ip6_ra_chain *ra, *new_ra, **rap;
|
struct ip6_ra_chain *ra, *new_ra, **rap;
|
||||||
|
|
||||||
/* RA packet may be delivered ONLY to IPPROTO_RAW socket */
|
/* 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;
|
return -ENOPROTOOPT;
|
||||||
|
|
||||||
new_ra = (sel>=0) ? kmalloc(sizeof(*new_ra), GFP_KERNEL) : NULL;
|
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 (inet_sk(sk)->is_icsk) {
|
||||||
if (opt &&
|
if (opt &&
|
||||||
!((1 << sk->sk_state) & (TCPF_LISTEN | TCPF_CLOSE)) &&
|
!((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);
|
struct inet_connection_sock *icsk = inet_csk(sk);
|
||||||
icsk->icsk_ext_hdr_len = opt->opt_flen + opt->opt_nflen;
|
icsk->icsk_ext_hdr_len = opt->opt_flen + opt->opt_nflen;
|
||||||
icsk->icsk_sync_mss(sk, icsk->icsk_pmtu_cookie);
|
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:
|
case IPV6_V6ONLY:
|
||||||
if (optlen < sizeof(int) ||
|
if (optlen < sizeof(int) ||
|
||||||
inet_sk(sk)->num)
|
inet_sk(sk)->inet_num)
|
||||||
goto e_inval;
|
goto e_inval;
|
||||||
np->ipv6only = valbool;
|
np->ipv6only = valbool;
|
||||||
retv = 0;
|
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);
|
int is_multicast = ipv6_addr_is_multicast(loc_addr);
|
||||||
|
|
||||||
sk_for_each_from(sk, node)
|
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);
|
struct ipv6_pinfo *np = inet6_sk(sk);
|
||||||
|
|
||||||
if (!net_eq(sock_net(sk), net))
|
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);
|
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);
|
ipv6_addr_copy(&np->rcv_saddr, &addr->sin6_addr);
|
||||||
if (!(addr_type & IPV6_ADDR_MULTICAST))
|
if (!(addr_type & IPV6_ADDR_MULTICAST))
|
||||||
ipv6_addr_copy(&np->saddr, &addr->sin6_addr);
|
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));
|
skb_network_header_len(skb));
|
||||||
if (!csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
|
if (!csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
|
||||||
&ipv6_hdr(skb)->daddr,
|
&ipv6_hdr(skb)->daddr,
|
||||||
skb->len, inet->num, skb->csum))
|
skb->len, inet->inet_num, skb->csum))
|
||||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||||
}
|
}
|
||||||
if (!skb_csum_unnecessary(skb))
|
if (!skb_csum_unnecessary(skb))
|
||||||
skb->csum = ~csum_unfold(csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
|
skb->csum = ~csum_unfold(csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
|
||||||
&ipv6_hdr(skb)->daddr,
|
&ipv6_hdr(skb)->daddr,
|
||||||
skb->len,
|
skb->len,
|
||||||
inet->num, 0));
|
inet->inet_num, 0));
|
||||||
|
|
||||||
if (inet->hdrincl) {
|
if (inet->hdrincl) {
|
||||||
if (skb_checksum_complete(skb)) {
|
if (skb_checksum_complete(skb)) {
|
||||||
|
@ -765,8 +765,8 @@ static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk,
|
||||||
proto = ntohs(sin6->sin6_port);
|
proto = ntohs(sin6->sin6_port);
|
||||||
|
|
||||||
if (!proto)
|
if (!proto)
|
||||||
proto = inet->num;
|
proto = inet->inet_num;
|
||||||
else if (proto != inet->num)
|
else if (proto != inet->inet_num)
|
||||||
return(-EINVAL);
|
return(-EINVAL);
|
||||||
|
|
||||||
if (proto > 255)
|
if (proto > 255)
|
||||||
|
@ -799,7 +799,7 @@ static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk,
|
||||||
if (sk->sk_state != TCP_ESTABLISHED)
|
if (sk->sk_state != TCP_ESTABLISHED)
|
||||||
return -EDESTADDRREQ;
|
return -EDESTADDRREQ;
|
||||||
|
|
||||||
proto = inet->num;
|
proto = inet->inet_num;
|
||||||
daddr = &np->daddr;
|
daddr = &np->daddr;
|
||||||
fl.fl6_flowlabel = np->flow_label;
|
fl.fl6_flowlabel = np->flow_label;
|
||||||
}
|
}
|
||||||
|
@ -966,7 +966,7 @@ static int do_rawv6_setsockopt(struct sock *sk, int level, int optname,
|
||||||
|
|
||||||
switch (optname) {
|
switch (optname) {
|
||||||
case IPV6_CHECKSUM:
|
case IPV6_CHECKSUM:
|
||||||
if (inet_sk(sk)->num == IPPROTO_ICMPV6 &&
|
if (inet_sk(sk)->inet_num == IPPROTO_ICMPV6 &&
|
||||||
level == IPPROTO_IPV6) {
|
level == IPPROTO_IPV6) {
|
||||||
/*
|
/*
|
||||||
* RFC3542 tells that IPV6_CHECKSUM socket
|
* RFC3542 tells that IPV6_CHECKSUM socket
|
||||||
|
@ -1006,7 +1006,7 @@ static int rawv6_setsockopt(struct sock *sk, int level, int optname,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SOL_ICMPV6:
|
case SOL_ICMPV6:
|
||||||
if (inet_sk(sk)->num != IPPROTO_ICMPV6)
|
if (inet_sk(sk)->inet_num != IPPROTO_ICMPV6)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
return rawv6_seticmpfilter(sk, level, optname, optval,
|
return rawv6_seticmpfilter(sk, level, optname, optval,
|
||||||
optlen);
|
optlen);
|
||||||
|
@ -1029,7 +1029,7 @@ static int compat_rawv6_setsockopt(struct sock *sk, int level, int optname,
|
||||||
case SOL_RAW:
|
case SOL_RAW:
|
||||||
break;
|
break;
|
||||||
case SOL_ICMPV6:
|
case SOL_ICMPV6:
|
||||||
if (inet_sk(sk)->num != IPPROTO_ICMPV6)
|
if (inet_sk(sk)->inet_num != IPPROTO_ICMPV6)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
return rawv6_seticmpfilter(sk, level, optname, optval, optlen);
|
return rawv6_seticmpfilter(sk, level, optname, optval, optlen);
|
||||||
case SOL_IPV6:
|
case SOL_IPV6:
|
||||||
|
@ -1086,7 +1086,7 @@ static int rawv6_getsockopt(struct sock *sk, int level, int optname,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SOL_ICMPV6:
|
case SOL_ICMPV6:
|
||||||
if (inet_sk(sk)->num != IPPROTO_ICMPV6)
|
if (inet_sk(sk)->inet_num != IPPROTO_ICMPV6)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
return rawv6_geticmpfilter(sk, level, optname, optval,
|
return rawv6_geticmpfilter(sk, level, optname, optval,
|
||||||
optlen);
|
optlen);
|
||||||
|
@ -1109,7 +1109,7 @@ static int compat_rawv6_getsockopt(struct sock *sk, int level, int optname,
|
||||||
case SOL_RAW:
|
case SOL_RAW:
|
||||||
break;
|
break;
|
||||||
case SOL_ICMPV6:
|
case SOL_ICMPV6:
|
||||||
if (inet_sk(sk)->num != IPPROTO_ICMPV6)
|
if (inet_sk(sk)->inet_num != IPPROTO_ICMPV6)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
return rawv6_geticmpfilter(sk, level, optname, optval, optlen);
|
return rawv6_geticmpfilter(sk, level, optname, optval, optlen);
|
||||||
case SOL_IPV6:
|
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)
|
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);
|
ip6_ra_control(sk, -1);
|
||||||
ip6mr_sk_done(sk);
|
ip6mr_sk_done(sk);
|
||||||
sk_common_release(sk);
|
sk_common_release(sk);
|
||||||
|
@ -1175,7 +1175,7 @@ static int rawv6_init_sk(struct sock *sk)
|
||||||
{
|
{
|
||||||
struct raw6_sock *rp = raw6_sk(sk);
|
struct raw6_sock *rp = raw6_sk(sk);
|
||||||
|
|
||||||
switch (inet_sk(sk)->num) {
|
switch (inet_sk(sk)->inet_num) {
|
||||||
case IPPROTO_ICMPV6:
|
case IPPROTO_ICMPV6:
|
||||||
rp->checksum = 1;
|
rp->checksum = 1;
|
||||||
rp->offset = 2;
|
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;
|
dest = &np->daddr;
|
||||||
src = &np->rcv_saddr;
|
src = &np->rcv_saddr;
|
||||||
destp = 0;
|
destp = 0;
|
||||||
srcp = inet_sk(sp)->num;
|
srcp = inet_sk(sp)->inet_num;
|
||||||
seq_printf(seq,
|
seq_printf(seq,
|
||||||
"%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
|
"%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
|
||||||
"%02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p %d\n",
|
"%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.oif = sk->sk_bound_dev_if;
|
||||||
fl.mark = sk->sk_mark;
|
fl.mark = sk->sk_mark;
|
||||||
fl.fl_ip_dport = inet_rsk(req)->rmt_port;
|
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);
|
security_req_classify_flow(req, &fl);
|
||||||
if (ip6_dst_lookup(sk, &dst, &fl))
|
if (ip6_dst_lookup(sk, &dst, &fl))
|
||||||
goto out_free;
|
goto out_free;
|
||||||
|
|
|
@ -226,8 +226,9 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||||
#endif
|
#endif
|
||||||
goto failure;
|
goto failure;
|
||||||
} else {
|
} else {
|
||||||
ipv6_addr_set_v4mapped(inet->saddr, &np->saddr);
|
ipv6_addr_set_v4mapped(inet->inet_saddr, &np->saddr);
|
||||||
ipv6_addr_set_v4mapped(inet->rcv_saddr, &np->rcv_saddr);
|
ipv6_addr_set_v4mapped(inet->inet_rcv_saddr,
|
||||||
|
&np->rcv_saddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
return err;
|
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.oif = sk->sk_bound_dev_if;
|
||||||
fl.mark = sk->sk_mark;
|
fl.mark = sk->sk_mark;
|
||||||
fl.fl_ip_dport = usin->sin6_port;
|
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) {
|
if (np->opt && np->opt->srcrt) {
|
||||||
struct rt0_hdr *rt0 = (struct rt0_hdr *)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 */
|
/* set the source address */
|
||||||
ipv6_addr_copy(&np->saddr, saddr);
|
ipv6_addr_copy(&np->saddr, saddr);
|
||||||
inet->rcv_saddr = LOOPBACK4_IPV6;
|
inet->inet_rcv_saddr = LOOPBACK4_IPV6;
|
||||||
|
|
||||||
sk->sk_gso_type = SKB_GSO_TCPV6;
|
sk->sk_gso_type = SKB_GSO_TCPV6;
|
||||||
__ip6_dst_store(sk, dst, NULL, NULL);
|
__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);
|
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);
|
tcp_set_state(sk, TCP_SYN_SENT);
|
||||||
err = inet6_hash_connect(&tcp_death_row, sk);
|
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)
|
if (!tp->write_seq)
|
||||||
tp->write_seq = secure_tcpv6_sequence_number(np->saddr.s6_addr32,
|
tp->write_seq = secure_tcpv6_sequence_number(np->saddr.s6_addr32,
|
||||||
np->daddr.s6_addr32,
|
np->daddr.s6_addr32,
|
||||||
inet->sport,
|
inet->inet_sport,
|
||||||
inet->dport);
|
inet->inet_dport);
|
||||||
|
|
||||||
err = tcp_connect(sk);
|
err = tcp_connect(sk);
|
||||||
if (err)
|
if (err)
|
||||||
|
@ -310,7 +311,7 @@ late_failure:
|
||||||
tcp_set_state(sk, TCP_CLOSE);
|
tcp_set_state(sk, TCP_CLOSE);
|
||||||
__sk_dst_reset(sk);
|
__sk_dst_reset(sk);
|
||||||
failure:
|
failure:
|
||||||
inet->dport = 0;
|
inet->inet_dport = 0;
|
||||||
sk->sk_route_caps = 0;
|
sk->sk_route_caps = 0;
|
||||||
return err;
|
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);
|
ipv6_addr_copy(&fl.fl6_src, &np->saddr);
|
||||||
fl.oif = sk->sk_bound_dev_if;
|
fl.oif = sk->sk_bound_dev_if;
|
||||||
fl.mark = sk->sk_mark;
|
fl.mark = sk->sk_mark;
|
||||||
fl.fl_ip_dport = inet->dport;
|
fl.fl_ip_dport = inet->inet_dport;
|
||||||
fl.fl_ip_sport = inet->sport;
|
fl.fl_ip_sport = inet->inet_sport;
|
||||||
security_skb_classify_flow(skb, &fl);
|
security_skb_classify_flow(skb, &fl);
|
||||||
|
|
||||||
if ((err = ip6_dst_lookup(sk, &dst, &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));
|
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);
|
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);
|
newtp->advmss = dst_metric(dst, RTAX_ADVMSS);
|
||||||
tcp_initialize_rcv_mss(newsk);
|
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
|
#ifdef CONFIG_TCP_MD5SIG
|
||||||
/* Copy over the MD5 key from the original socket */
|
/* 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;
|
dest = &np->daddr;
|
||||||
src = &np->rcv_saddr;
|
src = &np->rcv_saddr;
|
||||||
destp = ntohs(inet->dport);
|
destp = ntohs(inet->inet_dport);
|
||||||
srcp = ntohs(inet->sport);
|
srcp = ntohs(inet->inet_sport);
|
||||||
|
|
||||||
if (icsk->icsk_pending == ICSK_TIME_RETRANS) {
|
if (icsk->icsk_pending == ICSK_TIME_RETRANS) {
|
||||||
timer_active = 1;
|
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 *sk_rcv_saddr6 = &inet6_sk(sk)->rcv_saddr;
|
||||||
const struct in6_addr *sk2_rcv_saddr6 = inet6_rcv_saddr(sk2);
|
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);
|
__be32 sk2_rcv_saddr = inet_rcv_saddr(sk2);
|
||||||
int sk_ipv6only = ipv6_only_sock(sk);
|
int sk_ipv6only = ipv6_only_sock(sk);
|
||||||
int sk2_ipv6only = inet_v6_ipv6only(sk2);
|
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 both are mapped, treat as IPv4 */
|
||||||
if (addr_type == IPV6_ADDR_MAPPED && addr_type2 == IPV6_ADDR_MAPPED)
|
if (addr_type == IPV6_ADDR_MAPPED && addr_type2 == IPV6_ADDR_MAPPED)
|
||||||
return (!sk2_ipv6only &&
|
return (!sk2_ipv6only &&
|
||||||
(!sk_rcv_saddr || !sk2_rcv_saddr ||
|
(!sk1_rcv_saddr || !sk2_rcv_saddr ||
|
||||||
sk_rcv_saddr == sk2_rcv_saddr));
|
sk1_rcv_saddr == sk2_rcv_saddr));
|
||||||
|
|
||||||
if (addr_type2 == IPV6_ADDR_ANY &&
|
if (addr_type2 == IPV6_ADDR_ANY &&
|
||||||
!(sk2_ipv6only && addr_type == IPV6_ADDR_MAPPED))
|
!(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);
|
struct inet_sock *inet = inet_sk(sk);
|
||||||
|
|
||||||
score = 0;
|
score = 0;
|
||||||
if (inet->dport) {
|
if (inet->inet_dport) {
|
||||||
if (inet->dport != sport)
|
if (inet->inet_dport != sport)
|
||||||
return -1;
|
return -1;
|
||||||
score++;
|
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) {
|
if (s->sk_hash == num && s->sk_family == PF_INET6) {
|
||||||
struct ipv6_pinfo *np = inet6_sk(s);
|
struct ipv6_pinfo *np = inet6_sk(s);
|
||||||
if (inet->dport) {
|
if (inet->inet_dport) {
|
||||||
if (inet->dport != rmt_port)
|
if (inet->inet_dport != rmt_port)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!ipv6_addr_any(&np->daddr) &&
|
if (!ipv6_addr_any(&np->daddr) &&
|
||||||
|
@ -792,7 +792,7 @@ int udpv6_sendmsg(struct kiocb *iocb, struct sock *sk,
|
||||||
if (ipv6_addr_v4mapped(daddr)) {
|
if (ipv6_addr_v4mapped(daddr)) {
|
||||||
struct sockaddr_in sin;
|
struct sockaddr_in sin;
|
||||||
sin.sin_family = AF_INET;
|
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];
|
sin.sin_addr.s_addr = daddr->s6_addr32[3];
|
||||||
msg->msg_name = &sin;
|
msg->msg_name = &sin;
|
||||||
msg->msg_namelen = sizeof(sin);
|
msg->msg_namelen = sizeof(sin);
|
||||||
|
@ -865,7 +865,7 @@ do_udp_sendmsg:
|
||||||
if (sk->sk_state != TCP_ESTABLISHED)
|
if (sk->sk_state != TCP_ESTABLISHED)
|
||||||
return -EDESTADDRREQ;
|
return -EDESTADDRREQ;
|
||||||
|
|
||||||
fl.fl_ip_dport = inet->dport;
|
fl.fl_ip_dport = inet->inet_dport;
|
||||||
daddr = &np->daddr;
|
daddr = &np->daddr;
|
||||||
fl.fl6_flowlabel = np->flow_label;
|
fl.fl6_flowlabel = np->flow_label;
|
||||||
connected = 1;
|
connected = 1;
|
||||||
|
@ -911,7 +911,7 @@ do_udp_sendmsg:
|
||||||
fl.fl6_dst.s6_addr[15] = 0x1; /* :: means loopback (BSD'ism) */
|
fl.fl6_dst.s6_addr[15] = 0x1; /* :: means loopback (BSD'ism) */
|
||||||
if (ipv6_addr_any(&fl.fl6_src) && !ipv6_addr_any(&np->saddr))
|
if (ipv6_addr_any(&fl.fl6_src) && !ipv6_addr_any(&np->saddr))
|
||||||
ipv6_addr_copy(&fl.fl6_src, &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 */
|
/* merge ip6_build_xmit from ip6_output */
|
||||||
if (opt && opt->srcrt) {
|
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;
|
dest = &np->daddr;
|
||||||
src = &np->rcv_saddr;
|
src = &np->rcv_saddr;
|
||||||
destp = ntohs(inet->dport);
|
destp = ntohs(inet->inet_dport);
|
||||||
srcp = ntohs(inet->sport);
|
srcp = ntohs(inet->inet_sport);
|
||||||
seq_printf(seq,
|
seq_printf(seq,
|
||||||
"%5d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
|
"%5d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
|
||||||
"%02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p %d\n",
|
"%02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p %d\n",
|
||||||
|
|
|
@ -149,7 +149,7 @@ socket_match(const struct sk_buff *skb, const struct xt_match_param *par,
|
||||||
|
|
||||||
/* Ignore sockets listening on INADDR_ANY */
|
/* Ignore sockets listening on INADDR_ANY */
|
||||||
wildcard = (sk->sk_state != TCP_TIME_WAIT &&
|
wildcard = (sk->sk_state != TCP_TIME_WAIT &&
|
||||||
inet_sk(sk)->rcv_saddr == 0);
|
inet_sk(sk)->inet_rcv_saddr == 0);
|
||||||
|
|
||||||
/* Ignore non-transparent sockets,
|
/* Ignore non-transparent sockets,
|
||||||
if XT_SOCKET_TRANSPARENT is used */
|
if XT_SOCKET_TRANSPARENT is used */
|
||||||
|
|
|
@ -67,11 +67,11 @@ static int rds_tcp_accept_one(struct socket *sock)
|
||||||
inet = inet_sk(new_sock->sk);
|
inet = inet_sk(new_sock->sk);
|
||||||
|
|
||||||
rdsdebug("accepted tcp %u.%u.%u.%u:%u -> %u.%u.%u.%u:%u\n",
|
rdsdebug("accepted tcp %u.%u.%u.%u:%u -> %u.%u.%u.%u:%u\n",
|
||||||
NIPQUAD(inet->saddr), ntohs(inet->sport),
|
NIPQUAD(inet->inet_saddr), ntohs(inet->inet_sport),
|
||||||
NIPQUAD(inet->daddr), ntohs(inet->dport));
|
NIPQUAD(inet->inet_daddr), ntohs(inet->inet_dport));
|
||||||
|
|
||||||
conn = rds_conn_create(inet->saddr, inet->daddr, &rds_tcp_transport,
|
conn = rds_conn_create(inet->inet_saddr, inet->inet_daddr,
|
||||||
GFP_KERNEL);
|
&rds_tcp_transport, GFP_KERNEL);
|
||||||
if (IS_ERR(conn)) {
|
if (IS_ERR(conn)) {
|
||||||
ret = PTR_ERR(conn);
|
ret = PTR_ERR(conn);
|
||||||
goto out;
|
goto out;
|
||||||
|
|
|
@ -296,19 +296,19 @@ static void sctp_v4_from_sk(union sctp_addr *addr, struct sock *sk)
|
||||||
{
|
{
|
||||||
addr->v4.sin_family = AF_INET;
|
addr->v4.sin_family = AF_INET;
|
||||||
addr->v4.sin_port = 0;
|
addr->v4.sin_port = 0;
|
||||||
addr->v4.sin_addr.s_addr = inet_sk(sk)->rcv_saddr;
|
addr->v4.sin_addr.s_addr = inet_sk(sk)->inet_rcv_saddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize sk->sk_rcv_saddr from sctp_addr. */
|
/* Initialize sk->sk_rcv_saddr from sctp_addr. */
|
||||||
static void sctp_v4_to_sk_saddr(union sctp_addr *addr, struct sock *sk)
|
static void sctp_v4_to_sk_saddr(union sctp_addr *addr, struct sock *sk)
|
||||||
{
|
{
|
||||||
inet_sk(sk)->rcv_saddr = addr->v4.sin_addr.s_addr;
|
inet_sk(sk)->inet_rcv_saddr = addr->v4.sin_addr.s_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize sk->sk_daddr from sctp_addr. */
|
/* Initialize sk->sk_daddr from sctp_addr. */
|
||||||
static void sctp_v4_to_sk_daddr(union sctp_addr *addr, struct sock *sk)
|
static void sctp_v4_to_sk_daddr(union sctp_addr *addr, struct sock *sk)
|
||||||
{
|
{
|
||||||
inet_sk(sk)->daddr = addr->v4.sin_addr.s_addr;
|
inet_sk(sk)->inet_daddr = addr->v4.sin_addr.s_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize a sctp_addr from an address parameter. */
|
/* Initialize a sctp_addr from an address parameter. */
|
||||||
|
@ -598,7 +598,7 @@ static struct sock *sctp_v4_create_accept_sk(struct sock *sk,
|
||||||
|
|
||||||
newinet = inet_sk(newsk);
|
newinet = inet_sk(newsk);
|
||||||
|
|
||||||
newinet->daddr = asoc->peer.primary_addr.v4.sin_addr.s_addr;
|
newinet->inet_daddr = asoc->peer.primary_addr.v4.sin_addr.s_addr;
|
||||||
|
|
||||||
sk_refcnt_debug_inc(newsk);
|
sk_refcnt_debug_inc(newsk);
|
||||||
|
|
||||||
|
|
|
@ -394,7 +394,7 @@ SCTP_STATIC int sctp_do_bind(struct sock *sk, union sctp_addr *addr, int len)
|
||||||
|
|
||||||
/* Refresh ephemeral port. */
|
/* Refresh ephemeral port. */
|
||||||
if (!bp->port)
|
if (!bp->port)
|
||||||
bp->port = inet_sk(sk)->num;
|
bp->port = inet_sk(sk)->inet_num;
|
||||||
|
|
||||||
/* Add the address to the bind address list.
|
/* Add the address to the bind address list.
|
||||||
* Use GFP_ATOMIC since BHs will be disabled.
|
* Use GFP_ATOMIC since BHs will be disabled.
|
||||||
|
@ -403,7 +403,7 @@ SCTP_STATIC int sctp_do_bind(struct sock *sk, union sctp_addr *addr, int len)
|
||||||
|
|
||||||
/* Copy back into socket for getsockname() use. */
|
/* Copy back into socket for getsockname() use. */
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
inet_sk(sk)->sport = htons(inet_sk(sk)->num);
|
inet_sk(sk)->inet_sport = htons(inet_sk(sk)->inet_num);
|
||||||
af->to_sk_saddr(addr, sk);
|
af->to_sk_saddr(addr, sk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1115,7 +1115,7 @@ static int __sctp_connect(struct sock* sk,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize sk's dport and daddr for getpeername() */
|
/* Initialize sk's dport and daddr for getpeername() */
|
||||||
inet_sk(sk)->dport = htons(asoc->peer.port);
|
inet_sk(sk)->inet_dport = htons(asoc->peer.port);
|
||||||
af = sctp_get_af_specific(sa_addr->sa.sa_family);
|
af = sctp_get_af_specific(sa_addr->sa.sa_family);
|
||||||
af->to_sk_daddr(sa_addr, sk);
|
af->to_sk_daddr(sa_addr, sk);
|
||||||
sk->sk_err = 0;
|
sk->sk_err = 0;
|
||||||
|
@ -5851,7 +5851,7 @@ pp_not_found:
|
||||||
*/
|
*/
|
||||||
success:
|
success:
|
||||||
if (!sctp_sk(sk)->bind_hash) {
|
if (!sctp_sk(sk)->bind_hash) {
|
||||||
inet_sk(sk)->num = snum;
|
inet_sk(sk)->inet_num = snum;
|
||||||
sk_add_bind_node(sk, &pp->owner);
|
sk_add_bind_node(sk, &pp->owner);
|
||||||
sctp_sk(sk)->bind_hash = pp;
|
sctp_sk(sk)->bind_hash = pp;
|
||||||
}
|
}
|
||||||
|
@ -5923,7 +5923,7 @@ SCTP_STATIC int sctp_listen_start(struct sock *sk, int backlog)
|
||||||
if (sctp_autobind(sk))
|
if (sctp_autobind(sk))
|
||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
} else {
|
} else {
|
||||||
if (sctp_get_port(sk, inet_sk(sk)->num)) {
|
if (sctp_get_port(sk, inet_sk(sk)->inet_num)) {
|
||||||
sk->sk_state = SCTP_SS_CLOSED;
|
sk->sk_state = SCTP_SS_CLOSED;
|
||||||
return -EADDRINUSE;
|
return -EADDRINUSE;
|
||||||
}
|
}
|
||||||
|
@ -6094,14 +6094,14 @@ static void sctp_bucket_destroy(struct sctp_bind_bucket *pp)
|
||||||
static inline void __sctp_put_port(struct sock *sk)
|
static inline void __sctp_put_port(struct sock *sk)
|
||||||
{
|
{
|
||||||
struct sctp_bind_hashbucket *head =
|
struct sctp_bind_hashbucket *head =
|
||||||
&sctp_port_hashtable[sctp_phashfn(inet_sk(sk)->num)];
|
&sctp_port_hashtable[sctp_phashfn(inet_sk(sk)->inet_num)];
|
||||||
struct sctp_bind_bucket *pp;
|
struct sctp_bind_bucket *pp;
|
||||||
|
|
||||||
sctp_spin_lock(&head->lock);
|
sctp_spin_lock(&head->lock);
|
||||||
pp = sctp_sk(sk)->bind_hash;
|
pp = sctp_sk(sk)->bind_hash;
|
||||||
__sk_del_bind_node(sk);
|
__sk_del_bind_node(sk);
|
||||||
sctp_sk(sk)->bind_hash = NULL;
|
sctp_sk(sk)->bind_hash = NULL;
|
||||||
inet_sk(sk)->num = 0;
|
inet_sk(sk)->inet_num = 0;
|
||||||
sctp_bucket_destroy(pp);
|
sctp_bucket_destroy(pp);
|
||||||
sctp_spin_unlock(&head->lock);
|
sctp_spin_unlock(&head->lock);
|
||||||
}
|
}
|
||||||
|
@ -6128,7 +6128,7 @@ static int sctp_autobind(struct sock *sk)
|
||||||
/* Initialize a local sockaddr structure to INADDR_ANY. */
|
/* Initialize a local sockaddr structure to INADDR_ANY. */
|
||||||
af = sctp_sk(sk)->pf->af;
|
af = sctp_sk(sk)->pf->af;
|
||||||
|
|
||||||
port = htons(inet_sk(sk)->num);
|
port = htons(inet_sk(sk)->inet_num);
|
||||||
af->inaddr_any(&autoaddr, port);
|
af->inaddr_any(&autoaddr, port);
|
||||||
|
|
||||||
return sctp_do_bind(sk, &autoaddr, af->sockaddr_len);
|
return sctp_do_bind(sk, &autoaddr, af->sockaddr_len);
|
||||||
|
@ -6697,12 +6697,12 @@ void sctp_copy_sock(struct sock *newsk, struct sock *sk,
|
||||||
/* Initialize sk's sport, dport, rcv_saddr and daddr for
|
/* Initialize sk's sport, dport, rcv_saddr and daddr for
|
||||||
* getsockname() and getpeername()
|
* getsockname() and getpeername()
|
||||||
*/
|
*/
|
||||||
newinet->sport = inet->sport;
|
newinet->inet_sport = inet->inet_sport;
|
||||||
newinet->saddr = inet->saddr;
|
newinet->inet_saddr = inet->inet_saddr;
|
||||||
newinet->rcv_saddr = inet->rcv_saddr;
|
newinet->inet_rcv_saddr = inet->inet_rcv_saddr;
|
||||||
newinet->dport = htons(asoc->peer.port);
|
newinet->inet_dport = htons(asoc->peer.port);
|
||||||
newinet->pmtudisc = inet->pmtudisc;
|
newinet->pmtudisc = inet->pmtudisc;
|
||||||
newinet->id = asoc->next_tsn ^ jiffies;
|
newinet->inet_id = asoc->next_tsn ^ jiffies;
|
||||||
|
|
||||||
newinet->uc_ttl = inet->uc_ttl;
|
newinet->uc_ttl = inet->uc_ttl;
|
||||||
newinet->mc_loop = 1;
|
newinet->mc_loop = 1;
|
||||||
|
@ -6741,13 +6741,13 @@ static void sctp_sock_migrate(struct sock *oldsk, struct sock *newsk,
|
||||||
newsp->hmac = NULL;
|
newsp->hmac = NULL;
|
||||||
|
|
||||||
/* Hook this new socket in to the bind_hash list. */
|
/* Hook this new socket in to the bind_hash list. */
|
||||||
head = &sctp_port_hashtable[sctp_phashfn(inet_sk(oldsk)->num)];
|
head = &sctp_port_hashtable[sctp_phashfn(inet_sk(oldsk)->inet_num)];
|
||||||
sctp_local_bh_disable();
|
sctp_local_bh_disable();
|
||||||
sctp_spin_lock(&head->lock);
|
sctp_spin_lock(&head->lock);
|
||||||
pp = sctp_sk(oldsk)->bind_hash;
|
pp = sctp_sk(oldsk)->bind_hash;
|
||||||
sk_add_bind_node(newsk, &pp->owner);
|
sk_add_bind_node(newsk, &pp->owner);
|
||||||
sctp_sk(newsk)->bind_hash = pp;
|
sctp_sk(newsk)->bind_hash = pp;
|
||||||
inet_sk(newsk)->num = inet_sk(oldsk)->num;
|
inet_sk(newsk)->inet_num = inet_sk(oldsk)->inet_num;
|
||||||
sctp_spin_unlock(&head->lock);
|
sctp_spin_unlock(&head->lock);
|
||||||
sctp_local_bh_enable();
|
sctp_local_bh_enable();
|
||||||
|
|
||||||
|
|
|
@ -272,14 +272,14 @@ static int svc_one_sock_name(struct svc_sock *svsk, char *buf, int remaining)
|
||||||
case PF_INET:
|
case PF_INET:
|
||||||
len = snprintf(buf, remaining, "ipv4 %s %pI4 %d\n",
|
len = snprintf(buf, remaining, "ipv4 %s %pI4 %d\n",
|
||||||
proto_name,
|
proto_name,
|
||||||
&inet_sk(sk)->rcv_saddr,
|
&inet_sk(sk)->inet_rcv_saddr,
|
||||||
inet_sk(sk)->num);
|
inet_sk(sk)->inet_num);
|
||||||
break;
|
break;
|
||||||
case PF_INET6:
|
case PF_INET6:
|
||||||
len = snprintf(buf, remaining, "ipv6 %s %pI6 %d\n",
|
len = snprintf(buf, remaining, "ipv6 %s %pI6 %d\n",
|
||||||
proto_name,
|
proto_name,
|
||||||
&inet6_sk(sk)->rcv_saddr,
|
&inet6_sk(sk)->rcv_saddr,
|
||||||
inet_sk(sk)->num);
|
inet_sk(sk)->inet_num);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
len = snprintf(buf, remaining, "*unknown-%d*\n",
|
len = snprintf(buf, remaining, "*unknown-%d*\n",
|
||||||
|
@ -1311,7 +1311,7 @@ static struct svc_sock *svc_setup_socket(struct svc_serv *serv,
|
||||||
/* Register socket with portmapper */
|
/* Register socket with portmapper */
|
||||||
if (*errp >= 0 && pmap_register)
|
if (*errp >= 0 && pmap_register)
|
||||||
*errp = svc_register(serv, inet->sk_family, inet->sk_protocol,
|
*errp = svc_register(serv, inet->sk_family, inet->sk_protocol,
|
||||||
ntohs(inet_sk(inet)->sport));
|
ntohs(inet_sk(inet)->inet_sport));
|
||||||
|
|
||||||
if (*errp < 0) {
|
if (*errp < 0) {
|
||||||
kfree(svsk);
|
kfree(svsk);
|
||||||
|
|
|
@ -273,11 +273,11 @@ static void dump_common_audit_data(struct audit_buffer *ab,
|
||||||
case AF_INET: {
|
case AF_INET: {
|
||||||
struct inet_sock *inet = inet_sk(sk);
|
struct inet_sock *inet = inet_sk(sk);
|
||||||
|
|
||||||
print_ipv4_addr(ab, inet->rcv_saddr,
|
print_ipv4_addr(ab, inet->inet_rcv_saddr,
|
||||||
inet->sport,
|
inet->inet_sport,
|
||||||
"laddr", "lport");
|
"laddr", "lport");
|
||||||
print_ipv4_addr(ab, inet->daddr,
|
print_ipv4_addr(ab, inet->inet_daddr,
|
||||||
inet->dport,
|
inet->inet_dport,
|
||||||
"faddr", "fport");
|
"faddr", "fport");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -286,10 +286,10 @@ static void dump_common_audit_data(struct audit_buffer *ab,
|
||||||
struct ipv6_pinfo *inet6 = inet6_sk(sk);
|
struct ipv6_pinfo *inet6 = inet6_sk(sk);
|
||||||
|
|
||||||
print_ipv6_addr(ab, &inet6->rcv_saddr,
|
print_ipv6_addr(ab, &inet6->rcv_saddr,
|
||||||
inet->sport,
|
inet->inet_sport,
|
||||||
"laddr", "lport");
|
"laddr", "lport");
|
||||||
print_ipv6_addr(ab, &inet6->daddr,
|
print_ipv6_addr(ab, &inet6->daddr,
|
||||||
inet->dport,
|
inet->inet_dport,
|
||||||
"faddr", "fport");
|
"faddr", "fport");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue