0 Replies Latest reply on Oct 9, 2016 4:35 PM by blastwave

    workstation pro 12.5 vmnet broken on supported RHEL 6.8 config

    blastwave Novice

      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)

          86  #else

          87  #   define compat_sk_alloc(_bri, _pri) sk_alloc(PF_NETLINK, _pri, &vmnet_proto, 1)

          88  #endif



      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 ?