]>
Commit | Line | Data |
---|---|---|
2cb7cef9 BS |
1 | From: Gerald Schaefer <geraldsc@de.ibm.com> |
2 | Subject: qeth: handle error codes from z/VM VSwitch Port Isolation | |
3 | References: bnc#499845,LTC#53307 | |
4 | ||
5 | Symptom: Message "Error in registering MAC address on device" | |
6 | Problem: 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. | |
12 | Solution: 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 | ||
17 | Acked-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 | ||
24 | Index: 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"}, | |
37 | Index: 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, | |
50 | Index: 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; |