bnx2x: Not dropping packets with L3/L4 checksum error
Not dropping packets with L3/L4 checksum error Those packets should be passed to the OS. The problem is clear in forwarding mode. Signed-off-by: Eilon Greenstein <eilong@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
19680c4850
Коммит
1adcd8bee3
|
@ -386,20 +386,28 @@ struct bnx2x_fastpath {
|
||||||
#define TPA_TYPE(cqe_fp_flags) ((cqe_fp_flags) & \
|
#define TPA_TYPE(cqe_fp_flags) ((cqe_fp_flags) & \
|
||||||
(TPA_TYPE_START | TPA_TYPE_END))
|
(TPA_TYPE_START | TPA_TYPE_END))
|
||||||
|
|
||||||
#define BNX2X_RX_SUM_OK(cqe) \
|
#define ETH_RX_ERROR_FALGS ETH_FAST_PATH_RX_CQE_PHY_DECODE_ERR_FLG
|
||||||
(!(cqe->fast_path_cqe.status_flags & \
|
|
||||||
(ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG | \
|
#define BNX2X_IP_CSUM_ERR(cqe) \
|
||||||
ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG)))
|
(!((cqe)->fast_path_cqe.status_flags & \
|
||||||
|
ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG) && \
|
||||||
|
((cqe)->fast_path_cqe.type_error_flags & \
|
||||||
|
ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG))
|
||||||
|
|
||||||
|
#define BNX2X_L4_CSUM_ERR(cqe) \
|
||||||
|
(!((cqe)->fast_path_cqe.status_flags & \
|
||||||
|
ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG) && \
|
||||||
|
((cqe)->fast_path_cqe.type_error_flags & \
|
||||||
|
ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG))
|
||||||
|
|
||||||
|
#define BNX2X_RX_CSUM_OK(cqe) \
|
||||||
|
(!(BNX2X_L4_CSUM_ERR(cqe) || BNX2X_IP_CSUM_ERR(cqe)))
|
||||||
|
|
||||||
#define BNX2X_RX_SUM_FIX(cqe) \
|
#define BNX2X_RX_SUM_FIX(cqe) \
|
||||||
((le16_to_cpu(cqe->fast_path_cqe.pars_flags.flags) & \
|
((le16_to_cpu(cqe->fast_path_cqe.pars_flags.flags) & \
|
||||||
PARSING_FLAGS_OVER_ETHERNET_PROTOCOL) == \
|
PARSING_FLAGS_OVER_ETHERNET_PROTOCOL) == \
|
||||||
(1 << PARSING_FLAGS_OVER_ETHERNET_PROTOCOL_SHIFT))
|
(1 << PARSING_FLAGS_OVER_ETHERNET_PROTOCOL_SHIFT))
|
||||||
|
|
||||||
#define ETH_RX_ERROR_FALGS (ETH_FAST_PATH_RX_CQE_PHY_DECODE_ERR_FLG | \
|
|
||||||
ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG | \
|
|
||||||
ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG)
|
|
||||||
|
|
||||||
|
|
||||||
#define FP_USB_FUNC_OFF (2 + 2*HC_USTORM_SB_NUM_INDICES)
|
#define FP_USB_FUNC_OFF (2 + 2*HC_USTORM_SB_NUM_INDICES)
|
||||||
#define FP_CSB_FUNC_OFF (2 + 2*HC_CSTORM_SB_NUM_INDICES)
|
#define FP_CSB_FUNC_OFF (2 + 2*HC_CSTORM_SB_NUM_INDICES)
|
||||||
|
|
|
@ -1501,7 +1501,6 @@ static int bnx2x_rx_int(struct bnx2x_fastpath *fp, int budget)
|
||||||
|
|
||||||
/* is this an error packet? */
|
/* is this an error packet? */
|
||||||
if (unlikely(cqe_fp_flags & ETH_RX_ERROR_FALGS)) {
|
if (unlikely(cqe_fp_flags & ETH_RX_ERROR_FALGS)) {
|
||||||
/* do we sometimes forward error packets anyway? */
|
|
||||||
DP(NETIF_MSG_RX_ERR,
|
DP(NETIF_MSG_RX_ERR,
|
||||||
"ERROR flags %x rx packet %u\n",
|
"ERROR flags %x rx packet %u\n",
|
||||||
cqe_fp_flags, sw_comp_cons);
|
cqe_fp_flags, sw_comp_cons);
|
||||||
|
@ -1557,10 +1556,10 @@ reuse_rx:
|
||||||
skb->protocol = eth_type_trans(skb, bp->dev);
|
skb->protocol = eth_type_trans(skb, bp->dev);
|
||||||
|
|
||||||
skb->ip_summed = CHECKSUM_NONE;
|
skb->ip_summed = CHECKSUM_NONE;
|
||||||
if (bp->rx_csum && BNX2X_RX_SUM_OK(cqe))
|
if (bp->rx_csum)
|
||||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
if (likely(BNX2X_RX_CSUM_OK(cqe)))
|
||||||
|
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||||
|
|
||||||
/* TBD do we pass bad csum packets in promisc */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef BCM_VLAN
|
#ifdef BCM_VLAN
|
||||||
|
|
Загрузка…
Ссылка в новой задаче