mirror of
https://github.com/torvalds/linux.git
synced 2026-04-27 19:12:29 -04:00
ice: Add support for tunnel offloads
Create a boost TCAM entry for each tunnel port in order to get a tunnel PTYPE. Update netdev feature flags and implement the appropriate logic to get and set values for hardware offloads. Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> Signed-off-by: Henry Tieman <henry.w.tieman@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
committed by
Jeff Kirsher
parent
f45a645fa6
commit
a4e82a81f5
@@ -84,12 +84,17 @@ ice_rx_csum(struct ice_ring *ring, struct sk_buff *skb,
|
||||
union ice_32b_rx_flex_desc *rx_desc, u8 ptype)
|
||||
{
|
||||
struct ice_rx_ptype_decoded decoded;
|
||||
u32 rx_error, rx_status;
|
||||
u16 rx_error, rx_status;
|
||||
u16 rx_stat_err1;
|
||||
bool ipv4, ipv6;
|
||||
|
||||
rx_status = le16_to_cpu(rx_desc->wb.status_error0);
|
||||
rx_error = rx_status;
|
||||
rx_error = rx_status & (BIT(ICE_RX_FLEX_DESC_STATUS0_XSUM_IPE_S) |
|
||||
BIT(ICE_RX_FLEX_DESC_STATUS0_XSUM_L4E_S) |
|
||||
BIT(ICE_RX_FLEX_DESC_STATUS0_XSUM_EIPE_S) |
|
||||
BIT(ICE_RX_FLEX_DESC_STATUS0_XSUM_EUDPE_S));
|
||||
|
||||
rx_stat_err1 = le16_to_cpu(rx_desc->wb.status_error1);
|
||||
decoded = ice_decode_rx_desc_ptype(ptype);
|
||||
|
||||
/* Start with CHECKSUM_NONE and by default csum_level = 0 */
|
||||
@@ -125,6 +130,18 @@ ice_rx_csum(struct ice_ring *ring, struct sk_buff *skb,
|
||||
if (rx_error & BIT(ICE_RX_FLEX_DESC_STATUS0_XSUM_L4E_S))
|
||||
goto checksum_fail;
|
||||
|
||||
/* check for outer UDP checksum error in tunneled packets */
|
||||
if ((rx_stat_err1 & BIT(ICE_RX_FLEX_DESC_STATUS1_NAT_S)) &&
|
||||
(rx_error & BIT(ICE_RX_FLEX_DESC_STATUS0_XSUM_EUDPE_S)))
|
||||
goto checksum_fail;
|
||||
|
||||
/* If there is an outer header present that might contain a checksum
|
||||
* we need to bump the checksum level by 1 to reflect the fact that
|
||||
* we are indicating we validated the inner checksum.
|
||||
*/
|
||||
if (decoded.tunnel_type >= ICE_RX_PTYPE_TUNNEL_IP_GRENAT)
|
||||
skb->csum_level = 1;
|
||||
|
||||
/* Only report checksum unnecessary for TCP, UDP, or SCTP */
|
||||
switch (decoded.inner_prot) {
|
||||
case ICE_RX_PTYPE_INNER_PROT_TCP:
|
||||
|
||||
Reference in New Issue
Block a user