diff options
Diffstat (limited to 'include/net/dst_metadata.h')
| -rw-r--r-- | include/net/dst_metadata.h | 18 |
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 | ||
| 47 | static 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 | |||
| 47 | struct metadata_dst *metadata_dst_alloc(u8 optslen, gfp_t flags); | 65 | struct metadata_dst *metadata_dst_alloc(u8 optslen, gfp_t flags); |
| 48 | struct metadata_dst __percpu *metadata_dst_alloc_percpu(u8 optslen, gfp_t flags); | 66 | struct metadata_dst __percpu *metadata_dst_alloc_percpu(u8 optslen, gfp_t flags); |
| 49 | 67 | ||
