--- linux/net/ipsec/ipsec_xmit.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) --- openswan-2.6.29.orig/linux/net/ipsec/ipsec_xmit.c +++ openswan-2.6.29/linux/net/ipsec/ipsec_xmit.c @@ -105,6 +105,15 @@ static __u32 zeroes[64]; int ipsec_xmit_trap_count = 0; int ipsec_xmit_trap_sendcount = 0; +#ifndef NIPQUAD +#define NIPQUAD(addr) \ + ((unsigned char *)&addr)[0], \ + ((unsigned char *)&addr)[1], \ + ((unsigned char *)&addr)[2], \ + ((unsigned char *)&addr)[3] +#define NIPQUAD_FMT "%u.%u.%u.%u" +#endif + #define dmp(_x,_y,_z) if(debug_xmit && sysctl_ipsec_debug_verbose) ipsec_dmp_block(_x,_y,_z) #if !defined(SKB_COPY_EXPAND) || defined(KLIPS_UNIT_TESTS) @@ -2085,7 +2094,11 @@ ipsec_xmit_send(struct ipsec_xmit_state* return IPSEC_XMIT_ROUTEERR; } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36) + if(ixs->dev == ixs->route->dst.dev) { +#else if(ixs->dev == ixs->route->u.dst.dev) { +#endif ip_rt_put(ixs->route); /* This is recursion, drop it. */ if (ixs->stats) @@ -2098,7 +2111,11 @@ ipsec_xmit_send(struct ipsec_xmit_state* } skb_dst_drop(ixs->skb); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36) + skb_dst_set(ixs->skb, &ixs->route->dst); +#else skb_dst_set(ixs->skb, &ixs->route->u.dst); +#endif if(ixs->stats) { ixs->stats->tx_bytes += ixs->skb->len; } @@ -2139,7 +2156,11 @@ ipsec_xmit_send(struct ipsec_xmit_state* else err = NF_HOOK(PF_INET, OSW_NF_INET_LOCAL_OUT, ixs->skb, NULL, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36) + ixs->route->dst.dev, +#else ixs->route->u.dst.dev, +#endif ipsec_xmit_send2); if(err != NET_XMIT_SUCCESS && err != NET_XMIT_CN) {