|
@@ -32,6 +32,7 @@
|
|
|
#include <linux/hrtimer.h>
|
|
|
#include <linux/dma-mapping.h>
|
|
|
#include <linux/netdev_features.h>
|
|
|
+#include <net/flow_keys.h>
|
|
|
|
|
|
/* Don't change this without changing skb_csum_unnecessary! */
|
|
|
#define CHECKSUM_NONE 0
|
|
@@ -1559,6 +1560,19 @@ static inline void skb_set_transport_header(struct sk_buff *skb,
|
|
|
skb->transport_header += offset;
|
|
|
}
|
|
|
|
|
|
+static inline void skb_probe_transport_header(struct sk_buff *skb,
|
|
|
+ const int offset_hint)
|
|
|
+{
|
|
|
+ struct flow_keys keys;
|
|
|
+
|
|
|
+ if (skb_transport_header_was_set(skb))
|
|
|
+ return;
|
|
|
+ else if (skb_flow_dissect(skb, &keys))
|
|
|
+ skb_set_transport_header(skb, keys.thoff);
|
|
|
+ else
|
|
|
+ skb_set_transport_header(skb, offset_hint);
|
|
|
+}
|
|
|
+
|
|
|
static inline unsigned char *skb_network_header(const struct sk_buff *skb)
|
|
|
{
|
|
|
return skb->head + skb->network_header;
|