Signed-off-by: Boris Fiuczynski <fiuczy(a)linux.ibm.com>
---
src/conf/node_device_conf.c | 8 ++++++++
src/conf/node_device_conf.h | 2 ++
src/conf/schemas/nodedev.rng | 6 +++++-
src/node_device/node_device_udev.c | 6 +++++-
4 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c
index 3e88f5da87..30c2b4440e 100644
--- a/src/conf/node_device_conf.c
+++ b/src/conf/node_device_conf.c
@@ -78,6 +78,8 @@ VIR_ENUM_IMPL(virNodeDevCap,
VIR_ENUM_IMPL(virNodeDevCCWGroupCap,
VIR_NODE_DEV_CAP_CCWGROUP_LAST,
"qeth_generic",
+ "qeth_layer2",
+ "qeth_layer3",
);
VIR_ENUM_IMPL(virNodeDevNetCap,
@@ -731,6 +733,8 @@ virNodeDeviceCapCCWGroupDefFormat(virBuffer *buf,
virBufferAdjustIndent(buf, 2);
switch (ccwgroup_dev.type) {
case VIR_NODE_DEV_CAP_CCWGROUP_QETH_GENERIC:
+ case VIR_NODE_DEV_CAP_CCWGROUP_QETH_LAYER2:
+ case VIR_NODE_DEV_CAP_CCWGROUP_QETH_LAYER3:
virNodeDeviceCapCCWGroupQethFormat(buf, &ccwgroup_dev.qeth);
break;
case VIR_NODE_DEV_CAP_CCWGROUP_LAST:
@@ -1509,6 +1513,8 @@ virNodeDevCapCCWGroupParseXML(xmlXPathContextPtr ctxt,
switch (ccwgroup_dev->type) {
case VIR_NODE_DEV_CAP_CCWGROUP_QETH_GENERIC:
+ case VIR_NODE_DEV_CAP_CCWGROUP_QETH_LAYER2:
+ case VIR_NODE_DEV_CAP_CCWGROUP_QETH_LAYER3:
if (virNodeDevCapCCWGroupQethParseXML(ctxt, cap_node, &ccwgroup_dev->qeth)
< 0)
return -1;
break;
@@ -2865,6 +2871,8 @@ virNodeDevCapsDefFree(virNodeDevCapsDef *caps)
g_free(data->ccwgroup_dev.members);
switch (data->ccwgroup_dev.type) {
case VIR_NODE_DEV_CAP_CCWGROUP_QETH_GENERIC:
+ case VIR_NODE_DEV_CAP_CCWGROUP_QETH_LAYER2:
+ case VIR_NODE_DEV_CAP_CCWGROUP_QETH_LAYER3:
virCCWGroupTypeQethFree(&data->ccwgroup_dev.qeth);
break;
case VIR_NODE_DEV_CAP_CCWGROUP_LAST:
diff --git a/src/conf/node_device_conf.h b/src/conf/node_device_conf.h
index a6cef57b95..c66660342f 100644
--- a/src/conf/node_device_conf.h
+++ b/src/conf/node_device_conf.h
@@ -80,6 +80,8 @@ typedef enum {
typedef enum {
/* Keep in sync with VIR_ENUM_IMPL in node_device_conf.c */
VIR_NODE_DEV_CAP_CCWGROUP_QETH_GENERIC, /* s390 CCWGROUP QETH generic device */
+ VIR_NODE_DEV_CAP_CCWGROUP_QETH_LAYER2, /* s390 CCWGROUP QETH layer 2 device */
+ VIR_NODE_DEV_CAP_CCWGROUP_QETH_LAYER3, /* s390 CCWGROUP QETH layer 3 device */
VIR_NODE_DEV_CAP_CCWGROUP_LAST
} virNodeDevCCWGroupCapType;
diff --git a/src/conf/schemas/nodedev.rng b/src/conf/schemas/nodedev.rng
index f52c6ab752..31ce517e4d 100644
--- a/src/conf/schemas/nodedev.rng
+++ b/src/conf/schemas/nodedev.rng
@@ -672,7 +672,11 @@
<define name="capccwgrouptypeqeth">
<attribute name="type">
- <value>qeth_generic</value>
+ <choice>
+ <value>qeth_generic</value>
+ <value>qeth_layer2</value>
+ <value>qeth_layer3</value>
+ </choice>
</attribute>
<interleave>
<element name="card_type"><text/></element>
diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
index ba5727ed8f..082f9d5cf0 100644
--- a/src/node_device/node_device_udev.c
+++ b/src/node_device/node_device_udev.c
@@ -1410,6 +1410,8 @@ udevProcessCCWGroup(struct udev_device *device,
switch (data->ccwgroup_dev.type) {
case VIR_NODE_DEV_CAP_CCWGROUP_QETH_GENERIC:
+ case VIR_NODE_DEV_CAP_CCWGROUP_QETH_LAYER2:
+ case VIR_NODE_DEV_CAP_CCWGROUP_QETH_LAYER3:
{
virCCWGroupTypeQeth *qeth = &data->ccwgroup_dev.qeth;
/* process qeth device information */
@@ -1487,7 +1489,9 @@ udevGetDeviceType(struct udev_device *device,
*type = VIR_NODE_DEV_CAP_AP_CARD;
else if (STREQ(devtype, "ap_queue"))
*type = VIR_NODE_DEV_CAP_AP_QUEUE;
- else if (STREQ(devtype, "qeth_generic"))
+ else if (STREQ(devtype, "qeth_generic") ||
+ STREQ(devtype, "qeth_layer2") ||
+ STREQ(devtype, "qeth_layer3"))
*type = VIR_NODE_DEV_CAP_CCWGROUP_DEV;
} else {
/* PCI devices don't set the DEVTYPE property. */
--
2.47.0