LCOV - code coverage report
Current view: top level - drivers/net/mlx5 - mlx5_rxmode.c (source / functions) Hit Total Coverage
Test: Code coverage Lines: 0 47 0.0 %
Date: 2025-03-01 20:23:48 Functions: 0 4 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 28 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  * Copyright 2015 6WIND S.A.
       3                 :            :  * Copyright 2015 Mellanox Technologies, Ltd
       4                 :            :  */
       5                 :            : 
       6                 :            : #include <stddef.h>
       7                 :            : #include <errno.h>
       8                 :            : #include <string.h>
       9                 :            : 
      10                 :            : #include <ethdev_driver.h>
      11                 :            : 
      12                 :            : #include <mlx5_glue.h>
      13                 :            : #include "mlx5.h"
      14                 :            : #include "mlx5_utils.h"
      15                 :            : 
      16                 :            : /**
      17                 :            :  * DPDK callback to enable promiscuous mode.
      18                 :            :  *
      19                 :            :  * @param dev
      20                 :            :  *   Pointer to Ethernet device structure.
      21                 :            :  *
      22                 :            :  * @return
      23                 :            :  *   0 on success, a negative errno value otherwise and rte_errno is set.
      24                 :            :  */
      25                 :            : int
      26                 :          0 : mlx5_promiscuous_enable(struct rte_eth_dev *dev)
      27                 :            : {
      28                 :          0 :         struct mlx5_priv *priv = dev->data->dev_private;
      29                 :            :         int ret;
      30                 :            : 
      31                 :          0 :         dev->data->promiscuous = 1;
      32         [ #  # ]:          0 :         if (priv->isolated) {
      33                 :          0 :                 DRV_LOG(WARNING,
      34                 :            :                         "port %u cannot enable promiscuous mode"
      35                 :            :                         " in flow isolation mode",
      36                 :            :                         dev->data->port_id);
      37                 :          0 :                 return 0;
      38                 :            :         }
      39         [ #  # ]:          0 :         if (priv->sh->dev_cap.vf || priv->sh->dev_cap.sf) {
      40                 :          0 :                 ret = mlx5_os_set_promisc(dev, 1);
      41         [ #  # ]:          0 :                 if (ret)
      42                 :            :                         return ret;
      43                 :            :         }
      44                 :          0 :         ret = mlx5_traffic_restart(dev);
      45         [ #  # ]:          0 :         if (ret)
      46                 :          0 :                 DRV_LOG(ERR, "port %u cannot enable promiscuous mode: %s",
      47                 :            :                         dev->data->port_id, strerror(rte_errno));
      48                 :            : 
      49                 :            :         /*
      50                 :            :          * rte_eth_dev_promiscuous_enable() rollback
      51                 :            :          * dev->data->promiscuous in the case of failure.
      52                 :            :          */
      53                 :            :         return ret;
      54                 :            : }
      55                 :            : 
      56                 :            : /**
      57                 :            :  * DPDK callback to disable promiscuous mode.
      58                 :            :  *
      59                 :            :  * @param dev
      60                 :            :  *   Pointer to Ethernet device structure.
      61                 :            :  *
      62                 :            :  * @return
      63                 :            :  *   0 on success, a negative errno value otherwise and rte_errno is set.
      64                 :            :  */
      65                 :            : int
      66                 :          0 : mlx5_promiscuous_disable(struct rte_eth_dev *dev)
      67                 :            : {
      68                 :          0 :         struct mlx5_priv *priv = dev->data->dev_private;
      69                 :            :         int ret;
      70                 :            : 
      71                 :          0 :         dev->data->promiscuous = 0;
      72         [ #  # ]:          0 :         if (priv->sh->dev_cap.vf || priv->sh->dev_cap.sf) {
      73                 :          0 :                 ret = mlx5_os_set_promisc(dev, 0);
      74         [ #  # ]:          0 :                 if (ret)
      75                 :            :                         return ret;
      76                 :            :         }
      77                 :          0 :         ret = mlx5_traffic_restart(dev);
      78         [ #  # ]:          0 :         if (ret)
      79                 :          0 :                 DRV_LOG(ERR, "port %u cannot disable promiscuous mode: %s",
      80                 :            :                         dev->data->port_id, strerror(rte_errno));
      81                 :            : 
      82                 :            :         /*
      83                 :            :          * rte_eth_dev_promiscuous_disable() rollback
      84                 :            :          * dev->data->promiscuous in the case of failure.
      85                 :            :          */
      86                 :            :         return ret;
      87                 :            : }
      88                 :            : 
      89                 :            : /**
      90                 :            :  * DPDK callback to enable allmulti mode.
      91                 :            :  *
      92                 :            :  * @param dev
      93                 :            :  *   Pointer to Ethernet device structure.
      94                 :            :  *
      95                 :            :  * @return
      96                 :            :  *   0 on success, a negative errno value otherwise and rte_errno is set.
      97                 :            :  */
      98                 :            : int
      99                 :          0 : mlx5_allmulticast_enable(struct rte_eth_dev *dev)
     100                 :            : {
     101                 :          0 :         struct mlx5_priv *priv = dev->data->dev_private;
     102                 :            :         int ret;
     103                 :            : 
     104                 :          0 :         dev->data->all_multicast = 1;
     105         [ #  # ]:          0 :         if (priv->isolated) {
     106                 :          0 :                 DRV_LOG(WARNING,
     107                 :            :                         "port %u cannot enable allmulticast mode"
     108                 :            :                         " in flow isolation mode",
     109                 :            :                         dev->data->port_id);
     110                 :          0 :                 return 0;
     111                 :            :         }
     112         [ #  # ]:          0 :         if (priv->sh->dev_cap.vf || priv->sh->dev_cap.sf) {
     113                 :          0 :                 ret = mlx5_os_set_allmulti(dev, 1);
     114         [ #  # ]:          0 :                 if (ret)
     115                 :          0 :                         goto error;
     116                 :            :         }
     117                 :          0 :         ret = mlx5_traffic_restart(dev);
     118         [ #  # ]:          0 :         if (ret)
     119                 :          0 :                 DRV_LOG(ERR, "port %u cannot enable allmulicast mode: %s",
     120                 :            :                         dev->data->port_id, strerror(rte_errno));
     121                 :          0 : error:
     122                 :            :         /*
     123                 :            :          * rte_eth_allmulticast_enable() rollback
     124                 :            :          * dev->data->all_multicast in the case of failure.
     125                 :            :          */
     126                 :            :         return ret;
     127                 :            : }
     128                 :            : 
     129                 :            : /**
     130                 :            :  * DPDK callback to disable allmulti mode.
     131                 :            :  *
     132                 :            :  * @param dev
     133                 :            :  *   Pointer to Ethernet device structure.
     134                 :            :  *
     135                 :            :  * @return
     136                 :            :  *   0 on success, a negative errno value otherwise and rte_errno is set.
     137                 :            :  */
     138                 :            : int
     139                 :          0 : mlx5_allmulticast_disable(struct rte_eth_dev *dev)
     140                 :            : {
     141                 :          0 :         struct mlx5_priv *priv = dev->data->dev_private;
     142                 :            :         int ret;
     143                 :            : 
     144                 :          0 :         dev->data->all_multicast = 0;
     145         [ #  # ]:          0 :         if (priv->sh->dev_cap.vf || priv->sh->dev_cap.sf) {
     146                 :          0 :                 ret = mlx5_os_set_allmulti(dev, 0);
     147         [ #  # ]:          0 :                 if (ret)
     148                 :          0 :                         goto error;
     149                 :            :         }
     150                 :          0 :         ret = mlx5_traffic_restart(dev);
     151         [ #  # ]:          0 :         if (ret)
     152                 :          0 :                 DRV_LOG(ERR, "port %u cannot disable allmulicast mode: %s",
     153                 :            :                         dev->data->port_id, strerror(rte_errno));
     154                 :          0 : error:
     155                 :            :         /*
     156                 :            :          * rte_eth_allmulticast_disable() rollback
     157                 :            :          * dev->data->all_multicast in the case of failure.
     158                 :            :          */
     159                 :          0 :         return ret;
     160                 :            : }

Generated by: LCOV version 1.14