diff options
Diffstat (limited to 'net/ipv6/tcp_ipv6.c')
-rw-r--r-- | net/ipv6/tcp_ipv6.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 4b5aa1854260..53b6a4192b16 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c | |||
@@ -941,9 +941,10 @@ static int tcp_v6_gso_send_check(struct sk_buff *skb) | |||
941 | return 0; | 941 | return 0; |
942 | } | 942 | } |
943 | 943 | ||
944 | struct sk_buff **tcp6_gro_receive(struct sk_buff **head, struct sk_buff *skb) | 944 | static struct sk_buff **tcp6_gro_receive(struct sk_buff **head, |
945 | struct sk_buff *skb) | ||
945 | { | 946 | { |
946 | struct ipv6hdr *iph = ipv6_hdr(skb); | 947 | struct ipv6hdr *iph = skb_gro_network_header(skb); |
947 | 948 | ||
948 | switch (skb->ip_summed) { | 949 | switch (skb->ip_summed) { |
949 | case CHECKSUM_COMPLETE: | 950 | case CHECKSUM_COMPLETE: |
@@ -961,9 +962,8 @@ struct sk_buff **tcp6_gro_receive(struct sk_buff **head, struct sk_buff *skb) | |||
961 | 962 | ||
962 | return tcp_gro_receive(head, skb); | 963 | return tcp_gro_receive(head, skb); |
963 | } | 964 | } |
964 | EXPORT_SYMBOL(tcp6_gro_receive); | ||
965 | 965 | ||
966 | int tcp6_gro_complete(struct sk_buff *skb) | 966 | static int tcp6_gro_complete(struct sk_buff *skb) |
967 | { | 967 | { |
968 | struct ipv6hdr *iph = ipv6_hdr(skb); | 968 | struct ipv6hdr *iph = ipv6_hdr(skb); |
969 | struct tcphdr *th = tcp_hdr(skb); | 969 | struct tcphdr *th = tcp_hdr(skb); |
@@ -974,7 +974,6 @@ int tcp6_gro_complete(struct sk_buff *skb) | |||
974 | 974 | ||
975 | return tcp_gro_complete(skb); | 975 | return tcp_gro_complete(skb); |
976 | } | 976 | } |
977 | EXPORT_SYMBOL(tcp6_gro_complete); | ||
978 | 977 | ||
979 | static void tcp_v6_send_response(struct sk_buff *skb, u32 seq, u32 ack, u32 win, | 978 | static void tcp_v6_send_response(struct sk_buff *skb, u32 seq, u32 ack, u32 win, |
980 | u32 ts, struct tcp_md5sig_key *key, int rst) | 979 | u32 ts, struct tcp_md5sig_key *key, int rst) |
@@ -982,9 +981,10 @@ static void tcp_v6_send_response(struct sk_buff *skb, u32 seq, u32 ack, u32 win, | |||
982 | struct tcphdr *th = tcp_hdr(skb), *t1; | 981 | struct tcphdr *th = tcp_hdr(skb), *t1; |
983 | struct sk_buff *buff; | 982 | struct sk_buff *buff; |
984 | struct flowi fl; | 983 | struct flowi fl; |
985 | struct net *net = dev_net(skb->dst->dev); | 984 | struct net *net = dev_net(skb_dst(skb)->dev); |
986 | struct sock *ctl_sk = net->ipv6.tcp_sk; | 985 | struct sock *ctl_sk = net->ipv6.tcp_sk; |
987 | unsigned int tot_len = sizeof(struct tcphdr); | 986 | unsigned int tot_len = sizeof(struct tcphdr); |
987 | struct dst_entry *dst; | ||
988 | __be32 *topt; | 988 | __be32 *topt; |
989 | 989 | ||
990 | if (ts) | 990 | if (ts) |
@@ -1053,8 +1053,9 @@ static void tcp_v6_send_response(struct sk_buff *skb, u32 seq, u32 ack, u32 win, | |||
1053 | * Underlying function will use this to retrieve the network | 1053 | * Underlying function will use this to retrieve the network |
1054 | * namespace | 1054 | * namespace |
1055 | */ | 1055 | */ |
1056 | if (!ip6_dst_lookup(ctl_sk, &buff->dst, &fl)) { | 1056 | if (!ip6_dst_lookup(ctl_sk, &dst, &fl)) { |
1057 | if (xfrm_lookup(net, &buff->dst, &fl, NULL, 0) >= 0) { | 1057 | if (xfrm_lookup(net, &dst, &fl, NULL, 0) >= 0) { |
1058 | skb_dst_set(buff, dst); | ||
1058 | ip6_xmit(ctl_sk, buff, &fl, NULL, 0); | 1059 | ip6_xmit(ctl_sk, buff, &fl, NULL, 0); |
1059 | TCP_INC_STATS_BH(net, TCP_MIB_OUTSEGS); | 1060 | TCP_INC_STATS_BH(net, TCP_MIB_OUTSEGS); |
1060 | if (rst) | 1061 | if (rst) |