ethdev: move jumbo frame offload check to library
Setting MTU bigger than RTE_ETHER_MTU requires the jumbo frame support, and application should enable the jumbo frame offload support for it. When jumbo frame offload is not enabled by application, but MTU bigger than RTE_ETHER_MTU is requested there are two options, either fail or enable jumbo frame offload implicitly. Enabling jumbo frame offload implicitly is selected by many drivers since setting a big MTU value already implies it, and this increases usability. This patch moves this logic from drivers to the library, both to reduce the duplicated code in the drivers and to make behaviour more visible. Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com> Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> Reviewed-by: Rosen Xu <rosen.xu@intel.com> Acked-by: Ajit Khaparde <ajit.khaparde@broadcom.com> Acked-by: Somnath Kotur <somnath.kotur@broadcom.com> Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com> Acked-by: Huisong Li <lihuisong@huawei.com>
This commit is contained in:
parent
1bb4a528c4
commit
dd4e429c95
@ -1492,15 +1492,10 @@ static int axgb_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
dev->data->port_id);
|
||||
return -EBUSY;
|
||||
}
|
||||
if (mtu > RTE_ETHER_MTU) {
|
||||
dev->data->dev_conf.rxmode.offloads |=
|
||||
DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
val = 1;
|
||||
} else {
|
||||
dev->data->dev_conf.rxmode.offloads &=
|
||||
~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
val = 0;
|
||||
}
|
||||
AXGMAC_IOWRITE_BITS(pdata, MAC_RCR, JE, val);
|
||||
return 0;
|
||||
}
|
||||
|
@ -3056,15 +3056,10 @@ int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev, uint16_t new_mtu)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (new_mtu > RTE_ETHER_MTU) {
|
||||
if (new_mtu > RTE_ETHER_MTU)
|
||||
bp->flags |= BNXT_FLAG_JUMBO;
|
||||
bp->eth_dev->data->dev_conf.rxmode.offloads |=
|
||||
DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
} else {
|
||||
bp->eth_dev->data->dev_conf.rxmode.offloads &=
|
||||
~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
bp->flags &= ~BNXT_FLAG_JUMBO;
|
||||
}
|
||||
|
||||
/* Is there a change in mtu setting? */
|
||||
if (eth_dev->data->mtu == new_mtu)
|
||||
|
@ -439,11 +439,6 @@ cnxk_nix_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu)
|
||||
plt_err("Failed to max Rx frame length, rc=%d", rc);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
dev->rx_offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
dev->rx_offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
exit:
|
||||
return rc;
|
||||
}
|
||||
|
@ -313,14 +313,6 @@ int cxgbe_dev_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu)
|
||||
if (mtu < RTE_ETHER_MIN_MTU || new_mtu > dev_info.max_rx_pktlen)
|
||||
return -EINVAL;
|
||||
|
||||
/* set to jumbo mode if needed */
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
eth_dev->data->dev_conf.rxmode.offloads |=
|
||||
DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
eth_dev->data->dev_conf.rxmode.offloads &=
|
||||
~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
|
||||
err = t4_set_rxmode(adapter, adapter->mbox, pi->viid, new_mtu, -1, -1,
|
||||
-1, -1, true);
|
||||
return err;
|
||||
|
@ -187,13 +187,6 @@ dpaa_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
dev->data->dev_conf.rxmode.offloads |=
|
||||
DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
dev->data->dev_conf.rxmode.offloads &=
|
||||
~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
|
||||
fman_if_set_maxfrm(dev->process_private, frame_size);
|
||||
|
||||
return 0;
|
||||
|
@ -1465,13 +1465,6 @@ dpaa2_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
if (mtu < RTE_ETHER_MIN_MTU || frame_size > DPAA2_MAX_RX_PKT_LEN)
|
||||
return -EINVAL;
|
||||
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
dev->data->dev_conf.rxmode.offloads |=
|
||||
DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
dev->data->dev_conf.rxmode.offloads &=
|
||||
~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
|
||||
/* Set the Max Rx frame length as 'mtu' +
|
||||
* Maximum Ethernet header length
|
||||
*/
|
||||
|
@ -1816,15 +1816,10 @@ eth_em_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
rctl = E1000_READ_REG(hw, E1000_RCTL);
|
||||
|
||||
/* switch to jumbo mode if needed */
|
||||
if (mtu > RTE_ETHER_MTU) {
|
||||
dev->data->dev_conf.rxmode.offloads |=
|
||||
DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
rctl |= E1000_RCTL_LPE;
|
||||
} else {
|
||||
dev->data->dev_conf.rxmode.offloads &=
|
||||
~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
rctl &= ~E1000_RCTL_LPE;
|
||||
}
|
||||
E1000_WRITE_REG(hw, E1000_RCTL, rctl);
|
||||
|
||||
return 0;
|
||||
|
@ -4392,15 +4392,10 @@ eth_igb_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
rctl = E1000_READ_REG(hw, E1000_RCTL);
|
||||
|
||||
/* switch to jumbo mode if needed */
|
||||
if (mtu > RTE_ETHER_MTU) {
|
||||
dev->data->dev_conf.rxmode.offloads |=
|
||||
DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
rctl |= E1000_RCTL_LPE;
|
||||
} else {
|
||||
dev->data->dev_conf.rxmode.offloads &=
|
||||
~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
rctl &= ~E1000_RCTL_LPE;
|
||||
}
|
||||
E1000_WRITE_REG(hw, E1000_RCTL, rctl);
|
||||
|
||||
E1000_WRITE_REG(hw, E1000_RLPML, frame_size);
|
||||
|
@ -681,13 +681,6 @@ enetc_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
dev->data->dev_conf.rxmode.offloads &=
|
||||
DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
dev->data->dev_conf.rxmode.offloads &=
|
||||
~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
|
||||
enetc_port_wr(enetc_hw, ENETC_PTCMSDUR(0), ENETC_MAC_MAXFRM_SIZE);
|
||||
enetc_port_wr(enetc_hw, ENETC_PTXMBAR, 2 * ENETC_MAC_MAXFRM_SIZE);
|
||||
|
||||
|
@ -1551,13 +1551,6 @@ static int hinic_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
dev->data->dev_conf.rxmode.offloads |=
|
||||
DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
dev->data->dev_conf.rxmode.offloads &=
|
||||
~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
|
||||
nic_dev->mtu_size = mtu;
|
||||
|
||||
return ret;
|
||||
|
@ -2566,7 +2566,6 @@ hns3_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
struct hns3_adapter *hns = dev->data->dev_private;
|
||||
uint32_t frame_size = mtu + HNS3_ETH_OVERHEAD;
|
||||
struct hns3_hw *hw = &hns->hw;
|
||||
bool is_jumbo_frame;
|
||||
int ret;
|
||||
|
||||
if (dev->data->dev_started) {
|
||||
@ -2576,7 +2575,6 @@ hns3_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
}
|
||||
|
||||
rte_spinlock_lock(&hw->lock);
|
||||
is_jumbo_frame = mtu > RTE_ETHER_MTU ? true : false;
|
||||
frame_size = RTE_MAX(frame_size, HNS3_DEFAULT_FRAME_LEN);
|
||||
|
||||
/*
|
||||
@ -2591,12 +2589,6 @@ hns3_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (is_jumbo_frame)
|
||||
dev->data->dev_conf.rxmode.offloads |=
|
||||
DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
dev->data->dev_conf.rxmode.offloads &=
|
||||
~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
rte_spinlock_unlock(&hw->lock);
|
||||
|
||||
return 0;
|
||||
|
@ -908,12 +908,6 @@ hns3vf_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
rte_spinlock_unlock(&hw->lock);
|
||||
return ret;
|
||||
}
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
dev->data->dev_conf.rxmode.offloads |=
|
||||
DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
dev->data->dev_conf.rxmode.offloads &=
|
||||
~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
rte_spinlock_unlock(&hw->lock);
|
||||
|
||||
return 0;
|
||||
|
@ -11437,11 +11437,6 @@ i40e_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
dev_data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
dev_data->dev_conf.rxmode.offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1473,13 +1473,6 @@ iavf_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
dev->data->dev_conf.rxmode.offloads |=
|
||||
DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
dev->data->dev_conf.rxmode.offloads &=
|
||||
~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -3992,11 +3992,6 @@ ice_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
dev_data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
dev_data->dev_conf.rxmode.offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1591,15 +1591,10 @@ eth_igc_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
}
|
||||
|
||||
rctl = IGC_READ_REG(hw, IGC_RCTL);
|
||||
|
||||
/* switch to jumbo mode if needed */
|
||||
if (mtu > RTE_ETHER_MTU) {
|
||||
dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
rctl |= IGC_RCTL_LPE;
|
||||
} else {
|
||||
dev->data->dev_conf.rxmode.offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
rctl &= ~IGC_RCTL_LPE;
|
||||
}
|
||||
IGC_WRITE_REG(hw, IGC_RCTL, rctl);
|
||||
|
||||
IGC_WRITE_REG(hw, IGC_RLPML, frame_size);
|
||||
|
@ -2791,11 +2791,6 @@ ipn3ke_rpst_mtu_set(struct rte_eth_dev *ethdev, uint16_t mtu)
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
dev_data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
dev_data->dev_conf.rxmode.offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
|
||||
if (rpst->i40e_pf_eth) {
|
||||
ret = rpst->i40e_pf_eth->dev_ops->mtu_set(rpst->i40e_pf_eth,
|
||||
mtu);
|
||||
|
@ -5189,13 +5189,10 @@ ixgbe_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
|
||||
|
||||
/* switch to jumbo mode if needed */
|
||||
if (mtu > RTE_ETHER_MTU) {
|
||||
dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
hlreg0 |= IXGBE_HLREG0_JUMBOEN;
|
||||
} else {
|
||||
dev->data->dev_conf.rxmode.offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
hlreg0 &= ~IXGBE_HLREG0_JUMBOEN;
|
||||
}
|
||||
IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
|
||||
|
||||
maxfrs = IXGBE_READ_REG(hw, IXGBE_MAXFRS);
|
||||
|
@ -480,13 +480,6 @@ lio_dev_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
eth_dev->data->dev_conf.rxmode.offloads |=
|
||||
DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
eth_dev->data->dev_conf.rxmode.offloads &=
|
||||
~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -962,12 +962,6 @@ nfp_net_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
/* switch to jumbo mode if needed */
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
dev->data->dev_conf.rxmode.offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
|
||||
/* writing to configuration space */
|
||||
nn_cfg_writel(hw, NFP_NET_CFG_MTU, mtu);
|
||||
|
||||
|
@ -552,11 +552,6 @@ octeontx_dev_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu)
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
nic->rx_offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
nic->rx_offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
|
||||
octeontx_log_info("Received pkt beyond maxlen %d will be dropped",
|
||||
frame_size);
|
||||
|
||||
|
@ -59,11 +59,6 @@ otx2_nix_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu)
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
dev->rx_offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
dev->rx_offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -2361,10 +2361,6 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
fp->rxq->rx_buf_size = rc;
|
||||
}
|
||||
}
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
dev->data->dev_conf.rxmode.offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
|
||||
if (!dev->data->dev_started && restart) {
|
||||
qede_dev_start(dev);
|
||||
|
@ -1140,15 +1140,6 @@ sfc_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* The driver does not use it, but other PMDs update jumbo frame
|
||||
* flag when MTU is set.
|
||||
*/
|
||||
if (mtu > RTE_ETHER_MTU) {
|
||||
struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode;
|
||||
rxmode->offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
}
|
||||
|
||||
sfc_adapter_unlock(sa);
|
||||
|
||||
sfc_log_init(sa, "done");
|
||||
|
@ -151,7 +151,6 @@ nicvf_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
struct nicvf *nic = nicvf_pmd_priv(dev);
|
||||
uint32_t buffsz, frame_size = mtu + NIC_HW_L2_OVERHEAD;
|
||||
size_t i;
|
||||
struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode;
|
||||
|
||||
PMD_INIT_FUNC_TRACE();
|
||||
|
||||
@ -176,11 +175,6 @@ nicvf_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
(frame_size + 2 * VLAN_TAG_SIZE > buffsz * NIC_HW_MAX_SEGS))
|
||||
return -EINVAL;
|
||||
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
rxmode->offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
rxmode->offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
|
||||
if (nicvf_mbox_update_hw_max_frs(nic, mtu))
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -3482,12 +3482,6 @@ txgbe_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* switch to jumbo mode if needed */
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
dev->data->dev_conf.rxmode.offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
|
||||
if (hw->mode)
|
||||
wr32m(hw, TXGBE_FRMSZ, TXGBE_FRMSZ_MAX_MASK,
|
||||
TXGBE_FRAME_SIZE_MAX);
|
||||
|
@ -3647,6 +3647,7 @@ rte_eth_dev_set_mtu(uint16_t port_id, uint16_t mtu)
|
||||
int ret;
|
||||
struct rte_eth_dev_info dev_info;
|
||||
struct rte_eth_dev *dev;
|
||||
int is_jumbo_frame_capable = 0;
|
||||
|
||||
RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
|
||||
dev = &rte_eth_devices[port_id];
|
||||
@ -3665,12 +3666,27 @@ rte_eth_dev_set_mtu(uint16_t port_id, uint16_t mtu)
|
||||
|
||||
if (mtu < dev_info.min_mtu || mtu > dev_info.max_mtu)
|
||||
return -EINVAL;
|
||||
|
||||
if ((dev_info.rx_offload_capa & DEV_RX_OFFLOAD_JUMBO_FRAME) != 0)
|
||||
is_jumbo_frame_capable = 1;
|
||||
}
|
||||
|
||||
if (mtu > RTE_ETHER_MTU && is_jumbo_frame_capable == 0)
|
||||
return -EINVAL;
|
||||
|
||||
ret = (*dev->dev_ops->mtu_set)(dev, mtu);
|
||||
if (!ret)
|
||||
if (ret == 0) {
|
||||
dev->data->mtu = mtu;
|
||||
|
||||
/* switch to jumbo mode if needed */
|
||||
if (mtu > RTE_ETHER_MTU)
|
||||
dev->data->dev_conf.rxmode.offloads |=
|
||||
DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
else
|
||||
dev->data->dev_conf.rxmode.offloads &=
|
||||
~DEV_RX_OFFLOAD_JUMBO_FRAME;
|
||||
}
|
||||
|
||||
return eth_err(port_id, ret);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user