diff -Nur vmxnet-only/vmxnet.c vmxnet-only.new/vmxnet.c
--- vmxnet-only/vmxnet.c	2007-05-02 05:37:18.000000000 +0200
+++ vmxnet-only.new/vmxnet.c	2007-08-08 15:36:21.000000000 +0200
@@ -1217,13 +1217,13 @@
          iphOffset += VLAN_TAG_LENGTH;
       }
       if (LIKELY(PKT_OF_IPV4(skb))){
-         if (LIKELY(skb->nh.iph->protocol == IPPROTO_TCP)) {
+         if (LIKELY(VMWARE_SKB_NH(skb)->protocol == IPPROTO_TCP)) {
             /* tcp traffic, copy all protocol headers */
-            tcphOffset = iphOffset + (skb->nh.iph->ihl << 2);
-            headerSize = tcphOffset + (skb->h.th->doff << 2);
+            tcphOffset = iphOffset + (VMWARE_SKB_NH(skb)->ihl << 2);
+            headerSize = tcphOffset + (VMWARE_SKB_H(skb)->doff << 2);
          } else {
             /* non-tcp traffic, copy mac + ip header */
-            headerSize = iphOffset + (skb->nh.iph->ihl << 2);
+            headerSize = iphOffset + (VMWARE_SKB_NH(skb)->ihl << 2);
             tcphOffset = 0;
          }
       } else { 
@@ -1364,8 +1364,8 @@
          dd->stats.noCopyTransmits++;
 
          /* prepare for the chopping */
-         nextSeq = ntohl(skb->h.th->seq);
-         nextId = ntohs(skb->nh.iph->id);
+         nextSeq = ntohl(VMWARE_SKB_H(skb)->seq);
+         nextId = ntohs(VMWARE_SKB_NH(skb)->id);
          tcphSize = headerSize - tcphOffset;
          tcpiphSize = headerSize - iphOffset;
 
@@ -1442,8 +1442,8 @@
                VMXNET_INC(dd->txDriverNext, dd->txRingLength);
             } else {
                /* special considerations for the last one */
-               tcph->fin = skb->h.th->fin;
-               tcph->psh = skb->h.th->psh;
+               tcph->fin = VMWARE_SKB_H(skb)->fin;
+               tcph->psh = VMWARE_SKB_H(skb)->psh;
 
                lp->numTxPending += txEntries;
                if (lp->numTxPending > dd->txRingLength - 5) {
diff -Nur vmxnet-only/vmxnetInt.h vmxnet-only.new/vmxnetInt.h
--- vmxnet-only/vmxnetInt.h	2007-05-02 05:37:18.000000000 +0200
+++ vmxnet-only.new/vmxnetInt.h	2007-08-08 15:35:06.000000000 +0200
@@ -104,6 +104,14 @@
 #   define VM_CHECKSUM_UNNECESSARY CHECKSUM_UNNECESSARY
 #endif
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
+#   define VMWARE_SKB_NH(a)		(ip_hdr(a))
+#   define VMWARE_SKB_H(a)		(tcp_hdr(a))
+#else
+#   define VMWARE_SKB_NH(a)		(a->nh.iph)
+#   define VMWARE_SKB_H(a)		(a->h.th)
+#endif
+
 struct Vmxnet_TxBuf {
    struct sk_buff *skb;
    char    sgForLinear; /* the sg entry mapping the linear part 

