|
@@ -533,8 +533,15 @@ static inline void ehea_fill_skb(struct net_device *dev,
|
|
|
int length = cqe->num_bytes_transfered - 4; /*remove CRC */
|
|
|
|
|
|
skb_put(skb, length);
|
|
|
- skb->ip_summed = CHECKSUM_UNNECESSARY;
|
|
|
skb->protocol = eth_type_trans(skb, dev);
|
|
|
+
|
|
|
+ /* The packet was not an IPV4 packet so a complemented checksum was
|
|
|
+ calculated. The value is found in the Internet Checksum field. */
|
|
|
+ if (cqe->status & EHEA_CQE_BLIND_CKSUM) {
|
|
|
+ skb->ip_summed = CHECKSUM_COMPLETE;
|
|
|
+ skb->csum = csum_unfold(~cqe->inet_checksum_value);
|
|
|
+ } else
|
|
|
+ skb->ip_summed = CHECKSUM_UNNECESSARY;
|
|
|
}
|
|
|
|
|
|
static inline struct sk_buff *get_skb_by_index(struct sk_buff **skb_array,
|