]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - net/xfrm/xfrm_output.c
xfrm: store xfrm_mode directly, not its address
[linux.git] / net / xfrm / xfrm_output.c
index 3cb2a328a8abfa3edbbb39f7a1c85548a472aa2f..a55510f9ff35a711af26e416c6168370fac04ac6 100644 (file)
@@ -334,7 +334,7 @@ static int xfrm4_prepare_output(struct xfrm_state *x, struct sk_buff *skb)
        IPCB(skb)->flags |= IPSKB_XFRM_TUNNEL_SIZE;
        skb->protocol = htons(ETH_P_IP);
 
-       switch (x->outer_mode->encap) {
+       switch (x->outer_mode.encap) {
        case XFRM_MODE_BEET:
                return xfrm4_beet_encap_add(x, skb);
        case XFRM_MODE_TUNNEL:
@@ -357,7 +357,7 @@ static int xfrm6_prepare_output(struct xfrm_state *x, struct sk_buff *skb)
        skb->ignore_df = 1;
        skb->protocol = htons(ETH_P_IPV6);
 
-       switch (x->outer_mode->encap) {
+       switch (x->outer_mode.encap) {
        case XFRM_MODE_BEET:
                return xfrm6_beet_encap_add(x, skb);
        case XFRM_MODE_TUNNEL:
@@ -373,22 +373,22 @@ static int xfrm6_prepare_output(struct xfrm_state *x, struct sk_buff *skb)
 
 static int xfrm_outer_mode_output(struct xfrm_state *x, struct sk_buff *skb)
 {
-       switch (x->outer_mode->encap) {
+       switch (x->outer_mode.encap) {
        case XFRM_MODE_BEET:
        case XFRM_MODE_TUNNEL:
-               if (x->outer_mode->family == AF_INET)
+               if (x->outer_mode.family == AF_INET)
                        return xfrm4_prepare_output(x, skb);
-               if (x->outer_mode->family == AF_INET6)
+               if (x->outer_mode.family == AF_INET6)
                        return xfrm6_prepare_output(x, skb);
                break;
        case XFRM_MODE_TRANSPORT:
-               if (x->outer_mode->family == AF_INET)
+               if (x->outer_mode.family == AF_INET)
                        return xfrm4_transport_output(x, skb);
-               if (x->outer_mode->family == AF_INET6)
+               if (x->outer_mode.family == AF_INET6)
                        return xfrm6_transport_output(x, skb);
                break;
        case XFRM_MODE_ROUTEOPTIMIZATION:
-               if (x->outer_mode->family == AF_INET6)
+               if (x->outer_mode.family == AF_INET6)
                        return xfrm6_ro_output(x, skb);
                WARN_ON_ONCE(1);
                break;
@@ -489,7 +489,7 @@ static int xfrm_output_one(struct sk_buff *skb, int err)
                }
                skb_dst_set(skb, dst);
                x = dst->xfrm;
-       } while (x && !(x->outer_mode->flags & XFRM_MODE_FLAG_TUNNEL));
+       } while (x && !(x->outer_mode.flags & XFRM_MODE_FLAG_TUNNEL));
 
        return 0;
 
@@ -626,7 +626,7 @@ static int xfrm_inner_extract_output(struct xfrm_state *x, struct sk_buff *skb)
                inner_mode = xfrm_ip2inner_mode(x,
                                xfrm_af2proto(skb_dst(skb)->ops->family));
        else
-               inner_mode = x->inner_mode;
+               inner_mode = &x->inner_mode;
 
        if (inner_mode == NULL)
                return -EAFNOSUPPORT;