net/ngbe: support MAC filters
[dpdk.git] / drivers / net / sfc / sfc_flow.c
index 81b9923..be2dfe7 100644 (file)
@@ -26,6 +26,7 @@
 #include "sfc_log.h"
 #include "sfc_dp_rx.h"
 #include "sfc_mae_counter.h"
+#include "sfc_switch.h"
 
 struct sfc_flow_ops_by_spec {
        sfc_flow_parse_cb_t     *parse;
@@ -391,7 +392,7 @@ sfc_flow_parse_vlan(const struct rte_flow_item *item,
        const struct rte_flow_item_vlan *spec = NULL;
        const struct rte_flow_item_vlan *mask = NULL;
        const struct rte_flow_item_vlan supp_mask = {
-               .tci = rte_cpu_to_be_16(ETH_VLAN_ID_MAX),
+               .tci = rte_cpu_to_be_16(RTE_ETH_VLAN_ID_MAX),
                .inner_type = RTE_BE16(0xffff),
        };
 
@@ -1275,7 +1276,7 @@ sfc_flow_parse_attr(struct sfc_adapter *sa,
                spec_filter->template.efs_rss_context = EFX_RSS_CONTEXT_DEFAULT;
                spec_filter->template.efs_priority = EFX_FILTER_PRI_MANUAL;
        } else {
-               if (mae->status != SFC_MAE_STATUS_SUPPORTED) {
+               if (mae->status != SFC_MAE_STATUS_ADMIN) {
                        rte_flow_error_set(error, ENOTSUP,
                                           RTE_FLOW_ERROR_TYPE_ATTR_TRANSFER,
                                           attr, "Transfer is not supported");
@@ -2924,6 +2925,25 @@ sfc_flow_isolate(struct rte_eth_dev *dev, int enable,
        return ret;
 }
 
+static int
+sfc_flow_pick_transfer_proxy(struct rte_eth_dev *dev,
+                            uint16_t *transfer_proxy_port,
+                            struct rte_flow_error *error)
+{
+       struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev);
+       int ret;
+
+       ret = sfc_mae_get_switch_domain_admin(sa->mae.switch_domain_id,
+                                             transfer_proxy_port);
+       if (ret != 0) {
+               return rte_flow_error_set(error, ret,
+                                         RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
+                                         NULL, NULL);
+       }
+
+       return 0;
+}
+
 const struct rte_flow_ops sfc_flow_ops = {
        .validate = sfc_flow_validate,
        .create = sfc_flow_create,
@@ -2936,6 +2956,7 @@ const struct rte_flow_ops sfc_flow_ops = {
        .tunnel_action_decap_release = sfc_flow_tunnel_action_decap_release,
        .tunnel_item_release = sfc_flow_tunnel_item_release,
        .get_restore_info = sfc_flow_tunnel_get_restore_info,
+       .pick_transfer_proxy = sfc_flow_pick_transfer_proxy,
 };
 
 void