Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
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)
Ejemplo n.º 9
0
 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)