[PC周辺] VMware Workstation 4.5.3 build-19414 + vmware-any-any-update109 + Linux 2.6.22-rc5 (20070626)

の組み合わせの場合の話.

まず,vmmon.o の compile で

include/asm/page.h: In function 'pte_t native_make_pte(long unsigned int)':
include/asm/page.h:111: error: expected primary-expression before ')' token
include/asm/page.h:111: error: expected ';' before '{' token
include/asm/page.h:111: error: expected primary-expression before '.' token
include/asm/page.h:111: error: expected `;' before '}' token

とかでこける.これに関しては,

diff -uwr /usr/src/linux-headers-2.6.22-rc5/include/asm/page.h.orig /usr/src/linux-headers-2.6.22-rc5/include/asm/page.h
--- /usr/src/linux-headers-2.6.22-rc5/include/asm/page.h.orig   2007-06-26 14:51:30.000000000 +0900
+++ /usr/src/linux-headers-2.6.22-rc5/include/asm/page.h        2007-06-26 14:51:48.000000000 +0900
@@ -106,10 +106,12 @@
 {
        return (pgd_t) { val };
 }
+/*
 static inline pte_t native_make_pte(unsigned long val)
 {
        return (pte_t) { .pte_low = val };
 }
+*/

 #define HPAGE_SHIFT    22
 #include <asm-generic/pgtable-nopmd.h>

みたいな header 側に patch をあててとりあえず回避. ちなみに該当箇所の kernel 側の変更は <URL:http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=3dc494e86d1c93afd4c66385f270899dbfae483d> に由来.

次に,vmnet.o の compile で

/tmp/vmware-config0/vmnet-only/userif.c: In function 'VNetCopyDatagramToUser': /tmp/vmware-config0/vmnet-only/userif.c:633: error: 'const struct sk_buff' has no member named 'h' /tmp/vmware-config0/vmnet-only/userif.c:633: error: 'const struct sk_buff' has no member named 'nh' /tmp/vmware-config0/vmnet-only/userif.c:639: error: 'const struct sk_buff' has no member named 'h'

とかでこける.これは,kernel 側の <URL:http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=b0e380b1d8a8e0aca215df97702f99815f05c094> という変更に由来.

つまり

変更すれば OK.以下のような patch を vmnet.tar 内の file にあてる.

diff -uwr a/vmnet-only/bridge.c b/vmnet-only/bridge.c
--- a/vmnet-only/bridge.c	2006-11-13 07:50:53.000000000 +0900
+++ b/vmnet-only/bridge.c	2007-06-26 14:44:58.000000000 +0900
@@ -1072,12 +1072,12 @@
 VNetBridgeComputeHeaderPos(struct sk_buff *skb) // IN: buffer to examine
 {
    /* Maybe some kernel gets it right... */
-   if (skb->h.raw != skb->nh.raw) {
+   if (skb->transport_header != skb->network_header) {
       return;
    }
    switch (be16_to_cpu(skb->protocol)) {
       case ETH_P_IP:
-         skb->h.raw = skb->nh.raw + (skb->nh.raw[0] & 0x0F) * 4;
+         skb->transport_header = skb->network_header + (skb->network_header[0] & 0x0F) * 4;
 	 return;
       default:
          LOG(3, (KERN_DEBUG "Unknown EII protocol %04X: csum at %d\n", 
@@ -1163,7 +1163,7 @@
 #  endif

    if (bridge->smac) {
-      if (VNetCallSMACFunc(bridge->smac, &skb, skb->mac.raw, 
+      if (VNetCallSMACFunc(bridge->smac, &skb, skb->mac_header, 
                            SMAC_CheckPacketFromHost) != 
           PacketStatusForwardPacket) {
          LOG(4, (KERN_NOTICE "bridge-%s: packet dropped .\n",
@@ -1187,7 +1187,7 @@
 #endif
 #endif

-   skb_push(skb, skb->data - skb->mac.raw);
+   skb_push(skb, skb->data - skb->mac_header);
    LOG(3, (KERN_DEBUG "bridge-%s: receive %d\n",
 	   bridge->name, (int) skb->len));

diff -uwr a/vmnet-only/userif.c b/vmnet-only/userif.c
--- a/vmnet-only/userif.c	2006-11-13 07:04:40.000000000 +0900
+++ b/vmnet-only/userif.c	2007-06-26 14:38:37.000000000 +0900
@@ -630,13 +630,13 @@
     */
    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->transport_header != skb->network_header &&		/* We must know where header is */
        skb->len == count) {			/* No truncation may occur */
       size_t skl;
       int csum;
       u_int16_t csum16;

-      skl = skb->h.raw - skb->data;
+      skl = skb->transport_header - skb->data;
       if (VNetCopyDatagram(skb, buf, skl)) {
 	 return -EFAULT;
       }
diff -uwr a/vmnet-only/vnetInt.h b/vmnet-only/vnetInt.h
--- a/vmnet-only/vnetInt.h	2005-06-19 10:00:03.000000000 +0900
+++ b/vmnet-only/vnetInt.h	2007-06-26 14:43:34.000000000 +0900
@@ -25,8 +25,8 @@
 #define DEV_QUEUE_XMIT(skb, dev, pri)	(                 \
     (skb)->dev = (dev),                                   \
     (skb)->priority = (pri),                              \
-    (skb)->mac.raw = (skb)->data,                         \
-    (skb)->nh.raw = (skb)->data + sizeof (struct ethhdr), \
+    (skb)->mac_header = (skb)->data,                         \
+    (skb)->network_header = (skb)->data + sizeof (struct ethhdr), \
     dev_queue_xmit(skb)                                   \
   )
 #ifdef KERNEL_2_3_15
関連リンク
参照リンク


Last-modified: Fri Jul 20 10:44:04 +0900 2007

全インデックス