@@ -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