firstly this is similar to Kernel 4.2 Breaks vmnet.. (again..)
So let's take a look at the situation which will happen over and over
for anyone on a production Linux config which is not based on latest
kernel 4.x or even kernel 3.x. Yes this means all those Red Hat
Enterprise Linux people and there is a lot of them.
After a nice successful install ( in my case upgrade from 12.0.x ) you
will be told that all went well. Don't believe it. It just isn't true.
# /etc/rc.d/init.d/vmware start
Starting VMware services:
Virtual machine monitor [ OK ]
Virtual machine communication interface [ OK ]
VM communication interface socket family [ OK ]
Blocking file system [ OK ]
Virtual ethernet [FAILED]
VMware Authentication Daemon [ OK ]
That is the vmnet kernel module broken as usual because of some
hack changes in vmnetInt.h which may require that compat_sk_alloc
be redefined as sk_alloc with four or more parameters. It is all
very shady and the sources are clear here in vmnet-only/compat_version.h.
The problems are in vmnetInt.h which wrongly applies too many parameters to sk_alloc
which we can see in /usr/src/kernels/`uname -r`/include/net/sock.h thus :
RHEL# cat -n /usr/src/kernels/`uname -r`/include/net/sock.h | head -1132 | tail -3
1130 extern struct sock *sk_alloc(struct net *net, int family,
1131 gfp_t priority,
1132 struct proto *prot);
Now see the VMware vmnet kernel module sources for vmnetInt.h :
RHEL# cat -n vmnetInt.h | head -89 | tail
80 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
81 # define compat_sk_alloc(_bri, _pri) sk_alloc(&init_net, \
82 PF_NETLINK, _pri, &vmnet_proto, 1)
83 #elif defined(VMW_NETDEV_HAS_NET)
84 # define compat_sk_alloc(_bri, _pri) sk_alloc(&init_net, \
85 PF_NETLINK, _pri, &vmnet_proto)
87 # define compat_sk_alloc(_bri, _pri) sk_alloc(PF_NETLINK, _pri, &vmnet_proto, 1)
See we have a conditional define there based on VMW_NETDEV_HAS_NET and also on
the version of the kernel. Well this is good ol Red Hat Enterprise Linux
so you can forget a version greater than 4.2.0 entirely. Nope we are
dealing with sk_alloc() as defined in /include/net/sock.h with four
parameters. No need for the trailing 1 there. One may edit vmnetInt.h
and then set all versions of sk_alloc to a four parameter call and
the process still fails.
Every attempt to rebuild vmnet.ko fails and for reasons that are just
baffling the contents of vmnet.tar keeps getting extracted and then
recompiled when one runs :
RHEL# /usr/bin/vmware-modconfig --console --install-all
That puts out lots of messages but ultimately there is no vmnet.ko
produced and the one that gets created and installed during a "successful"
install of VMWare Workstation Pro 12.5 is quite useless.
Whats the magic here ?