r8169: use new helper tcp_v6_gso_csum_prep
Simplify the code by using the new helper tcp_v6_gso_csum_prep. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
76eeb12b71
commit
8b19c68c4f
@ -4108,29 +4108,6 @@ static bool rtl_test_hw_pad_bug(struct rtl8169_private *tp, struct sk_buff *skb)
|
|||||||
return skb->len < ETH_ZLEN && tp->mac_version == RTL_GIGA_MAC_VER_34;
|
return skb->len < ETH_ZLEN && tp->mac_version == RTL_GIGA_MAC_VER_34;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* msdn_giant_send_check()
|
|
||||||
* According to the document of microsoft, the TCP Pseudo Header excludes the
|
|
||||||
* packet length for IPv6 TCP large packets.
|
|
||||||
*/
|
|
||||||
static int msdn_giant_send_check(struct sk_buff *skb)
|
|
||||||
{
|
|
||||||
const struct ipv6hdr *ipv6h;
|
|
||||||
struct tcphdr *th;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = skb_cow_head(skb, 0);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
ipv6h = ipv6_hdr(skb);
|
|
||||||
th = tcp_hdr(skb);
|
|
||||||
|
|
||||||
th->check = 0;
|
|
||||||
th->check = ~tcp_v6_check(0, &ipv6h->saddr, &ipv6h->daddr, 0);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void rtl8169_tso_csum_v1(struct sk_buff *skb, u32 *opts)
|
static void rtl8169_tso_csum_v1(struct sk_buff *skb, u32 *opts)
|
||||||
{
|
{
|
||||||
u32 mss = skb_shinfo(skb)->gso_size;
|
u32 mss = skb_shinfo(skb)->gso_size;
|
||||||
@ -4163,9 +4140,10 @@ static bool rtl8169_tso_csum_v2(struct rtl8169_private *tp,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case htons(ETH_P_IPV6):
|
case htons(ETH_P_IPV6):
|
||||||
if (msdn_giant_send_check(skb))
|
if (skb_cow_head(skb, 0))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
tcp_v6_gso_csum_prep(skb);
|
||||||
opts[0] |= TD1_GTSENV6;
|
opts[0] |= TD1_GTSENV6;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user