Expose IPSEC modes output path to take an xfrm state as input param.
This makes it consistent with the input mode processing (which already
takes the xfrm state as a param).
Signed-off-by: Jamal Hadi Salim <hadi@cyberus.ca>
Signed-off-by: David S. Miller <davem@davemloft.net>
 
 struct xfrm_mode {
        int (*input)(struct xfrm_state *x, struct sk_buff *skb);
-       int (*output)(struct sk_buff *skb);
+       int (*output)(struct xfrm_state *x,struct sk_buff *skb);
 
        struct module *owner;
        unsigned int encap;
 
  * On exit, skb->h will be set to the start of the payload to be processed
  * by x->type->output and skb->nh will be set to the top IP header.
  */
-static int xfrm4_transport_output(struct sk_buff *skb)
+static int xfrm4_transport_output(struct xfrm_state *x, struct sk_buff *skb)
 {
-       struct xfrm_state *x;
        struct iphdr *iph;
        int ihl;
 
        ihl = iph->ihl * 4;
        skb->h.raw += ihl;
 
-       x = skb->dst->xfrm;
        skb->nh.raw = memmove(skb_push(skb, x->props.header_len), iph, ihl);
        return 0;
 }
 
  * On exit, skb->h will be set to the start of the payload to be processed
  * by x->type->output and skb->nh will be set to the top IP header.
  */
-static int xfrm4_tunnel_output(struct sk_buff *skb)
+static int xfrm4_tunnel_output(struct xfrm_state *x, struct sk_buff *skb)
 {
        struct dst_entry *dst = skb->dst;
-       struct xfrm_state *x = dst->xfrm;
        struct iphdr *iph, *top_iph;
        int flags;
 
 
                if (err)
                        goto error;
 
-               err = x->mode->output(skb);
+               err = x->mode->output(x, skb);
                if (err)
                        goto error;
 
 
  * its absence, that of the top IP header.  The value of skb->data will always
  * point to the top IP header.
  */
-static int xfrm6_ro_output(struct sk_buff *skb)
+static int xfrm6_ro_output(struct xfrm_state *x, struct sk_buff *skb)
 {
-       struct xfrm_state *x = skb->dst->xfrm;
        struct ipv6hdr *iph;
        u8 *prevhdr;
        int hdr_len;
 
  * its absence, that of the top IP header.  The value of skb->data will always
  * point to the top IP header.
  */
-static int xfrm6_transport_output(struct sk_buff *skb)
+static int xfrm6_transport_output(struct xfrm_state *x, struct sk_buff *skb)
 {
-       struct xfrm_state *x = skb->dst->xfrm;
        struct ipv6hdr *iph;
        u8 *prevhdr;
        int hdr_len;
 
  * its absence, that of the top IP header.  The value of skb->data will always
  * point to the top IP header.
  */
-static int xfrm6_tunnel_output(struct sk_buff *skb)
+static int xfrm6_tunnel_output(struct xfrm_state *x, struct sk_buff *skb)
 {
        struct dst_entry *dst = skb->dst;
-       struct xfrm_state *x = dst->xfrm;
        struct ipv6hdr *iph, *top_iph;
        int dsfield;
 
 
                if (err)
                        goto error;
 
-               err = x->mode->output(skb);
+               err = x->mode->output(x, skb);
                if (err)
                        goto error;