From: Maxim Chicherin <maximc@xxxxxxxxxxxx> A base aggregation object for RDMACM. Currently only synchronous data path flow is supported. Signed-off-by: Maxim Chicherin <maximc@xxxxxxxxxxxx> --- tests/base.py | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/tests/base.py b/tests/base.py index e4e92fa2a35f..54bfc42ffe4c 100755 --- a/tests/base.py +++ b/tests/base.py @@ -11,13 +11,16 @@ from pyverbs.qp import QPCap, QPInitAttrEx, QPInitAttr, QPAttr, QP from pyverbs.addr import AHAttr, GlobalRoute from pyverbs.xrcd import XRCD, XRCDInitAttr from pyverbs.srq import SRQ, SrqInitAttrEx +from pyverbs.cmid import CMID, AddrInfo from pyverbs.device import Context +import pyverbs.cm_enums as ce import pyverbs.device as d import pyverbs.enums as e from pyverbs.pd import PD from pyverbs.cq import CQ from pyverbs.mr import MR + PATH_MTU = e.IBV_MTU_1024 MAX_DEST_RD_ATOMIC = 1 MAX_RD_ATOMIC = 1 @@ -26,6 +29,10 @@ RETRY_CNT = 7 RNR_RETRY = 7 TIMEOUT = 14 +# for rdmacm +PORT = '7471' +ZERO_ADDR = '0.0.0.0' + class PyverbsAPITestCase(unittest.TestCase): def setUp(self): @@ -144,6 +151,51 @@ class RDMATestCase(unittest.TestCase): self._add_gids_per_port(ctx, dev, port+1) +class CMResources: + """ + CMResources class is a base aggregator object which contains basic + resources for RDMA CM communication. + """ + def __init__(self, src=ZERO_ADDR, dst=ZERO_ADDR, port=PORT): + """ + :param src: Local address to bind to (for passive side) + :param dst: Destination address to connect (for active side) + :param port: Port number of the address + """ + self.is_server = True if dst == ZERO_ADDR else False + self.qp_init_attr = None + self.msg_size = 1024 + self.num_msgs = 100 + self.new_id = None + self.port = port + self.mr = None + if self.is_server: + self.ai = AddrInfo(src, self.port, ce.RDMA_PS_TCP, + ce.RAI_PASSIVE) + else: + self.ai = AddrInfo(dst, self.port, ce.RDMA_PS_TCP) + self.create_qp_init_attr() + self.cmid = CMID(creator=self.ai, qp_init_attr=self.qp_init_attr) + + def create_mr(self, cmid): + self.mr = cmid.reg_msgs(self.msg_size) + + def create_qp_init_attr(self): + self.qp_init_attr = QPInitAttr(cap=QPCap(max_recv_wr=1)) + + def listen(self): + self.cmid.listen() + self.new_id = self.cmid.get_request() + self.new_id.accept() + + def pre_run(self): + if self.is_server: + self.listen() + else: + self.cmid.connect() + self.create_mr(self.new_id if self.is_server else self.cmid) + + class BaseResources(object): """ BaseResources class is a base aggregator object which contains basic -- 2.21.0