[IPV6]: Introduce inet6_rsk()
And inet6_rsk_offset in inet_request_sock, for the same reasons as inet_sock's pinfo6 member. Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8129765ac0
commit
ca304b6104
|
@ -110,6 +110,10 @@ struct ip_options {
|
||||||
|
|
||||||
struct inet_request_sock {
|
struct inet_request_sock {
|
||||||
struct request_sock req;
|
struct request_sock req;
|
||||||
|
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
|
||||||
|
u16 inet6_rsk_offset;
|
||||||
|
/* 2 bytes hole, try to pack */
|
||||||
|
#endif
|
||||||
u32 loc_addr;
|
u32 loc_addr;
|
||||||
u32 rmt_addr;
|
u32 rmt_addr;
|
||||||
u16 rmt_port;
|
u16 rmt_port;
|
||||||
|
|
|
@ -199,18 +199,17 @@ static inline int inet6_iif(const struct sk_buff *skb)
|
||||||
return IP6CB(skb)->iif;
|
return IP6CB(skb)->iif;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct tcp6_request_sock {
|
struct inet6_request_sock {
|
||||||
struct tcp_request_sock req;
|
|
||||||
struct in6_addr loc_addr;
|
struct in6_addr loc_addr;
|
||||||
struct in6_addr rmt_addr;
|
struct in6_addr rmt_addr;
|
||||||
struct sk_buff *pktopts;
|
struct sk_buff *pktopts;
|
||||||
int iif;
|
int iif;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline struct tcp6_request_sock *tcp6_rsk(const struct request_sock *sk)
|
struct tcp6_request_sock {
|
||||||
{
|
struct tcp_request_sock tcp6rsk_tcp;
|
||||||
return (struct tcp6_request_sock *)sk;
|
struct inet6_request_sock tcp6rsk_inet6;
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct ipv6_pinfo - ipv6 private area
|
* struct ipv6_pinfo - ipv6 private area
|
||||||
|
@ -304,6 +303,28 @@ static inline struct ipv6_pinfo * inet6_sk(const struct sock *__sk)
|
||||||
return inet_sk(__sk)->pinet6;
|
return inet_sk(__sk)->pinet6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline struct inet6_request_sock *
|
||||||
|
inet6_rsk(const struct request_sock *rsk)
|
||||||
|
{
|
||||||
|
return (struct inet6_request_sock *)(((u8 *)rsk) +
|
||||||
|
inet_rsk(rsk)->inet6_rsk_offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline u32 inet6_rsk_offset(struct request_sock *rsk)
|
||||||
|
{
|
||||||
|
return rsk->rsk_ops->obj_size - sizeof(struct inet6_request_sock);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline struct request_sock *inet6_reqsk_alloc(struct request_sock_ops *ops)
|
||||||
|
{
|
||||||
|
struct request_sock *req = reqsk_alloc(ops);
|
||||||
|
|
||||||
|
if (req != NULL)
|
||||||
|
inet_rsk(req)->inet6_rsk_offset = inet6_rsk_offset(req);
|
||||||
|
|
||||||
|
return req;
|
||||||
|
}
|
||||||
|
|
||||||
static inline struct raw6_sock *raw6_sk(const struct sock *sk)
|
static inline struct raw6_sock *raw6_sk(const struct sock *sk)
|
||||||
{
|
{
|
||||||
return (struct raw6_sock *)sk;
|
return (struct raw6_sock *)sk;
|
||||||
|
@ -361,6 +382,12 @@ static inline struct ipv6_pinfo * inet6_sk(const struct sock *__sk)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline struct inet6_request_sock *
|
||||||
|
inet6_rsk(const struct request_sock *rsk)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static inline struct raw6_sock *raw6_sk(const struct sock *sk)
|
static inline struct raw6_sock *raw6_sk(const struct sock *sk)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -489,9 +489,9 @@ static int inet_diag_fill_req(struct sk_buff *skb, struct sock *sk,
|
||||||
#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) {
|
||||||
ipv6_addr_copy((struct in6_addr *)r->id.idiag_src,
|
ipv6_addr_copy((struct in6_addr *)r->id.idiag_src,
|
||||||
&tcp6_rsk(req)->loc_addr);
|
&inet6_rsk(req)->loc_addr);
|
||||||
ipv6_addr_copy((struct in6_addr *)r->id.idiag_dst,
|
ipv6_addr_copy((struct in6_addr *)r->id.idiag_dst,
|
||||||
&tcp6_rsk(req)->rmt_addr);
|
&inet6_rsk(req)->rmt_addr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
nlh->nlmsg_len = skb->tail - b;
|
nlh->nlmsg_len = skb->tail - b;
|
||||||
|
@ -553,13 +553,13 @@ static int inet_diag_dump_reqs(struct sk_buff *skb, struct sock *sk,
|
||||||
entry.saddr =
|
entry.saddr =
|
||||||
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
|
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
|
||||||
(entry.family == AF_INET6) ?
|
(entry.family == AF_INET6) ?
|
||||||
tcp6_rsk(req)->loc_addr.s6_addr32 :
|
inet6_rsk(req)->loc_addr.s6_addr32 :
|
||||||
#endif
|
#endif
|
||||||
&ireq->loc_addr;
|
&ireq->loc_addr;
|
||||||
entry.daddr =
|
entry.daddr =
|
||||||
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
|
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
|
||||||
(entry.family == AF_INET6) ?
|
(entry.family == AF_INET6) ?
|
||||||
tcp6_rsk(req)->rmt_addr.s6_addr32 :
|
inet6_rsk(req)->rmt_addr.s6_addr32 :
|
||||||
#endif
|
#endif
|
||||||
&ireq->rmt_addr;
|
&ireq->rmt_addr;
|
||||||
entry.dport = ntohs(ireq->rmt_port);
|
entry.dport = ntohs(ireq->rmt_port);
|
||||||
|
|
|
@ -61,7 +61,7 @@ struct request_sock *inet6_csk_search_req(const struct sock *sk,
|
||||||
lopt->nr_table_entries)];
|
lopt->nr_table_entries)];
|
||||||
(req = *prev) != NULL;
|
(req = *prev) != NULL;
|
||||||
prev = &req->dl_next) {
|
prev = &req->dl_next) {
|
||||||
const struct tcp6_request_sock *treq = tcp6_rsk(req);
|
const struct inet6_request_sock *treq = inet6_rsk(req);
|
||||||
|
|
||||||
if (inet_rsk(req)->rmt_port == rport &&
|
if (inet_rsk(req)->rmt_port == rport &&
|
||||||
req->rsk_ops->family == AF_INET6 &&
|
req->rsk_ops->family == AF_INET6 &&
|
||||||
|
@ -85,7 +85,7 @@ void inet6_csk_reqsk_queue_hash_add(struct sock *sk,
|
||||||
{
|
{
|
||||||
struct inet_connection_sock *icsk = inet_csk(sk);
|
struct inet_connection_sock *icsk = inet_csk(sk);
|
||||||
struct listen_sock *lopt = icsk->icsk_accept_queue.listen_opt;
|
struct listen_sock *lopt = icsk->icsk_accept_queue.listen_opt;
|
||||||
const u32 h = inet6_synq_hash(&tcp6_rsk(req)->rmt_addr,
|
const u32 h = inet6_synq_hash(&inet6_rsk(req)->rmt_addr,
|
||||||
inet_rsk(req)->rmt_port,
|
inet_rsk(req)->rmt_port,
|
||||||
lopt->hash_rnd, lopt->nr_table_entries);
|
lopt->hash_rnd, lopt->nr_table_entries);
|
||||||
|
|
||||||
|
|
|
@ -656,7 +656,7 @@ out:
|
||||||
static int tcp_v6_send_synack(struct sock *sk, struct request_sock *req,
|
static int tcp_v6_send_synack(struct sock *sk, struct request_sock *req,
|
||||||
struct dst_entry *dst)
|
struct dst_entry *dst)
|
||||||
{
|
{
|
||||||
struct tcp6_request_sock *treq = tcp6_rsk(req);
|
struct inet6_request_sock *treq = inet6_rsk(req);
|
||||||
struct ipv6_pinfo *np = inet6_sk(sk);
|
struct ipv6_pinfo *np = inet6_sk(sk);
|
||||||
struct sk_buff * skb;
|
struct sk_buff * skb;
|
||||||
struct ipv6_txoptions *opt = NULL;
|
struct ipv6_txoptions *opt = NULL;
|
||||||
|
@ -722,8 +722,8 @@ done:
|
||||||
|
|
||||||
static void tcp_v6_reqsk_destructor(struct request_sock *req)
|
static void tcp_v6_reqsk_destructor(struct request_sock *req)
|
||||||
{
|
{
|
||||||
if (tcp6_rsk(req)->pktopts)
|
if (inet6_rsk(req)->pktopts)
|
||||||
kfree_skb(tcp6_rsk(req)->pktopts);
|
kfree_skb(inet6_rsk(req)->pktopts);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct request_sock_ops tcp6_request_sock_ops = {
|
static struct request_sock_ops tcp6_request_sock_ops = {
|
||||||
|
@ -956,7 +956,7 @@ static struct sock *tcp_v6_hnd_req(struct sock *sk,struct sk_buff *skb)
|
||||||
*/
|
*/
|
||||||
static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
|
static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
struct tcp6_request_sock *treq;
|
struct inet6_request_sock *treq;
|
||||||
struct ipv6_pinfo *np = inet6_sk(sk);
|
struct ipv6_pinfo *np = inet6_sk(sk);
|
||||||
struct tcp_options_received tmp_opt;
|
struct tcp_options_received tmp_opt;
|
||||||
struct tcp_sock *tp = tcp_sk(sk);
|
struct tcp_sock *tp = tcp_sk(sk);
|
||||||
|
@ -981,7 +981,7 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
|
||||||
if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1)
|
if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1)
|
||||||
goto drop;
|
goto drop;
|
||||||
|
|
||||||
req = reqsk_alloc(&tcp6_request_sock_ops);
|
req = inet6_reqsk_alloc(&tcp6_request_sock_ops);
|
||||||
if (req == NULL)
|
if (req == NULL)
|
||||||
goto drop;
|
goto drop;
|
||||||
|
|
||||||
|
@ -994,7 +994,7 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
|
||||||
tmp_opt.tstamp_ok = tmp_opt.saw_tstamp;
|
tmp_opt.tstamp_ok = tmp_opt.saw_tstamp;
|
||||||
tcp_openreq_init(req, &tmp_opt, skb);
|
tcp_openreq_init(req, &tmp_opt, skb);
|
||||||
|
|
||||||
treq = tcp6_rsk(req);
|
treq = inet6_rsk(req);
|
||||||
ipv6_addr_copy(&treq->rmt_addr, &skb->nh.ipv6h->saddr);
|
ipv6_addr_copy(&treq->rmt_addr, &skb->nh.ipv6h->saddr);
|
||||||
ipv6_addr_copy(&treq->loc_addr, &skb->nh.ipv6h->daddr);
|
ipv6_addr_copy(&treq->loc_addr, &skb->nh.ipv6h->daddr);
|
||||||
TCP_ECN_create_request(req, skb->h.th);
|
TCP_ECN_create_request(req, skb->h.th);
|
||||||
|
@ -1035,7 +1035,7 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
|
||||||
struct request_sock *req,
|
struct request_sock *req,
|
||||||
struct dst_entry *dst)
|
struct dst_entry *dst)
|
||||||
{
|
{
|
||||||
struct tcp6_request_sock *treq = tcp6_rsk(req);
|
struct inet6_request_sock *treq = inet6_rsk(req);
|
||||||
struct ipv6_pinfo *newnp, *np = inet6_sk(sk);
|
struct ipv6_pinfo *newnp, *np = inet6_sk(sk);
|
||||||
struct tcp6_sock *newtcp6sk;
|
struct tcp6_sock *newtcp6sk;
|
||||||
struct inet_sock *newinet;
|
struct inet_sock *newinet;
|
||||||
|
@ -1723,14 +1723,13 @@ static int tcp_v6_destroy_sock(struct sock *sk)
|
||||||
static void get_openreq6(struct seq_file *seq,
|
static void get_openreq6(struct seq_file *seq,
|
||||||
struct sock *sk, struct request_sock *req, int i, int uid)
|
struct sock *sk, struct request_sock *req, int i, int uid)
|
||||||
{
|
{
|
||||||
struct in6_addr *dest, *src;
|
|
||||||
int ttd = req->expires - jiffies;
|
int ttd = req->expires - jiffies;
|
||||||
|
struct in6_addr *src = &inet6_rsk(req)->loc_addr;
|
||||||
|
struct in6_addr *dest = &inet6_rsk(req)->rmt_addr;
|
||||||
|
|
||||||
if (ttd < 0)
|
if (ttd < 0)
|
||||||
ttd = 0;
|
ttd = 0;
|
||||||
|
|
||||||
src = &tcp6_rsk(req)->loc_addr;
|
|
||||||
dest = &tcp6_rsk(req)->rmt_addr;
|
|
||||||
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 %d %d %p\n",
|
"%02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %p\n",
|
||||||
|
|
Loading…
Reference in New Issue