summaryrefslogtreecommitdiffstats
path: root/include/linux/skbuff.h
diff options
context:
space:
mode:
authorTom Herbert2015-09-01 18:24:27 +0200
committerDavid S. Miller2015-09-02 00:06:22 +0200
commitcd79a2382aa5dcefa6e21a7c59bb1bb19e53b74d (patch)
treec252b8dd90eddc8d635356e8b394bd455cac51c0 /include/linux/skbuff.h
parentflow_dissector: Jump to exit code in __skb_flow_dissect (diff)
downloadkernel-qcow2-linux-cd79a2382aa5dcefa6e21a7c59bb1bb19e53b74d.tar.gz
kernel-qcow2-linux-cd79a2382aa5dcefa6e21a7c59bb1bb19e53b74d.tar.xz
kernel-qcow2-linux-cd79a2382aa5dcefa6e21a7c59bb1bb19e53b74d.zip
flow_dissector: Add flags argument to skb_flow_dissector functions
The flags argument will allow control of the dissection process (for instance whether to parse beyond L3). Signed-off-by: Tom Herbert <tom@herbertland.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/skbuff.h')
-rw-r--r--include/linux/skbuff.h19
1 files changed, 11 insertions, 8 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index bbe41bccfc5f..9e62687c70f3 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -991,31 +991,34 @@ void skb_flow_dissector_init(struct flow_dissector *flow_dissector,
bool __skb_flow_dissect(const struct sk_buff *skb,
struct flow_dissector *flow_dissector,
void *target_container,
- void *data, __be16 proto, int nhoff, int hlen);
+ void *data, __be16 proto, int nhoff, int hlen,
+ unsigned int flags);
static inline bool skb_flow_dissect(const struct sk_buff *skb,
struct flow_dissector *flow_dissector,
- void *target_container)
+ void *target_container, unsigned int flags)
{
return __skb_flow_dissect(skb, flow_dissector, target_container,
- NULL, 0, 0, 0);
+ NULL, 0, 0, 0, flags);
}
static inline bool skb_flow_dissect_flow_keys(const struct sk_buff *skb,
- struct flow_keys *flow)
+ struct flow_keys *flow,
+ unsigned int flags)
{
memset(flow, 0, sizeof(*flow));
return __skb_flow_dissect(skb, &flow_keys_dissector, flow,
- NULL, 0, 0, 0);
+ NULL, 0, 0, 0, flags);
}
static inline bool skb_flow_dissect_flow_keys_buf(struct flow_keys *flow,
void *data, __be16 proto,
- int nhoff, int hlen)
+ int nhoff, int hlen,
+ unsigned int flags)
{
memset(flow, 0, sizeof(*flow));
return __skb_flow_dissect(NULL, &flow_keys_buf_dissector, flow,
- data, proto, nhoff, hlen);
+ data, proto, nhoff, hlen, flags);
}
static inline __u32 skb_get_hash(struct sk_buff *skb)
@@ -2046,7 +2049,7 @@ static inline void skb_probe_transport_header(struct sk_buff *skb,
if (skb_transport_header_was_set(skb))
return;
- else if (skb_flow_dissect_flow_keys(skb, &keys))
+ else if (skb_flow_dissect_flow_keys(skb, &keys, 0))
skb_set_transport_header(skb, keys.control.thoff);
else
skb_set_transport_header(skb, offset_hint);