]> err.no Git - linux-2.6/commitdiff
[IPSEC]: output mode to take an xfrm state as input param
authorJamal Hadi Salim <hadi@cyberus.ca>
Fri, 1 Sep 2006 00:42:59 +0000 (17:42 -0700)
committerDavid S. Miller <davem@sunset.davemloft.net>
Fri, 22 Sep 2006 22:18:48 +0000 (15:18 -0700)
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>
include/net/xfrm.h
net/ipv4/xfrm4_mode_transport.c
net/ipv4/xfrm4_mode_tunnel.c
net/ipv4/xfrm4_output.c
net/ipv6/xfrm6_mode_ro.c
net/ipv6/xfrm6_mode_transport.c
net/ipv6/xfrm6_mode_tunnel.c
net/ipv6/xfrm6_output.c

index 0acabf2a0a8f2379f87cf54e885654c9fbeab8b4..4d6dc627df9b07212cdba144706096a01dcf81b6 100644 (file)
@@ -285,7 +285,7 @@ extern void xfrm_put_type(struct xfrm_type *type);
 
 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;
index a9e6b3dd19c9b9f5c4b5c371bbf6c0cd03c2b629..92676b7e403477ec575ef7bd861fdd09381a46d1 100644 (file)
@@ -21,9 +21,8 @@
  * 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;
 
@@ -33,7 +32,6 @@ static int xfrm4_transport_output(struct sk_buff *skb)
        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;
 }
index 13cafbe56ce362e482a1e2ec2ed82f821fc82730..e23c21d31a531ba927956f9a61b28d63caec72d7 100644 (file)
@@ -33,10 +33,9 @@ static inline void ipip_ecn_decapsulate(struct sk_buff *skb)
  * 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;
 
index 5fd115f0c54784d30ab2b7e741d28f0b53fa11ae..04403fb01a5890abb1d1d8c41b8812b6d9c9b5d4 100644 (file)
@@ -66,7 +66,7 @@ static int xfrm4_output_one(struct sk_buff *skb)
                if (err)
                        goto error;
 
-               err = x->mode->output(skb);
+               err = x->mode->output(x, skb);
                if (err)
                        goto error;
 
index c11c335312f9cb7fad6c139c7749fd18878c71b3..6031c16d46ca840ad214e822cb2e022efecfb2ee 100644 (file)
@@ -43,9 +43,8 @@
  * 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;
index a5dce216024d5725851f1069c081bb09e29cb905..3a4b39b12bad016c943ebb0e337b139032db3f60 100644 (file)
@@ -25,9 +25,8 @@
  * 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;
index 8af79be2edcad346fd0aac5ae91e29918a62d15b..5e7d8a7d6414cc85a01fd463485c016af1d5a219 100644 (file)
@@ -37,10 +37,9 @@ static inline void ipip6_ecn_decapsulate(struct sk_buff *skb)
  * 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;
 
index db58104e710b447e31546a812d8169b65919bb56..c260ea104c524df24f2a49209b8fe57ba0409efd 100644 (file)
@@ -65,7 +65,7 @@ static int xfrm6_output_one(struct sk_buff *skb)
                if (err)
                        goto error;
 
-               err = x->mode->output(skb);
+               err = x->mode->output(x, skb);
                if (err)
                        goto error;