Recently found an old machine in a dusty corner, an Antholon64 2600+, slow but support hyper VT, perfect for running a virtual machine.
It appears good that AMD support high desity DDR2 so can buy some cheap memory in ebay, $40 for 8GB, only half price of normal memory.
Installed the newest CentOS 7, too new to find packages in repo. finally managed to get most of them done.
Downloaded VMware-Player-6.0.3-1895310.x86_64.bundle from vmware official site.
Install fine. First running failed. Check the log file in /tmp/vmware-root/vmware-modconfig-16392.log:
2014-07-25T21:29:05.141+10:00| vthread-3| I120: using /usr/bin/gcc for preprocess check
2014-07-25T21:29:05.153+10:00| vthread-3| I120: Preprocessed UTS_RELEASE, got value "3.10.0-123.el7.x86_64".
2014-07-25T21:29:05.153+10:00| vthread-3| I120: The header path "/lib/modules/3.10.0-123.el7.x86_64/build/include" for the kernel "3.10.0-123.el7.x86_64" is valid. Whoohoo!
2014-07-25T21:29:05.181+10:00| vthread-3| I120: The GCC version matches the kernel GCC minor version like a glove.
2014-07-25T21:29:05.181+10:00| vthread-3| I120: Validating path "/lib/modules/3.10.0-123.el7.x86_64/build/include" for kernel release "3.10.0-123.el7.x86_64".
2014-07-25T21:29:05.181+10:00| vthread-3| I120: Failed to find /lib/modules/3.10.0-123.el7.x86_64/build/include/linux/version.h
2014-07-25T21:29:05.181+10:00| vthread-3| I120: /lib/modules/3.10.0-123.el7.x86_64/build/include/linux/version.h not found, looking for generated/uapi/linux/version.h instead.
2014-07-25T21:29:05.181+10:00| vthread-3| I120: using /usr/bin/gcc for preprocess check
2014-07-25T21:29:05.197+10:00| vthread-3| I120: Preprocessed UTS_RELEASE, got value "3.10.0-123.el7.x86_64".
2014-07-25T21:29:05.197+10:00| vthread-3| I120: The header path "/lib/modules/3.10.0-123.el7.x86_64/build/include" for the kernel "3.10.0-123.el7.x86_64" is valid. Whoohoo!
2014-07-25T21:29:05.197+10:00| vthread-3| I120: Using temp dir "/tmp".
2014-07-25T21:29:05.199+10:00| vthread-3| I120: Obtaining info using the running kernel.
2014-07-25T21:29:05.199+10:00| vthread-3| I120: Setting header path for 3.10.0-123.el7.x86_64 to "/lib/modules/3.10.0-123.el7.x86_64/build/include".
2014-07-25T21:29:05.199+10:00| vthread-3| I120: Validating path "/lib/modules/3.10.0-123.el7.x86_64/build/include" for kernel release "3.10.0-123.el7.x86_64".
2014-07-25T21:29:05.199+10:00| vthread-3| I120: Failed to find /lib/modules/3.10.0-123.el7.x86_64/build/include/linux/version.h
2014-07-25T21:29:05.199+10:00| vthread-3| I120: /lib/modules/3.10.0-123.el7.x86_64/build/include/linux/version.h not found, looking for generated/uapi/linux/version.h instead.
2014-07-25T21:29:05.199+10:00| vthread-3| I120: using /usr/bin/gcc for preprocess check
2014-07-25T21:29:05.211+10:00| vthread-3| I120: Preprocessed UTS_RELEASE, got value "3.10.0-123.el7.x86_64".
2014-07-25T21:29:05.211+10:00| vthread-3| I120: The header path "/lib/modules/3.10.0-123.el7.x86_64/build/include" for the kernel "3.10.0-123.el7.x86_64" is valid. Whoohoo!
2014-07-25T21:29:05.435+10:00| vthread-3| I120: Invoking modinfo on "vmnet".
2014-07-25T21:29:05.440+10:00| vthread-3| I120: "/sbin/modinfo" exited with status 256.
2014-07-25T21:29:05.615+10:00| vthread-3| I120: Setting destination path for vmnet to "/lib/modules/3.10.0-123.el7.x86_64/misc/vmnet.ko".
2014-07-25T21:29:05.615+10:00| vthread-3| I120: Extracting the vmnet source from "/usr/lib/vmware/modules/source/vmnet.tar".
2014-07-25T21:29:05.681+10:00| vthread-3| I120: Successfully extracted the vmnet source.
2014-07-25T21:29:05.682+10:00| vthread-3| I120: Building module with command "/usr/bin/make -j2 -C /tmp/modconfig-j0FvbF/vmnet-only auto-build HEADER_DIR=/lib/modules/3.10.0-123.el7.x86_64/build/include CC=/usr/bin/gcc IS_GCC_3=no"
2014-07-25T21:29:12.543+10:00| vthread-3| W110: Failed to build vmnet. Failed to execute the build command.
At first I was attracted by the missing linux/version.h, so found it's not a big deal. then move to /usr/lib/vmware/modules/source/vmnet.tar
root:/usr/lib/vmware/modules/source# ls
vmblock.tar vmci.tar vmmon.tar vmnet.tar vsock.tar
root:/usr/lib/vmware/modules/source# tar xf vmnet.tar
root:/usr/lib/vmware/modules/source# ls
vmblock.tar vmci.tar vmmon.tar vmnet-only vmnet.tar vsock.tar
root:/usr/lib/vmware/modules/source# mv vmnet.tar vmnet.tar.buggy
root:/usr/lib/vmware/modules/source# cd vmnet-only
root:/usr/lib/vmware/modules/source/vmnet-only# ls
bridge.c driver.c monitorAction_exported.h smac_compat.c vm_basic_defs.h vnetEvent.h
community_source.h driver-config.h netdev_has_dev_net.c smac_compat.h vm_basic_types.h vnetFilter.h
compat_autoconf.h filter.c netdev_has_net.c smac.h vm_device_version.h vnetFilterInt.h
compat_module.h geninclude.c net.h userif.c vmnetInt.h vnet.h
compat_netdevice.h hub.c netif.c vm_assert.h vm_oui.h vnetInt.h
compat_skbuff.h includeCheck.h nfhook_uses_skb.c vm_atomic.h vmware_pack_begin.h vnetKernel.h
compat_sock.h Makefile procfs.c vm_basic_asm.h vmware_pack_end.h vnetUserListener.c
compat_version.h Makefile.kernel skblin.c vm_basic_asm_x86_64.h vmware_pack_init.h x86cpuid.h
COPYING Makefile.normal smac.c vm_basic_asm_x86.h vnetEvent.c
not bad, there's source codes. try to compile it
root:/usr/lib/vmware/modules/source/vmnet-only# make
Using 2.6.x kernel build system.
make -C /lib/modules/3.10.0-123.el7.x86_64/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
MODULEBUILDDIR= modules
make[1]: Entering directory `/usr/src/kernels/3.10.0-123.el7.x86_64'
CC [M] /usr/lib/vmware/modules/source/vmnet-only/driver.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/hub.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/userif.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/netif.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/bridge.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/filter.o
/usr/lib/vmware/modules/source/vmnet-only/filter.c:209:1: error: conflicting types for ‘VNetFilterHookFn’
VNetFilterHookFn(unsigned int hooknum, // IN:
^
/usr/lib/vmware/modules/source/vmnet-only/filter.c:64:18: note: previous declaration of ‘VNetFilterHookFn’ was here
static nf_hookfn VNetFilterHookFn;
^
/usr/lib/vmware/modules/source/vmnet-only/filter.c:64:18: warning: ‘VNetFilterHookFn’ used but never defined [enabled by default]
/usr/lib/vmware/modules/source/vmnet-only/filter.c:209:1: warning: ‘VNetFilterHookFn’ defined but not used [-Wunused-function]
VNetFilterHookFn(unsigned int hooknum, // IN:
^
make[2]: *** [/usr/lib/vmware/modules/source/vmnet-only/filter.o] Error 1
make[1]: *** [_module_/usr/lib/vmware/modules/source/vmnet-only] Error 2
make[1]: Leaving directory `/usr/src/kernels/3.10.0-123.el7.x86_64'
make: *** [vmnet.ko] Error 2
root:/usr/lib/vmware/modules/source/vmnet-only#
Googled the VNetFilterHookFn function. It was said since 3.13.5, the netfilter hook function (nf_hookfn) has been changed as the result of code refactoring. However, VNetFilterHookFn is still using the old definition of nf_hookfn. So the fix is t change the definition of VNetFilterHookFn to match the current kernel. vi-ed filter.c and 209gg, found this:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0)
VNetFilterHookFn(const struct nf_hook_ops *ops, // IN:
#else
VNetFilterHookFn(unsigned int hooknum, // IN:
#endif
what the hell, the patch has already been there. hold on, what's CentOS 7's version?
andy:~$ uname -a
Linux localhost.localdomain 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
So that's the reason. The kernel is lower than 3.13.0 so filter.c used the old definition. However RHEL7 must have applied some recent patches so the netfilter hook function has moved to the new one. Let's see how many KERNEL_VERSION have been watched
root:/usr/lib/vmware/modules/source/vmnet-only# grep KERNEL_VERSION *.c
bridge.c:#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22)
bridge.c:#if defined(NETIF_F_GSO) || LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18)
driver.c:#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 8)
filter.c:#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0)
filter.c:#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0)
netdev_has_dev_net.c:#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 25)
netdev_has_dev_net.c:#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26)
netdev_has_net.c:#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 23)
netdev_has_net.c:#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24)
nfhook_uses_skb.c:#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 23)
nfhook_uses_skb.c:#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24)
procfs.c:#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)
procfs.c:#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)
procfs.c:#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)
skblin.c:#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 17)
Only two in the filter.c required 3.13.0. Ok, changed them to
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)
then
root:/usr/lib/vmware/modules/source/vmnet-only# make
Using 2.6.x kernel build system.
make -C /lib/modules/3.10.0-123.el7.x86_64/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
MODULEBUILDDIR= modules
make[1]: Entering directory `/usr/src/kernels/3.10.0-123.el7.x86_64'
CC [M] /usr/lib/vmware/modules/source/vmnet-only/filter.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/procfs.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/smac_compat.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/smac.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/vnetEvent.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/vnetUserListener.o
LD [M] /usr/lib/vmware/modules/source/vmnet-only/vmnet.o
Building modules, stage 2.
MODPOST 1 modules
CC /usr/lib/vmware/modules/source/vmnet-only/vmnet.mod.o
LD [M] /usr/lib/vmware/modules/source/vmnet-only/vmnet.ko
make[1]: Leaving directory `/usr/src/kernels/3.10.0-123.el7.x86_64'
make -C $PWD SRCROOT=$PWD/. \
MODULEBUILDDIR= postbuild
make[1]: Entering directory `/usr/lib/vmware/modules/source/vmnet-only'
make[1]: `postbuild' is up to date.
make[1]: Leaving directory `/usr/lib/vmware/modules/source/vmnet-only'
cp -f vmnet.ko ./../vmnet.o
:-D
Now repack the vmnet.tar. Since vmware runtime will try to make the package, there's no need to clean the objects, probably could boost the install speed
root:/usr/lib/vmware/modules/source# tar cf vmnet.tar vmnet-only
root:/usr/lib/vmware/modules/source# ls
vmblock.tar vmci.tar vmmon.tar vmnet.o vmnet-only vmnet.tar vmnet.tar.buggy vsock.tar
Then run the vmware player and cross fingers ...... oh ye! succeed! Run some VMs all good.
It appears good that AMD support high desity DDR2 so can buy some cheap memory in ebay, $40 for 8GB, only half price of normal memory.
Installed the newest CentOS 7, too new to find packages in repo. finally managed to get most of them done.
Downloaded VMware-Player-6.0.3-1895310.x86_64.bundle from vmware official site.
Install fine. First running failed. Check the log file in /tmp/vmware-root/vmware-modconfig-16392.log:
2014-07-25T21:29:05.141+10:00| vthread-3| I120: using /usr/bin/gcc for preprocess check
2014-07-25T21:29:05.153+10:00| vthread-3| I120: Preprocessed UTS_RELEASE, got value "3.10.0-123.el7.x86_64".
2014-07-25T21:29:05.153+10:00| vthread-3| I120: The header path "/lib/modules/3.10.0-123.el7.x86_64/build/include" for the kernel "3.10.0-123.el7.x86_64" is valid. Whoohoo!
2014-07-25T21:29:05.181+10:00| vthread-3| I120: The GCC version matches the kernel GCC minor version like a glove.
2014-07-25T21:29:05.181+10:00| vthread-3| I120: Validating path "/lib/modules/3.10.0-123.el7.x86_64/build/include" for kernel release "3.10.0-123.el7.x86_64".
2014-07-25T21:29:05.181+10:00| vthread-3| I120: Failed to find /lib/modules/3.10.0-123.el7.x86_64/build/include/linux/version.h
2014-07-25T21:29:05.181+10:00| vthread-3| I120: /lib/modules/3.10.0-123.el7.x86_64/build/include/linux/version.h not found, looking for generated/uapi/linux/version.h instead.
2014-07-25T21:29:05.181+10:00| vthread-3| I120: using /usr/bin/gcc for preprocess check
2014-07-25T21:29:05.197+10:00| vthread-3| I120: Preprocessed UTS_RELEASE, got value "3.10.0-123.el7.x86_64".
2014-07-25T21:29:05.197+10:00| vthread-3| I120: The header path "/lib/modules/3.10.0-123.el7.x86_64/build/include" for the kernel "3.10.0-123.el7.x86_64" is valid. Whoohoo!
2014-07-25T21:29:05.197+10:00| vthread-3| I120: Using temp dir "/tmp".
2014-07-25T21:29:05.199+10:00| vthread-3| I120: Obtaining info using the running kernel.
2014-07-25T21:29:05.199+10:00| vthread-3| I120: Setting header path for 3.10.0-123.el7.x86_64 to "/lib/modules/3.10.0-123.el7.x86_64/build/include".
2014-07-25T21:29:05.199+10:00| vthread-3| I120: Validating path "/lib/modules/3.10.0-123.el7.x86_64/build/include" for kernel release "3.10.0-123.el7.x86_64".
2014-07-25T21:29:05.199+10:00| vthread-3| I120: Failed to find /lib/modules/3.10.0-123.el7.x86_64/build/include/linux/version.h
2014-07-25T21:29:05.199+10:00| vthread-3| I120: /lib/modules/3.10.0-123.el7.x86_64/build/include/linux/version.h not found, looking for generated/uapi/linux/version.h instead.
2014-07-25T21:29:05.199+10:00| vthread-3| I120: using /usr/bin/gcc for preprocess check
2014-07-25T21:29:05.211+10:00| vthread-3| I120: Preprocessed UTS_RELEASE, got value "3.10.0-123.el7.x86_64".
2014-07-25T21:29:05.211+10:00| vthread-3| I120: The header path "/lib/modules/3.10.0-123.el7.x86_64/build/include" for the kernel "3.10.0-123.el7.x86_64" is valid. Whoohoo!
2014-07-25T21:29:05.435+10:00| vthread-3| I120: Invoking modinfo on "vmnet".
2014-07-25T21:29:05.440+10:00| vthread-3| I120: "/sbin/modinfo" exited with status 256.
2014-07-25T21:29:05.615+10:00| vthread-3| I120: Setting destination path for vmnet to "/lib/modules/3.10.0-123.el7.x86_64/misc/vmnet.ko".
2014-07-25T21:29:05.615+10:00| vthread-3| I120: Extracting the vmnet source from "/usr/lib/vmware/modules/source/vmnet.tar".
2014-07-25T21:29:05.681+10:00| vthread-3| I120: Successfully extracted the vmnet source.
2014-07-25T21:29:05.682+10:00| vthread-3| I120: Building module with command "/usr/bin/make -j2 -C /tmp/modconfig-j0FvbF/vmnet-only auto-build HEADER_DIR=/lib/modules/3.10.0-123.el7.x86_64/build/include CC=/usr/bin/gcc IS_GCC_3=no"
2014-07-25T21:29:12.543+10:00| vthread-3| W110: Failed to build vmnet. Failed to execute the build command.
At first I was attracted by the missing linux/version.h, so found it's not a big deal. then move to /usr/lib/vmware/modules/source/vmnet.tar
root:/usr/lib/vmware/modules/source# ls
vmblock.tar vmci.tar vmmon.tar vmnet.tar vsock.tar
root:/usr/lib/vmware/modules/source# tar xf vmnet.tar
root:/usr/lib/vmware/modules/source# ls
vmblock.tar vmci.tar vmmon.tar vmnet-only vmnet.tar vsock.tar
root:/usr/lib/vmware/modules/source# mv vmnet.tar vmnet.tar.buggy
root:/usr/lib/vmware/modules/source# cd vmnet-only
root:/usr/lib/vmware/modules/source/vmnet-only# ls
bridge.c driver.c monitorAction_exported.h smac_compat.c vm_basic_defs.h vnetEvent.h
community_source.h driver-config.h netdev_has_dev_net.c smac_compat.h vm_basic_types.h vnetFilter.h
compat_autoconf.h filter.c netdev_has_net.c smac.h vm_device_version.h vnetFilterInt.h
compat_module.h geninclude.c net.h userif.c vmnetInt.h vnet.h
compat_netdevice.h hub.c netif.c vm_assert.h vm_oui.h vnetInt.h
compat_skbuff.h includeCheck.h nfhook_uses_skb.c vm_atomic.h vmware_pack_begin.h vnetKernel.h
compat_sock.h Makefile procfs.c vm_basic_asm.h vmware_pack_end.h vnetUserListener.c
compat_version.h Makefile.kernel skblin.c vm_basic_asm_x86_64.h vmware_pack_init.h x86cpuid.h
COPYING Makefile.normal smac.c vm_basic_asm_x86.h vnetEvent.c
not bad, there's source codes. try to compile it
root:/usr/lib/vmware/modules/source/vmnet-only# make
Using 2.6.x kernel build system.
make -C /lib/modules/3.10.0-123.el7.x86_64/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
MODULEBUILDDIR= modules
make[1]: Entering directory `/usr/src/kernels/3.10.0-123.el7.x86_64'
CC [M] /usr/lib/vmware/modules/source/vmnet-only/driver.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/hub.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/userif.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/netif.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/bridge.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/filter.o
/usr/lib/vmware/modules/source/vmnet-only/filter.c:209:1: error: conflicting types for ‘VNetFilterHookFn’
VNetFilterHookFn(unsigned int hooknum, // IN:
^
/usr/lib/vmware/modules/source/vmnet-only/filter.c:64:18: note: previous declaration of ‘VNetFilterHookFn’ was here
static nf_hookfn VNetFilterHookFn;
^
/usr/lib/vmware/modules/source/vmnet-only/filter.c:64:18: warning: ‘VNetFilterHookFn’ used but never defined [enabled by default]
/usr/lib/vmware/modules/source/vmnet-only/filter.c:209:1: warning: ‘VNetFilterHookFn’ defined but not used [-Wunused-function]
VNetFilterHookFn(unsigned int hooknum, // IN:
^
make[2]: *** [/usr/lib/vmware/modules/source/vmnet-only/filter.o] Error 1
make[1]: *** [_module_/usr/lib/vmware/modules/source/vmnet-only] Error 2
make[1]: Leaving directory `/usr/src/kernels/3.10.0-123.el7.x86_64'
make: *** [vmnet.ko] Error 2
root:/usr/lib/vmware/modules/source/vmnet-only#
Googled the VNetFilterHookFn function. It was said since 3.13.5, the netfilter hook function (nf_hookfn) has been changed as the result of code refactoring. However, VNetFilterHookFn is still using the old definition of nf_hookfn. So the fix is t change the definition of VNetFilterHookFn to match the current kernel. vi-ed filter.c and 209gg, found this:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0)
VNetFilterHookFn(const struct nf_hook_ops *ops, // IN:
#else
VNetFilterHookFn(unsigned int hooknum, // IN:
#endif
what the hell, the patch has already been there. hold on, what's CentOS 7's version?
andy:~$ uname -a
Linux localhost.localdomain 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
So that's the reason. The kernel is lower than 3.13.0 so filter.c used the old definition. However RHEL7 must have applied some recent patches so the netfilter hook function has moved to the new one. Let's see how many KERNEL_VERSION have been watched
root:/usr/lib/vmware/modules/source/vmnet-only# grep KERNEL_VERSION *.c
bridge.c:#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22)
bridge.c:#if defined(NETIF_F_GSO) || LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18)
driver.c:#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 8)
filter.c:#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0)
filter.c:#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0)
netdev_has_dev_net.c:#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 25)
netdev_has_dev_net.c:#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26)
netdev_has_net.c:#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 23)
netdev_has_net.c:#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24)
nfhook_uses_skb.c:#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 23)
nfhook_uses_skb.c:#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24)
procfs.c:#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)
procfs.c:#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)
procfs.c:#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)
skblin.c:#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 17)
Only two in the filter.c required 3.13.0. Ok, changed them to
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)
then
root:/usr/lib/vmware/modules/source/vmnet-only# make
Using 2.6.x kernel build system.
make -C /lib/modules/3.10.0-123.el7.x86_64/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
MODULEBUILDDIR= modules
make[1]: Entering directory `/usr/src/kernels/3.10.0-123.el7.x86_64'
CC [M] /usr/lib/vmware/modules/source/vmnet-only/filter.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/procfs.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/smac_compat.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/smac.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/vnetEvent.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/vnetUserListener.o
LD [M] /usr/lib/vmware/modules/source/vmnet-only/vmnet.o
Building modules, stage 2.
MODPOST 1 modules
CC /usr/lib/vmware/modules/source/vmnet-only/vmnet.mod.o
LD [M] /usr/lib/vmware/modules/source/vmnet-only/vmnet.ko
make[1]: Leaving directory `/usr/src/kernels/3.10.0-123.el7.x86_64'
make -C $PWD SRCROOT=$PWD/. \
MODULEBUILDDIR= postbuild
make[1]: Entering directory `/usr/lib/vmware/modules/source/vmnet-only'
make[1]: `postbuild' is up to date.
make[1]: Leaving directory `/usr/lib/vmware/modules/source/vmnet-only'
cp -f vmnet.ko ./../vmnet.o
:-D
Now repack the vmnet.tar. Since vmware runtime will try to make the package, there's no need to clean the objects, probably could boost the install speed
root:/usr/lib/vmware/modules/source# tar cf vmnet.tar vmnet-only
root:/usr/lib/vmware/modules/source# ls
vmblock.tar vmci.tar vmmon.tar vmnet.o vmnet-only vmnet.tar vmnet.tar.buggy vsock.tar
Then run the vmware player and cross fingers ...... oh ye! succeed! Run some VMs all good.