* Added Tx QoS queue rate limitation support.
* Added quanta size configuration support.
+* **Updated Mellanox mlx5 driver.**
+
+ * Added support for promiscuous mode on Windows.
+
Removed Items
-------------
return 0;
}
+static int
+mlx5_glue_devx_set_promisc_vport(void *ctx, uint32_t promisc_type, uint8_t f_enable)
+{
+#ifdef HAVE_DEVX_SET_PROMISC_SUPPORT
+ int devx_promisc_type = MLX5_DEVX_SET_PROMISC_VPORT_PROMISC_MODE;
+ struct mlx5_context *mlx5_ctx;
+ int err;
+
+ if (!ctx) {
+ errno = EINVAL;
+ return errno;
+ }
+ mlx5_ctx = (struct mlx5_context *)ctx;
+ if (promisc_type == MC_PROMISC)
+ devx_promisc_type = MLX5_DEVX_SET_PROMISC_VPORT_ALL_MULTICAST;
+ err = devx_set_promisc_vport(mlx5_ctx->devx_ctx, devx_promisc_type, f_enable);
+ if (err) {
+ errno = err;
+ return errno;
+ }
+ return 0;
+#else
+ (void)promisc_type;
+ (void)f_enable;
+ (void)ctx;
+ DRV_LOG(WARNING, "%s: is not supported", __func__);
+ return -ENOTSUP;
+#endif
+}
+
alignas(RTE_CACHE_LINE_SIZE)
const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue){
.version = MLX5_GLUE_VERSION,
.devx_query_eqn = mlx5_glue_devx_query_eqn,
.query_rt_values = mlx5_glue_query_rt_values,
.devx_init_showdown_event = mlx5_glue_devx_init_showdown_event,
+ .devx_set_promisc_vport = mlx5_glue_devx_set_promisc_vport,
};
};
#endif
+enum {
+ ALL_PROMISC,
+ MC_PROMISC,
+};
+
/* LIB_GLUE_VERSION must be updated every time this structure is modified. */
struct mlx5_glue {
const char *version;
int (*devx_query_eqn)(void *context, uint32_t cpus, uint32_t *eqn);
int (*query_rt_values)(void *ctx, void *devx_clock);
int (*devx_init_showdown_event)(void *ctx);
+ int (*devx_set_promisc_vport)(void *ctx, uint32_t promisc_type, uint8_t f_enable);
};
extern const struct mlx5_glue *mlx5_glue;
/**
* Set device promiscuous mode
- * Currently it has no support under Windows.
*
* @param dev
* Pointer to Ethernet device structure.
int
mlx5_os_set_promisc(struct rte_eth_dev *dev, int enable)
{
- (void)dev;
- (void)enable;
- DRV_LOG(WARNING, "%s: is not supported", __func__);
- return -ENOTSUP;
+ struct mlx5_priv *priv = dev->data->dev_private;
+
+ return mlx5_glue->devx_set_promisc_vport(priv->sh->cdev->ctx, ALL_PROMISC, enable);
}
/**
int
mlx5_os_set_allmulti(struct rte_eth_dev *dev, int enable)
{
- (void)dev;
- (void)enable;
- DRV_LOG(WARNING, "%s: is not supported", __func__);
- return -ENOTSUP;
+ struct mlx5_priv *priv = dev->data->dev_private;
+
+ return mlx5_glue->devx_set_promisc_vport(priv->sh->cdev->ctx, MC_PROMISC, enable);
}
/**