]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.39/patches.arch/s390-06-01-qeth-ext-src-mac-addr.patch
Imported linux-2.6.27.39 suse/xen patches.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.39 / patches.arch / s390-06-01-qeth-ext-src-mac-addr.patch
diff --git a/src/patches/suse-2.6.27.39/patches.arch/s390-06-01-qeth-ext-src-mac-addr.patch b/src/patches/suse-2.6.27.39/patches.arch/s390-06-01-qeth-ext-src-mac-addr.patch
new file mode 100644 (file)
index 0000000..2c9b286
--- /dev/null
@@ -0,0 +1,121 @@
+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" */