def to_rts(self): """ Set the QP attributes' values to arbitrary values (same values used in ibv_rc_pingpong). :return: None """ attr = QPAttr(port_num=self.ib_port) attr.dest_qp_num = self.rqpn attr.path_mtu = PATH_MTU attr.max_dest_rd_atomic = MAX_DEST_RD_ATOMIC attr.min_rnr_timer = MIN_RNR_TIMER attr.rq_psn = self.psn attr.sq_psn = self.rpsn attr.timeout = TIMEOUT attr.retry_cnt = RETRY_CNT attr.rnr_retry = RNR_RETRY attr.max_rd_atomic = MAX_RD_ATOMIC gr = GlobalRoute(dgid=self.ctx.query_gid(self.ib_port, self.gid_index), sgid_index=self.gid_index) ah_attr = AHAttr(port_num=self.ib_port, is_global=1, gr=gr, dlid=self.port_attr.lid) attr.ah_attr = ah_attr self.qp.to_rts(attr)
def get_global_ah(agr_obj, gid_index, port): gr = GlobalRoute(dgid=agr_obj.ctx.query_gid(port, gid_index), sgid_index=gid_index) ah_attr = AHAttr(port_num=port, is_global=1, gr=gr, dlid=agr_obj.port_attr.lid) return AH(agr_obj.pd, attr=ah_attr)
def create_qp_attr(self): qp_attr = QPAttr(port_num=self.ib_port) set_rnr_attributes(qp_attr) qp_access = e.IBV_ACCESS_LOCAL_WRITE | e.IBV_ACCESS_REMOTE_WRITE qp_attr.qp_access_flags = qp_access gr = GlobalRoute(dgid=self.ctx.query_gid(self.ib_port, self.gid_index), sgid_index=self.gid_index) ah_attr = AHAttr(port_num=self.ib_port, is_global=1, gr=gr, dlid=self.port_attr.lid) qp_attr.ah_attr = ah_attr return qp_attr
def get_global_route(ctx, gid_index=0, port_num=1): """ Queries the provided Context's gid <gid_index> and creates a GlobalRoute object with sgid_index <gid_index> and the queried GID as dgid. :param ctx: Context object to query :param gid_index: GID index to query and use. Default: 0, as it's always valid :param port_num: Number of the port to query. Default: 1 :return: GlobalRoute object """ gid = ctx.query_gid(port_num, gid_index) gr = GlobalRoute(dgid=gid, sgid_index=gid_index) return gr
def get_global_route(ctx, gid_index=0, port_num=1): """ Queries the provided Context's gid <gid_index> and creates a GlobalRoute object with sgid_index <gid_index> and the queried GID as dgid. :param ctx: Context object to query :param gid_index: GID index to query and use. Default: 0, as it's always valid :param port_num: Number of the port to query. Default: 1 :return: GlobalRoute object """ if ctx.query_port(port_num).gid_tbl_len == 0: raise unittest.SkipTest(f'Not supported without GID table') gid = ctx.query_gid(port_num, gid_index) gr = GlobalRoute(dgid=gid, sgid_index=gid_index) return gr
def to_rts(self): gid = self.ctx.query_gid(self.ib_port, self.gid_index) gr = GlobalRoute(dgid=gid, sgid_index=self.gid_index) ah_attr = AHAttr(port_num=self.ib_port, is_global=True, gr=gr, dlid=self.port_attr.lid) qp_attr = QPAttr() qp_attr.path_mtu = PATH_MTU set_rnr_attributes(qp_attr) qp_attr.ah_attr = ah_attr for i in range(self.qp_count): qp_attr.dest_qp_num = self.rqps_num[i][1] qp_attr.rq_psn = self.psns[i] qp_attr.sq_psn = self.rpsns[i] self.rqp_lst[i].to_rts(qp_attr) qp_attr.dest_qp_num = self.rqps_num[i][0] self.sqp_lst[i].to_rts(qp_attr)
def to_rts(self): gid = self.ctx.query_gid(self.ib_port, self.gid_index) gr = GlobalRoute(dgid=gid, sgid_index=self.gid_index) ah_attr = AHAttr(port_num=self.ib_port, is_global=True, gr=gr, dlid=self.port_attr.lid) qp_attr = QPAttr() qp_attr.path_mtu = PATH_MTU qp_attr.timeout = TIMEOUT qp_attr.retry_cnt = RETRY_CNT qp_attr.rnr_retry = RNR_RETRY qp_attr.min_rnr_timer = MIN_RNR_TIMER qp_attr.ah_attr = ah_attr for i in range(self.qp_count): qp_attr.dest_qp_num = self.rqps_num[i][1] qp_attr.rq_psn = self.psns[i] qp_attr.sq_psn = self.rpsns[i] self.rqp_lst[i].to_rts(qp_attr) qp_attr.dest_qp_num = self.rqps_num[i][0] self.sqp_lst[i].to_rts(qp_attr)
def post_send(agr_obj, send_wr, gid_index, port): """ Post a single send WR to the QP. Post_send's second parameter (send bad wr) is ignored for simplicity. For UD traffic an address vector is added as well. :param agr_obj: aggregation object which contains all resources necessary :param send_wr: Send work request to post send :param gid_index: Local gid index :param port: IB port number :return: None """ qp_type = agr_obj.qp.qp_type if qp_type == e.IBV_QPT_UD: gr = GlobalRoute(dgid=agr_obj.ctx.query_gid(port, gid_index), sgid_index=gid_index) ah_attr = AHAttr(port_num=port, is_global=1, gr=gr, dlid=agr_obj.port_attr.lid) ah = AH(agr_obj.pd, attr=ah_attr) send_wr.set_wr_ud(ah, agr_obj.rqpn, agr_obj.UD_QKEY) agr_obj.qp.post_send(send_wr, None)
def to_rts(self): """ Set the QP attributes' values to arbitrary values (same values used in ibv_rc_pingpong). :return: None """ attr = self.create_qp_attr() attr.path_mtu = PATH_MTU attr.max_dest_rd_atomic = MAX_DEST_RD_ATOMIC set_rnr_attributes(attr) attr.max_rd_atomic = MAX_RD_ATOMIC gr = GlobalRoute(dgid=self.ctx.query_gid(self.ib_port, self.gid_index), sgid_index=self.gid_index) ah_attr = AHAttr(port_num=self.ib_port, is_global=1, gr=gr, dlid=self.port_attr.lid) attr.ah_attr = ah_attr for i in range(self.qp_count): attr.dest_qp_num = self.rqps_num[i] attr.rq_psn = self.psns[i] attr.sq_psn = self.rpsns[i] self.qps[i].to_rts(attr)