summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Duyck <aduyck@mirantis.com>2016-02-24 09:30:04 -0800
committerDavid S. Miller <davem@davemloft.net>2016-02-24 13:58:05 -0500
commitd975ddd69698d068a8ebd294c382f1c791b380da (patch)
tree8a7bf4cb92f8e275906a760556247c94a515a62e
parentb3c3106ce3f4646a008cd238b16f899ae14fd2a7 (diff)
downloadlinux-d975ddd69698d068a8ebd294c382f1c791b380da.tar.gz
linux-d975ddd69698d068a8ebd294c382f1c791b380da.tar.bz2
linux-d975ddd69698d068a8ebd294c382f1c791b380da.zip
eth: Pull header from first fragment via eth_get_headlen
We want to try and pull the L4 header in if it is available in the first fragment. As such add the flag to indicate we want to pull the headers on the first fragment in. Signed-off-by: Alexander Duyck <aduyck@mirantis.com> Acked-by: Tom Herbert <tom@herbertland.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/ethernet/eth.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c
index 103871784e50..66dff5e3d772 100644
--- a/net/ethernet/eth.c
+++ b/net/ethernet/eth.c
@@ -125,6 +125,7 @@ EXPORT_SYMBOL(eth_header);
*/
u32 eth_get_headlen(void *data, unsigned int len)
{
+ const unsigned int flags = FLOW_DISSECTOR_F_PARSE_1ST_FRAG;
const struct ethhdr *eth = (const struct ethhdr *)data;
struct flow_keys keys;
@@ -134,7 +135,7 @@ u32 eth_get_headlen(void *data, unsigned int len)
/* parse any remaining L2/L3 headers, check for L4 */
if (!skb_flow_dissect_flow_keys_buf(&keys, data, eth->h_proto,
- sizeof(*eth), len, 0))
+ sizeof(*eth), len, flags))
return max_t(u32, keys.control.thoff, sizeof(*eth));
/* parse for any L4 headers */