net/sfc: fix reported promiscuous/multicast mode
[dpdk.git] / drivers / net / sfc / sfc_rx.c
index e6809bb..f589ece 100644 (file)
@@ -617,7 +617,8 @@ struct sfc_dp_rx sfc_efx_rx = {
                .hw_fw_caps     = 0,
        },
        .features               = SFC_DP_RX_FEAT_INTR,
-       .dev_offload_capa       = DEV_RX_OFFLOAD_CHECKSUM,
+       .dev_offload_capa       = DEV_RX_OFFLOAD_CHECKSUM |
+                                 DEV_RX_OFFLOAD_RSS_HASH,
        .queue_offload_capa     = DEV_RX_OFFLOAD_SCATTER,
        .qsize_up_rings         = sfc_efx_rx_qsize_up_rings,
        .qcreate                = sfc_efx_rx_qcreate,
@@ -718,6 +719,7 @@ retry:
                sfc_warn(sa, "promiscuous mode will be disabled");
 
                port->promisc = B_FALSE;
+               sa->eth_dev->data->promiscuous = 0;
                rc = sfc_set_rx_mode(sa);
                if (rc != 0)
                        return rc;
@@ -731,6 +733,7 @@ retry:
                sfc_warn(sa, "all-multicast mode will be disabled");
 
                port->allmulti = B_FALSE;
+               sa->eth_dev->data->all_multicast = 0;
                rc = sfc_set_rx_mode(sa);
                if (rc != 0)
                        return rc;
@@ -1402,7 +1405,7 @@ sfc_rx_process_adv_conf_rss(struct sfc_adapter *sa,
 
        if (conf->rss_key != NULL) {
                if (conf->rss_key_len != sizeof(rss->key)) {
-                       sfc_err(sa, "RSS key size is wrong (should be %lu)",
+                       sfc_err(sa, "RSS key size is wrong (should be %zu)",
                                sizeof(rss->key));
                        return EINVAL;
                }
@@ -1556,6 +1559,10 @@ sfc_rx_check_mode(struct sfc_adapter *sa, struct rte_eth_rxmode *rxmode)
                rxmode->offloads |= DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM;
        }
 
+       if ((offloads_supported & DEV_RX_OFFLOAD_RSS_HASH) &&
+           (rxmode->mq_mode & ETH_MQ_RX_RSS_FLAG))
+               rxmode->offloads |= DEV_RX_OFFLOAD_RSS_HASH;
+
        return rc;
 }