|
@@ -115,8 +115,8 @@ static __inline__ __sum16 tcp_v6_check(struct tcphdr *th, int len,
|
|
|
|
|
|
static __u32 tcp_v6_init_sequence(struct sk_buff *skb)
|
|
|
{
|
|
|
- return secure_tcpv6_sequence_number(skb->nh.ipv6h->daddr.s6_addr32,
|
|
|
- skb->nh.ipv6h->saddr.s6_addr32,
|
|
|
+ return secure_tcpv6_sequence_number(ipv6_hdr(skb)->daddr.s6_addr32,
|
|
|
+ ipv6_hdr(skb)->saddr.s6_addr32,
|
|
|
skb->h.th->dest,
|
|
|
skb->h.th->source);
|
|
|
}
|
|
@@ -837,7 +837,7 @@ static int tcp_v6_inbound_md5_hash (struct sock *sk, struct sk_buff *skb)
|
|
|
{
|
|
|
__u8 *hash_location = NULL;
|
|
|
struct tcp_md5sig_key *hash_expected;
|
|
|
- struct ipv6hdr *ip6h = skb->nh.ipv6h;
|
|
|
+ struct ipv6hdr *ip6h = ipv6_hdr(skb);
|
|
|
struct tcphdr *th = skb->h.th;
|
|
|
int length = (th->doff << 2) - sizeof (*th);
|
|
|
int genhash;
|
|
@@ -966,7 +966,7 @@ static int tcp_v6_gso_send_check(struct sk_buff *skb)
|
|
|
if (!pskb_may_pull(skb, sizeof(*th)))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- ipv6h = skb->nh.ipv6h;
|
|
|
+ ipv6h = ipv6_hdr(skb);
|
|
|
th = skb->h.th;
|
|
|
|
|
|
th->check = 0;
|
|
@@ -995,7 +995,7 @@ static void tcp_v6_send_reset(struct sock *sk, struct sk_buff *skb)
|
|
|
|
|
|
#ifdef CONFIG_TCP_MD5SIG
|
|
|
if (sk)
|
|
|
- key = tcp_v6_md5_do_lookup(sk, &skb->nh.ipv6h->daddr);
|
|
|
+ key = tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->daddr);
|
|
|
else
|
|
|
key = NULL;
|
|
|
|
|
@@ -1039,20 +1039,18 @@ static void tcp_v6_send_reset(struct sock *sk, struct sk_buff *skb)
|
|
|
(TCPOPT_NOP << 16) |
|
|
|
(TCPOPT_MD5SIG << 8) |
|
|
|
TCPOLEN_MD5SIG);
|
|
|
- tcp_v6_do_calc_md5_hash((__u8*)&opt[1],
|
|
|
- key,
|
|
|
- &skb->nh.ipv6h->daddr,
|
|
|
- &skb->nh.ipv6h->saddr,
|
|
|
- t1, IPPROTO_TCP,
|
|
|
- tot_len);
|
|
|
+ tcp_v6_do_calc_md5_hash((__u8 *)&opt[1], key,
|
|
|
+ &ipv6_hdr(skb)->daddr,
|
|
|
+ &ipv6_hdr(skb)->saddr,
|
|
|
+ t1, IPPROTO_TCP, tot_len);
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
buff->csum = csum_partial((char *)t1, sizeof(*t1), 0);
|
|
|
|
|
|
memset(&fl, 0, sizeof(fl));
|
|
|
- ipv6_addr_copy(&fl.fl6_dst, &skb->nh.ipv6h->saddr);
|
|
|
- ipv6_addr_copy(&fl.fl6_src, &skb->nh.ipv6h->daddr);
|
|
|
+ ipv6_addr_copy(&fl.fl6_dst, &ipv6_hdr(skb)->saddr);
|
|
|
+ ipv6_addr_copy(&fl.fl6_src, &ipv6_hdr(skb)->daddr);
|
|
|
|
|
|
t1->check = csum_ipv6_magic(&fl.fl6_src, &fl.fl6_dst,
|
|
|
sizeof(*t1), IPPROTO_TCP,
|
|
@@ -1093,7 +1091,7 @@ static void tcp_v6_send_ack(struct tcp_timewait_sock *tw,
|
|
|
|
|
|
#ifdef CONFIG_TCP_MD5SIG
|
|
|
if (!tw && skb->sk) {
|
|
|
- key = tcp_v6_md5_do_lookup(skb->sk, &skb->nh.ipv6h->daddr);
|
|
|
+ key = tcp_v6_md5_do_lookup(skb->sk, &ipv6_hdr(skb)->daddr);
|
|
|
} else if (tw && tw->tw_md5_keylen) {
|
|
|
tw_key.key = tw->tw_md5_key;
|
|
|
tw_key.keylen = tw->tw_md5_keylen;
|
|
@@ -1142,20 +1140,18 @@ static void tcp_v6_send_ack(struct tcp_timewait_sock *tw,
|
|
|
if (key) {
|
|
|
*topt++ = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) |
|
|
|
(TCPOPT_MD5SIG << 8) | TCPOLEN_MD5SIG);
|
|
|
- tcp_v6_do_calc_md5_hash((__u8 *)topt,
|
|
|
- key,
|
|
|
- &skb->nh.ipv6h->daddr,
|
|
|
- &skb->nh.ipv6h->saddr,
|
|
|
- t1, IPPROTO_TCP,
|
|
|
- tot_len);
|
|
|
+ tcp_v6_do_calc_md5_hash((__u8 *)topt, key,
|
|
|
+ &ipv6_hdr(skb)->daddr,
|
|
|
+ &ipv6_hdr(skb)->saddr,
|
|
|
+ t1, IPPROTO_TCP, tot_len);
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
buff->csum = csum_partial((char *)t1, tot_len, 0);
|
|
|
|
|
|
memset(&fl, 0, sizeof(fl));
|
|
|
- ipv6_addr_copy(&fl.fl6_dst, &skb->nh.ipv6h->saddr);
|
|
|
- ipv6_addr_copy(&fl.fl6_src, &skb->nh.ipv6h->daddr);
|
|
|
+ ipv6_addr_copy(&fl.fl6_dst, &ipv6_hdr(skb)->saddr);
|
|
|
+ ipv6_addr_copy(&fl.fl6_src, &ipv6_hdr(skb)->daddr);
|
|
|
|
|
|
t1->check = csum_ipv6_magic(&fl.fl6_src, &fl.fl6_dst,
|
|
|
tot_len, IPPROTO_TCP,
|
|
@@ -1204,13 +1200,13 @@ static struct sock *tcp_v6_hnd_req(struct sock *sk,struct sk_buff *skb)
|
|
|
|
|
|
/* Find possible connection requests. */
|
|
|
req = inet6_csk_search_req(sk, &prev, th->source,
|
|
|
- &skb->nh.ipv6h->saddr,
|
|
|
- &skb->nh.ipv6h->daddr, inet6_iif(skb));
|
|
|
+ &ipv6_hdr(skb)->saddr,
|
|
|
+ &ipv6_hdr(skb)->daddr, inet6_iif(skb));
|
|
|
if (req)
|
|
|
return tcp_check_req(sk, skb, req, prev);
|
|
|
|
|
|
- nsk = __inet6_lookup_established(&tcp_hashinfo, &skb->nh.ipv6h->saddr,
|
|
|
- th->source, &skb->nh.ipv6h->daddr,
|
|
|
+ nsk = __inet6_lookup_established(&tcp_hashinfo, &ipv6_hdr(skb)->saddr,
|
|
|
+ th->source, &ipv6_hdr(skb)->daddr,
|
|
|
ntohs(th->dest), inet6_iif(skb));
|
|
|
|
|
|
if (nsk) {
|
|
@@ -1277,8 +1273,8 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
|
|
|
tcp_openreq_init(req, &tmp_opt, skb);
|
|
|
|
|
|
treq = inet6_rsk(req);
|
|
|
- ipv6_addr_copy(&treq->rmt_addr, &skb->nh.ipv6h->saddr);
|
|
|
- ipv6_addr_copy(&treq->loc_addr, &skb->nh.ipv6h->daddr);
|
|
|
+ ipv6_addr_copy(&treq->rmt_addr, &ipv6_hdr(skb)->saddr);
|
|
|
+ ipv6_addr_copy(&treq->loc_addr, &ipv6_hdr(skb)->daddr);
|
|
|
TCP_ECN_create_request(req, skb->h.th);
|
|
|
treq->pktopts = NULL;
|
|
|
if (ipv6_opt_accepted(sk, skb) ||
|
|
@@ -1365,7 +1361,7 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
|
|
|
newnp->pktoptions = NULL;
|
|
|
newnp->opt = NULL;
|
|
|
newnp->mcast_oif = inet6_iif(skb);
|
|
|
- newnp->mcast_hops = skb->nh.ipv6h->hop_limit;
|
|
|
+ newnp->mcast_hops = ipv6_hdr(skb)->hop_limit;
|
|
|
|
|
|
/*
|
|
|
* No need to charge this sock to the relevant IPv6 refcnt debug socks count
|
|
@@ -1473,7 +1469,7 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
|
|
|
}
|
|
|
newnp->opt = NULL;
|
|
|
newnp->mcast_oif = inet6_iif(skb);
|
|
|
- newnp->mcast_hops = skb->nh.ipv6h->hop_limit;
|
|
|
+ newnp->mcast_hops = ipv6_hdr(skb)->hop_limit;
|
|
|
|
|
|
/* Clone native IPv6 options from listening socket (if any)
|
|
|
|
|
@@ -1532,15 +1528,16 @@ out:
|
|
|
static __sum16 tcp_v6_checksum_init(struct sk_buff *skb)
|
|
|
{
|
|
|
if (skb->ip_summed == CHECKSUM_COMPLETE) {
|
|
|
- if (!tcp_v6_check(skb->h.th,skb->len,&skb->nh.ipv6h->saddr,
|
|
|
- &skb->nh.ipv6h->daddr,skb->csum)) {
|
|
|
+ if (!tcp_v6_check(skb->h.th, skb->len, &ipv6_hdr(skb)->saddr,
|
|
|
+ &ipv6_hdr(skb)->daddr, skb->csum)) {
|
|
|
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
|
|
return 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- skb->csum = ~csum_unfold(tcp_v6_check(skb->h.th,skb->len,&skb->nh.ipv6h->saddr,
|
|
|
- &skb->nh.ipv6h->daddr, 0));
|
|
|
+ skb->csum = ~csum_unfold(tcp_v6_check(skb->h.th, skb->len,
|
|
|
+ &ipv6_hdr(skb)->saddr,
|
|
|
+ &ipv6_hdr(skb)->daddr, 0));
|
|
|
|
|
|
if (skb->len <= 76) {
|
|
|
return __skb_checksum_complete(skb);
|
|
@@ -1668,7 +1665,7 @@ ipv6_pktoptions:
|
|
|
if (np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo)
|
|
|
np->mcast_oif = inet6_iif(opt_skb);
|
|
|
if (np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim)
|
|
|
- np->mcast_hops = opt_skb->nh.ipv6h->hop_limit;
|
|
|
+ np->mcast_hops = ipv6_hdr(opt_skb)->hop_limit;
|
|
|
if (ipv6_opt_accepted(sk, opt_skb)) {
|
|
|
skb_set_owner_r(opt_skb, sk);
|
|
|
opt_skb = xchg(&np->pktoptions, opt_skb);
|
|
@@ -1718,11 +1715,11 @@ static int tcp_v6_rcv(struct sk_buff **pskb)
|
|
|
skb->len - th->doff*4);
|
|
|
TCP_SKB_CB(skb)->ack_seq = ntohl(th->ack_seq);
|
|
|
TCP_SKB_CB(skb)->when = 0;
|
|
|
- TCP_SKB_CB(skb)->flags = ipv6_get_dsfield(skb->nh.ipv6h);
|
|
|
+ TCP_SKB_CB(skb)->flags = ipv6_get_dsfield(ipv6_hdr(skb));
|
|
|
TCP_SKB_CB(skb)->sacked = 0;
|
|
|
|
|
|
- sk = __inet6_lookup(&tcp_hashinfo, &skb->nh.ipv6h->saddr, th->source,
|
|
|
- &skb->nh.ipv6h->daddr, ntohs(th->dest),
|
|
|
+ sk = __inet6_lookup(&tcp_hashinfo, &ipv6_hdr(skb)->saddr, th->source,
|
|
|
+ &ipv6_hdr(skb)->daddr, ntohs(th->dest),
|
|
|
inet6_iif(skb));
|
|
|
|
|
|
if (!sk)
|
|
@@ -1802,7 +1799,7 @@ do_time_wait:
|
|
|
struct sock *sk2;
|
|
|
|
|
|
sk2 = inet6_lookup_listener(&tcp_hashinfo,
|
|
|
- &skb->nh.ipv6h->daddr,
|
|
|
+ &ipv6_hdr(skb)->daddr,
|
|
|
ntohs(th->dest), inet6_iif(skb));
|
|
|
if (sk2 != NULL) {
|
|
|
struct inet_timewait_sock *tw = inet_twsk(sk);
|