Example #1
0
 def join_to_multicast(self, mc_addr=None, src_addr=None, extended=False):
     """
     Join the CMID to multicast group.
     :param mc_addr: The multicast IP address.
     :param src_addr: The CMIDs source address.
     :param extended: Use the join_multicast_ex API.
     """
     self.cm_res.cmid.bind_addr(self.cm_res.ai)
     resolve_addr_info = AddrInfo(src=src_addr, dst=mc_addr)
     self.cm_res.cmid.resolve_addr(resolve_addr_info)
     self.event_handler(expected_event=ce.RDMA_CM_EVENT_ADDR_RESOLVED)
     self.cm_res.create_qp()
     mc_addr_info = AddrInfo(src=mc_addr)
     if not extended:
         self.cm_res.cmid.join_multicast(addr=mc_addr_info)
     else:
         flags = ce.RDMA_MC_JOIN_FLAG_FULLMEMBER
         comp_mask = ce.RDMA_CM_JOIN_MC_ATTR_ADDRESS | \
                     ce.RDMA_CM_JOIN_MC_ATTR_JOIN_FLAGS
         mcattr = JoinMCAttrEx(addr=mc_addr_info,
                               comp_mask=comp_mask,
                               join_flags=flags)
         self.cm_res.cmid.join_multicast(mc_attr=mcattr)
     self.event_handler(expected_event=ce.RDMA_CM_EVENT_MULTICAST_JOIN)
     self.cm_res.create_mr()
Example #2
0
 def __init__(self, addr=None, passive=None, **kwargs):
     """
     :param addr: Local address to bind to.
     :param passive: Indicate if this CM is the passive CM.
     :param kwargs: Arguments:
         * *port* (str)
             Port number of the address
         * *with_ext_qp* (bool)
             If set, an external RC QP will be created and used by RDMACM
     """
     self.qp_init_attr = None
     self.passive = passive
     self.with_ext_qp = kwargs.get('with_ext_qp', False)
     self.port = kwargs.get('port') if kwargs.get('port') else '7471'
     self.port_space = ce.RDMA_PS_TCP
     self.qp_type = e.IBV_QPT_RC
     self.qp_init_attr = QPInitAttr(qp_type=self.qp_type, cap=QPCap())
     self.connected = False
     # When passive side (server) listens to incoming connection requests,
     # for each new request it creates a new cmid which is used to establish
     # the connection with the remote side
     self.child_id = None
     self.msg_size = 1024
     self.num_msgs = 10
     self.channel = None
     self.cq = None
     self.qp = None
     self.mr = None
     if self.passive:
         self.ai = AddrInfo(addr, None, self.port, self.port_space,
                            ce.RAI_PASSIVE)
     else:
         self.ai = AddrInfo(addr, addr, self.port, self.port_space)
Example #3
0
 def leave_multicast(self, mc_addr=None):
     """
     Leave multicast group.
     :param mc_addr: The multicast IP address.
     """
     mc_addr_info = AddrInfo(src=mc_addr)
     self.cm_res.cmid.leave_multicast(mc_addr_info)
Example #4
0
 def __init__(self, addr=None, passive=None, **kwargs):
     """
     :param addr: Local address to bind to.
     :param passive: Indicate if this CM is the passive CM.
     :param kwargs: Arguments:
         * *port* (str)
             Port number of the address
         * *with_ext_qp* (bool)
             If set, an external RC QP will be created and used by RDMACM
         * *port_space* (str)
             If set, indicates the CMIDs port space
     """
     self.qp_init_attr = None
     self.passive = passive
     self.with_ext_qp = kwargs.get('with_ext_qp', False)
     self.port = kwargs.get('port') if kwargs.get('port') else '7471'
     self.port_space = kwargs.get('port_space', ce.RDMA_PS_TCP)
     self.remote_operation = kwargs.get('remote_op')
     self.qp_type = qp_type_per_ps[self.port_space]
     self.qp_init_attr = QPInitAttr(qp_type=self.qp_type, cap=QPCap())
     self.connected = False
     # When passive side (server) listens to incoming connection requests,
     # for each new request it creates a new cmid which is used to establish
     # the connection with the remote side
     self.msg_size = 1024
     self.num_msgs = 10
     self.channel = None
     self.cq = None
     self.qps = {}
     self.mr = None
     self.remote_qpn = None
     self.ud_params = None
     self.child_ids = {}
     self.cmids = {}
     if self.passive:
         self.ai = AddrInfo(src=addr,
                            src_service=self.port,
                            port_space=self.port_space,
                            flags=ce.RAI_PASSIVE)
     else:
         self.ai = AddrInfo(src=addr,
                            dst=addr,
                            dst_service=self.port,
                            port_space=self.port_space)
Example #5
0
 def __init__(self, **kwargs):
     """
     :param kwargs: Arguments:
         * *src* (str)
            Local address to bind to (for passive side)
         * *dst* (str)
            Destination address to connect (for active side)
         * *port* (str)
             Port number of the address
         * *is_async* (bool)
             A flag which indicates if its asynchronous RDMACM
         * *with_ext_qp* (bool)
             If set, an external RC QP will be created and used by RDMACM
     """
     src = kwargs.get('src')
     dst = kwargs.get('dst')
     self.is_server = True if dst is None else False
     self.qp_init_attr = None
     self.is_async = kwargs.get('is_async', False)
     self.with_ext_qp = kwargs.get('with_ext_qp', False)
     self.connected = False
     # When passive side (server) listens to incoming connection requests,
     # for each new request it creates a new cmid which is used to establish
     # the connection with the remote side
     self.child_id = None
     self.msg_size = 1024
     self.num_msgs = 100
     self.channel = None
     self.cq = None
     self.qp = None
     self.port = kwargs.get('port') if kwargs.get('port') else '7471'
     self.mr = None
     if self.is_server:
         self.ai = AddrInfo(src, None, self.port, ce.RDMA_PS_TCP,
                            ce.RAI_PASSIVE)
     else:
         self.ai = AddrInfo(src, dst, self.port, ce.RDMA_PS_TCP)
     if self.is_async:
         self.create_event_channel()
         self.cmid = CMID(creator=self.channel)
     else:
         self.cmid = CMID(creator=self.ai,
                          qp_init_attr=self.create_qp_init_attr())
Example #6
0
 def __init__(self, **kwargs):
     """
     :param kwargs: Arguments:
         * *src* (str)
            Local address to bind to (for passive side)
         * *dst* (str)
            Destination address to connect (for active side)
         * *port* (str)
             Port number of the address
     """
     src = kwargs.get('src')
     dst = kwargs.get('dst')
     self.is_server = True if dst is None else False
     self.qp_init_attr = None
     self.msg_size = 1024
     self.num_msgs = 100
     self.port = kwargs.get('port') if kwargs.get('port') else '7471'
     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)