--- ./kernel/tcp_splice_xmit.c.orig Wed Jan 3 22:43:03 2007 +++ ./kernel/tcp_splice_xmit.c Wed Jan 3 22:54:31 2007 @@ -18,6 +18,7 @@ * Copyright (C) 2006 Alexandre Cassen, */ +#include #include #include #include @@ -358,7 +359,11 @@ /* Add incremental checksum update later? */ /* full checksum check here now */ if (skb_is_nonlinear(skb)) { +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) + if (skb_linearize(skb, GFP_ATOMIC) != 0) +#else if (skb_linearize(skb) != 0) +#endif return NF_DROP; iph = skb->nh.iph; th = (void *)iph + ihl; @@ -366,7 +371,15 @@ switch (skb->ip_summed) { case CHECKSUM_NONE: skb->csum = csum_partial((void *)th, datalen, 0); +#if defined(CHECKSUM_COMPLETE) + /* kernel 2.6.19+ */ case CHECKSUM_COMPLETE: +#elif defined(CHECKSUM_HW) + /* kernel <2.6.19 */ + case CHECKSUM_HW: +#else +#error "Neither CHECKSUM_COMPLETE nor CHECKSUM_HW are defined. Check your kernel headers !" +#endif if (csum_tcpudp_magic(iph->saddr, iph->daddr, datalen, IPPROTO_TCP, skb->csum)) { TCP_SPLICE_DBG_RL("Incoming failed checksum "