mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 18:13:41 +02:00
bnxt_en: Add drop action support for ntuple
Add drop action for protocols TCP/UDP/ICMP 1) Drop action for TCP/UDP is supported via flow type tcp4/udp4/tcp6/udp6. 2) Drop action for ICMPV4/ICMPV6/wildcard is supported via flow type ipv4/ipv6. Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com> Signed-off-by: Vikas Gupta <vikas.gupta@broadcom.com> Signed-off-by: Michael Chan <michael.chan@broadcom.com> Link: https://lore.kernel.org/r/20240205223202.25341-7-michael.chan@broadcom.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
9ba0e56199
commit
7efd79c0e6
|
|
@ -5747,8 +5747,9 @@ int bnxt_hwrm_cfa_ntuple_filter_alloc(struct bnxt *bp,
|
||||||
l2_fltr = fltr->l2_fltr;
|
l2_fltr = fltr->l2_fltr;
|
||||||
req->l2_filter_id = l2_fltr->base.filter_id;
|
req->l2_filter_id = l2_fltr->base.filter_id;
|
||||||
|
|
||||||
|
if (fltr->base.flags & BNXT_ACT_DROP) {
|
||||||
if (bp->fw_cap & BNXT_FW_CAP_CFA_RFS_RING_TBL_IDX_V2) {
|
flags = CFA_NTUPLE_FILTER_ALLOC_REQ_FLAGS_DROP;
|
||||||
|
} else if (bp->fw_cap & BNXT_FW_CAP_CFA_RFS_RING_TBL_IDX_V2) {
|
||||||
flags = CFA_NTUPLE_FILTER_ALLOC_REQ_FLAGS_DEST_RFS_RING_IDX;
|
flags = CFA_NTUPLE_FILTER_ALLOC_REQ_FLAGS_DEST_RFS_RING_IDX;
|
||||||
req->dst_id = cpu_to_le16(fltr->base.rxq);
|
req->dst_id = cpu_to_le16(fltr->base.rxq);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -1192,7 +1192,10 @@ static int bnxt_grxclsrule(struct bnxt *bp, struct ethtool_rxnfc *cmd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fs->ring_cookie = fltr->base.rxq;
|
if (fltr->base.flags & BNXT_ACT_DROP)
|
||||||
|
fs->ring_cookie = RX_CLS_FLOW_DISC;
|
||||||
|
else
|
||||||
|
fs->ring_cookie = fltr->base.rxq;
|
||||||
rc = 0;
|
rc = 0;
|
||||||
|
|
||||||
fltr_err:
|
fltr_err:
|
||||||
|
|
@ -1398,8 +1401,11 @@ static int bnxt_add_ntuple_cls_rule(struct bnxt *bp,
|
||||||
}
|
}
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
|
|
||||||
new_fltr->base.rxq = ring;
|
|
||||||
new_fltr->base.flags = BNXT_ACT_NO_AGING;
|
new_fltr->base.flags = BNXT_ACT_NO_AGING;
|
||||||
|
if (fs->ring_cookie == RX_CLS_FLOW_DISC)
|
||||||
|
new_fltr->base.flags |= BNXT_ACT_DROP;
|
||||||
|
else
|
||||||
|
new_fltr->base.rxq = ring;
|
||||||
__set_bit(BNXT_FLTR_VALID, &new_fltr->base.state);
|
__set_bit(BNXT_FLTR_VALID, &new_fltr->base.state);
|
||||||
rc = bnxt_insert_ntp_filter(bp, new_fltr, idx);
|
rc = bnxt_insert_ntp_filter(bp, new_fltr, idx);
|
||||||
if (!rc) {
|
if (!rc) {
|
||||||
|
|
@ -1441,6 +1447,9 @@ static int bnxt_srxclsrlins(struct bnxt *bp, struct ethtool_rxnfc *cmd)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
flow_type &= ~FLOW_EXT;
|
flow_type &= ~FLOW_EXT;
|
||||||
|
|
||||||
|
if (fs->ring_cookie == RX_CLS_FLOW_DISC && flow_type != ETHER_FLOW)
|
||||||
|
return bnxt_add_ntuple_cls_rule(bp, fs);
|
||||||
|
|
||||||
ring = ethtool_get_flow_spec_ring(fs->ring_cookie);
|
ring = ethtool_get_flow_spec_ring(fs->ring_cookie);
|
||||||
vf = ethtool_get_flow_spec_ring_vf(fs->ring_cookie);
|
vf = ethtool_get_flow_spec_ring_vf(fs->ring_cookie);
|
||||||
if (BNXT_VF(bp) && vf)
|
if (BNXT_VF(bp) && vf)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user