pyverbs: Fix Ipv6Spec class
[ Upstream commit 8cc243e8b073ede1692085fe200882e403970d24 ]
Fix setting dst/src IP attributes when they are not provided.
Fixes: 3b0815f510d9 ("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>
diff --git a/pyverbs/spec.pyx b/pyverbs/spec.pyx
index 404bf06..43bdeeb 100644
--- a/pyverbs/spec.pyx
+++ b/pyverbs/spec.pyx
@@ -444,7 +444,7 @@
cdef class Ipv6Spec(Spec):
- EMPTY_IPV6 = [0] * 16
+ EMPTY_IPV6 = '::'
IPV6_MASK = ("ffff:" * 8)[:-1]
FLOW_LABEL_MASK = 0xfffff
@@ -476,9 +476,21 @@
self.spec_type |= v.IBV_FLOW_SPEC_INNER
self.size = sizeof(v.ibv_flow_spec_ipv6)
- self.dst_ip, self.dst_ip_mask = self._set_val_mask(self.IPV6_MASK,
+ if dst_ip is None:
+ def_dst_ip_mask = self.EMPTY_IPV6
+ dst_ip = '::'
+ else:
+ def_dst_ip_mask = self.IPV6_MASK
+
+ if src_ip is None:
+ def_src_ip_mask = self.EMPTY_IPV6
+ src_ip = '::'
+ else:
+ def_src_ip_mask = self.IPV6_MASK
+
+ self.dst_ip, self.dst_ip_mask = self._set_val_mask(def_dst_ip_mask,
dst_ip, dst_ip_mask)
- self.src_ip, self.src_ip_mask = self._set_val_mask(self.IPV6_MASK,
+ self.src_ip, self.src_ip_mask = self._set_val_mask(def_src_ip_mask,
src_ip, src_ip_mask)
self.val.flow_label, self.mask.flow_label = \
map(socket.htonl, self._set_val_mask(self.FLOW_LABEL_MASK,
@@ -492,7 +504,7 @@
@property
def dst_ip(self):
- return socket.inet_ntop(socket.AF_INET6, self.val.dst_ip)
+ return socket.inet_ntop(socket.AF_INET6, self.val.dst_ip[:16])
@dst_ip.setter
def dst_ip(self, val):
@@ -500,7 +512,7 @@
@property
def dst_ip_mask(self):
- return socket.inet_ntop(socket.AF_INET6, self.mask.dst_ip)
+ return socket.inet_ntop(socket.AF_INET6, self.mask.dst_ip[:16])
@dst_ip_mask.setter
def dst_ip_mask(self, val):
@@ -508,7 +520,7 @@
@property
def src_ip(self):
- return socket.inet_ntop(socket.AF_INET6, self.val.src_ip)
+ return socket.inet_ntop(socket.AF_INET6, self.val.src_ip[:16])
@src_ip.setter
def src_ip(self, val):
@@ -516,7 +528,7 @@
@property
def src_ip_mask(self):
- return socket.inet_ntop(socket.AF_INET6, self.mask.src_ip)
+ return socket.inet_ntop(socket.AF_INET6, self.mask.src_ip[:16])
@src_ip_mask.setter
def src_ip_mask(self, val):