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()
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)
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)
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)
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())
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)