Skip to content

Commit a5fc13f

Browse files
Maxim Chicherinnmorey
authored andcommitted
pyverbs: Fix Ipv6Spec class
[ Upstream commit 8cc243e ] Fix setting dst/src IP attributes when they are not provided. Fixes: 3b0815f ("pyverbs: Add basic specs for ibv_flow usage") Signed-off-by: Maxim Chicherin <maximc@nvidia.com> Signed-off-by: Edward Srouji <edwards@nvidia.com> Signed-off-by: Nicolas Morey <nmorey@suse.com>
1 parent 611a4f5 commit a5fc13f

1 file changed

Lines changed: 19 additions & 7 deletions

File tree

pyverbs/spec.pyx

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@ cdef class TcpUdpSpec(Spec):
444444

445445

446446
cdef class Ipv6Spec(Spec):
447-
EMPTY_IPV6 = [0] * 16
447+
EMPTY_IPV6 = '::'
448448
IPV6_MASK = ("ffff:" * 8)[:-1]
449449
FLOW_LABEL_MASK = 0xfffff
450450

@@ -476,9 +476,21 @@ cdef class Ipv6Spec(Spec):
476476
self.spec_type |= v.IBV_FLOW_SPEC_INNER
477477
self.size = sizeof(v.ibv_flow_spec_ipv6)
478478

479-
self.dst_ip, self.dst_ip_mask = self._set_val_mask(self.IPV6_MASK,
479+
if dst_ip is None:
480+
def_dst_ip_mask = self.EMPTY_IPV6
481+
dst_ip = '::'
482+
else:
483+
def_dst_ip_mask = self.IPV6_MASK
484+
485+
if src_ip is None:
486+
def_src_ip_mask = self.EMPTY_IPV6
487+
src_ip = '::'
488+
else:
489+
def_src_ip_mask = self.IPV6_MASK
490+
491+
self.dst_ip, self.dst_ip_mask = self._set_val_mask(def_dst_ip_mask,
480492
dst_ip, dst_ip_mask)
481-
self.src_ip, self.src_ip_mask = self._set_val_mask(self.IPV6_MASK,
493+
self.src_ip, self.src_ip_mask = self._set_val_mask(def_src_ip_mask,
482494
src_ip, src_ip_mask)
483495
self.val.flow_label, self.mask.flow_label = \
484496
map(socket.htonl, self._set_val_mask(self.FLOW_LABEL_MASK,
@@ -492,31 +504,31 @@ cdef class Ipv6Spec(Spec):
492504

493505
@property
494506
def dst_ip(self):
495-
return socket.inet_ntop(socket.AF_INET6, self.val.dst_ip)
507+
return socket.inet_ntop(socket.AF_INET6, self.val.dst_ip[:16])
496508

497509
@dst_ip.setter
498510
def dst_ip(self, val):
499511
self.val.dst_ip = socket.inet_pton(socket.AF_INET6, val)
500512

501513
@property
502514
def dst_ip_mask(self):
503-
return socket.inet_ntop(socket.AF_INET6, self.mask.dst_ip)
515+
return socket.inet_ntop(socket.AF_INET6, self.mask.dst_ip[:16])
504516

505517
@dst_ip_mask.setter
506518
def dst_ip_mask(self, val):
507519
self.mask.dst_ip = socket.inet_pton(socket.AF_INET6, val)
508520

509521
@property
510522
def src_ip(self):
511-
return socket.inet_ntop(socket.AF_INET6, self.val.src_ip)
523+
return socket.inet_ntop(socket.AF_INET6, self.val.src_ip[:16])
512524

513525
@src_ip.setter
514526
def src_ip(self, val):
515527
self.val.src_ip = socket.inet_pton(socket.AF_INET6, val)
516528

517529
@property
518530
def src_ip_mask(self):
519-
return socket.inet_ntop(socket.AF_INET6, self.mask.src_ip)
531+
return socket.inet_ntop(socket.AF_INET6, self.mask.src_ip[:16])
520532

521533
@src_ip_mask.setter
522534
def src_ip_mask(self, val):

0 commit comments

Comments
 (0)