--- /dev/null
+From: Gerald Schaefer <geraldsc@de.ibm.com>
+Subject: qeth: exploit source MAC address for inbound layer3 packets
+References: bnc#458339
+
+Symptom: tcpdump showing "FAKELL" for inbound layer3 packets
+Problem: OSA-devices operating in layer3 mode offer adding of the
+ source MAC address to the QDIO header of inbound packets.
+ This support is not exploited yet.
+Solution: Make use of this functionality to replace FAKELL-entries in
+ the ethernet header of received packets.
+
+Acked-by: John Jolly <jjolly@suse.de>
+---
+
+ drivers/s390/net/qeth_core.h | 1 -
+ drivers/s390/net/qeth_core_main.c | 1 -
+ drivers/s390/net/qeth_l3_main.c | 16 +++++++++-------
+ 3 files changed, 9 insertions(+), 9 deletions(-)
+
+Index: linux-sles11/drivers/s390/net/qeth_core.h
+===================================================================
+--- linux-sles11.orig/drivers/s390/net/qeth_core.h
++++ linux-sles11/drivers/s390/net/qeth_core.h
+@@ -642,7 +642,6 @@ struct qeth_card_options {
+ int macaddr_mode;
+ int fake_broadcast;
+ int add_hhlen;
+- int fake_ll;
+ int layer2;
+ enum qeth_large_send_types large_send;
+ int performance_stats;
+Index: linux-sles11/drivers/s390/net/qeth_core_main.c
+===================================================================
+--- linux-sles11.orig/drivers/s390/net/qeth_core_main.c
++++ linux-sles11/drivers/s390/net/qeth_core_main.c
+@@ -1071,7 +1071,6 @@ static void qeth_set_intial_options(stru
+ card->options.macaddr_mode = QETH_TR_MACADDR_NONCANONICAL;
+ card->options.fake_broadcast = 0;
+ card->options.add_hhlen = DEFAULT_ADD_HHLEN;
+- card->options.fake_ll = 0;
+ card->options.performance_stats = 0;
+ card->options.rx_sg_cb = QETH_RX_SG_CB;
+ }
+Index: linux-sles11/drivers/s390/net/qeth_l3_main.c
+===================================================================
+--- linux-sles11.orig/drivers/s390/net/qeth_l3_main.c
++++ linux-sles11/drivers/s390/net/qeth_l3_main.c
+@@ -1206,12 +1206,9 @@ static int qeth_l3_start_ipa_source_mac(
+
+ QETH_DBF_TEXT(TRACE, 3, "stsrcmac");
+
+- if (!card->options.fake_ll)
+- return -EOPNOTSUPP;
+-
+ if (!qeth_is_supported(card, IPA_SOURCE_MAC)) {
+ dev_info(&card->gdev->dev,
+- "Inbound source address not supported on %s\n",
++ "Inbound source MAC-address not supported on %s\n",
+ QETH_CARD_IFNAME(card));
+ return -EOPNOTSUPP;
+ }
+@@ -1920,8 +1917,13 @@ static inline __u16 qeth_l3_rebuild_skb(
+ memcpy(tg_addr, card->dev->dev_addr,
+ card->dev->addr_len);
+ }
+- card->dev->header_ops->create(skb, card->dev, prot, tg_addr,
+- "FAKELL", card->dev->addr_len);
++ if (hdr->hdr.l3.ext_flags & QETH_HDR_EXT_SRC_MAC_ADDR)
++ card->dev->header_ops->create(skb, card->dev, prot,
++ tg_addr, &hdr->hdr.l3.dest_addr[2],
++ card->dev->addr_len);
++ else
++ card->dev->header_ops->create(skb, card->dev, prot,
++ tg_addr, "FAKELL", card->dev->addr_len);
+ }
+
+ #ifdef CONFIG_TR
+Index: linux-sles11/Documentation/kmsg/s390/qeth
+===================================================================
+--- linux-sles11.orig/Documentation/kmsg/s390/qeth
++++ linux-sles11/Documentation/kmsg/s390/qeth
+@@ -275,7 +275,7 @@
+
+ /*?
+ * Text: "%s: Activating IPv6 support for %s failed\n"
+- * Severity: Error
++ * Severity: Warning
+ * Parameter:
+ * @1: bus ID of the qeth device
+ * @2: network interface name
+@@ -437,6 +437,21 @@
+ * want to use IPv6 with layer 3 qeth devices.
+ */
+
++/*?
++ * Text: "%s: Starting source MAC-address support for %s failed\n"
++ * Severity: Warning
++ * Parameter:
++ * @1: bus ID of the qeth device
++ * @2: network interface name
++ * Description:
++ * The qeth device driver could not enable source MAC-address on the network
++ * adapter.
++ * User action:
++ * Ungroup and regroup the subchannel triplet of the device. If this does not
++ * resolve the problem, reboot Linux. If the problem persists, gather Linux
++ * debug data and report the problem to your support organization.
++ */
++
+ /*? Text: "core functions removed\n" */
+ /*? Text: "%s: Device is a%s card%s%s%s\nwith link type %s.\n" */
+ /*? Text: "%s: Device is a%s card%s%s%s\nwith link type %s (no portname needed by interface).\n" */
+@@ -452,7 +467,7 @@
+ /*? Text: "%s: Hardware IP fragmentation not supported on %s\n" */
+ /*? Text: "%s: IPv6 not supported on %s\n" */
+ /*? Text: "%s: VLAN not supported on %s\n" */
+-/*? Text: "%s: Inbound source address not supported on %s\n" */
++/*? Text: "%s: Inbound source MAC-address not supported on %s\n" */
+ /*? Text: "%s: IPV6 enabled\n" */
+ /*? Text: "%s: ARP processing not supported on %s!\n" */
+ /*? Text: "%s: Hardware IP fragmentation enabled \n" */