Embedded & Engineering Insights
The solution to the following problem with VMware Server 1.0.1 on Linux kernel 2.6.19-1.2288.fc5 : ‘CHECKSUM_HW’ undeclared (first use in this function)
I use VMware Server 1.0.1 on Linux (Fedora Core 5) and I recently updated the kernel to 2.6.19-1.2288.fc5 – the reason for the update is that my older kernel version did not have drivers for my onboard soundcard 🙂
After the update, I discovered that I had to reconfigure VMware by running the command
That was ok, as this is required with each kernel update (VMware is configured to a particular kernel version).
When running vmware-config.pl, I got the following message (normal again):
None of the pre-built vmmon modules for VMware Server is suitable for your running kernel. Do you want this program to try to build the vmmon module for your system (you need to have a C compiler installed on your system)? [yes]
The next step is:
What is the location of the directory of C header files that match your running kernel? [/lib/modules/2.6.19-1.2288.fc5/build/include]
Note that for this you need to download the sources for your kernel version. For me, this was as easy as running “Add/Remove Software” and selecting kernel-devel-2.6.19-1.2288.fc5 from the list of packages.
After skipping the networking setup (as it was already set up by me some time ago), I got the following error:
..... /tmp/vmware-config2/vmnet-only/userif.c : 'CHECKSUM_HW' undeclared (first use in this function)
After searching the net a little, I found out this:
From kernel 2.6.19, the CHECKSUM_HW value has long been used in thenetworking subsystem to support hardware checksumming. That value has been replaced with CHECKSUM_PARTIAL (intended for outgoing packetswhere the job must be completed by the hardware) and CHECKSUM_COMPLETE(for incoming packets which have been completely checksummed by the hardware).
For more see http://lwn.net/Articles/200304/
So the solution to my problem was to locate the files where these values were used and replace CHECKSUM_HW with CHECKSUM_PARTIAL and linux/config.h to linux/autoconf.h
I found that the files were in /usr/lib/vmware/modules/source, inside the tar archive vmnet.tar
I unpacked the archive, replaced CHECKSUM_HW to CHECKSUM_PARTIAL in the files
bridge.c and userif.c, replaced linux/config.h to linux/autoconf.h in the file procfs.c, and then repacked the archive back to vmnet.tar (after renaming the old one to vmnet.tar.orig, just for backup)
Then I re-run vmware-config.pl and it worked fine.