aboutsummaryrefslogtreecommitdiff
path: root/test/py
diff options
context:
space:
mode:
authorJohn Levon <john.levon@nutanix.com>2021-05-25 17:03:27 +0100
committerGitHub <noreply@github.com>2021-05-25 17:03:27 +0100
commitbd32c19beaac4007207b682e2d9e55ddeea5a5f6 (patch)
tree95c186a26ac8f879208c75eaa253e1493cf51825 /test/py
parent4cc22bfd12ab10c1fbf20dd9d7b0633fb848bd9e (diff)
downloadlibvfio-user-bd32c19beaac4007207b682e2d9e55ddeea5a5f6.zip
libvfio-user-bd32c19beaac4007207b682e2d9e55ddeea5a5f6.tar.gz
libvfio-user-bd32c19beaac4007207b682e2d9e55ddeea5a5f6.tar.bz2
cleanup some python tests (#482)
As suggested by Thanos, replace hard-coded struct.pack() with ctypes.Structure objects so it's much clearer what the data being constructed is. Replace some hard-coded unpacking with code based on ctypes::from_buffer_copy(), but in a form that allows us to "pop" a structure from a longer buffer. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
Diffstat (limited to 'test/py')
-rw-r--r--test/py/libvfio_user.py88
-rw-r--r--test/py/test_device_get_info.py5
-rw-r--r--test/py/test_device_get_region_info.py65
-rw-r--r--test/py/test_device_set_irqs.py153
4 files changed, 183 insertions, 128 deletions
diff --git a/test/py/libvfio_user.py b/test/py/libvfio_user.py
index 9faaf83..a73c228 100644
--- a/test/py/libvfio_user.py
+++ b/test/py/libvfio_user.py
@@ -178,6 +178,18 @@ libc = c.CDLL("libc.so.6", use_errno=True)
#
# Structures
#
+
+class Structure(c.Structure):
+ def __len__(self):
+ """Handy method to return length in bytes."""
+ return len(bytes(self))
+
+ @classmethod
+ def pop_from_buffer(cls, buf):
+ """"Pop a new object from the given bytes buffer."""
+ obj = cls.from_buffer_copy(buf)
+ return obj, buf[c.sizeof(obj):]
+
class vfu_bar_t(c.Union):
_pack_ = 1
_fields_ = [
@@ -185,14 +197,14 @@ class vfu_bar_t(c.Union):
("io", c.c_int)
]
-class vfu_pci_hdr_intr_t(c.Structure):
+class vfu_pci_hdr_intr_t(Structure):
_pack_ = 1
_fields_ = [
("iline", c.c_byte),
("ipin", c.c_byte)
]
-class vfu_pci_hdr_t(c.Structure):
+class vfu_pci_hdr_t(Structure):
_pack_ = 1
_fields_ = [
("id", c.c_int),
@@ -217,12 +229,63 @@ class vfu_pci_hdr_t(c.Structure):
("mlat", c.c_byte)
]
-class iovec_t(c.Structure):
+class iovec_t(Structure):
_fields_ = [
("iov_base", c.c_void_p),
("iov_len", c.c_int)
]
+class vfio_irq_set(Structure):
+ _fields_ = [
+ ("argsz", c.c_uint),
+ ("flags", c.c_uint),
+ ("index", c.c_uint),
+ ("start", c.c_uint),
+ ("count", c.c_uint),
+ ]
+
+class vfio_user_device_info(Structure):
+ _fields_ = [
+ ("argsz", c.c_uint),
+ ("flags", c.c_uint),
+ ("num_regions", c.c_uint),
+ ("num_irqs", c.c_uint),
+ ]
+
+class vfio_region_info(Structure):
+ _fields_ = [
+ ("argsz", c.c_uint),
+ ("flags", c.c_uint),
+ ("index", c.c_uint),
+ ("cap_offset", c.c_uint),
+ ("size", c.c_ulong),
+ ("offset", c.c_ulong),
+ ]
+
+class vfio_region_info_cap_type(Structure):
+ _fields_ = [
+ ("id", c.c_ushort),
+ ("version", c.c_ushort),
+ ("next", c.c_uint),
+ ("type", c.c_uint),
+ ("subtype", c.c_uint),
+ ]
+
+class vfio_region_info_cap_sparse_mmap(Structure):
+ _fields_ = [
+ ("id", c.c_ushort),
+ ("version", c.c_ushort),
+ ("next", c.c_uint),
+ ("nr_areas", c.c_uint),
+ ("reserved", c.c_uint),
+ ]
+
+class vfio_region_sparse_mmap_area(Structure):
+ _fields_ = [
+ ("offset", c.c_ulong),
+ ("size", c.c_ulong),
+ ]
+
#
# Util functions
#
@@ -264,13 +327,6 @@ def skip(fmt, buf):
"""Return the data remaining after skipping the given elements."""
return buf[struct.calcsize(fmt):]
-def unpack_prefix(fmt, fields, buf):
- """Return a namedtuple unpacked from the start of buf, along with the
- remaining buf if any."""
- t = namedtuple('_', fields)
- size = struct.calcsize(fmt)
- return t._make(struct.unpack_from(fmt, buf)), skip(fmt, buf)
-
def parse_json(json_str):
"""Parse JSON into an object with attributes (instead of using a dict)."""
return json.loads(json_str, object_hook=lambda d: SimpleNamespace(**d))
@@ -372,18 +428,6 @@ def ext_cap_hdr(buf, offset):
cap_next >>= 4
return cap_id, cap_next
-def vfio_region_info(buf):
- return unpack_prefix("IIIIQQ", "argsz flags index cap_off size offset", buf)
-
-def vfio_region_info_cap_type(buf):
- return unpack_prefix("HHIII", "id version next type subtype", buf)
-
-def vfio_region_info_cap_sparse_mmap(buf):
- return unpack_prefix("HHIII", "id version next nr_areas reserved", buf)
-
-def vfio_region_sparse_mmap_area(buf):
- return unpack_prefix("QQ", "offset size", buf)
-
#
# Library wrappers
#
diff --git a/test/py/test_device_get_info.py b/test/py/test_device_get_info.py
index fe44fee..a778604 100644
--- a/test/py/test_device_get_info.py
+++ b/test/py/test_device_get_info.py
@@ -59,8 +59,7 @@ def test_device_get_info():
# bad argsz
- # struct vfio_device_info
- payload = struct.pack("IIII", 8, 0, 0, 0)
+ payload = vfio_user_device_info(argsz=8, flags=0, num_regions=0, num_irqs=0)
hdr = vfio_user_header(VFIO_USER_DEVICE_GET_INFO, size=len(payload))
sock.send(hdr + payload)
@@ -69,7 +68,7 @@ def test_device_get_info():
# valid with larger argsz
- payload = struct.pack("IIII", 32, 0, 0, 0)
+ payload = vfio_user_device_info(argsz=32, flags=0, num_regions=0, num_irqs=0)
hdr = vfio_user_header(VFIO_USER_DEVICE_GET_INFO, size=len(payload))
sock.send(hdr + payload)
diff --git a/test/py/test_device_get_region_info.py b/test/py/test_device_get_region_info.py
index c81d97b..4209cfb 100644
--- a/test/py/test_device_get_region_info.py
+++ b/test/py/test_device_get_region_info.py
@@ -35,6 +35,8 @@ import os
ctx = None
sock = None
+argsz = len(vfio_region_info())
+
def test_device_get_region_info_setup():
global ctx, sock
@@ -81,8 +83,9 @@ def test_device_get_region_info_short_write():
def test_device_get_region_info_bad_argsz():
- # struct vfio_region_info
- payload = struct.pack("IIIIQQ", 8, 0, VFU_PCI_DEV_BAR1_REGION_IDX, 0, 0, 0)
+ payload = vfio_region_info(argsz=8, flags=0,
+ index=VFU_PCI_DEV_BAR1_REGION_IDX, cap_offset=0,
+ size=0, offset=0)
hdr = vfio_user_header(VFIO_USER_DEVICE_GET_REGION_INFO, size=len(payload))
sock.send(hdr + payload)
@@ -91,7 +94,9 @@ def test_device_get_region_info_bad_argsz():
def test_device_get_region_info_bad_index():
- payload = struct.pack("IIIIQQ", 32, 0, VFU_PCI_DEV_NUM_REGIONS, 0, 0, 0)
+ payload = vfio_region_info(argsz=argsz, flags=0,
+ index=VFU_PCI_DEV_NUM_REGIONS, cap_offset=0,
+ size=0, offset=0)
hdr = vfio_user_header(VFIO_USER_DEVICE_GET_REGION_INFO, size=len(payload))
sock.send(hdr + payload)
@@ -100,37 +105,40 @@ def test_device_get_region_info_bad_index():
def test_device_get_region_info_larger_argsz():
- payload = struct.pack("IIIIQQ", 32 + 8, 0, VFU_PCI_DEV_BAR1_REGION_IDX,
- 0, 0, 0)
+ payload = vfio_region_info(argsz=argsz + 8, flags=0,
+ index=VFU_PCI_DEV_BAR1_REGION_IDX, cap_offset=0,
+ size=0, offset=0)
hdr = vfio_user_header(VFIO_USER_DEVICE_GET_REGION_INFO, size=len(payload))
sock.send(hdr + payload)
vfu_run_ctx(ctx)
result = get_reply(sock)
- assert(len(result) == 32)
+ assert(len(result) == argsz)
- info, _ = vfio_region_info(result)
+ info, _ = vfio_region_info.pop_from_buffer(result)
- assert info.argsz == 32
+ assert info.argsz == argsz
assert info.flags == (VFIO_REGION_INFO_FLAG_READ |
VFIO_REGION_INFO_FLAG_WRITE)
assert info.index == VFU_PCI_DEV_BAR1_REGION_IDX
- assert info.cap_off == 0
+ assert info.cap_offset == 0
assert info.size == 4096
assert info.offset == 0
def test_device_get_region_info_small_argsz_caps():
global sock
- payload = struct.pack("IIIIQQ", 32, 0, VFU_PCI_DEV_BAR2_REGION_IDX, 0, 0, 0)
+ payload = vfio_region_info(argsz=argsz, flags=0,
+ index=VFU_PCI_DEV_BAR2_REGION_IDX, cap_offset=0,
+ size=0, offset=0)
hdr = vfio_user_header(VFIO_USER_DEVICE_GET_REGION_INFO, size=len(payload))
sock.send(hdr + payload)
vfu_run_ctx(ctx)
result = get_reply(sock)
- info, _ = vfio_region_info(result)
+ info, _ = vfio_region_info.pop_from_buffer(result)
assert info.argsz == 80
assert info.flags == (VFIO_REGION_INFO_FLAG_READ |
@@ -138,7 +146,7 @@ def test_device_get_region_info_small_argsz_caps():
VFIO_REGION_INFO_FLAG_MMAP |
VFIO_REGION_INFO_FLAG_CAPS)
assert info.index == VFU_PCI_DEV_BAR2_REGION_IDX
- assert info.cap_off == 0
+ assert info.cap_offset == 0
assert info.size == 0x8000
assert info.offset == 0x8000
@@ -150,21 +158,23 @@ def test_device_get_region_info_caps():
sock = connect_client(ctx)
- payload = struct.pack("IIIIQQ", 80, 0, VFU_PCI_DEV_BAR2_REGION_IDX, 0, 0, 0)
- payload += b'\0' * (80 - 32)
+ payload = vfio_region_info(argsz=80, flags=0,
+ index=VFU_PCI_DEV_BAR2_REGION_IDX, cap_offset=0,
+ size=0, offset=0)
+ payload = bytes(payload) + b'\0' * (80 - 32)
hdr = vfio_user_header(VFIO_USER_DEVICE_GET_REGION_INFO, size=len(payload))
sock.send(hdr + payload)
vfu_run_ctx(ctx)
result = get_reply(sock)
- info, result = vfio_region_info(result)
- cap, result = vfio_region_info_cap_sparse_mmap(result)
- area1, result = vfio_region_sparse_mmap_area(result)
- area2, result = vfio_region_sparse_mmap_area(result)
+ info, result = vfio_region_info.pop_from_buffer(result)
+ cap, result = vfio_region_info_cap_sparse_mmap.pop_from_buffer(result)
+ area1, result = vfio_region_sparse_mmap_area.pop_from_buffer(result)
+ area2, result = vfio_region_sparse_mmap_area.pop_from_buffer(result)
assert info.argsz == 80
- assert info.cap_off == 32
+ assert info.cap_offset == 32
assert info.size == 0x8000
assert info.offset == 0x8000
@@ -186,22 +196,23 @@ def test_device_get_region_info_migr():
sock = connect_client(ctx)
- payload = struct.pack("IIIIQQ", 80, 0, VFU_PCI_DEV_MIGR_REGION_IDX,
- 0, 0, 0)
- payload += b'\0' * (80 - 32)
+ payload = vfio_region_info(argsz=80, flags=0,
+ index=VFU_PCI_DEV_MIGR_REGION_IDX, cap_offset=0,
+ size=0, offset=0)
+ payload = bytes(payload) + b'\0' * (80 - 32)
hdr = vfio_user_header(VFIO_USER_DEVICE_GET_REGION_INFO, size=len(payload))
sock.send(hdr + payload)
vfu_run_ctx(ctx)
result = get_reply(sock)
- info, result = vfio_region_info(result)
- mcap, result = vfio_region_info_cap_type(result)
- cap, result = vfio_region_info_cap_sparse_mmap(result)
- area, result = vfio_region_sparse_mmap_area(result)
+ info, result = vfio_region_info.pop_from_buffer(result)
+ mcap, result = vfio_region_info_cap_type.pop_from_buffer(result)
+ cap, result = vfio_region_info_cap_sparse_mmap.pop_from_buffer(result)
+ area, result = vfio_region_sparse_mmap_area.pop_from_buffer(result)
assert info.argsz == 80
- assert info.cap_off == 32
+ assert info.cap_offset == 32
assert mcap.id == VFIO_REGION_INFO_CAP_TYPE
assert mcap.version == 1
diff --git a/test/py/test_device_set_irqs.py b/test/py/test_device_set_irqs.py
index 79c706e..af3a03e 100644
--- a/test/py/test_device_set_irqs.py
+++ b/test/py/test_device_set_irqs.py
@@ -36,6 +36,8 @@ import sys
ctx = None
sock = None
+argsz = len(vfio_irq_set())
+
def test_device_set_irqs_setup():
global ctx, sock
@@ -66,9 +68,9 @@ def test_device_set_irqs_short_write():
get_reply(sock, expect=errno.EINVAL)
def test_device_set_irqs_bad_argsz():
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 3, VFIO_IRQ_SET_ACTION_TRIGGER |
- VFIO_IRQ_SET_DATA_NONE, VFU_DEV_REQ_IRQ, 0, 0)
+ payload = vfio_irq_set(argsz=3, flags=VFIO_IRQ_SET_ACTION_TRIGGER |
+ VFIO_IRQ_SET_DATA_NONE, index=VFU_DEV_REQ_IRQ,
+ start=0, count=0)
hdr = vfio_user_header(VFIO_USER_DEVICE_SET_IRQS, size=len(payload))
sock.send(hdr + payload)
@@ -76,9 +78,9 @@ def test_device_set_irqs_bad_argsz():
get_reply(sock, expect=errno.EINVAL)
def test_device_set_irqs_bad_index():
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 20, VFIO_IRQ_SET_ACTION_TRIGGER |
- VFIO_IRQ_SET_DATA_NONE, VFU_DEV_NUM_IRQS, 0, 0)
+ payload = vfio_irq_set(argsz=argsz, flags=VFIO_IRQ_SET_ACTION_TRIGGER |
+ VFIO_IRQ_SET_DATA_NONE, index=VFU_DEV_NUM_IRQS,
+ start=0, count=0)
hdr = vfio_user_header(VFIO_USER_DEVICE_SET_IRQS, size=len(payload))
sock.send(hdr + payload)
@@ -86,9 +88,9 @@ def test_device_set_irqs_bad_index():
get_reply(sock, expect=errno.EINVAL)
def test_device_set_irqs_bad_flags_MASK_and_UNMASK():
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 20, VFIO_IRQ_SET_ACTION_MASK |
- VFIO_IRQ_SET_ACTION_UNMASK, VFU_DEV_MSIX_IRQ, 0, 0)
+ payload = vfio_irq_set(argsz=argsz, flags=VFIO_IRQ_SET_ACTION_MASK |
+ VFIO_IRQ_SET_ACTION_UNMASK, index=VFU_DEV_MSIX_IRQ,
+ start=0, count=0)
hdr = vfio_user_header(VFIO_USER_DEVICE_SET_IRQS, size=len(payload))
sock.send(hdr + payload)
@@ -96,10 +98,9 @@ def test_device_set_irqs_bad_flags_MASK_and_UNMASK():
get_reply(sock, expect=errno.EINVAL)
def test_device_set_irqs_bad_flags_DATA_NONE_and_DATA_BOOL():
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 20, VFIO_IRQ_SET_ACTION_MASK |
- VFIO_IRQ_SET_DATA_NONE | VFIO_IRQ_SET_DATA_BOOL,
- VFU_DEV_MSIX_IRQ, 0, 0)
+ payload = vfio_irq_set(argsz=argsz, flags=VFIO_IRQ_SET_ACTION_MASK |
+ VFIO_IRQ_SET_DATA_NONE | VFIO_IRQ_SET_DATA_BOOL,
+ index=VFU_DEV_MSIX_IRQ, start=0, count=0)
hdr = vfio_user_header(VFIO_USER_DEVICE_SET_IRQS, size=len(payload))
sock.send(hdr + payload)
@@ -107,9 +108,9 @@ def test_device_set_irqs_bad_flags_DATA_NONE_and_DATA_BOOL():
get_reply(sock, expect=errno.EINVAL)
def test_device_set_irqs_bad_start_count_range():
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 20, VFIO_IRQ_SET_ACTION_MASK |
- VFIO_IRQ_SET_DATA_NONE, VFU_DEV_MSIX_IRQ, 2047, 2)
+ payload = vfio_irq_set(argsz=argsz, flags=VFIO_IRQ_SET_ACTION_MASK |
+ VFIO_IRQ_SET_DATA_NONE, index=VFU_DEV_MSIX_IRQ,
+ start=2047, count=2)
hdr = vfio_user_header(VFIO_USER_DEVICE_SET_IRQS, size=len(payload))
sock.send(hdr + payload)
@@ -117,9 +118,9 @@ def test_device_set_irqs_bad_start_count_range():
get_reply(sock, expect=errno.EINVAL)
def test_device_set_irqs_bad_start_count_range():
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 20, VFIO_IRQ_SET_ACTION_MASK |
- VFIO_IRQ_SET_DATA_NONE, VFU_DEV_MSIX_IRQ, 2049, 1)
+ payload = vfio_irq_set(argsz=argsz, flags=VFIO_IRQ_SET_ACTION_MASK |
+ VFIO_IRQ_SET_DATA_NONE, index=VFU_DEV_MSIX_IRQ,
+ start=2049, count=1)
hdr = vfio_user_header(VFIO_USER_DEVICE_SET_IRQS, size=len(payload))
sock.send(hdr + payload)
@@ -127,9 +128,9 @@ def test_device_set_irqs_bad_start_count_range():
get_reply(sock, expect=errno.EINVAL)
def test_device_set_irqs_bad_action_for_err_irq():
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 20, VFIO_IRQ_SET_ACTION_MASK |
- VFIO_IRQ_SET_DATA_NONE, VFU_DEV_ERR_IRQ, 0, 1)
+ payload = vfio_irq_set(argsz=argsz, flags=VFIO_IRQ_SET_ACTION_MASK |
+ VFIO_IRQ_SET_DATA_NONE, index=VFU_DEV_ERR_IRQ,
+ start=0, count=1)
hdr = vfio_user_header(VFIO_USER_DEVICE_SET_IRQS, size=len(payload))
sock.send(hdr + payload)
@@ -137,9 +138,9 @@ def test_device_set_irqs_bad_action_for_err_irq():
get_reply(sock, expect=errno.EINVAL)
def test_device_set_irqs_bad_action_for_req_irq():
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 20, VFIO_IRQ_SET_ACTION_MASK |
- VFIO_IRQ_SET_DATA_NONE, VFU_DEV_REQ_IRQ, 0, 1)
+ payload = vfio_irq_set(argsz=argsz, flags=VFIO_IRQ_SET_ACTION_MASK |
+ VFIO_IRQ_SET_DATA_NONE, index=VFU_DEV_REQ_IRQ,
+ start=0, count=1)
hdr = vfio_user_header(VFIO_USER_DEVICE_SET_IRQS, size=len(payload))
sock.send(hdr + payload)
@@ -147,9 +148,9 @@ def test_device_set_irqs_bad_action_for_req_irq():
get_reply(sock, expect=errno.EINVAL)
def test_device_set_irqs_bad_start_for_count_0():
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 20, VFIO_IRQ_SET_ACTION_MASK |
- VFIO_IRQ_SET_DATA_NONE, VFU_DEV_MSIX_IRQ, 1, 0)
+ payload = vfio_irq_set(argsz=argsz, flags=VFIO_IRQ_SET_ACTION_MASK |
+ VFIO_IRQ_SET_DATA_NONE, index=VFU_DEV_MSIX_IRQ,
+ start=1, count=0)
hdr = vfio_user_header(VFIO_USER_DEVICE_SET_IRQS, size=len(payload))
sock.send(hdr + payload)
@@ -157,9 +158,9 @@ def test_device_set_irqs_bad_start_for_count_0():
get_reply(sock, expect=errno.EINVAL)
def test_device_set_irqs_bad_action_for_count_0():
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 20, VFIO_IRQ_SET_ACTION_MASK |
- VFIO_IRQ_SET_DATA_NONE, VFU_DEV_MSIX_IRQ, 0, 0)
+ payload = vfio_irq_set(argsz=argsz, flags=VFIO_IRQ_SET_ACTION_MASK |
+ VFIO_IRQ_SET_DATA_NONE, index=VFU_DEV_MSIX_IRQ,
+ start=0, count=0)
hdr = vfio_user_header(VFIO_USER_DEVICE_SET_IRQS, size=len(payload))
sock.send(hdr + payload)
@@ -167,9 +168,9 @@ def test_device_set_irqs_bad_action_for_count_0():
get_reply(sock, expect=errno.EINVAL)
def test_device_set_irqs_bad_action_and_data_type_for_count_0():
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 20, VFIO_IRQ_SET_ACTION_TRIGGER |
- VFIO_IRQ_SET_DATA_BOOL, VFU_DEV_MSIX_IRQ, 0, 0)
+ payload = vfio_irq_set(argsz=argsz, flags=VFIO_IRQ_SET_ACTION_TRIGGER |
+ VFIO_IRQ_SET_DATA_BOOL, index=VFU_DEV_MSIX_IRQ,
+ start=0, count=0)
hdr = vfio_user_header(VFIO_USER_DEVICE_SET_IRQS, size=len(payload))
sock.send(hdr + payload)
@@ -177,9 +178,9 @@ def test_device_set_irqs_bad_action_and_data_type_for_count_0():
get_reply(sock, expect=errno.EINVAL)
def test_device_set_irqs_bad_fds_for_DATA_BOOL():
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 20, VFIO_IRQ_SET_ACTION_TRIGGER |
- VFIO_IRQ_SET_DATA_BOOL, VFU_DEV_MSIX_IRQ, 0, 1)
+ payload = vfio_irq_set(argsz=argsz, flags=VFIO_IRQ_SET_ACTION_TRIGGER |
+ VFIO_IRQ_SET_DATA_BOOL, index=VFU_DEV_MSIX_IRQ,
+ start=0, count=1)
fd = eventfd()
@@ -192,9 +193,9 @@ def test_device_set_irqs_bad_fds_for_DATA_BOOL():
os.close(fd)
def test_device_set_irqs_bad_fds_for_DATA_NONE():
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 20, VFIO_IRQ_SET_ACTION_TRIGGER |
- VFIO_IRQ_SET_DATA_NONE, VFU_DEV_MSIX_IRQ, 0, 1)
+ payload = vfio_irq_set(argsz=argsz, flags=VFIO_IRQ_SET_ACTION_TRIGGER |
+ VFIO_IRQ_SET_DATA_NONE, index=VFU_DEV_MSIX_IRQ,
+ start=0, count=1)
fd = eventfd()
@@ -207,9 +208,9 @@ def test_device_set_irqs_bad_fds_for_DATA_NONE():
os.close(fd)
def test_device_set_irqs_bad_fds_for_count_2():
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 20, VFIO_IRQ_SET_ACTION_TRIGGER |
- VFIO_IRQ_SET_DATA_EVENTFD, VFU_DEV_MSIX_IRQ, 0, 2)
+ payload = vfio_irq_set(argsz=argsz, flags=VFIO_IRQ_SET_ACTION_TRIGGER |
+ VFIO_IRQ_SET_DATA_EVENTFD, index=VFU_DEV_MSIX_IRQ,
+ start=0, count=2)
fd = eventfd()
@@ -222,18 +223,18 @@ def test_device_set_irqs_bad_fds_for_count_2():
os.close(fd)
def test_device_set_irqs_disable():
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 20, VFIO_IRQ_SET_ACTION_TRIGGER |
- VFIO_IRQ_SET_DATA_NONE, VFU_DEV_REQ_IRQ, 0, 0)
+ payload = vfio_irq_set(argsz=argsz, flags=VFIO_IRQ_SET_ACTION_TRIGGER |
+ VFIO_IRQ_SET_DATA_NONE, index=VFU_DEV_REQ_IRQ,
+ start=0, count=0)
hdr = vfio_user_header(VFIO_USER_DEVICE_SET_IRQS, size=len(payload))
sock.send(hdr + payload)
vfu_run_ctx(ctx)
get_reply(sock)
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 20, VFIO_IRQ_SET_ACTION_TRIGGER |
- VFIO_IRQ_SET_DATA_EVENTFD, VFU_DEV_REQ_IRQ, 0, 1)
+ payload = vfio_irq_set(argsz=argsz, flags=VFIO_IRQ_SET_ACTION_TRIGGER |
+ VFIO_IRQ_SET_DATA_EVENTFD, index=VFU_DEV_REQ_IRQ,
+ start=0, count=1)
hdr = vfio_user_header(VFIO_USER_DEVICE_SET_IRQS, size=len(payload))
sock.send(hdr + payload)
@@ -241,9 +242,9 @@ def test_device_set_irqs_disable():
get_reply(sock)
def test_device_set_irqs_enable():
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 20, VFIO_IRQ_SET_ACTION_TRIGGER |
- VFIO_IRQ_SET_DATA_EVENTFD, VFU_DEV_MSIX_IRQ, 0, 1)
+ payload = vfio_irq_set(argsz=argsz, flags=VFIO_IRQ_SET_ACTION_TRIGGER |
+ VFIO_IRQ_SET_DATA_EVENTFD, index=VFU_DEV_MSIX_IRQ,
+ start=0, count=1)
fd = eventfd()
@@ -254,10 +255,10 @@ def test_device_set_irqs_enable():
get_reply(sock)
def test_device_set_irqs_trigger_bool_too_small():
- # struct vfio_irq_set
- payload = struct.pack("IIIII?", 21, VFIO_IRQ_SET_ACTION_TRIGGER |
- VFIO_IRQ_SET_DATA_BOOL, VFU_DEV_MSIX_IRQ, 0, 2,
- False)
+ payload = vfio_irq_set(argsz=argsz + 1, flags=VFIO_IRQ_SET_ACTION_TRIGGER |
+ VFIO_IRQ_SET_DATA_BOOL, index=VFU_DEV_MSIX_IRQ,
+ start=0, count=2)
+ payload = bytes(payload) + struct.pack("?", False)
hdr = vfio_user_header(VFIO_USER_DEVICE_SET_IRQS, size=len(payload))
sock.send(hdr + payload)
@@ -265,10 +266,10 @@ def test_device_set_irqs_trigger_bool_too_small():
get_reply(sock, expect=errno.EINVAL)
def test_device_set_irqs_trigger_bool_too_large():
- # struct vfio_irq_set
- payload = struct.pack("IIIII???", 23, VFIO_IRQ_SET_ACTION_TRIGGER |
- VFIO_IRQ_SET_DATA_BOOL, VFU_DEV_MSIX_IRQ, 0, 2,
- False, False, False)
+ payload = vfio_irq_set(argsz=argsz + 3, flags=VFIO_IRQ_SET_ACTION_TRIGGER |
+ VFIO_IRQ_SET_DATA_BOOL, index=VFU_DEV_MSIX_IRQ,
+ start=0, count=2)
+ payload = bytes(payload) + struct.pack("???", False, False, False)
hdr = vfio_user_header(VFIO_USER_DEVICE_SET_IRQS, size=len(payload))
sock.send(hdr + payload)
@@ -276,9 +277,9 @@ def test_device_set_irqs_trigger_bool_too_large():
get_reply(sock, expect=errno.EINVAL)
def test_device_set_irqs_enable_update():
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 20, VFIO_IRQ_SET_ACTION_TRIGGER |
- VFIO_IRQ_SET_DATA_EVENTFD, VFU_DEV_MSIX_IRQ, 0, 1)
+ payload = vfio_irq_set(argsz=argsz, flags=VFIO_IRQ_SET_ACTION_TRIGGER |
+ VFIO_IRQ_SET_DATA_EVENTFD, index=VFU_DEV_MSIX_IRQ,
+ start=0, count=1)
fd = eventfd()
@@ -289,9 +290,9 @@ def test_device_set_irqs_enable_update():
get_reply(sock)
def test_device_set_irqs_enable_trigger_none():
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 20, VFIO_IRQ_SET_ACTION_TRIGGER |
- VFIO_IRQ_SET_DATA_EVENTFD, VFU_DEV_MSIX_IRQ, 0, 2)
+ payload = vfio_irq_set(argsz=argsz, flags=VFIO_IRQ_SET_ACTION_TRIGGER |
+ VFIO_IRQ_SET_DATA_EVENTFD, index=VFU_DEV_MSIX_IRQ,
+ start=0, count=2)
fd1 = eventfd(initval=4)
fd2 = eventfd(initval=8)
@@ -302,9 +303,9 @@ def test_device_set_irqs_enable_trigger_none():
vfu_run_ctx(ctx)
get_reply(sock)
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 20, VFIO_IRQ_SET_ACTION_TRIGGER |
- VFIO_IRQ_SET_DATA_NONE, VFU_DEV_MSIX_IRQ, 1, 1)
+ payload = vfio_irq_set(argsz=argsz, flags=VFIO_IRQ_SET_ACTION_TRIGGER |
+ VFIO_IRQ_SET_DATA_NONE, index=VFU_DEV_MSIX_IRQ,
+ start=1, count=1)
hdr = vfio_user_header(VFIO_USER_DEVICE_SET_IRQS, size=len(payload))
sock.send(hdr + payload)
@@ -315,9 +316,9 @@ def test_device_set_irqs_enable_trigger_none():
assert struct.unpack("Q", os.read(fd2, 8))[0] == 9
def test_device_set_irqs_enable_trigger_bool():
- # struct vfio_irq_set
- payload = struct.pack("IIIII", 20, VFIO_IRQ_SET_ACTION_TRIGGER |
- VFIO_IRQ_SET_DATA_EVENTFD, VFU_DEV_MSIX_IRQ, 0, 2)
+ payload = vfio_irq_set(argsz=argsz, flags=VFIO_IRQ_SET_ACTION_TRIGGER |
+ VFIO_IRQ_SET_DATA_EVENTFD, index=VFU_DEV_MSIX_IRQ,
+ start=0, count=2)
fd1 = eventfd(initval=4)
fd2 = eventfd(initval=8)
@@ -328,10 +329,10 @@ def test_device_set_irqs_enable_trigger_bool():
vfu_run_ctx(ctx)
get_reply(sock)
- # struct vfio_irq_set
- payload = struct.pack("IIIII??", 22, VFIO_IRQ_SET_ACTION_TRIGGER |
- VFIO_IRQ_SET_DATA_BOOL, VFU_DEV_MSIX_IRQ, 0, 2,
- False, True)
+ payload = vfio_irq_set(argsz=argsz + 2, flags=VFIO_IRQ_SET_ACTION_TRIGGER |
+ VFIO_IRQ_SET_DATA_BOOL, index=VFU_DEV_MSIX_IRQ,
+ start=0, count=2)
+ payload = bytes(payload) + struct.pack("??", False, True)
hdr = vfio_user_header(VFIO_USER_DEVICE_SET_IRQS, size=len(payload))
sock.send(hdr + payload)