diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index c2c61844b3f4a551f8a450c6c21c2f5e29c9bd42..916872d5907ff736d7fb760e7dc97845293a932d 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -2375,6 +2375,49 @@
+
+
+
+
+ yes
+ no
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2671,6 +2714,13 @@
+
+
+
+
+
+
+
@@ -2834,6 +2884,7 @@
+
@@ -3447,16 +3498,31 @@
(([0-2]?[0-9]?[0-9]\.){3}[0-2]?[0-9]?[0-9])|(([0-9a-fA-F]+|:)+[0-9a-fA-F]+)|([a-zA-Z0-9_\.\+\-]*)
+
+
+ -1
+
+
(0x)?[0-9a-fA-F]{1,4}
+
+
+ [0-9]{1,2}.[0-9]{1,2}
+
+
(0x)?[0-9a-fA-F]{1,3}
+
+
+ (0x)?[0-9a-fA-F]{1,2}
+
+
((0x)?[0-9a-fA-F]{1,3}\.){0,3}(0x)?[0-9a-fA-F]{1,3}
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-filter.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-filter.args
new file mode 100644
index 0000000000000000000000000000000000000000..1141f7e24abcc2e8d6576e493b78db45fe4ecd96
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-filter.args
@@ -0,0 +1,10 @@
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \
+-device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x4.0x7 \
+-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4 \
+-device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1 \
+-device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x4.0x2 \
+-chardev spicevmc,id=charredir0,name=usbredir \
+-device 'usb-redir,chardev=charredir0,id=redir0,filter=0x08:0x15E1:0x2007:0x0110:1|-1:-1:-1:-1:0,bus=usb.0,port=4' \
+-chardev spicevmc,id=charredir1,name=usbredir \
+-device 'usb-redir,chardev=charredir1,id=redir1,filter=0x08:0x15E1:0x2007:0x0110:1|-1:-1:-1:-1:0,bus=usb.0,port=5' \
+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-filter.xml b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-filter.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6ff4da26e39c249e03eed98fc47e1a157bb04957
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir-filter.xml
@@ -0,0 +1,45 @@
+
+ QEMUGuest1
+ c7a5fdbd-edaf-9455-926a-d65c16db1809
+ 219136
+ 219136
+ 1
+
+ hvm
+
+
+
+ destroy
+ restart
+ destroy
+
+ /usr/bin/qemu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 47c3f6c53dab40abd85328a6420fb5777aa1154b..15b52981a052c884294580bafb9653aa72d68811 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -676,6 +676,12 @@ mymain(void)
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
+ DO_TEST("usb-redir-filter",
+ QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
+ QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
+ QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
+ QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
+ QEMU_CAPS_USB_REDIR_FILTER);
DO_TEST("usb1-usb2",
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_PIIX3_USB_UHCI,