diff -u -r vmnet-only.old/bridge.c vmnet-only/bridge.c --- vmnet-only.old/bridge.c 2007-06-19 15:32:47.000000000 +0200 +++ vmnet-only/bridge.c 2007-06-19 15:46:52.000000000 +0200 @@ -1072,12 +1072,22 @@ VNetBridgeComputeHeaderPos(struct sk_buff *skb) // IN: buffer to examine { /* Maybe some kernel gets it right... */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) + if (skb->transport_header != skb->network_header) { + return; + } +#else if (skb->h.raw != skb->nh.raw) { return; } +#endif switch (be16_to_cpu(skb->protocol)) { case ETH_P_IP: +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) + skb->transport_header = skb->network_header + (skb_network_header(skb)[0] & 0x0F) * 4; +#else skb->h.raw = skb->nh.raw + (skb->nh.raw[0] & 0x0F) * 4; +#endif return; default: LOG(3, (KERN_DEBUG "Unknown EII protocol %04X: csum at %d\n", @@ -1163,9 +1173,15 @@ # endif if (bridge->smac) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) + if (VNetCallSMACFunc(bridge->smac, &skb, skb_mac_header(skb), + SMAC_CheckPacketFromHost) != + PacketStatusForwardPacket) { +#else if (VNetCallSMACFunc(bridge->smac, &skb, skb->mac.raw, SMAC_CheckPacketFromHost) != PacketStatusForwardPacket) { +#endif LOG(4, (KERN_NOTICE "bridge-%s: packet dropped .\n", bridge->name)); return 0; @@ -1187,7 +1203,11 @@ #endif #endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) + skb_push(skb, skb->data - skb_mac_header(skb)); +#else skb_push(skb, skb->data - skb->mac.raw); +#endif LOG(3, (KERN_DEBUG "bridge-%s: receive %d\n", bridge->name, (int) skb->len)); diff -u -r vmnet-only.old/userif.c vmnet-only/userif.c --- vmnet-only.old/userif.c 2007-06-19 15:32:47.000000000 +0200 +++ vmnet-only/userif.c 2007-06-19 15:42:07.000000000 +0200 @@ -628,15 +628,26 @@ * verify checksum anyway in such case, and copy without checksum it is * faster. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) + if (skb->pkt_type == PACKET_OUTGOING && /* Packet must be outgoing */ + skb->ip_summed == VM_CHECKSUM_PARTIAL && /* Without checksum */ + skb->transport_header != skb->network_header && /* We must know where header is */ + skb->len == count) { /* No truncation may occur */ +#else if (skb->pkt_type == PACKET_OUTGOING && /* Packet must be outgoing */ skb->ip_summed == VM_CHECKSUM_PARTIAL && /* Without checksum */ skb->h.raw != skb->nh.raw && /* We must know where header is */ skb->len == count) { /* No truncation may occur */ +#endif size_t skl; int csum; u_int16_t csum16; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) + skl = skb_transport_header(skb) - skb->data; +#else skl = skb->h.raw - skb->data; +#endif if (VNetCopyDatagram(skb, buf, skl)) { return -EFAULT; } diff -u -r vmnet-only.old/vnetInt.h vmnet-only/vnetInt.h --- vmnet-only.old/vnetInt.h 2007-06-19 15:32:47.000000000 +0200 +++ vmnet-only/vnetInt.h 2007-06-19 15:43:29.000000000 +0200 @@ -22,6 +22,15 @@ skb_datarefp(clone) == skb_datarefp(skb) \ ) #endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) +#define DEV_QUEUE_XMIT(skb, dev, pri) ( \ + (skb)->dev = (dev), \ + (skb)->priority = (pri), \ + skb_reset_mac_header(skb), \ + skb_set_network_header(skb, sizeof(struct ethhdr)), \ + dev_queue_xmit(skb) \ + ) +#else #define DEV_QUEUE_XMIT(skb, dev, pri) ( \ (skb)->dev = (dev), \ (skb)->priority = (pri), \ @@ -29,6 +38,7 @@ (skb)->nh.raw = (skb)->data + sizeof (struct ethhdr), \ dev_queue_xmit(skb) \ ) +#endif #ifdef KERNEL_2_3_15 # define dev_lock_list() read_lock(&dev_base_lock) # define dev_unlock_list() read_unlock(&dev_base_lock)