1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
import unittest
import errno
from tests.base import BaseResources, RCResources, UDResources
from pyverbs.qp import QP, QPAttr, QPInitAttr, QPCap
from pyverbs.pyverbs_error import PyverbsRDMAError
from pyverbs.providers.mlx5.mlx5dv import Mlx5QP
from tests.mlx5_base import Mlx5RDMATestCase
import tests.utils as u
from pyverbs.libibverbs_enums import ibv_qp_type
from pyverbs.cq import CQ
class LagRawQP(BaseResources):
def __init__(self, dev_name, ib_port):
super().__init__(dev_name, ib_port, None)
self.cq = self.create_cq()
self.qp = self.create_qp()
def create_cq(self):
return CQ(self.ctx, 100)
@u.requires_cap_net_raw()
@u.requires_eth()
def create_qp(self):
qia = QPInitAttr(ibv_qp_type.IBV_QPT_RAW_PACKET, rcq=self.cq, scq=self.cq,
cap=QPCap())
try:
qp = QP(self.pd, qia)
except PyverbsRDMAError as ex:
if ex.error_code == errno.EOPNOTSUPP:
raise unittest.SkipTest("Create Raw Packet QP is not supported")
raise ex
qp.to_init(QPAttr(port_num=self.ib_port))
return qp
class LagPortTestCase(Mlx5RDMATestCase):
def setUp(self):
super().setUp()
self.iters = 10
self.server = None
self.client = None
def modify_lag(self, resources):
try:
port_num, active_port_num = Mlx5QP.query_lag_port(resources.qp)
# if port_num is 1 - modify to 2, else modify to 1
new_port_num = (2 - port_num) + 1
Mlx5QP.modify_lag_port(resources.qp, new_port_num)
port_num, active_port_num = Mlx5QP.query_lag_port(resources.qp)
self.assertEqual(port_num, new_port_num, 'Port num is not as expected')
except PyverbsRDMAError as ex:
if ex.error_code == errno.EOPNOTSUPP:
raise unittest.SkipTest('Set LAG affinity is not supported on this device')
raise ex
def test_raw_modify_lag_port(self):
qp = LagRawQP(self.dev_name, self.ib_port)
self.modify_lag(qp)
def create_players(self, resource, **resource_arg):
"""
Initialize tests resources.
:param resource: The RDMA resources to use.
:param resource_arg: Dictionary of args that specify the resource
specific attributes.
:return: None
"""
super().create_players(resource, **resource_arg)
self.modify_lag(self.client)
self.modify_lag(self.server)
def test_rc_modify_lag_port(self):
self.create_players(RCResources)
u.traffic(**self.traffic_args)
def test_ud_modify_lag_port(self):
self.create_players(UDResources)
u.traffic(**self.traffic_args)
|