Skip to content

Commit

Permalink
tests: Move RDMACM tests to be in one direction
Browse files Browse the repository at this point in the history
[ Upstream commit 7d311d5 ]

Move RDMACM tests to be in one direction of traffic to prevent receiving
duplicate packets from the sender to itself.

Signed-off-by: Ido Kalir <[email protected]>
Signed-off-by: Edward Srouji <[email protected]>
Signed-off-by: Nicolas Morey <[email protected]>
  • Loading branch information
idokalir2030 authored and nmorey committed Aug 4, 2023
1 parent 4a4c4e4 commit 89bb258
Showing 1 changed file with 41 additions and 13 deletions.
54 changes: 41 additions & 13 deletions tests/rdmacm_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,16 @@ def rdmacm_traffic(self, server=None, multicast=False):
self._ext_qp_server_traffic()
else:
self._ext_qp_client_traffic()
elif multicast:
if server:
self._cmid_server_multicast_traffic()
else:
self._cmid_client_multicast_traffic()
else:
if server:
self._cmid_server_traffic(multicast)
self._cmid_server_traffic()
else:
self._cmid_client_traffic(multicast)
self._cmid_client_traffic()

def remote_traffic(self, passive, remote_op='write'):
"""
Expand Down Expand Up @@ -125,7 +130,7 @@ def _ext_qp_client_traffic(self):
msg_received = self.cm_res.mr.read(self.cm_res.msg_size, 0)
validate(msg_received, self.cm_res.passive, self.cm_res.msg_size)

def _cmid_server_traffic(self, multicast=False):
def _cmid_server_traffic(self):
"""
RDMACM server side traffic function which sends and receives a message,
and then validates the received message. This traffic method uses the
Expand All @@ -134,7 +139,7 @@ def _cmid_server_traffic(self, multicast=False):
"""
grh_offset = GRH_SIZE if self.cm_res.qp_type == e.IBV_QPT_UD else 0
send_msg = (self.cm_res.msg_size + grh_offset) * 's'
cmid = self.cm_res.child_id if not multicast else self.cm_res.cmid
cmid = self.cm_res.child_id
for _ in range(self.cm_res.num_msgs):
cmid.post_recv(self.cm_res.mr)
self.syncer.wait()
Expand All @@ -146,19 +151,15 @@ def _cmid_server_traffic(self, multicast=False):
self.cm_res.mr.write(send_msg, self.cm_res.msg_size)
cmid.post_send(self.cm_res.mr)
else:
if multicast:
ah = AH(cmid.pd, attr=self.cm_res.ud_params.ah_attr)
rqpn = MULTICAST_QPN
else:
ah = AH(cmid.pd, wc=wc, port_num=1, grh=self.cm_res.mr.buf)
rqpn = self.cm_res.remote_qpn
ah = AH(cmid.pd, wc=wc, port_num=1, grh=self.cm_res.mr.buf)
rqpn = self.cm_res.remote_qpn
self.cm_res.mr.write(send_msg, self.cm_res.msg_size + GRH_SIZE)
cmid.post_ud_send(self.cm_res.mr, ah, rqpn=rqpn,
length=self.cm_res.msg_size)
cmid.get_send_comp()
self.syncer.wait()

def _cmid_client_traffic(self, multicast=False):
def _cmid_client_traffic(self):
"""
RDMACM client side traffic function which sends and receives a message,
and then validates the received message. This traffic method uses the
Expand All @@ -175,8 +176,7 @@ def _cmid_client_traffic(self, multicast=False):
cmid.post_send(self.cm_res.mr)
else:
ah = AH(cmid.pd, attr=self.cm_res.ud_params.ah_attr)
rqpn = MULTICAST_QPN if multicast else self.cm_res.ud_params.qp_num
cmid.post_ud_send(self.cm_res.mr, ah, rqpn=rqpn,
cmid.post_ud_send(self.cm_res.mr, ah, rqpn=self.cm_res.ud_params.qp_num,
length=self.cm_res.msg_size)
cmid.get_send_comp()
cmid.post_recv(self.cm_res.mr)
Expand All @@ -186,6 +186,34 @@ def _cmid_client_traffic(self, multicast=False):
msg_received = self.cm_res.mr.read(self.cm_res.msg_size, grh_offset)
validate(msg_received, False, self.cm_res.msg_size)

def _cmid_server_multicast_traffic(self):
"""
RDMACM server side multicast traffic function which receives a message,
and then validates its data.
"""
for _ in range(self.cm_res.num_msgs):
self.cm_res.cmid.post_recv(self.cm_res.mr)
self.syncer.wait()
self.syncer.wait()
self.cm_res.cmid.get_recv_comp()
msg_received = self.cm_res.mr.read(self.cm_res.msg_size, GRH_SIZE)
validate(msg_received, True, self.cm_res.msg_size)

def _cmid_client_multicast_traffic(self):
"""
RDMACM client side multicast traffic function which sends a message to
the multicast group.
"""
send_msg = (self.cm_res.msg_size + GRH_SIZE) * 'c'
for _ in range(self.cm_res.num_msgs):
self.cm_res.mr.write(send_msg, self.cm_res.msg_size + GRH_SIZE)
self.syncer.wait()
ah = AH(self.cm_res.cmid.pd, attr=self.cm_res.ud_params.ah_attr)
self.cm_res.cmid.post_ud_send(self.cm_res.mr, ah, rqpn=MULTICAST_QPN,
length=self.cm_res.msg_size)
self.cm_res.cmid.get_send_comp()
self.syncer.wait()

def event_handler(self, expected_event=None):
"""
Handle and execute corresponding API for RDMACM events of asynchronous
Expand Down

0 comments on commit 89bb258

Please sign in to comment.