mirror of https://github.com/OpenIPC/firmware.git
76 lines
2.5 KiB
Diff
76 lines
2.5 KiB
Diff
diff -drupN a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
|
|
--- a/net/xfrm/xfrm_policy.c 2018-08-06 17:23:04.000000000 +0300
|
|
+++ b/net/xfrm/xfrm_policy.c 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -125,7 +125,7 @@ static inline struct dst_entry *__xfrm_d
|
|
int tos, int oif,
|
|
const xfrm_address_t *saddr,
|
|
const xfrm_address_t *daddr,
|
|
- int family)
|
|
+ int family, u32 mark)
|
|
{
|
|
struct xfrm_policy_afinfo *afinfo;
|
|
struct dst_entry *dst;
|
|
@@ -134,7 +134,7 @@ static inline struct dst_entry *__xfrm_d
|
|
if (unlikely(afinfo == NULL))
|
|
return ERR_PTR(-EAFNOSUPPORT);
|
|
|
|
- dst = afinfo->dst_lookup(net, tos, oif, saddr, daddr);
|
|
+ dst = afinfo->dst_lookup(net, tos, oif, saddr, daddr, mark);
|
|
|
|
xfrm_policy_put_afinfo(afinfo);
|
|
|
|
@@ -145,7 +145,7 @@ static inline struct dst_entry *xfrm_dst
|
|
int tos, int oif,
|
|
xfrm_address_t *prev_saddr,
|
|
xfrm_address_t *prev_daddr,
|
|
- int family)
|
|
+ int family, u32 mark)
|
|
{
|
|
struct net *net = xs_net(x);
|
|
xfrm_address_t *saddr = &x->props.saddr;
|
|
@@ -161,7 +161,7 @@ static inline struct dst_entry *xfrm_dst
|
|
daddr = x->coaddr;
|
|
}
|
|
|
|
- dst = __xfrm_dst_lookup(net, tos, oif, saddr, daddr, family);
|
|
+ dst = __xfrm_dst_lookup(net, tos, oif, saddr, daddr, family, mark);
|
|
|
|
if (!IS_ERR(dst)) {
|
|
if (prev_saddr != saddr)
|
|
@@ -1435,14 +1435,14 @@ int __xfrm_sk_clone_policy(struct sock *
|
|
|
|
static int
|
|
xfrm_get_saddr(struct net *net, int oif, xfrm_address_t *local,
|
|
- xfrm_address_t *remote, unsigned short family)
|
|
+ xfrm_address_t *remote, unsigned short family, u32 mark)
|
|
{
|
|
int err;
|
|
struct xfrm_policy_afinfo *afinfo = xfrm_policy_get_afinfo(family);
|
|
|
|
if (unlikely(afinfo == NULL))
|
|
return -EINVAL;
|
|
- err = afinfo->get_saddr(net, oif, local, remote);
|
|
+ err = afinfo->get_saddr(net, oif, local, remote, mark);
|
|
xfrm_policy_put_afinfo(afinfo);
|
|
return err;
|
|
}
|
|
@@ -1473,7 +1473,7 @@ xfrm_tmpl_resolve_one(struct xfrm_policy
|
|
if (xfrm_addr_any(local, tmpl->encap_family)) {
|
|
error = xfrm_get_saddr(net, fl->flowi_oif,
|
|
&tmp, remote,
|
|
- tmpl->encap_family);
|
|
+ tmpl->encap_family, 0);
|
|
if (error)
|
|
goto fail;
|
|
local = &tmp;
|
|
@@ -1752,7 +1752,8 @@ static struct dst_entry *xfrm_bundle_cre
|
|
if (xfrm[i]->props.mode != XFRM_MODE_TRANSPORT) {
|
|
family = xfrm[i]->props.family;
|
|
dst = xfrm_dst_lookup(xfrm[i], tos, fl->flowi_oif,
|
|
- &saddr, &daddr, family);
|
|
+ &saddr, &daddr, family,
|
|
+ xfrm[i]->props.output_mark);
|
|
err = PTR_ERR(dst);
|
|
if (IS_ERR(dst))
|
|
goto put_states;
|