|
@@ -2506,7 +2506,7 @@ bnad_tso_prepare(struct bnad *bnad, struct sk_buff *skb)
|
|
|
* For TSO, the TCP checksum field is seeded with pseudo-header sum
|
|
|
* excluding the length field.
|
|
|
*/
|
|
|
- if (skb->protocol == htons(ETH_P_IP)) {
|
|
|
+ if (vlan_get_protocol(skb) == htons(ETH_P_IP)) {
|
|
|
struct iphdr *iph = ip_hdr(skb);
|
|
|
|
|
|
/* Do we really need these? */
|
|
@@ -2870,12 +2870,13 @@ bnad_txq_wi_prepare(struct bnad *bnad, struct bna_tcb *tcb,
|
|
|
}
|
|
|
|
|
|
if (skb->ip_summed == CHECKSUM_PARTIAL) {
|
|
|
+ __be16 net_proto = vlan_get_protocol(skb);
|
|
|
u8 proto = 0;
|
|
|
|
|
|
- if (skb->protocol == htons(ETH_P_IP))
|
|
|
+ if (net_proto == htons(ETH_P_IP))
|
|
|
proto = ip_hdr(skb)->protocol;
|
|
|
#ifdef NETIF_F_IPV6_CSUM
|
|
|
- else if (skb->protocol == htons(ETH_P_IPV6)) {
|
|
|
+ else if (net_proto == htons(ETH_P_IPV6)) {
|
|
|
/* nexthdr may not be TCP immediately. */
|
|
|
proto = ipv6_hdr(skb)->nexthdr;
|
|
|
}
|