VMnet0 not found in ifconfig -a

1

I was trying to setup a virtual machine, it should have a network interface vmnet0 and vmnet1. However, I have the error message.

Could not connect 'Ethernet2' to virtual network '/dev/vmnet0'. More
information can be found in the vmware.log file. Failed to connect
virtual device 'Ethernet2'.

My purpose of doing so is for Ethernet Sharing and Internet sharing purpose.

I have already reinstalled VMWare to the latest Version in my Linux Machine.
Its build is Linux kali 4.9.0-kali4-amd64 #1 SMP Debian 4.9.30-1kali1 (2017-06-06) x86_64 GNU/Linux.

On the bottom of the log I see:

2017-10-07T03:46:15.441-05:00| vmx| I125: 017-10-07T03:46:19.545-05:00| vmx| I125: VNET: 'ethernet2' enable link state propagation, lsp.state = 5
2017-10-07T03:46:19.545-05:00| vmx| I125: VNET: MACVNetPortOpenDevice: Ethernet2: can't open vmnet device (No such file or directory)
2017-10-07T03:46:19.545-05:00| vmx| I125: VNET: MACVNetPort_Connect: Ethernet2: can't open data fd
2017-10-07T03:46:19.546-05:00| vmx| I125: TOOLS received request in VMX to set option 'synctime' -> '0'
2017-10-07T03:46:19.546-05:00| vmx| A100: ConfigDB: Setting tools.syncTime = "FALSE"
2017-10-07T03:46:19.553-05:00| vmx| I125: Msg_Post: Error
2017-10-07T03:46:19.553-05:00| vmx| I125: [msg.vnet.connectvnet] Could not connect 'Ethernet2' to virtual network '/dev/vmnet0'. More information can be found in the vmware.log file.
2017-10-07T03:46:19.553-05:00| vmx| I125: [msg.device.badconnect] Failed to connect virtual device 'Ethernet2'.
2017-10-07T03:46:19.553-05:00| vmx| I125: ----------------------------------------
2017-10-07T03:51:34.104-05:00| vmx| I125: GuestRpcSendTimedOut: message to toolbox-dnd timed out.
2017-10-07T03:51:37.712-05:00| vmx| I125: VNET: MACVNetPortOpenDevice: Ethernet1: can't open vmnet device (No such file or directory)
2017-10-07T03:51:37.712-05:00| vmx| I125: VNET: MACVNetPort_Connect: Ethernet1: can't open data fd
2017-10-07T03:51:37.713-05:00| vmx| I125: TOOLS received request in VMX to set option 'synctime' -> '0'
2017-10-07T03:51:37.713-05:00| vmx| A100: ConfigDB: Setting tools.syncTime = "FALSE"
2017-10-07T03:51:37.720-05:00| vmx| I125: Msg_Post: Error
2017-10-07T03:51:37.720-05:00| vmx| I125: [msg.vnet.connectvnet] Could not connect 'Ethernet1' to virtual network '/dev/vmnet1'. More information can be found in the vmware.log file.
2017-10-07T03:51:37.720-05:00| vmx| I125: [msg.device.badconnect] Failed to connect virtual device 'Ethernet1'.

After I have restarted the services:

root@kali:~/Desktop/Miscellanous/0-restart# /etc/init.d/vmware restart
Stopping VMware services:
   VMware Authentication Daemon                                        done
   VM communication interface socket family                            done
   Virtual machine communication interface                             done
   Virtual machine monitor                                             done
   Blocking file system                                                done
Starting VMware services:
   Virtual machine monitor                                             done
   Virtual machine communication interface                             done
   VM communication interface socket family                            done
   Blocking file system                                                done
   Virtual ethernet                                                   failed
   VMware Authentication Daemon                                        done
root@kali:~/Desktop# sudo vmware-modconfig --console --install-all
[AppLoader] GLib does not have GSettings support.
Stopping VMware services:
   VMware Authentication Daemon                                        done
   VM communication interface socket family                            done
   Virtual machine communication interface                             done
   Virtual machine monitor                                             done
   Blocking file system                                                done
make: Entering directory '/tmp/modconfig-vDjnxF/vmmon-only'
Using kernel build system.
/usr/bin/make -C /lib/modules/4.12.0-kali2-amd64/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
  MODULEBUILDDIR= modules
make[1]: Entering directory '/usr/src/linux-headers-4.12.0-kali2-amd64'
  CC [M]  /tmp/modconfig-vDjnxF/vmmon-only/linux/driverLog.o
  CC [M]  /tmp/modconfig-vDjnxF/vmmon-only/linux/driver.o
  CC [M]  /tmp/modconfig-vDjnxF/vmmon-only/linux/hostif.o
  CC [M]  /tmp/modconfig-vDjnxF/vmmon-only/common/memtrack.o
  CC [M]  /tmp/modconfig-vDjnxF/vmmon-only/common/apic.o
  CC [M]  /tmp/modconfig-vDjnxF/vmmon-only/common/vmx86.o
  CC [M]  /tmp/modconfig-vDjnxF/vmmon-only/common/cpuid.o
  CC [M]  /tmp/modconfig-vDjnxF/vmmon-only/common/task.o
  CC [M]  /tmp/modconfig-vDjnxF/vmmon-only/common/hashFunc.o
In file included from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/msr.h:4:0,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/processor.h:20,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/cpufeature.h:4,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/thread_info.h:52,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/thread_info.h:37,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/preempt.h:6,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/preempt.h:80,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/spinlock.h:50,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/mmu.h:4,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/desc.h:6,
                 from /tmp/modconfig-vDjnxF/vmmon-only/common/task.c:70:
/usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/msr-index.h:561:0: warning: "MSR_MISC_FEATURES_ENABLES" redefined
 #define MSR_MISC_FEATURES_ENABLES 0x00000140

In file included from /tmp/modconfig-vDjnxF/vmmon-only/common/vmx86.h:32:0,
                 from /tmp/modconfig-vDjnxF/vmmon-only/common/task.c:51:
/tmp/modconfig-vDjnxF/vmmon-only/./include/x86msr.h:115:0: note: this is the location of the previous definition
 #define MSR_MISC_FEATURES_ENABLES            0x140

  CC [M]  /tmp/modconfig-vDjnxF/vmmon-only/common/comport.o
In file included from /tmp/modconfig-vDjnxF/vmmon-only/common/vmx86.h:32:0,
                 from /tmp/modconfig-vDjnxF/vmmon-only/common/vmx86.c:43:
/tmp/modconfig-vDjnxF/vmmon-only/./include/x86msr.h:115:0: warning: "MSR_MISC_FEATURES_ENABLES" redefined
 #define MSR_MISC_FEATURES_ENABLES            0x140

In file included from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/msr.h:4:0,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/processor.h:20,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/cpufeature.h:4,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/thread_info.h:52,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/thread_info.h:37,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/preempt.h:6,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/preempt.h:80,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/spinlock.h:50,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/rcupdate.h:38,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/rculist.h:10,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/pid.h:4,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/sched.h:13,
                 from /tmp/modconfig-vDjnxF/vmmon-only/common/vmx86.c:31:
/usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/msr-index.h:561:0: note: this is the location of the previous definition
 #define MSR_MISC_FEATURES_ENABLES 0x00000140

  CC [M]  /tmp/modconfig-vDjnxF/vmmon-only/common/phystrack.o
  CC [M]  /tmp/modconfig-vDjnxF/vmmon-only/vmcore/moduleloop.o
  CC [M]  /tmp/modconfig-vDjnxF/vmmon-only/bootstrap/monLoaderVmmon.o
  CC [M]  /tmp/modconfig-vDjnxF/vmmon-only/bootstrap/monLoader.o
In file included from /tmp/modconfig-vDjnxF/vmmon-only/./include/vm_asm.h:43:0,
                 from /tmp/modconfig-vDjnxF/vmmon-only/linux/hostif.c:60:
/tmp/modconfig-vDjnxF/vmmon-only/./include/x86msr.h:115:0: warning: "MSR_MISC_FEATURES_ENABLES" redefined
 #define MSR_MISC_FEATURES_ENABLES            0x140

In file included from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/msr.h:4:0,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/processor.h:20,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/cpufeature.h:4,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/thread_info.h:52,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/thread_info.h:37,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/preempt.h:6,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/preempt.h:80,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/spinlock.h:50,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/rcupdate.h:38,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/rculist.h:10,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/pid.h:4,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/sched.h:13,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/binfmts.h:4,
                 from /tmp/modconfig-vDjnxF/vmmon-only/linux/hostif.c:32:
/usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/msr-index.h:561:0: note: this is the location of the previous definition
 #define MSR_MISC_FEATURES_ENABLES 0x00000140

  CC [M]  /tmp/modconfig-vDjnxF/vmmon-only/bootstrap/bootstrap.o
In file included from /tmp/modconfig-vDjnxF/vmmon-only/./common/vmx86.h:32:0,
                 from /tmp/modconfig-vDjnxF/vmmon-only/linux/driver.h:32,
                 from /tmp/modconfig-vDjnxF/vmmon-only/linux/driver.c:47:
/tmp/modconfig-vDjnxF/vmmon-only/./include/x86msr.h:115:0: warning: "MSR_MISC_FEATURES_ENABLES" redefined
 #define MSR_MISC_FEATURES_ENABLES            0x140

In file included from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/msr.h:4:0,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/processor.h:20,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/cpufeature.h:4,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/thread_info.h:52,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/thread_info.h:37,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/preempt.h:6,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/preempt.h:80,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/spinlock.h:50,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/wait.h:8,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/fs.h:5,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/highmem.h:4,
                 from /tmp/modconfig-vDjnxF/vmmon-only/linux/driver.c:25:
/usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/msr-index.h:561:0: note: this is the location of the previous definition
 #define MSR_MISC_FEATURES_ENABLES 0x00000140

In file included from /tmp/modconfig-vDjnxF/vmmon-only/./common/vmx86.h:32:0,
                 from /tmp/modconfig-vDjnxF/vmmon-only/vmcore/moduleloop.c:35:
/tmp/modconfig-vDjnxF/vmmon-only/./include/x86msr.h:115:0: warning: "MSR_MISC_FEATURES_ENABLES" redefined
 #define MSR_MISC_FEATURES_ENABLES            0x140

In file included from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/msr.h:4:0,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/processor.h:20,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/cpufeature.h:4,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/thread_info.h:52,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/thread_info.h:37,
                 from /usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/preempt.h:6,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/preempt.h:80,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/spinlock.h:50,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/rcupdate.h:38,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/rculist.h:10,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/pid.h:4,
                 from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/sched.h:13,
                 from /tmp/modconfig-vDjnxF/vmmon-only/vmcore/moduleloop.c:31:
/usr/src/linux-headers-4.12.0-kali2-common/arch/x86/include/asm/msr-index.h:561:0: note: this is the location of the previous definition
 #define MSR_MISC_FEATURES_ENABLES 0x00000140

/tmp/modconfig-vDjnxF/vmmon-only/linux/driver.c:981:1: warning: always_inline function might not be inlinable [-Wattributes]
 LinuxDriverSyncReadTSCs(uint64 *delta) // OUT: TSC max - TSC min
 ^~~~~~~~~~~~~~~~~~~~~~~
  LD [M]  /tmp/modconfig-vDjnxF/vmmon-only/vmmon.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /tmp/modconfig-vDjnxF/vmmon-only/vmmon.mod.o
  LD [M]  /tmp/modconfig-vDjnxF/vmmon-only/vmmon.ko
make[1]: Leaving directory '/usr/src/linux-headers-4.12.0-kali2-amd64'
/usr/bin/make -C $PWD SRCROOT=$PWD/. \
  MODULEBUILDDIR= postbuild
make[1]: Entering directory '/tmp/modconfig-vDjnxF/vmmon-only'
make[1]: 'postbuild' is up to date.
make[1]: Leaving directory '/tmp/modconfig-vDjnxF/vmmon-only'
cp -f vmmon.ko ./../vmmon.o
make: Leaving directory '/tmp/modconfig-vDjnxF/vmmon-only'
make: Entering directory '/tmp/modconfig-vDjnxF/vmnet-only'
Using kernel build system.
/usr/bin/make -C /lib/modules/4.12.0-kali2-amd64/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
  MODULEBUILDDIR= modules
make[1]: Entering directory '/usr/src/linux-headers-4.12.0-kali2-amd64'
  CC [M]  /tmp/modconfig-vDjnxF/vmnet-only/driver.o
  CC [M]  /tmp/modconfig-vDjnxF/vmnet-only/hub.o
  CC [M]  /tmp/modconfig-vDjnxF/vmnet-only/userif.o
  CC [M]  /tmp/modconfig-vDjnxF/vmnet-only/netif.o
  CC [M]  /tmp/modconfig-vDjnxF/vmnet-only/bridge.o
  CC [M]  /tmp/modconfig-vDjnxF/vmnet-only/procfs.o
  CC [M]  /tmp/modconfig-vDjnxF/vmnet-only/smac.o
  CC [M]  /tmp/modconfig-vDjnxF/vmnet-only/smac_compat.o
  CC [M]  /tmp/modconfig-vDjnxF/vmnet-only/vnetEvent.o
In file included from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/pci.h:36:0,
                 from /tmp/modconfig-vDjnxF/vmnet-only/compat_netdevice.h:27,
                 from /tmp/modconfig-vDjnxF/vmnet-only/netif.c:43:
/usr/src/linux-headers-4.12.0-kali2-common/include/linux/pci_ids.h:2258:0: warning: "PCI_VENDOR_ID_VMWARE" redefined
 #define PCI_VENDOR_ID_VMWARE  0x15ad

In file included from /tmp/modconfig-vDjnxF/vmnet-only/net.h:38:0,
                 from /tmp/modconfig-vDjnxF/vmnet-only/vnetInt.h:26,
                 from /tmp/modconfig-vDjnxF/vmnet-only/netif.c:42:
/tmp/modconfig-vDjnxF/vmnet-only/vm_device_version.h:56:0: note: this is the location of the previous definition
 #define PCI_VENDOR_ID_VMWARE                    0x15AD

In file included from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/pci.h:36:0,
                 from /tmp/modconfig-vDjnxF/vmnet-only/compat_netdevice.h:27,
                 from /tmp/modconfig-vDjnxF/vmnet-only/netif.c:43:
/usr/src/linux-headers-4.12.0-kali2-common/include/linux/pci_ids.h:2259:0: warning: "PCI_DEVICE_ID_VMWARE_VMXNET3" redefined
 #define PCI_DEVICE_ID_VMWARE_VMXNET3 0x07b0

In file included from /tmp/modconfig-vDjnxF/vmnet-only/net.h:38:0,
                 from /tmp/modconfig-vDjnxF/vmnet-only/vnetInt.h:26,
                 from /tmp/modconfig-vDjnxF/vmnet-only/netif.c:42:
/tmp/modconfig-vDjnxF/vmnet-only/vm_device_version.h:73:0: note: this is the location of the previous definition
 #define PCI_DEVICE_ID_VMWARE_VMXNET3            0x07B0

  CC [M]  /tmp/modconfig-vDjnxF/vmnet-only/vnetUserListener.o
In file included from /tmp/modconfig-vDjnxF/vmnet-only/net.h:38:0,
                 from /tmp/modconfig-vDjnxF/vmnet-only/vnetInt.h:26,
                 from /tmp/modconfig-vDjnxF/vmnet-only/bridge.c:53:
/tmp/modconfig-vDjnxF/vmnet-only/vm_device_version.h:56:0: warning: "PCI_VENDOR_ID_VMWARE" redefined
 #define PCI_VENDOR_ID_VMWARE                    0x15AD

In file included from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/pci.h:36:0,
                 from /tmp/modconfig-vDjnxF/vmnet-only/compat_netdevice.h:27,
                 from /tmp/modconfig-vDjnxF/vmnet-only/bridge.c:52:
/usr/src/linux-headers-4.12.0-kali2-common/include/linux/pci_ids.h:2258:0: note: this is the location of the previous definition
 #define PCI_VENDOR_ID_VMWARE  0x15ad

In file included from /tmp/modconfig-vDjnxF/vmnet-only/net.h:38:0,
                 from /tmp/modconfig-vDjnxF/vmnet-only/vnetInt.h:26,
                 from /tmp/modconfig-vDjnxF/vmnet-only/bridge.c:53:
/tmp/modconfig-vDjnxF/vmnet-only/vm_device_version.h:73:0: warning: "PCI_DEVICE_ID_VMWARE_VMXNET3" redefined
 #define PCI_DEVICE_ID_VMWARE_VMXNET3            0x07B0

In file included from /usr/src/linux-headers-4.12.0-kali2-common/include/linux/pci.h:36:0,
                 from /tmp/modconfig-vDjnxF/vmnet-only/compat_netdevice.h:27,
                 from /tmp/modconfig-vDjnxF/vmnet-only/bridge.c:52:
/usr/src/linux-headers-4.12.0-kali2-common/include/linux/pci_ids.h:2259:0: note: this is the location of the previous definition
 #define PCI_DEVICE_ID_VMWARE_VMXNET3 0x07b0

  LD [M]  /tmp/modconfig-vDjnxF/vmnet-only/vmnet.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /tmp/modconfig-vDjnxF/vmnet-only/vmnet.mod.o
  LD [M]  /tmp/modconfig-vDjnxF/vmnet-only/vmnet.ko
make[1]: Leaving directory '/usr/src/linux-headers-4.12.0-kali2-amd64'
/usr/bin/make -C $PWD SRCROOT=$PWD/. \
  MODULEBUILDDIR= postbuild
make[1]: Entering directory '/tmp/modconfig-vDjnxF/vmnet-only'
make[1]: 'postbuild' is up to date.
make[1]: Leaving directory '/tmp/modconfig-vDjnxF/vmnet-only'
cp -f vmnet.ko ./../vmnet.o
make: Leaving directory '/tmp/modconfig-vDjnxF/vmnet-only'
Starting VMware services:
   Virtual machine monitor                                             done
   Virtual machine communication interface                             done
   VM communication interface socket family                            done
   Blocking file system                                                done
   Virtual ethernet                                                   failed
   VMware Authentication Daemon                                        done
Unable to start services
root@kali:~/Desktop# sudo vmware-modconfig --console --install-all

Furthermore, recompilation has been done and results are still the same.

vmware-workstation
asked on Server Fault Oct 7, 2017 by Alvin567 • edited Oct 7, 2017 by Alvin567

2 Answers

1

I've had a similar problem with ubuntu 17.10 and Workstation 14.0.0.

I've migrated a bunch of VMs to this box that were originally created on windows. Each of the machines had two network adapters; one NAT (vmnet8), one host only (vmnet1). Host only (vmnet1) would refuse to connect with the same messages as mentioned above. I've deleted and recreated the vmnet1 adapter with different subnet using the "sudo vmware-netcfg" command. that seems to have fixed the problem. I need two adapters so VMs can still talk to each other when the host is not connected to the network.

HTH

Nick

answered on Server Fault Oct 24, 2017 by nrapopor
0

The issue I had is that I have a secure boot in the hardware so the kernel modules vmnet.ko and vmmon.ko were compiled successfully during the sudo vmware-modconfig --console --install-all command but where not able to load since they were not signed. For some reason the log file generated in /tmp/vmware-root/ does not warn about it. What I did is sign the two modules following this tutorial (This is a tutorial for Ubuntu which is what I have) and then loaded them with modprobe. Only then restarting the vmware service with /etc/init.d/vmware restart

answered on Server Fault Nov 15, 2018 by dafnahaktana

User contributions licensed under CC BY-SA 3.0