]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/ipv4/xfrm4_mode_beet.c
x86: unification of cfufreq/Kconfig
[linux-2.6-omap-h63xx.git] / net / ipv4 / xfrm4_mode_beet.c
index a73e710740c22396c4bff28337c53ea6b8624565..e42e122414be1e461c01898aff091f405b48dfa2 100644 (file)
 /* Add encapsulation header.
  *
  * The top IP header will be constructed per draft-nikander-esp-beet-mode-06.txt.
- * The following fields in it shall be filled in by x->type->output:
- *      tot_len
- *      check
- *
- * 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_beet_output(struct xfrm_state *x, struct sk_buff *skb)
 {
+       struct ip_beet_phdr *ph;
        struct iphdr *iph, *top_iph;
        int hdrlen, optlen;
 
        iph = ip_hdr(skb);
-       skb->transport_header = skb->network_header;
 
        hdrlen = 0;
        optlen = iph->ihl * 4 - sizeof(*iph);
        if (unlikely(optlen))
                hdrlen += IPV4_BEET_PHMAXLEN - (optlen & 4);
 
-       skb_push(skb, x->props.header_len - IPV4_BEET_PHMAXLEN + hdrlen);
-       skb_reset_network_header(skb);
-       top_iph = ip_hdr(skb);
-       skb->transport_header += sizeof(*iph) - hdrlen;
+       skb_set_network_header(skb, IPV4_BEET_PHMAXLEN - x->props.header_len -
+                                   hdrlen);
+       skb->mac_header = skb->network_header +
+                         offsetof(struct iphdr, protocol);
+       skb->transport_header = skb->network_header + sizeof(*iph);
+
+       ph = (struct ip_beet_phdr *)__skb_pull(skb, sizeof(*iph) - hdrlen);
 
+       top_iph = ip_hdr(skb);
        memmove(top_iph, iph, sizeof(*iph));
        if (unlikely(optlen)) {
-               struct ip_beet_phdr *ph;
-
                BUG_ON(optlen < 0);
 
-               ph = (struct ip_beet_phdr *)skb_transport_header(skb);
                ph->padlen = 4 - (optlen & 4);
                ph->hdrlen = optlen / 8;
                ph->nexthdr = top_iph->protocol;
@@ -119,6 +114,7 @@ static struct xfrm_mode xfrm4_beet_mode = {
        .output = xfrm4_beet_output,
        .owner = THIS_MODULE,
        .encap = XFRM_MODE_BEET,
+       .flags = XFRM_MODE_FLAG_TUNNEL,
 };
 
 static int __init xfrm4_beet_init(void)