aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/dst_metadata.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net/dst_metadata.h')
-rw-r--r--include/net/dst_metadata.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/include/net/dst_metadata.h b/include/net/dst_metadata.h
index 6816f0fa5693..30a56ab2ccfb 100644
--- a/include/net/dst_metadata.h
+++ b/include/net/dst_metadata.h
@@ -44,6 +44,24 @@ static inline bool skb_valid_dst(const struct sk_buff *skb)
44 return dst && !(dst->flags & DST_METADATA); 44 return dst && !(dst->flags & DST_METADATA);
45} 45}
46 46
47static inline int skb_metadata_dst_cmp(const struct sk_buff *skb_a,
48 const struct sk_buff *skb_b)
49{
50 const struct metadata_dst *a, *b;
51
52 if (!(skb_a->_skb_refdst | skb_b->_skb_refdst))
53 return 0;
54
55 a = (const struct metadata_dst *) skb_dst(skb_a);
56 b = (const struct metadata_dst *) skb_dst(skb_b);
57
58 if (!a != !b || a->u.tun_info.options_len != b->u.tun_info.options_len)
59 return 1;
60
61 return memcmp(&a->u.tun_info, &b->u.tun_info,
62 sizeof(a->u.tun_info) + a->u.tun_info.options_len);
63}
64
47struct metadata_dst *metadata_dst_alloc(u8 optslen, gfp_t flags); 65struct metadata_dst *metadata_dst_alloc(u8 optslen, gfp_t flags);
48struct metadata_dst __percpu *metadata_dst_alloc_percpu(u8 optslen, gfp_t flags); 66struct metadata_dst __percpu *metadata_dst_alloc_percpu(u8 optslen, gfp_t flags);
49 67