mempool/dpaa2: add functions for CMDIF
[dpdk.git] / drivers / net / sfc / base / efx_filter.c
index 2e6628b..412298a 100644 (file)
@@ -74,12 +74,33 @@ efx_filter_insert(
        __inout         efx_filter_spec_t *spec)
 {
        const efx_filter_ops_t *efop = enp->en_efop;
+       efx_nic_cfg_t *encp = &(enp->en_nic_cfg);
+       efx_rc_t rc;
 
        EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_FILTER);
        EFSYS_ASSERT3P(spec, !=, NULL);
        EFSYS_ASSERT3U(spec->efs_flags, &, EFX_FILTER_FLAG_RX);
 
+       if ((spec->efs_flags & EFX_FILTER_FLAG_ACTION_MARK) &&
+           !encp->enc_filter_action_mark_supported) {
+               rc = ENOTSUP;
+               goto fail1;
+       }
+
+       if ((spec->efs_flags & EFX_FILTER_FLAG_ACTION_FLAG) &&
+           !encp->enc_filter_action_flag_supported) {
+               rc = ENOTSUP;
+               goto fail2;
+       }
+
        return (efop->efo_add(enp, spec, B_FALSE));
+
+fail2:
+       EFSYS_PROBE(fail2);
+fail1:
+       EFSYS_PROBE1(fail1, efx_rc_t, rc);
+
+       return (rc);
 }
 
        __checkReturn   efx_rc_t
@@ -418,7 +439,7 @@ efx_filter_spec_set_encap_type(
        __in            efx_tunnel_protocol_t encap_type,
        __in            efx_filter_inner_frame_match_t inner_frame_match)
 {
-       uint32_t match_flags = 0;
+       uint32_t match_flags = EFX_FILTER_MATCH_ENCAP_TYPE;
        uint8_t ip_proto;
        efx_rc_t rc;
 
@@ -499,6 +520,7 @@ efx_filter_spec_set_vxlan_full(
                spec->efs_match_flags |= EFX_FILTER_MATCH_IFRM_LOC_MAC;
                memcpy(spec->efs_ifrm_loc_mac, inner_addr, EFX_MAC_ADDR_LEN);
        }
+       spec->efs_match_flags |= EFX_FILTER_MATCH_ENCAP_TYPE;
        spec->efs_encap_type = EFX_TUNNEL_PROTOCOL_VXLAN;
 
        return (0);