]> git.ipfire.org Git - ipfire-2.x.git/blame - src/patches/suse-2.6.27.39/patches.arch/s390-13-04-qeth-port-isolation.patch
Imported linux-2.6.27.39 suse/xen patches.
[ipfire-2.x.git] / src / patches / suse-2.6.27.39 / patches.arch / s390-13-04-qeth-port-isolation.patch
CommitLineData
2cb7cef9
BS
1From: Gerald Schaefer <geraldsc@de.ibm.com>
2Subject: qeth: handle error codes from z/VM VSwitch Port Isolation
3References: bnc#499845,LTC#53307
4
5Symptom: Message "Error in registering MAC address on device"
6Problem: Usually z/VM guests are allowed to change the MAC address
7 of a VSWITCH device. This is no longer true, if
8 z/VM Virtual Switch Port Isolation is active (see
9 z/VM Apars VM64281 and VM64463). The corresponding
10 error code should be translated into a meaningful
11 message.
12Solution: qeth driver issues message
13 "MAC address <x> is not authorized"
14 if z/VM Virtual Switch Port Isolation forbids setting
15 of a locally defined virtual MAC address.
16
17Acked-by: John Jolly <jjolly@suse.de>
18---
19 drivers/s390/net/qeth_core_mpc.c | 2 ++
20 drivers/s390/net/qeth_core_mpc.h | 2 ++
21 drivers/s390/net/qeth_l2_main.c | 24 ++++++++++++++++++++++++
22 3 files changed, 28 insertions(+)
23
24Index: linux-sles11/drivers/s390/net/qeth_core_mpc.c
25===================================================================
26--- linux-sles11.orig/drivers/s390/net/qeth_core_mpc.c
27+++ linux-sles11/drivers/s390/net/qeth_core_mpc.c
28@@ -181,6 +181,8 @@ static struct ipa_rc_msg qeth_ipa_rc_msg
29 {IPA_RC_L2_ADDR_TABLE_FULL, "Layer2 address table full"},
30 {IPA_RC_L2_DUP_LAYER3_MAC, "Duplicate with layer 3 MAC"},
31 {IPA_RC_L2_GMAC_NOT_FOUND, "GMAC not found"},
32+ {IPA_RC_L2_MAC_NOT_AUTH_BY_HYP, "L2 mac not authorized by hypervisor"},
33+ {IPA_RC_L2_MAC_NOT_AUTH_BY_ADP, "L2 mac not authorized by adapter"},
34 {IPA_RC_L2_MAC_NOT_FOUND, "L2 mac address not found"},
35 {IPA_RC_L2_INVALID_VLAN_ID, "L2 invalid vlan id"},
36 {IPA_RC_L2_DUP_VLAN_ID, "L2 duplicate vlan id"},
37Index: linux-sles11/drivers/s390/net/qeth_core_mpc.h
38===================================================================
39--- linux-sles11.orig/drivers/s390/net/qeth_core_mpc.h
40+++ linux-sles11/drivers/s390/net/qeth_core_mpc.h
41@@ -168,6 +168,8 @@ enum qeth_ipa_return_codes {
42 IPA_RC_L2_ADDR_TABLE_FULL = 0x2006,
43 IPA_RC_L2_DUP_LAYER3_MAC = 0x200a,
44 IPA_RC_L2_GMAC_NOT_FOUND = 0x200b,
45+ IPA_RC_L2_MAC_NOT_AUTH_BY_HYP = 0x200c,
46+ IPA_RC_L2_MAC_NOT_AUTH_BY_ADP = 0x200d,
47 IPA_RC_L2_MAC_NOT_FOUND = 0x2010,
48 IPA_RC_L2_INVALID_VLAN_ID = 0x2015,
49 IPA_RC_L2_DUP_VLAN_ID = 0x2016,
50Index: linux-sles11/drivers/s390/net/qeth_l2_main.c
51===================================================================
52--- linux-sles11.orig/drivers/s390/net/qeth_l2_main.c
53+++ linux-sles11/drivers/s390/net/qeth_l2_main.c
54@@ -504,6 +504,30 @@ static int qeth_l2_send_setmac_cb(struct
55 if (cmd->hdr.return_code) {
56 QETH_DBF_TEXT_(TRACE, 2, "L2er%x", cmd->hdr.return_code);
57 card->info.mac_bits &= ~QETH_LAYER2_MAC_REGISTERED;
58+ switch (cmd->hdr.return_code) {
59+ case IPA_RC_L2_DUP_MAC:
60+ case IPA_RC_L2_DUP_LAYER3_MAC:
61+ dev_warn(&card->gdev->dev,
62+ "MAC address "
63+ "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x "
64+ "already exists\n",
65+ card->dev->dev_addr[0], card->dev->dev_addr[1],
66+ card->dev->dev_addr[2], card->dev->dev_addr[3],
67+ card->dev->dev_addr[4], card->dev->dev_addr[5]);
68+ break;
69+ case IPA_RC_L2_MAC_NOT_AUTH_BY_HYP:
70+ case IPA_RC_L2_MAC_NOT_AUTH_BY_ADP:
71+ dev_warn(&card->gdev->dev,
72+ "MAC address "
73+ "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x "
74+ "is not authorized\n",
75+ card->dev->dev_addr[0], card->dev->dev_addr[1],
76+ card->dev->dev_addr[2], card->dev->dev_addr[3],
77+ card->dev->dev_addr[4], card->dev->dev_addr[5]);
78+ break;
79+ default:
80+ break;
81+ }
82 cmd->hdr.return_code = -EIO;
83 } else {
84 card->info.mac_bits |= QETH_LAYER2_MAC_REGISTERED;