xfrm: Extend the output_mark to support input direction and masking.
We already support setting an output mark at the xfrm_state, unfortunately this does not support the input direction and masking the marks that will be applied to the skb. This change adds support applying a masked value in both directions. The existing XFRMA_OUTPUT_MARK number is reused for this purpose and as it is now bi-directional, it is renamed to XFRMA_SET_MARK. An additional XFRMA_SET_MARK_MASK attribute is added for setting the mask. If the attribute mask not provided, it is set to 0xffffffff, keeping the XFRMA_OUTPUT_MARK existing 'full mask' semantics. Co-developed-by: Tobias Brunner <tobias@strongswan.org> Co-developed-by: Eyal Birger <eyal.birger@gmail.com> Co-developed-by: Lorenzo Colitti <lorenzo@google.com> Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com> Signed-off-by: Tobias Brunner <tobias@strongswan.org> Signed-off-by: Eyal Birger <eyal.birger@gmail.com> Signed-off-by: Lorenzo Colitti <lorenzo@google.com>
This commit is contained in:
@@ -166,7 +166,7 @@ struct xfrm_state {
|
||||
int header_len;
|
||||
int trailer_len;
|
||||
u32 extra_flags;
|
||||
u32 output_mark;
|
||||
struct xfrm_mark smark;
|
||||
} props;
|
||||
|
||||
struct xfrm_lifetime_cfg lft;
|
||||
@@ -2012,6 +2012,13 @@ static inline int xfrm_mark_put(struct sk_buff *skb, const struct xfrm_mark *m)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline __u32 xfrm_smark_get(__u32 mark, struct xfrm_state *x)
|
||||
{
|
||||
struct xfrm_mark *m = &x->props.smark;
|
||||
|
||||
return (m->v & m->m) | (mark & ~m->m);
|
||||
}
|
||||
|
||||
static inline int xfrm_tunnel_check(struct sk_buff *skb, struct xfrm_state *x,
|
||||
unsigned int family)
|
||||
{
|
||||
|
Reference in New Issue
Block a user