Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/572586/?format=api
{ "id": 572586, "url": "http://patchwork.ozlabs.org/api/patches/572586/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20160125051648.12004.64219.stgit@localhost.localdomain/", "project": { "id": 46, "url": "http://patchwork.ozlabs.org/api/projects/46/?format=api", "name": "Intel Wired Ethernet development", "link_name": "intel-wired-lan", "list_id": "intel-wired-lan.osuosl.org", "list_email": "intel-wired-lan@osuosl.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20160125051648.12004.64219.stgit@localhost.localdomain>", "list_archive_url": null, "date": "2016-01-25T05:16:48", "name": "[next,v3,06/15] i40e/i40evf: Add support for IPv4 encapsulated in IPv6", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "b480979440208c52e2c3912e4da04bc4b7eac470", "submitter": { "id": 67293, "url": "http://patchwork.ozlabs.org/api/people/67293/?format=api", "name": "Alexander Duyck", "email": "aduyck@mirantis.com" }, "delegate": { "id": 68, "url": "http://patchwork.ozlabs.org/api/users/68/?format=api", "username": "jtkirshe", "first_name": "Jeff", "last_name": "Kirsher", "email": "jeffrey.t.kirsher@intel.com" }, "mbox": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20160125051648.12004.64219.stgit@localhost.localdomain/mbox/", "series": [], "comments": "http://patchwork.ozlabs.org/api/patches/572586/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/572586/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<intel-wired-lan-bounces@lists.osuosl.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "intel-wired-lan@lists.osuosl.org" ], "Delivered-To": [ "patchwork-incoming@bilbo.ozlabs.org", "intel-wired-lan@lists.osuosl.org" ], "Received": [ "from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\tby ozlabs.org (Postfix) with ESMTP id 269641402DD\n\tfor <incoming@patchwork.ozlabs.org>;\n\tMon, 25 Jan 2016 16:16:53 +1100 (AEDT)", "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 175978C401;\n\tMon, 25 Jan 2016 05:16:51 +0000 (UTC)", "from whitealder.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id qpZvmyVApFj6; Mon, 25 Jan 2016 05:16:50 +0000 (UTC)", "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 4BDE18C363;\n\tMon, 25 Jan 2016 05:16:50 +0000 (UTC)", "from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133])\n\tby ash.osuosl.org (Postfix) with ESMTP id 6643E1C107C\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon, 25 Jan 2016 05:16:50 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id 621698729A\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon, 25 Jan 2016 05:16:50 +0000 (UTC)", "from hemlock.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id Dvh+Ulgo9VpZ for <intel-wired-lan@lists.osuosl.org>;\n\tMon, 25 Jan 2016 05:16:49 +0000 (UTC)", "from mail-pa0-f53.google.com (mail-pa0-f53.google.com\n\t[209.85.220.53])\n\tby hemlock.osuosl.org (Postfix) with ESMTPS id CB5A687099\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon, 25 Jan 2016 05:16:49 +0000 (UTC)", "by mail-pa0-f53.google.com with SMTP id uo6so76342944pac.1\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tSun, 24 Jan 2016 21:16:49 -0800 (PST)", "from localhost.localdomain\n\t(static-50-53-29-36.bvtn.or.frontiernet.net. [50.53.29.36])\n\tby smtp.gmail.com with ESMTPSA id\n\txz6sm24943300pab.42.2016.01.24.21.16.48\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tSun, 24 Jan 2016 21:16:49 -0800 (PST)" ], "Authentication-Results": "ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=mirantis.com header.i=@mirantis.com\n\theader.b=dvbbNlbr; dkim-atps=neutral", "X-Virus-Scanned": [ "amavisd-new at osuosl.org", "amavisd-new at osuosl.org" ], "X-Greylist": "from auto-whitelisted by SQLgrey-1.7.6", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=mirantis.com;\n\ts=google; \n\th=subject:from:to:cc:date:message-id:in-reply-to:references\n\t:user-agent:mime-version:content-type:content-transfer-encoding;\n\tbh=9wzMoPLU37MAG626AohBspsQ1WmC5Wdal4HcL58kfCc=;\n\tb=dvbbNlbrh/RS6f8/Y/780zYwZq6C7084hqj4lMTAxAR4657iN8g5CHUsYpDvxzTomy\n\tV2ufaH5KrDDVnQXuc+GKNQrLH4Z9Ayh11bMQxC6935ThlmKp8AhSCjS8IMsbxdwJXpw0\n\t6780MaxVy5XB8fyCv4zQAjfvjsVIuoM2QjFoM=", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20130820;\n\th=x-gm-message-state:subject:from:to:cc:date:message-id:in-reply-to\n\t:references:user-agent:mime-version:content-type\n\t:content-transfer-encoding;\n\tbh=9wzMoPLU37MAG626AohBspsQ1WmC5Wdal4HcL58kfCc=;\n\tb=RAXeyO9rda6AWR2BKBMjiMY7AgPGw6+z6ZcZ15W0mYk1tEYRPXTwwFEvJSSAJDMPvg\n\t+UkYKkOXJVs+CaSVMpTrWf+a8ykABjmQ/PSUe/qE9/j5ZJSttbmPLFMN7Jmau0pucWgq\n\tA3ySP306DSHXshVsjlhOTijvbS1QstDU2HH7xEtSB7qY8GjlGCJHUkAo9LoeBfPRgjBh\n\tsMXICRQhCxklJNenWhy1SAU6TZL3WOs7TpT+dwIxTnNbzQdtxig7PK8VeXm/hG4VHIhj\n\tHSq1TNLQdkQ2amKvLZsMP42C5YcMDswiAEUh+xqAMoMcaFCSpMYYuhxToY14bT881Tnn\n\tSP+A==", "X-Gm-Message-State": "AG10YOSq11jANTv95xgvHz0rcz+it/b53uavz8wnkZwoETRV+1PhObPsqSQ6q3spSamziwh1", "X-Received": "by 10.66.144.5 with SMTP id si5mr23107151pab.51.1453699009571;\n\tSun, 24 Jan 2016 21:16:49 -0800 (PST)", "From": "Alexander Duyck <aduyck@mirantis.com>", "To": "intel-wired-lan@lists.osuosl.org, jeffrey.t.kirsher@intel.com", "Date": "Sun, 24 Jan 2016 21:16:48 -0800", "Message-ID": "<20160125051648.12004.64219.stgit@localhost.localdomain>", "In-Reply-To": "<20160125050602.12004.38884.stgit@localhost.localdomain>", "References": "<20160125050602.12004.38884.stgit@localhost.localdomain>", "User-Agent": "StGit/0.17.1-dirty", "MIME-Version": "1.0", "Subject": "[Intel-wired-lan] [next PATCH v3 06/15] i40e/i40evf: Add support\n\tfor IPv4 encapsulated in IPv6", "X-BeenThere": "intel-wired-lan@lists.osuosl.org", "X-Mailman-Version": "2.1.18-1", "Precedence": "list", "List-Id": "Intel Wired Ethernet Linux Kernel Driver Development\n\t<intel-wired-lan.lists.osuosl.org>", "List-Unsubscribe": "<http://lists.osuosl.org/mailman/options/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@lists.osuosl.org?subject=unsubscribe>", "List-Archive": "<http://lists.osuosl.org/pipermail/intel-wired-lan/>", "List-Post": "<mailto:intel-wired-lan@lists.osuosl.org>", "List-Help": "<mailto:intel-wired-lan-request@lists.osuosl.org?subject=help>", "List-Subscribe": "<http://lists.osuosl.org/mailman/listinfo/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@lists.osuosl.org?subject=subscribe>", "Content-Type": "text/plain; charset=\"us-ascii\"", "Content-Transfer-Encoding": "7bit", "Errors-To": "intel-wired-lan-bounces@lists.osuosl.org", "Sender": "\"Intel-wired-lan\" <intel-wired-lan-bounces@lists.osuosl.org>" }, "content": "This patch fixes two issues. First was the fact that iphdr(skb)->protocl\nwas being used to test for the outer transport protocol. This completely\nbreaks IPv6 support. Second was the fact that we cleared the flag for v4\ngoing to v6, but we didn't take care of txflags going the other way. As\nsuch we would have the v6 flag still set even if the inner header was v4.\n\nSigned-off-by: Alexander Duyck <aduyck@mirantis.com>\n---\n drivers/net/ethernet/intel/i40e/i40e_txrx.c | 38 ++++++++++++++---------\n drivers/net/ethernet/intel/i40evf/i40e_txrx.c | 42 ++++++++++++++++---------\n 2 files changed, 50 insertions(+), 30 deletions(-)", "diff": "diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c\nindex ef632fd60486..8e723125e31e 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c\n+++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c\n@@ -2409,7 +2409,22 @@ static void i40e_tx_enable_csum(struct sk_buff *skb, u32 *tx_flags,\n \tl4.hdr = skb_transport_header(skb);\n \n \tif (skb->encapsulation) {\n-\t\tswitch (ip_hdr(skb)->protocol) {\n+\t\t/* define outer network header type */\n+\t\tif (*tx_flags & I40E_TX_FLAGS_IPV4) {\n+\t\t\tif (*tx_flags & I40E_TX_FLAGS_TSO) {\n+\t\t\t\t*cd_tunneling |= I40E_TX_CTX_EXT_IP_IPV4;\n+\t\t\t} else {\n+\t\t\t\t*cd_tunneling |=\n+\t\t\t\t\t I40E_TX_CTX_EXT_IP_IPV4_NO_CSUM;\n+\t\t\t}\n+\t\t\tl4_proto = ip.v4->protocol;\n+\t\t} else if (*tx_flags & I40E_TX_FLAGS_IPV6) {\n+\t\t\t*cd_tunneling |= I40E_TX_CTX_EXT_IP_IPV6;\n+\t\t\tl4_proto = ip.v6->nexthdr;\n+\t\t}\n+\n+\t\t/* define outer transport */\n+\t\tswitch (l4_proto) {\n \t\tcase IPPROTO_UDP:\n \t\t\tl4_tunnel = I40E_TXD_CTX_UDP_TUNNELING;\n \t\t\t*tx_flags |= I40E_TX_FLAGS_TUNNEL;\n@@ -2425,17 +2440,7 @@ static void i40e_tx_enable_csum(struct sk_buff *skb, u32 *tx_flags,\n \t\t/* switch L4 header pointer from outer to inner */\n \t\tip.hdr = skb_inner_network_header(skb);\n \t\tl4.hdr = skb_inner_transport_header(skb);\n-\n-\t\tif (*tx_flags & I40E_TX_FLAGS_IPV4) {\n-\t\t\tif (*tx_flags & I40E_TX_FLAGS_TSO) {\n-\t\t\t\t*cd_tunneling |= I40E_TX_CTX_EXT_IP_IPV4;\n-\t\t\t} else {\n-\t\t\t\t*cd_tunneling |=\n-\t\t\t\t\t I40E_TX_CTX_EXT_IP_IPV4_NO_CSUM;\n-\t\t\t}\n-\t\t} else if (*tx_flags & I40E_TX_FLAGS_IPV6) {\n-\t\t\t*cd_tunneling |= I40E_TX_CTX_EXT_IP_IPV6;\n-\t\t}\n+\t\tl4_proto = 0;\n \n \t\t/* Now set the ctx descriptor fields */\n \t\t*cd_tunneling |= (skb_network_header_len(skb) >> 2) <<\n@@ -2444,10 +2449,13 @@ static void i40e_tx_enable_csum(struct sk_buff *skb, u32 *tx_flags,\n \t\t\t\t ((skb_inner_network_offset(skb) -\n \t\t\t\t\tskb_transport_offset(skb)) >> 1) <<\n \t\t\t\t I40E_TXD_CTX_QW0_NATLEN_SHIFT;\n-\t\tif (ip.v6->version == 6) {\n-\t\t\t*tx_flags &= ~I40E_TX_FLAGS_IPV4;\n+\n+\t\t/* reset type as we transition from outer to inner headers */\n+\t\t*tx_flags &= ~(I40E_TX_FLAGS_IPV4 | I40E_TX_FLAGS_IPV6);\n+\t\tif (ip.v4->version == 4)\n+\t\t\t*tx_flags |= I40E_TX_FLAGS_IPV4;\n+\t\tif (ip.v6->version == 6)\n \t\t\t*tx_flags |= I40E_TX_FLAGS_IPV6;\n-\t\t}\n \t}\n \n \t/* Enable IP checksum offloads */\ndiff --git a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c\nindex b1c8ada663aa..34c7e3ffba1a 100644\n--- a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c\n+++ b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c\n@@ -1626,11 +1626,30 @@ static void i40e_tx_enable_csum(struct sk_buff *skb, u32 *tx_flags,\n \tl4.hdr = skb_transport_header(skb);\n \n \tif (skb->encapsulation) {\n-\t\tswitch (ip_hdr(skb)->protocol) {\n+\t\t/* define outer network header type */\n+\t\tif (*tx_flags & I40E_TX_FLAGS_IPV4) {\n+\t\t\tif (*tx_flags & I40E_TX_FLAGS_TSO) {\n+\t\t\t\t*cd_tunneling |= I40E_TX_CTX_EXT_IP_IPV4;\n+\t\t\t} else {\n+\t\t\t\t*cd_tunneling |=\n+\t\t\t\t\t I40E_TX_CTX_EXT_IP_IPV4_NO_CSUM;\n+\t\t\t}\n+\t\t\tl4_proto = ip.v4->protocol;\n+\t\t} else if (*tx_flags & I40E_TX_FLAGS_IPV6) {\n+\t\t\t*cd_tunneling |= I40E_TX_CTX_EXT_IP_IPV6;\n+\t\t\tl4_proto = ip.v6->nexthdr;\n+\t\t}\n+\n+\t\t/* define outer transport */\n+\t\tswitch (l4_proto) {\n \t\tcase IPPROTO_UDP:\n \t\t\tl4_tunnel = I40E_TXD_CTX_UDP_TUNNELING;\n \t\t\t*tx_flags |= I40E_TX_FLAGS_TUNNEL;\n \t\t\tbreak;\n+\t\tcase IPPROTO_GRE:\n+\t\t\tl4_tunnel = I40E_TXD_CTX_GRE_TUNNELING;\n+\t\t\t*tx_flags |= I40E_TX_FLAGS_TUNNEL;\n+\t\t\tbreak;\n \t\tdefault:\n \t\t\treturn;\n \t\t}\n@@ -1638,17 +1657,7 @@ static void i40e_tx_enable_csum(struct sk_buff *skb, u32 *tx_flags,\n \t\t/* switch L4 header pointer from outer to inner */\n \t\tip.hdr = skb_inner_network_header(skb);\n \t\tl4.hdr = skb_inner_transport_header(skb);\n-\n-\t\tif (*tx_flags & I40E_TX_FLAGS_IPV4) {\n-\t\t\tif (*tx_flags & I40E_TX_FLAGS_TSO) {\n-\t\t\t\t*cd_tunneling |= I40E_TX_CTX_EXT_IP_IPV4;\n-\t\t\t} else {\n-\t\t\t\t*cd_tunneling |=\n-\t\t\t\t\t I40E_TX_CTX_EXT_IP_IPV4_NO_CSUM;\n-\t\t\t}\n-\t\t} else if (*tx_flags & I40E_TX_FLAGS_IPV6) {\n-\t\t\t*cd_tunneling |= I40E_TX_CTX_EXT_IP_IPV6;\n-\t\t}\n+\t\tl4_proto = 0;\n \n \t\t/* Now set the ctx descriptor fields */\n \t\t*cd_tunneling |= (skb_network_header_len(skb) >> 2) <<\n@@ -1657,10 +1666,13 @@ static void i40e_tx_enable_csum(struct sk_buff *skb, u32 *tx_flags,\n \t\t\t\t ((skb_inner_network_offset(skb) -\n \t\t\t\t\tskb_transport_offset(skb)) >> 1) <<\n \t\t\t\t I40E_TXD_CTX_QW0_NATLEN_SHIFT;\n-\t\tif (ip.v6->version == 6) {\n-\t\t\t*tx_flags &= ~I40E_TX_FLAGS_IPV4;\n+\n+\t\t/* reset type as we transition from outer to inner headers */\n+\t\t*tx_flags &= ~(I40E_TX_FLAGS_IPV4 | I40E_TX_FLAGS_IPV6);\n+\t\tif (ip.v4->version == 4)\n+\t\t\t*tx_flags |= I40E_TX_FLAGS_IPV4;\n+\t\tif (ip.v6->version == 6)\n \t\t\t*tx_flags |= I40E_TX_FLAGS_IPV6;\n-\t\t}\n \t}\n \n \t/* Enable IP checksum offloads */\n", "prefixes": [ "next", "v3", "06/15" ] }