|
|
@@ -968,7 +968,7 @@ static inline bool xfrm_sec_ctx_match(struct xfrm_sec_ctx *s1, struct xfrm_sec_c
|
|
|
|
|
|
/* A struct encoding bundle of transformations to apply to some set of flow.
|
|
|
*
|
|
|
- * dst->child points to the next element of bundle.
|
|
|
+ * xdst->child points to the next element of bundle.
|
|
|
* dst->xfrm points to an instanse of transformer.
|
|
|
*
|
|
|
* Due to unfortunate limitations of current routing cache, which we
|
|
|
@@ -984,6 +984,7 @@ struct xfrm_dst {
|
|
|
struct rt6_info rt6;
|
|
|
} u;
|
|
|
struct dst_entry *route;
|
|
|
+ struct dst_entry *child;
|
|
|
struct xfrm_policy *pols[XFRM_POLICY_TYPE_MAX];
|
|
|
int num_pols, num_xfrms;
|
|
|
u32 xfrm_genid;
|
|
|
@@ -997,8 +998,10 @@ struct xfrm_dst {
|
|
|
static inline struct dst_entry *xfrm_dst_child(const struct dst_entry *dst)
|
|
|
{
|
|
|
#ifdef CONFIG_XFRM
|
|
|
- if (dst->xfrm)
|
|
|
- return dst->child;
|
|
|
+ if (dst->xfrm) {
|
|
|
+ struct xfrm_dst *xdst = (struct xfrm_dst *) dst;
|
|
|
+ return xdst->child;
|
|
|
+ }
|
|
|
#endif
|
|
|
return NULL;
|
|
|
}
|
|
|
@@ -1006,7 +1009,7 @@ static inline struct dst_entry *xfrm_dst_child(const struct dst_entry *dst)
|
|
|
#ifdef CONFIG_XFRM
|
|
|
static inline void xfrm_dst_set_child(struct xfrm_dst *xdst, struct dst_entry *child)
|
|
|
{
|
|
|
- xdst->u.dst.child = child;
|
|
|
+ xdst->child = child;
|
|
|
}
|
|
|
|
|
|
static inline void xfrm_dst_destroy(struct xfrm_dst *xdst)
|
|
|
@@ -1880,12 +1883,14 @@ bool xfrm_dev_offload_ok(struct sk_buff *skb, struct xfrm_state *x);
|
|
|
static inline bool xfrm_dst_offload_ok(struct dst_entry *dst)
|
|
|
{
|
|
|
struct xfrm_state *x = dst->xfrm;
|
|
|
+ struct xfrm_dst *xdst;
|
|
|
|
|
|
if (!x || !x->type_offload)
|
|
|
return false;
|
|
|
|
|
|
+ xdst = (struct xfrm_dst *) dst;
|
|
|
if (x->xso.offload_handle && (x->xso.dev == dst->path->dev) &&
|
|
|
- !dst->child->xfrm)
|
|
|
+ !xdst->child->xfrm)
|
|
|
return true;
|
|
|
|
|
|
return false;
|