Add app-emulation/vmware-modules-14
from stefantalpalaru overlay
This commit is contained in:
parent
c5bb5c2365
commit
655df0cc15
|
@ -0,0 +1,10 @@
|
|||
AUX 329-00-vmmon-quick-workaround-for-objtool-warnings.patch 1555 BLAKE2B dd4a58e78634aed9d5fb64bcb02b999d55be6b87e496c8daf640f7027aba3942f4e415125ba8fb847fa832336560d4bdbb0f539fefea3b4d2c175f2cbb33a9d7 SHA512 892bde81c721c18264e154cdfadd6b560af37260c9a457ec321fdf6bdf78b1704df57532b0919ed7dbc5c1036230b95f0cbacb7acbfd15da2145e3445da795f7
|
||||
AUX 329-4.09-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch 1169 BLAKE2B 4e5a74961ff512748375bd1d90a6670fc519c2c4c0be94f89d14fdf39e4922b057ae2baa38d07d34aca9ec897b012c4b9326dfd51a44235418919708b789895e SHA512 727fb97a63399d7c19238ae864a38cf2297adccb466fc2deba2a72f0592eb655f653d3c8e45dac06bbd0e09fc71a59a8bfea491b7580b37d41d0729f6adc023d
|
||||
AUX 329-4.10-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch 1131 BLAKE2B 1e07b4a15ff1180349348d84efb606c223f5cfa4accdcc0e1a41c8a0de52fb186bddd3c6cd3f5f48041c52ad2c29110726197f1d9352bd87caf4e646c4c4c001 SHA512 192d6a9a14757706f1c9345ff45592a559729619627a32c9f0a1d7203e60881312a4d0fc92ff750c8ff5b5350cf1a2b55238c16973e9c7eb4c2cfe2966abe7d1
|
||||
AUX 329-4.12-00-vmmon-use-standard-definition-of-MSR_MISC_FEATURES_E.patch 1603 BLAKE2B 4eea61a743cb443e4a4c22a02a03410adbae66339ac7ed1c1aafe54e447135c1ed976ce3c97f22db9984926de9b9a09b1820e253978f457c0c2b9d22f8e4c59b SHA512 4413cd5e791dd19c4b47ba2178e386160912882b0e1a549151eafcceae484b5e48f527ee45b14584c98e06c11e28ee5bfef34b318e46b45704fbcf93a7b52b56
|
||||
AUX 329-4.13-00-vmmon-use-standard-definition-of-CR3_PCID_MASK-if-av.patch 1167 BLAKE2B b5c1c4d98d2aed5bb473270ea9b5737da05bab45748aa84b0a83c26abf8d826960ff3251132ae2770bf87168bfb9c01ab7c81ec99036af576ca3fa0eb08b36e2 SHA512 1cf13f9c745bcfcf24ac1e8f762d057f1afde46ec1de4e651a07e63e08d9073eca9bdbaa53c5a1ced556ec83da3bfd80d3c65c979fb91566cf3c7ddae38eaeac
|
||||
AUX 329-4.14-00-vsock-gcc-plugins-randstruct.patch 3477 BLAKE2B 9d454174bd3cf888d92a5644a2f8078f9368e5db0ee1c1f0ca7f43a897efa69d9d28c3cd89af3e38a790a23c442898364bc9d189f7920cf0dea54ca20af6ece4 SHA512 a3b68de2664807715dff9648744bd345cdf007a7c1d173fc5c1f410baa65e3a8ef3063543fd369e969a60d2f2ec9cda6127b22b09c5e17aefe288de104d58871
|
||||
AUX 329-vmblock.patch 15016 BLAKE2B 887159b5c526eea4fcc7d49664a4c7233ab9c73440bef9e8f4ceb2b9694a72cd9c4dcff131f9a74dabe5a0ec3a4e0437db405f6c74f9cfd49ef590b19a658ab8 SHA512 6cb922537009fe39e2e58e19ba9c8fda6a5ea484f3d28a94793de0fbd63d8d564822f2c83447d135f1c5e7f5da6734af218f86e31c20d322cbf00b675297c712
|
||||
AUX 329-vmci.patch 9474 BLAKE2B 9e833fcafc39c4279a9d86c96c0d4b012d6f653d42a76ba7d7d65355876da469c0dcb746a6eab4be795c5c29f1d11ace5cbf705e066d12fff20df758b8ade901 SHA512 b8b46a3df7ee2f906dd474add6c0ec3d76566f1c643278e3a7faeb68c829c78926351359bd78e12ad744bb946a31324ee347bb67413c4d670e7a091379160e2e
|
||||
AUX 329-vsock.patch 10068 BLAKE2B d84f22a1623e2303c6aa2ea3624857fb2cf2dbb31b4747582285fc506ae208c1fb4b2a5925b02e6473b43ba178d871276584800d06cd2cdfb06273743814cc24 SHA512 73df6466b1df7be6ae40751596834d967b46d48218267afe5244abcdcacf5e263a78ed3bd3c4e6f2a5d81dd9c0c9e9042fc52fa9f1d4d000098ad20f19509001
|
||||
EBUILD vmware-modules-329.1.1-r1.ebuild 4307 BLAKE2B 9a36a42397b75bdcb24aae04ef98e3a37769382ccf064bcfbaef0d4ede848898428f36f6b01c46c72bc0ffb67133d0e6366d1e3986a6cf8cb5a7cf562fd63dda SHA512 82ea9316ef9315bcc80a1ed1b86b279f4af9e30b62cdfbeb79c152eb16f49c9c10c737871ff3b970fb2d5063d6ccc64a6e2a725cc0ca23279112430e19e8e82c
|
|
@ -0,0 +1,45 @@
|
|||
From 182ac915372c798e400c9718499cae2cb1822ef1 Mon Sep 17 00:00:00 2001
|
||||
From: Michal Kubecek <mkubecek@suse.cz>
|
||||
Date: Sat, 30 Sep 2017 21:41:51 +0200
|
||||
Subject: [PATCH 6/6] vmmon: quick workaround for objtool warnings
|
||||
|
||||
As discussed in
|
||||
|
||||
https://bugzilla.suse.com/show_bug.cgi?id=1059674
|
||||
|
||||
the reason for multiple objtool warnings is the fact that vmmon module
|
||||
defines its own Panic() function which never returns. While it is marked as
|
||||
such which is used by the compiler for optimization, there is no way to
|
||||
find this from object file.
|
||||
|
||||
While this seems innocuous, it might result in problems with unwinder
|
||||
later. The quickest way around is to replace vmmon's own Panic() with
|
||||
standard kernel panic() until a cleaner solution is found.
|
||||
---
|
||||
vmmon-only/include/vm_assert.h | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/vmmon-only/include/vm_assert.h b/vmmon-only/include/vm_assert.h
|
||||
index 8cdbc93..b869def 100644
|
||||
--- a/vmmon-only/include/vm_assert.h
|
||||
+++ b/vmmon-only/include/vm_assert.h
|
||||
@@ -67,6 +67,7 @@ extern "C" {
|
||||
#if defined (VMKPANIC)
|
||||
#include "vmk_assert.h"
|
||||
#else /* !VMKPANIC */
|
||||
+#include <linux/kernel.h>
|
||||
#define _ASSERT_PANIC(name) \
|
||||
Panic(_##name##Fmt "\n", __FILE__, __LINE__)
|
||||
#define _ASSERT_PANIC_BUG(bug, name) \
|
||||
@@ -107,7 +108,7 @@ NORETURN void Panic_NoSave(const char *fmt, ...) PRINTF_DECL(1, 2);
|
||||
} while(0)
|
||||
|
||||
#else
|
||||
-NORETURN void Panic(const char *fmt, ...) PRINTF_DECL(1, 2);
|
||||
+#define Panic panic
|
||||
#endif
|
||||
|
||||
void LogThrottled(uint32 *count, const char *fmt, ...) PRINTF_DECL(2, 3);
|
||||
--
|
||||
2.14.3
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
From 4d80590924550d0ee3fe470e027deea0ee43e6b6 Mon Sep 17 00:00:00 2001
|
||||
From: Michal Kubecek <mkubecek@suse.cz>
|
||||
Date: Tue, 18 Apr 2017 12:52:08 +0200
|
||||
Subject: [PATCH 1/6] vmnet: use standard definition of PCI_VENDOR_ID_VMWARE if
|
||||
available
|
||||
|
||||
The PCI_VENDOR_ID_VMWARE macro is defined in mainline pci_ids.h since
|
||||
commit 94e57fea6202 ("PCI: Move PCI_VENDOR_ID_VMWARE to pci_ids.h")
|
||||
in v3.18-rc1.
|
||||
---
|
||||
vmnet-only/vm_device_version.h | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/vmnet-only/vm_device_version.h b/vmnet-only/vm_device_version.h
|
||||
index ab396bc..cafddd0 100644
|
||||
--- a/vmnet-only/vm_device_version.h
|
||||
+++ b/vmnet-only/vm_device_version.h
|
||||
@@ -35,6 +35,8 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
+#include <linux/pci_ids.h>
|
||||
+
|
||||
/* LSILogic 53C1030 Parallel SCSI controller
|
||||
* LSILogic SAS1068 SAS controller
|
||||
*/
|
||||
@@ -53,7 +55,10 @@
|
||||
* VMware HD Audio codec
|
||||
* VMware HD Audio controller
|
||||
*/
|
||||
+#ifndef PCI_VENDOR_ID_VMWARE
|
||||
#define PCI_VENDOR_ID_VMWARE 0x15AD
|
||||
+#endif
|
||||
+
|
||||
#define PCI_DEVICE_ID_VMWARE_SVGA2 0x0405
|
||||
#define PCI_DEVICE_ID_VMWARE_SVGA 0x0710
|
||||
#define PCI_DEVICE_ID_VMWARE_VGA 0x0711
|
||||
--
|
||||
2.14.3
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
From 7cb0c3beb4abde406d5334376106d68997f6fb51 Mon Sep 17 00:00:00 2001
|
||||
From: Michal Kubecek <mkubecek@suse.cz>
|
||||
Date: Tue, 18 Apr 2017 13:01:56 +0200
|
||||
Subject: [PATCH 2/6] vmnet: use standard definition of
|
||||
PCI_VENDOR_ID_VMWARE_VMXNET3 if available
|
||||
|
||||
The PCI_DEVICE_ID_VMWARE_VMXNET3 macro is defined in mainline pci_ids.h
|
||||
since commit b1226c7db1d9 ("vmxnet3: Move PCI Id to pci_ids.h") in
|
||||
v4.10-rc1.
|
||||
---
|
||||
vmnet-only/vm_device_version.h | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/vmnet-only/vm_device_version.h b/vmnet-only/vm_device_version.h
|
||||
index cafddd0..9305ddb 100644
|
||||
--- a/vmnet-only/vm_device_version.h
|
||||
+++ b/vmnet-only/vm_device_version.h
|
||||
@@ -75,7 +75,11 @@
|
||||
#define PCI_DEVICE_ID_VMWARE_1394 0x0780
|
||||
#define PCI_DEVICE_ID_VMWARE_BRIDGE 0x0790
|
||||
#define PCI_DEVICE_ID_VMWARE_ROOTPORT 0x07A0
|
||||
+
|
||||
+#ifndef PCI_DEVICE_ID_VMWARE_VMXNET3
|
||||
#define PCI_DEVICE_ID_VMWARE_VMXNET3 0x07B0
|
||||
+#endif
|
||||
+
|
||||
#define PCI_DEVICE_ID_VMWARE_PVSCSI 0x07C0
|
||||
#define PCI_DEVICE_ID_VMWARE_82574 0x07D0
|
||||
#define PCI_DEVICE_ID_VMWARE_AHCI 0x07E0
|
||||
--
|
||||
2.14.3
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
From 53d6ccbeed4c519dc105f98552067ced2ecbd432 Mon Sep 17 00:00:00 2001
|
||||
From: Michal Kubecek <mkubecek@suse.cz>
|
||||
Date: Fri, 23 Jun 2017 09:29:24 +0200
|
||||
Subject: [PATCH 3/6] vmmon: use standard definition of
|
||||
MSR_MISC_FEATURES_ENABLES if available
|
||||
|
||||
The MSR_MISC_FEATURES_ENABLES macro is defined in mainline since commit
|
||||
ab6d9468631a ("x86/msr: Rename MISC_FEATURE_ENABLES to
|
||||
MISC_FEATURES_ENABLES") in v4.12-rc1.
|
||||
|
||||
The MSR_MISC_FEATURES_ENABLES_CPUID_FAULT macro is defined in mainline
|
||||
since commit e9ea1e7f53b8 ("x86/arch_prctl: Add ARCH_[GET|SET]_CPUID") in
|
||||
v4.12-rc1.
|
||||
---
|
||||
vmmon-only/include/x86msr.h | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/vmmon-only/include/x86msr.h b/vmmon-only/include/x86msr.h
|
||||
index 3a6bfe8..904d9e9 100644
|
||||
--- a/vmmon-only/include/x86msr.h
|
||||
+++ b/vmmon-only/include/x86msr.h
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
#ifndef _X86MSR_H_
|
||||
#define _X86MSR_H_
|
||||
+#include <asm/msr-index.h>
|
||||
#define INCLUDE_ALLOW_USERLEVEL
|
||||
#define INCLUDE_ALLOW_VMX
|
||||
|
||||
@@ -112,7 +113,9 @@ MSRQuery;
|
||||
#define MSR_TSC_AUX 0xc0000103
|
||||
#define MSR_BD_TSC_RATIO 0xc0000104
|
||||
|
||||
+#ifndef MSR_MISC_FEATURES_ENABLES
|
||||
#define MSR_MISC_FEATURES_ENABLES 0x140
|
||||
+#endif
|
||||
|
||||
/* Intel Core Architecture and later: use only architected counters. */
|
||||
#define IA32_MSR_PERF_CAPABILITIES 0x345
|
||||
@@ -612,7 +615,11 @@ typedef enum {
|
||||
/*
|
||||
* MISC_FEATURES_ENABLES bits
|
||||
*/
|
||||
+#ifdef MSR_MISC_FEATURES_ENABLES_CPUID_FAULT
|
||||
+#define MSR_MISC_FEATURES_ENABLES_CPUID_FAULTING MSR_MISC_FEATURES_ENABLES_CPUID_FAULT
|
||||
+#else
|
||||
#define MSR_MISC_FEATURES_ENABLES_CPUID_FAULTING 1
|
||||
+#endif
|
||||
|
||||
|
||||
|
||||
--
|
||||
2.14.3
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
From 704be6e3f2143df35e99025caa3393b9c309fbc1 Mon Sep 17 00:00:00 2001
|
||||
From: Michal Kubecek <mkubecek@suse.cz>
|
||||
Date: Mon, 24 Jul 2017 10:08:55 +0200
|
||||
Subject: [PATCH 4/6] vmmon: use standard definition of CR3_PCID_MASK if
|
||||
available
|
||||
|
||||
The CR3_PCID_MASK is defined in mainline asm/processor-flags.h since
|
||||
commit 6c690ee1039b ("x86/mm: Split read_cr3() into read_cr3_pa() and
|
||||
__read_cr3()") in v4.13-rc1.
|
||||
---
|
||||
vmmon-only/include/x86_basic_defs.h | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/vmmon-only/include/x86_basic_defs.h b/vmmon-only/include/x86_basic_defs.h
|
||||
index abfb0b8..8c7566f 100644
|
||||
--- a/vmmon-only/include/x86_basic_defs.h
|
||||
+++ b/vmmon-only/include/x86_basic_defs.h
|
||||
@@ -35,6 +35,8 @@
|
||||
#define INCLUDE_ALLOW_VMCORE
|
||||
#include "includeCheck.h"
|
||||
|
||||
+#include <asm/processor-flags.h>
|
||||
+
|
||||
#define X86_MAX_INSTR_LEN 15 /* Max byte length of an x86 instruction. */
|
||||
|
||||
#define NUM_IDT_VECTORS 256
|
||||
@@ -75,7 +77,9 @@
|
||||
#define CR3_PDB_MASK 0xfffff000
|
||||
#define CR3_IGNORE 0xFFF
|
||||
#define PAE_CR3_IGNORE 0x1F
|
||||
+#ifndef CR3_PCID_MASK
|
||||
#define CR3_PCID_MASK 0xFFF
|
||||
+#endif
|
||||
#define CR3_NO_FLUSH (1ULL << 63)
|
||||
|
||||
#define CR4_VME 0x00000001
|
||||
--
|
||||
2.14.3
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
--- a/vsock-only/linux/notify.c 2017-10-03 06:52:10.953893050 +0300
|
||||
+++ b/vsock-only/linux/notify.c 2017-10-03 05:42:48.642701836 +0300
|
||||
@@ -1193,20 +1193,20 @@ VSockVmciNotifyPktProcessNegotiate(struc
|
||||
|
||||
|
||||
/* Socket control packet based operations. */
|
||||
-VSockVmciNotifyOps vSockVmciNotifyPktOps = {
|
||||
- VSockVmciNotifyPktSocketInit,
|
||||
- VSockVmciNotifyPktSocketDestruct,
|
||||
- VSockVmciNotifyPktPollIn,
|
||||
- VSockVmciNotifyPktPollOut,
|
||||
- VSockVmciNotifyPktHandlePkt,
|
||||
- VSockVmciNotifyPktRecvInit,
|
||||
- VSockVmciNotifyPktRecvPreBlock,
|
||||
- VSockVmciNotifyPktRecvPreDequeue,
|
||||
- VSockVmciNotifyPktRecvPostDequeue,
|
||||
- VSockVmciNotifyPktSendInit,
|
||||
- VSockVmciNotifyPktSendPreBlock,
|
||||
- VSockVmciNotifyPktSendPreEnqueue,
|
||||
- VSockVmciNotifyPktSendPostEnqueue,
|
||||
- VSockVmciNotifyPktProcessRequest,
|
||||
- VSockVmciNotifyPktProcessNegotiate,
|
||||
+VSockVmciNotifyOps vSockVmciNotifyPktOps __refdata = {
|
||||
+ .socketInit = VSockVmciNotifyPktSocketInit,
|
||||
+ .socketDestruct = VSockVmciNotifyPktSocketDestruct,
|
||||
+ .pollIn = VSockVmciNotifyPktPollIn,
|
||||
+ .pollOut = VSockVmciNotifyPktPollOut,
|
||||
+ .handleNotifyPkt = VSockVmciNotifyPktHandlePkt,
|
||||
+ .recvInit = VSockVmciNotifyPktRecvInit,
|
||||
+ .recvPreBlock = VSockVmciNotifyPktRecvPreBlock,
|
||||
+ .recvPreDequeue = VSockVmciNotifyPktRecvPreDequeue,
|
||||
+ .recvPostDequeue = VSockVmciNotifyPktRecvPostDequeue,
|
||||
+ .sendInit = VSockVmciNotifyPktSendInit,
|
||||
+ .sendPreBlock = VSockVmciNotifyPktSendPreBlock,
|
||||
+ .sendPreEnqueue = VSockVmciNotifyPktSendPreEnqueue,
|
||||
+ .sendPostEnqueue = VSockVmciNotifyPktSendPostEnqueue,
|
||||
+ .processRequest = VSockVmciNotifyPktProcessRequest,
|
||||
+ .processNegotiate = VSockVmciNotifyPktProcessNegotiate,
|
||||
};
|
||||
diff -urp a/vsock-only/linux/notifyQState.c b/vsock-only/linux/notifyQState.c
|
||||
--- a/vsock-only/linux/notifyQState.c 2017-10-03 06:52:10.952893329 +0300
|
||||
+++ b/vsock-only/linux/notifyQState.c 2017-10-03 05:43:02.950697125 +0300
|
||||
@@ -771,21 +770,24 @@ VSockVmciNotifyPktProcessNegotiate(struc
|
||||
}
|
||||
|
||||
|
||||
-/* Socket always on control packet based operations. */
|
||||
-VSockVmciNotifyOps vSockVmciNotifyPktQStateOps = {
|
||||
- VSockVmciNotifyPktSocketInit,
|
||||
- VSockVmciNotifyPktSocketDestruct,
|
||||
- VSockVmciNotifyPktPollIn,
|
||||
- VSockVmciNotifyPktPollOut,
|
||||
- VSockVmciNotifyPktHandlePkt,
|
||||
- VSockVmciNotifyPktRecvInit,
|
||||
- VSockVmciNotifyPktRecvPreBlock,
|
||||
- NULL, /* recvPreDequeue */
|
||||
- VSockVmciNotifyPktRecvPostDequeue,
|
||||
- VSockVmciNotifyPktSendInit,
|
||||
- NULL, /* sendPreBlock */
|
||||
- NULL, /* sendPreEnqueue */
|
||||
- VSockVmciNotifyPktSendPostEnqueue,
|
||||
- VSockVmciNotifyPktProcessRequest,
|
||||
- VSockVmciNotifyPktProcessNegotiate,
|
||||
+
|
||||
+
|
||||
+// Socket always on control packet based operations.
|
||||
+VSockVmciNotifyOps vSockVmciNotifyPktQStateOps __refdata = {
|
||||
+ .socketInit = VSockVmciNotifyPktSocketInit,
|
||||
+ .socketDestruct = VSockVmciNotifyPktSocketDestruct,
|
||||
+ .pollIn = VSockVmciNotifyPktPollIn,
|
||||
+ .pollOut = VSockVmciNotifyPktPollOut,
|
||||
+ .handleNotifyPkt = VSockVmciNotifyPktHandlePkt,
|
||||
+ .recvInit = VSockVmciNotifyPktRecvInit,
|
||||
+ .recvPreBlock = VSockVmciNotifyPktRecvPreBlock,
|
||||
+ .recvPreDequeue = NULL,
|
||||
+ .recvPostDequeue = VSockVmciNotifyPktRecvPostDequeue,
|
||||
+ .sendInit = VSockVmciNotifyPktSendInit,
|
||||
+ .sendPreBlock = NULL,
|
||||
+ .sendPreEnqueue = NULL,
|
||||
+ .sendPostEnqueue = VSockVmciNotifyPktSendPostEnqueue,
|
||||
+ .processRequest = VSockVmciNotifyPktProcessRequest,
|
||||
+ .processNegotiate = VSockVmciNotifyPktProcessNegotiate,
|
||||
+
|
||||
};
|
|
@ -0,0 +1,461 @@
|
|||
diff --git a/vmblock-only/Makefile b/vmblock-only/Makefile
|
||||
index bbfe225..8ec1a86 100644
|
||||
--- a/vmblock-only/Makefile
|
||||
+++ b/vmblock-only/Makefile
|
||||
@@ -43,7 +43,11 @@ INCLUDE += -I$(SRCROOT)/shared
|
||||
endif
|
||||
|
||||
|
||||
+ifdef KVERSION
|
||||
+VM_UNAME = $(KVERSION)
|
||||
+else
|
||||
VM_UNAME = $(shell uname -r)
|
||||
+endif
|
||||
|
||||
# Header directory for the running kernel
|
||||
ifdef LINUXINCLUDE
|
||||
diff --git a/vmblock-only/Makefile.kernel b/vmblock-only/Makefile.kernel
|
||||
index ab7a727..e3ec9d2 100644
|
||||
--- a/vmblock-only/Makefile.kernel
|
||||
+++ b/vmblock-only/Makefile.kernel
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
INCLUDE += -I$(SRCROOT)/include
|
||||
|
||||
-EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE)
|
||||
+EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) $(LINUXINCLUDE)
|
||||
|
||||
EXTRA_CFLAGS += $(call vm_check_build, $(AUTOCONF_DIR)/cachecreate.c, -DVMW_KMEMCR_HAS_DTOR, )
|
||||
EXTRA_CFLAGS += $(call vm_check_build, $(AUTOCONF_DIR)/cachector.c, -DVMW_KMEMCR_CTOR_HAS_3_ARGS, )
|
||||
diff --git a/vmblock-only/linux/control.c b/vmblock-only/linux/control.c
|
||||
index 79716bd..5b6acb2 100644
|
||||
--- a/vmblock-only/linux/control.c
|
||||
+++ b/vmblock-only/linux/control.c
|
||||
@@ -29,7 +29,7 @@
|
||||
#include <linux/stat.h>
|
||||
#include <linux/fs.h>
|
||||
|
||||
-#include <asm/uaccess.h>
|
||||
+#include <linux/uaccess.h>
|
||||
|
||||
#include "vmblockInt.h"
|
||||
#include "block.h"
|
||||
@@ -208,9 +208,17 @@ SetupProcDevice(void)
|
||||
VMBlockSetProcEntryOwner(controlProcMountpoint);
|
||||
|
||||
/* Create /proc/fs/vmblock/dev */
|
||||
+ // create_proc_entry deprecated in 3.10
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
|
||||
+ controlProcEntry = proc_create(VMBLOCK_CONTROL_DEVNAME,
|
||||
+ VMBLOCK_CONTROL_MODE,
|
||||
+ controlProcDirEntry,
|
||||
+ &ControlFileOps);
|
||||
+#else
|
||||
controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME,
|
||||
VMBLOCK_CONTROL_MODE,
|
||||
controlProcDirEntry);
|
||||
+#endif
|
||||
if (!controlProcEntry) {
|
||||
Warning("SetupProcDevice: could not create " VMBLOCK_DEVICE "\n");
|
||||
remove_proc_entry(VMBLOCK_CONTROL_MOUNTPOINT, controlProcDirEntry);
|
||||
@@ -218,7 +226,9 @@ SetupProcDevice(void)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) //Maybe 3.14? 3.13?
|
||||
controlProcEntry->proc_fops = &ControlFileOps;
|
||||
+#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -272,17 +282,50 @@ CleanupProcDevice(void)
|
||||
*----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0)
|
||||
+/* copy-paste from Lustre FS by pavlinux */
|
||||
+static inline char *ll_getname(const char __user *filename)
|
||||
+{
|
||||
+ int ret = 0, len;
|
||||
+ char *tmp = __getname();
|
||||
+
|
||||
+ if (!tmp)
|
||||
+ return ERR_PTR(-ENOMEM);
|
||||
+
|
||||
+ len = strncpy_from_user(tmp, filename, PATH_MAX);
|
||||
+ if (len == 0)
|
||||
+ ret = -ENOENT;
|
||||
+ else if (len > PATH_MAX)
|
||||
+ ret = -ENAMETOOLONG;
|
||||
+
|
||||
+ if (ret) {
|
||||
+ __putname(tmp);
|
||||
+ tmp = ERR_PTR(ret);
|
||||
+ }
|
||||
+ return tmp;
|
||||
+};
|
||||
+#endif
|
||||
+
|
||||
static int
|
||||
ExecuteBlockOp(const char __user *buf, // IN: buffer with name
|
||||
const os_blocker_id_t blocker, // IN: blocker ID (file)
|
||||
int (*blockOp)(const char *filename, // IN: block operation
|
||||
const os_blocker_id_t blocker))
|
||||
{
|
||||
- char *name;
|
||||
+ struct filename *fn = NULL;
|
||||
+ char *name = (char *)fn->name;
|
||||
int i;
|
||||
int retval;
|
||||
|
||||
- name = getname(buf);
|
||||
+ // Not sure what changed in 3.13 to neccessitate this.
|
||||
+ // Gentoo uses __getname(), though.
|
||||
+ // https://github.com/gentoo/vmware/blob/master/app-emulation/vmware-modules/files/308-3.10-02-control.patch#L36
|
||||
+ // ~MK
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
|
||||
+ name = (char *)getname(buf);
|
||||
+#else
|
||||
+ name = (char *)ll_getname(buf);
|
||||
+#endif
|
||||
if (IS_ERR(name)) {
|
||||
return PTR_ERR(name);
|
||||
}
|
||||
@@ -293,7 +336,13 @@ ExecuteBlockOp(const char __user *buf, // IN: buffer with name
|
||||
|
||||
retval = i < 0 ? -EINVAL : blockOp(name, blocker);
|
||||
|
||||
- putname(name);
|
||||
+ // I'm not sure what this does, but you seem to know what you're doing ~MK
|
||||
+ if (fn->name != fn->iname) { /* add by pavlinux */
|
||||
+ __putname(fn->name);
|
||||
+ kvfree(fn);
|
||||
+ } else {
|
||||
+ __putname(fn);
|
||||
+ }
|
||||
|
||||
return retval;
|
||||
}
|
||||
diff --git a/vmblock-only/linux/dentry.c b/vmblock-only/linux/dentry.c
|
||||
index 05ea95a..1245358 100644
|
||||
--- a/vmblock-only/linux/dentry.c
|
||||
+++ b/vmblock-only/linux/dentry.c
|
||||
@@ -32,7 +32,13 @@
|
||||
#include "block.h"
|
||||
|
||||
|
||||
-static int DentryOpRevalidate(struct dentry *dentry, struct nameidata *nd);
|
||||
+// From what I can tell, this should've always been an unsigned int?
|
||||
+static int DentryOpRevalidate(struct dentry *dentry,
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0) // Maybe 3.14 or 3.13?
|
||||
+ struct nameidata *nd);
|
||||
+#else
|
||||
+ unsigned int flags);
|
||||
+#endif
|
||||
|
||||
struct dentry_operations LinkDentryOps = {
|
||||
.d_revalidate = DentryOpRevalidate,
|
||||
@@ -60,7 +66,11 @@ struct dentry_operations LinkDentryOps = {
|
||||
|
||||
static int
|
||||
DentryOpRevalidate(struct dentry *dentry, // IN: dentry revalidating
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0)
|
||||
struct nameidata *nd) // IN: lookup flags & intent
|
||||
+#else
|
||||
+ unsigned int flags) // IN: lookup flags & intent
|
||||
+#endif
|
||||
{
|
||||
VMBlockInodeInfo *iinfo;
|
||||
struct nameidata actualNd;
|
||||
@@ -101,7 +111,11 @@ DentryOpRevalidate(struct dentry *dentry, // IN: dentry revalidating
|
||||
if (actualDentry &&
|
||||
actualDentry->d_op &&
|
||||
actualDentry->d_op->d_revalidate) {
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)
|
||||
+ return actualDentry->d_op->d_revalidate(actualDentry, flags);
|
||||
+#else
|
||||
return actualDentry->d_op->d_revalidate(actualDentry, nd);
|
||||
+#endif
|
||||
}
|
||||
|
||||
if (compat_path_lookup(iinfo->name, 0, &actualNd)) {
|
||||
diff --git a/vmblock-only/linux/file.c b/vmblock-only/linux/file.c
|
||||
index d7ac1f6..c5e6604 100644
|
||||
--- a/vmblock-only/linux/file.c
|
||||
+++ b/vmblock-only/linux/file.c
|
||||
@@ -39,6 +39,7 @@ typedef ino_t inode_num_t;
|
||||
#endif
|
||||
|
||||
/* Specifically for our filldir_t callback */
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
|
||||
typedef struct FilldirInfo {
|
||||
filldir_t filldir;
|
||||
void *dirent;
|
||||
@@ -76,6 +77,7 @@ Filldir(void *buf, // IN: Dirent buffer passed from FileOpReaddir
|
||||
/* Specify DT_LNK regardless */
|
||||
return info->filldir(info->dirent, name, namelen, offset, ino, DT_LNK);
|
||||
}
|
||||
+#endif
|
||||
|
||||
|
||||
/* File operations */
|
||||
@@ -132,7 +134,12 @@ FileOpOpen(struct inode *inode, // IN
|
||||
* and that would try to acquire the inode's semaphore; if the two inodes
|
||||
* are the same we'll deadlock.
|
||||
*/
|
||||
+ // f_dentry is defined as f_path.dentry until 3.19
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,19,0)
|
||||
if (actualFile->f_dentry && inode == actualFile->f_dentry->d_inode) {
|
||||
+#else
|
||||
+ if (actualFile->f_path.dentry && inode == actualFile->f_path.dentry->d_inode) {
|
||||
+#endif
|
||||
Warning("FileOpOpen: identical inode encountered, open cannot succeed.\n");
|
||||
if (filp_close(actualFile, current->files) < 0) {
|
||||
Warning("FileOpOpen: unable to close opened file.\n");
|
||||
@@ -164,13 +171,20 @@ FileOpOpen(struct inode *inode, // IN
|
||||
*----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
+// pavlinux's patch completely removes this bit for kernels older than 3.13
|
||||
static int
|
||||
FileOpReaddir(struct file *file, // IN
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
|
||||
void *dirent, // IN
|
||||
filldir_t filldir) // IN
|
||||
+#else
|
||||
+ struct dir_context* ctx) //IN
|
||||
+#endif
|
||||
{
|
||||
int ret;
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
|
||||
FilldirInfo info;
|
||||
+#endif
|
||||
struct file *actualFile;
|
||||
|
||||
if (!file) {
|
||||
@@ -184,12 +198,20 @@ FileOpReaddir(struct file *file, // IN
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
|
||||
info.filldir = filldir;
|
||||
info.dirent = dirent;
|
||||
|
||||
actualFile->f_pos = file->f_pos;
|
||||
ret = vfs_readdir(actualFile, Filldir, &info);
|
||||
file->f_pos = actualFile->f_pos;
|
||||
+#else
|
||||
+ /* Ricky Wong Yung Fei:
|
||||
+ * Manipulation of pos is now handled internally by iterate_dir().
|
||||
+ */
|
||||
+ ret = iterate_dir(actualFile, ctx);
|
||||
+ file->f_pos = actualFile->f_pos;
|
||||
+#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -236,8 +258,15 @@ FileOpRelease(struct inode *inode, // IN
|
||||
}
|
||||
|
||||
|
||||
+// pavlinux's patch drops FileOpReaddr for < 3.13
|
||||
+// pavlinux's patch sets .owner = THIS_MODULE and .llseek = no_llseek
|
||||
struct file_operations RootFileOps = {
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
|
||||
.readdir = FileOpReaddir,
|
||||
+#else
|
||||
+ .iterate = FileOpReaddir,
|
||||
+#endif
|
||||
+ .owner = THIS_MODULE,
|
||||
.open = FileOpOpen,
|
||||
.release = FileOpRelease,
|
||||
};
|
||||
diff --git a/vmblock-only/linux/inode.c b/vmblock-only/linux/inode.c
|
||||
index 098c94c..7aed6e7 100644
|
||||
--- a/vmblock-only/linux/inode.c
|
||||
+++ b/vmblock-only/linux/inode.c
|
||||
@@ -28,20 +28,32 @@
|
||||
#include <linux/fs.h>
|
||||
#include <linux/time.h>
|
||||
#include <linux/namei.h>
|
||||
+#include <linux/cred.h>
|
||||
|
||||
#include "vmblockInt.h"
|
||||
#include "filesystem.h"
|
||||
#include "block.h"
|
||||
|
||||
|
||||
/* Inode operations */
|
||||
+// Again, it looks like last arg should've always been unsigned int ~MK
|
||||
static struct dentry *InodeOpLookup(struct inode *dir,
|
||||
- struct dentry *dentry, struct nameidata *nd);
|
||||
-static int InodeOpReadlink(struct dentry *dentry, char __user *buffer, int buflen);
|
||||
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
|
||||
-static void *InodeOpFollowlink(struct dentry *dentry, struct nameidata *nd);
|
||||
+ struct dentry *dentry,
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) // Maybe 3.12 or 3.13?
|
||||
+ struct nameidata *nd);
|
||||
#else
|
||||
+ unsigned int flags);
|
||||
+#endif
|
||||
+static int InodeOpReadlink(struct dentry *dentry, char __user *buffer, int buflen);
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 13)
|
||||
static int InodeOpFollowlink(struct dentry *dentry, struct nameidata *nd);
|
||||
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99)
|
||||
+static const char *InodeOpGetLink(struct dentry *dentry, struct inode *inode,
|
||||
+ struct delayed_call *done);
|
||||
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 99)
|
||||
+static const char *InodeOpFollowlink(struct dentry *dentry, void **cookie);
|
||||
+#else
|
||||
+static void *InodeOpFollowlink(struct dentry *dentry, struct nameidata *nd);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -49,9 +60,13 @@ struct inode_operations RootInodeOps = {
|
||||
.lookup = InodeOpLookup,
|
||||
};
|
||||
|
||||
-static struct inode_operations LinkInodeOps = {
|
||||
+struct inode_operations LinkInodeOps = {
|
||||
.readlink = InodeOpReadlink,
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99)
|
||||
+ .get_link = InodeOpGetLink,
|
||||
+#else
|
||||
.follow_link = InodeOpFollowlink,
|
||||
+#endif
|
||||
};
|
||||
|
||||
|
||||
@@ -75,7 +90,11 @@ static struct inode_operations LinkInodeOps = {
|
||||
static struct dentry *
|
||||
InodeOpLookup(struct inode *dir, // IN: parent directory's inode
|
||||
struct dentry *dentry, // IN: dentry to lookup
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
|
||||
struct nameidata *nd) // IN: lookup intent and information
|
||||
+#else
|
||||
+ unsigned int flags) // IN: lookup intent and information
|
||||
+#endif
|
||||
{
|
||||
char *filename;
|
||||
struct inode *inode;
|
||||
@@ -135,7 +154,16 @@ InodeOpLookup(struct inode *dir, // IN: parent directory's inode
|
||||
inode->i_size = INODE_TO_IINFO(inode)->nameLen;
|
||||
inode->i_version = 1;
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
|
||||
inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
|
||||
+#else
|
||||
+ inode->i_atime = inode->i_mtime = inode->i_ctime = current_kernel_time();
|
||||
+#endif
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0)
|
||||
inode->i_uid = inode->i_gid = 0;
|
||||
+#else
|
||||
+ inode->i_gid = make_kgid(current_user_ns(), 0);
|
||||
+ inode->i_uid = make_kuid(current_user_ns(), 0);
|
||||
+#endif
|
||||
inode->i_op = &LinkInodeOps;
|
||||
|
||||
d_add(dentry, inode);
|
||||
@@ -176,8 +200,15 @@ InodeOpReadlink(struct dentry *dentry, // IN : dentry of symlink
|
||||
if (!iinfo) {
|
||||
return -EINVAL;
|
||||
}
|
||||
-
|
||||
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(3, 14, 99)
|
||||
return vfs_readlink(dentry, buffer, buflen, iinfo->name);
|
||||
+#elif LINUX_VERSION_CODE <= KERNEL_VERSION(4, 6, 99)
|
||||
+ return readlink_copy(buffer, buflen, iinfo->name);
|
||||
+#elif LINUX_VERSION_CODE <= KERNEL_VERSION(4, 9, 99)
|
||||
+ return generic_readlink(dentry, buffer, buflen);
|
||||
+#else
|
||||
+ return vfs_readlink(dentry, buffer, buflen);
|
||||
+#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -198,30 +229,58 @@ InodeOpReadlink(struct dentry *dentry, // IN : dentry of symlink
|
||||
*----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
|
||||
-static void *
|
||||
+static
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 13)
|
||||
+int
|
||||
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 99)
|
||||
+const char *
|
||||
#else
|
||||
-static int
|
||||
+void *
|
||||
#endif
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99)
|
||||
+InodeOpGetLink(struct dentry *dentry, struct inode *inode,
|
||||
+ struct delayed_call *done)
|
||||
+#else
|
||||
InodeOpFollowlink(struct dentry *dentry, // IN : dentry of symlink
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 99)
|
||||
+ void **cookie)
|
||||
+#else
|
||||
struct nameidata *nd) // OUT: stores result
|
||||
+#endif
|
||||
+#endif
|
||||
{
|
||||
int ret;
|
||||
VMBlockInodeInfo *iinfo;
|
||||
|
||||
if (!dentry) {
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99)
|
||||
+ ret = -ECHILD;
|
||||
+#else
|
||||
Warning("InodeOpReadlink: invalid args from kernel\n");
|
||||
ret = -EINVAL;
|
||||
+#endif
|
||||
goto out;
|
||||
}
|
||||
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99)
|
||||
+ iinfo = INODE_TO_IINFO(inode);
|
||||
+#else
|
||||
iinfo = INODE_TO_IINFO(dentry->d_inode);
|
||||
+#endif
|
||||
if (!iinfo) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 12, 0)
|
||||
ret = vfs_follow_link(nd, iinfo->name);
|
||||
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99)
|
||||
+ return (char *)(iinfo->name);
|
||||
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 99)
|
||||
+ return *cookie = (char *)(iinfo->name);
|
||||
+#else
|
||||
+ nd_set_link(nd, iinfo->name);
|
||||
+#endif
|
||||
|
||||
out:
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
|
||||
diff --git a/vmblock-only/shared/compat_namei.h b/vmblock-only/shared/compat_namei.h
|
||||
index f82dd49..426d40b 100644
|
||||
--- a/vmblock-only/shared/compat_namei.h
|
||||
+++ b/vmblock-only/shared/compat_namei.h
|
||||
@@ -45,4 +45,20 @@
|
||||
#define compat_path_lookup(name, flags, nd) path_lookup(name, flags, nd)
|
||||
#endif
|
||||
|
||||
+/* nameidata struct for 4.2+ */
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0)
|
||||
+struct nameidata {
|
||||
+ struct path path;
|
||||
+ struct qstr last;
|
||||
+ struct path root;
|
||||
+ struct inode *inode; /* path.dentry.d_inode */
|
||||
+ unsigned int flags;
|
||||
+ unsigned seq, m_seq;
|
||||
+ int last_type;
|
||||
+ unsigned depth;
|
||||
+ struct file *base;
|
||||
+ char *saved_names[MAX_NESTED_LINKS + 1];
|
||||
+};
|
||||
+#endif
|
||||
+
|
||||
#endif /* __COMPAT_NAMEI_H__ */
|
|
@ -0,0 +1,294 @@
|
|||
diff --git a/vmci-only/Makefile b/vmci-only/Makefile
|
||||
index c630705..18357e5 100644
|
||||
--- a/vmci-only/Makefile
|
||||
+++ b/vmci-only/Makefile
|
||||
@@ -43,7 +43,11 @@ INCLUDE += -I$(SRCROOT)/shared
|
||||
endif
|
||||
|
||||
|
||||
+ifdef KVERSION
|
||||
+VM_UNAME = $(KVERSION)
|
||||
+else
|
||||
VM_UNAME = $(shell uname -r)
|
||||
+endif
|
||||
|
||||
# Header directory for the running kernel
|
||||
ifdef LINUXINCLUDE
|
||||
diff --git a/vmci-only/Makefile.kernel b/vmci-only/Makefile.kernel
|
||||
index 8e6e7d0..28eb503 100644
|
||||
--- a/vmci-only/Makefile.kernel
|
||||
+++ b/vmci-only/Makefile.kernel
|
||||
@@ -21,7 +21,7 @@ CC_OPTS += -DVMCI
|
||||
|
||||
INCLUDE += -I$(SRCROOT)/shared -I$(SRCROOT)/common -I$(SRCROOT)/linux
|
||||
|
||||
-EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE)
|
||||
+EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) $(LINUXINCLUDE)
|
||||
|
||||
obj-m += $(DRIVER).o
|
||||
|
||||
diff --git a/vmci-only/linux/driver.c b/vmci-only/linux/driver.c
|
||||
index f676166..9e42f3f 100644
|
||||
--- a/vmci-only/linux/driver.c
|
||||
+++ b/vmci-only/linux/driver.c
|
||||
@@ -26,6 +26,7 @@
|
||||
|
||||
#include <linux/file.h>
|
||||
#include <linux/fs.h>
|
||||
+#include <linux/vmalloc.h>
|
||||
#include <linux/init.h>
|
||||
#if defined(__x86_64__) && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12)
|
||||
# include <linux/ioctl32.h>
|
||||
@@ -1466,12 +1467,19 @@ VMCIUserVALockPage(VA addr) // IN:
|
||||
int retval;
|
||||
|
||||
down_read(¤t->mm->mmap_sem);
|
||||
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
|
||||
- retval = get_user_pages(addr, 1, 1, 0, &page, NULL);
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 99)
|
||||
+ retval = get_user_pages(addr,
|
||||
#else
|
||||
retval = get_user_pages(current, current->mm, addr,
|
||||
- 1, 1, 0, &page, NULL);
|
||||
#endif
|
||||
+ 1,
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0)
|
||||
+ 1, 0,
|
||||
+#else
|
||||
+ FOLL_WRITE,
|
||||
+#endif
|
||||
+ &page, NULL);
|
||||
+
|
||||
up_read(¤t->mm->mmap_sem);
|
||||
|
||||
if (retval != 1) {
|
||||
@@ -1686,7 +1694,11 @@ vmci_guest_init(void)
|
||||
/* This should be last to make sure we are done initializing. */
|
||||
retval = pci_register_driver(&vmci_driver);
|
||||
if (retval < 0) {
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0)
|
||||
vfree(data_buffer);
|
||||
+#else
|
||||
+ kvfree(data_buffer);
|
||||
+#endif
|
||||
data_buffer = NULL;
|
||||
return retval;
|
||||
}
|
||||
@@ -1722,12 +1734,25 @@
|
||||
vmci_dev.msix_entries[i].vector = i;
|
||||
}
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
|
||||
result = pci_enable_msix(pdev, vmci_dev.msix_entries, VMCI_MAX_INTRS);
|
||||
if (!result) {
|
||||
vmci_dev.exclusive_vectors = TRUE;
|
||||
} else if (result > 0) {
|
||||
result = pci_enable_msix(pdev, vmci_dev.msix_entries, 1);
|
||||
}
|
||||
+#else
|
||||
+ result = pci_enable_msix_range(pdev, vmci_dev.msix_entries, VMCI_MAX_INTRS,
|
||||
+ VMCI_MAX_INTRS);
|
||||
+ if (result > 0) {
|
||||
+ vmci_dev.exclusive_vectors = TRUE;
|
||||
+ } else if (result == -ENOSPC) {
|
||||
+ result = pci_enable_msix_range(pdev, vmci_dev.msix_entries, 1, 1);
|
||||
+ }
|
||||
+
|
||||
+ if (result > 0)
|
||||
+ result = 0;
|
||||
+#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -2480,7 +2505,11 @@ vmci_exit(void)
|
||||
|
||||
if (guestDeviceInit) {
|
||||
pci_unregister_driver(&vmci_driver);
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0)
|
||||
vfree(data_buffer);
|
||||
+#else
|
||||
+ kvfree(data_buffer);
|
||||
+#endif
|
||||
data_buffer = NULL;
|
||||
guestDeviceInit = FALSE;
|
||||
}
|
||||
@@ -2490,7 +2519,7 @@ vmci_exit(void)
|
||||
|
||||
VMCI_HostCleanup();
|
||||
|
||||
- retval = misc_deregister(&linuxState.misc);
|
||||
+ retval = compat_misc_deregister(&linuxState.misc);
|
||||
if (retval) {
|
||||
Warning(LGPFX "Module %s: error unregistering\n", VMCI_MODULE_NAME);
|
||||
} else {
|
||||
diff --git a/vmci-only/linux/vmciKernelIf.c b/vmci-only/linux/vmciKernelIf.c
|
||||
index 3fba8b6..1836442 100644
|
||||
--- a/vmci-only/linux/vmciKernelIf.c
|
||||
+++ b/vmci-only/linux/vmciKernelIf.c
|
||||
@@ -40,6 +40,10 @@
|
||||
#include <linux/socket.h> /* For memcpy_{to,from}iovec(). */
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/wait.h>
|
||||
+#include <linux/skbuff.h>
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 99)
|
||||
+#include <linux/sched/signal.h>
|
||||
+#endif
|
||||
|
||||
#include "compat_highmem.h"
|
||||
#include "compat_interrupt.h"
|
||||
@@ -1198,16 +1199,29 @@ __VMCIMemcpyToQueue(VMCIQueue *queue, // OUT:
|
||||
}
|
||||
|
||||
if (isIovec) {
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
|
||||
struct iovec *iov = (struct iovec *)src;
|
||||
+#else
|
||||
+ struct msghdr *msg = (struct msghdr *)src;
|
||||
+#endif
|
||||
int err;
|
||||
|
||||
/* The iovec will track bytesCopied internally. */
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
|
||||
err = memcpy_fromiovec((uint8 *)va + pageOffset, iov, toCopy);
|
||||
+#else
|
||||
+ err = memcpy_from_msg((uint8 *)va + pageOffset, msg, toCopy);
|
||||
+#endif
|
||||
if (err != 0) {
|
||||
if (kernelIf->host) {
|
||||
kunmap(kernelIf->u.h.page[pageIndex]);
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
|
||||
}
|
||||
return VMCI_ERROR_INVALID_ARGS;
|
||||
+#else
|
||||
+ return VMCI_ERROR_INVALID_ARGS;
|
||||
+ }
|
||||
+#endif
|
||||
}
|
||||
} else {
|
||||
memcpy((uint8 *)va + pageOffset, (uint8 *)src + bytesCopied, toCopy);
|
||||
@@ -1273,11 +1287,19 @@ __VMCIMemcpyFromQueue(void *dest, // OUT:
|
||||
}
|
||||
|
||||
if (isIovec) {
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
|
||||
struct iovec *iov = (struct iovec *)dest;
|
||||
+#else
|
||||
+ struct msghdr *msg = (struct msghdr *)dest;
|
||||
+#endif
|
||||
int err;
|
||||
|
||||
/* The iovec will track bytesCopied internally. */
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
|
||||
err = memcpy_toiovec(iov, (uint8 *)va + pageOffset, toCopy);
|
||||
+#else
|
||||
+ err = memcpy_to_msg(msg, (uint8 *)va + pageOffset, toCopy);
|
||||
+#endif
|
||||
if (err != 0) {
|
||||
if (kernelIf->host) {
|
||||
kunmap(kernelIf->u.h.page[pageIndex]);
|
||||
@@ -1834,7 +1856,11 @@ VMCIReleasePages(struct page **pages, // IN
|
||||
if (dirty) {
|
||||
set_page_dirty(pages[i]);
|
||||
}
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 99)
|
||||
+ put_page(pages[i]);
|
||||
+#else
|
||||
page_cache_release(pages[i]);
|
||||
+#endif
|
||||
pages[i] = NULL;
|
||||
}
|
||||
}
|
||||
@@ -2048,21 +2074,22 @@ VMCIHost_GetUserMemory(VA64 produceUVA, // IN
|
||||
int err = VMCI_SUCCESS;
|
||||
|
||||
down_write(¤t->mm->mmap_sem);
|
||||
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 99)
|
||||
retval = get_user_pages((VA)produceUVA,
|
||||
- produceQ->kernelIf->numPages,
|
||||
- 1, 0,
|
||||
- produceQ->kernelIf->u.h.headerPage,
|
||||
- NULL);
|
||||
#else
|
||||
retval = get_user_pages(current,
|
||||
current->mm,
|
||||
(VA)produceUVA,
|
||||
+#endif
|
||||
produceQ->kernelIf->numPages,
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0)
|
||||
1, 0,
|
||||
+#else
|
||||
+ FOLL_WRITE,
|
||||
+#endif
|
||||
produceQ->kernelIf->u.h.headerPage,
|
||||
NULL);
|
||||
-#endif
|
||||
+
|
||||
if (retval < produceQ->kernelIf->numPages) {
|
||||
Log("get_user_pages(produce) failed (retval=%d)\n", retval);
|
||||
VMCIReleasePages(produceQ->kernelIf->u.h.headerPage, retval, FALSE);
|
||||
@@ -2070,11 +2097,19 @@ VMCIHost_GetUserMemory(VA64 produceUVA, // IN
|
||||
goto out;
|
||||
}
|
||||
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 99)
|
||||
+ retval = get_user_pages((VA)consumeUVA,
|
||||
+#else
|
||||
retval = get_user_pages(current,
|
||||
current->mm,
|
||||
(VA)consumeUVA,
|
||||
+#endif
|
||||
consumeQ->kernelIf->numPages,
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0)
|
||||
1, 0,
|
||||
+#else
|
||||
+ FOLL_WRITE,
|
||||
+#endif
|
||||
consumeQ->kernelIf->u.h.headerPage,
|
||||
NULL);
|
||||
if (retval < consumeQ->kernelIf->numPages) {
|
||||
diff --git a/vmci-only/shared/compat_module.h b/vmci-only/shared/compat_module.h
|
||||
index 2af7372..729aedc 100644
|
||||
--- a/vmci-only/shared/compat_module.h
|
||||
+++ b/vmci-only/shared/compat_module.h
|
||||
@@ -80,4 +80,13 @@ static const char __module_cat(tag, __LINE__)[] \
|
||||
typedef int compat_mod_param_bool;
|
||||
#endif
|
||||
|
||||
+/*
|
||||
+ * Linux kernel >= 4.2.99 does not return anything from misc_deregister
|
||||
+ */
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 99)
|
||||
+#define compat_misc_deregister(misc) misc_deregister(misc)
|
||||
+#else
|
||||
+#define compat_misc_deregister(misc) ({misc_deregister(misc);0;})
|
||||
+#endif
|
||||
+
|
||||
#endif /* __COMPAT_MODULE_H__ */
|
||||
diff --git a/vmci-only/shared/vm_device_version.h b/vmci-only/shared/vm_device_version.h
|
||||
index e2cb477..3dd7097 100644
|
||||
--- a/vmci-only/shared/vm_device_version.h
|
||||
+++ b/vmci-only/shared/vm_device_version.h
|
||||
@@ -53,7 +53,9 @@
|
||||
* VMware HD Audio codec
|
||||
* VMware HD Audio controller
|
||||
*/
|
||||
+#ifndef PCI_VENDOR_ID_VMWARE
|
||||
#define PCI_VENDOR_ID_VMWARE 0x15AD
|
||||
+#endif
|
||||
#define PCI_DEVICE_ID_VMWARE_SVGA2 0x0405
|
||||
#define PCI_DEVICE_ID_VMWARE_SVGA 0x0710
|
||||
#define PCI_DEVICE_ID_VMWARE_VGA 0x0711
|
||||
diff --git a/vmci-only/shared/vmci_kernel_if.h b/vmci-only/shared/vmci_kernel_if.h
|
||||
index 9def671..082fe59 100644
|
||||
--- a/vmci-only/shared/vmci_kernel_if.h
|
||||
+++ b/vmci-only/shared/vmci_kernel_if.h
|
||||
@@ -100,7 +100,7 @@
|
||||
typedef Semaphore VMCIEvent;
|
||||
typedef Semaphore VMCIMutex;
|
||||
typedef World_ID VMCIHostVmID;
|
||||
- typedef uint32 VMCIHostUser;
|
||||
+ typedef uint32_t VMCIHostUser;
|
||||
typedef PPN *VMCIQPGuestMem;
|
||||
#elif defined(__linux__)
|
||||
typedef spinlock_t VMCILock;
|
|
@ -0,0 +1,266 @@
|
|||
diff --git a/vsock-only/Makefile b/vsock-only/Makefile
|
||||
index 5d92e9b..7d315e8 100644
|
||||
--- a/vsock-only/Makefile
|
||||
+++ b/vsock-only/Makefile
|
||||
@@ -42,8 +42,11 @@ AUTOCONF_DIR := $(SRCROOT)/shared/autoconf
|
||||
INCLUDE += -I$(SRCROOT)/shared
|
||||
endif
|
||||
|
||||
-
|
||||
+ifdef KVERSION
|
||||
+VM_UNAME = $(KVERSION)
|
||||
+else
|
||||
VM_UNAME = $(shell uname -r)
|
||||
+endif
|
||||
|
||||
# Header directory for the running kernel
|
||||
ifdef LINUXINCLUDE
|
||||
diff --git a/vsock-only/Makefile.kernel b/vsock-only/Makefile.kernel
|
||||
index 5218df2..374cc1f 100644
|
||||
--- a/vsock-only/Makefile.kernel
|
||||
+++ b/vsock-only/Makefile.kernel
|
||||
@@ -25,7 +25,7 @@ INCLUDE += -I$(SRCROOT)/include
|
||||
INCLUDE += -I$(SRCROOT)/linux
|
||||
INCLUDE += -I$(SRCROOT)/common
|
||||
|
||||
-EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE)
|
||||
+EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) $(LINUXINCLUDE)
|
||||
EXTRA_CFLAGS += $(call vm_check_build, $(AUTOCONF_DIR)/netcreate_num_params.c, -DVMW_NETCREATE_KERNARG, )
|
||||
|
||||
|
||||
diff --git a/vsock-only/linux/af_vsock.c b/vsock-only/linux/af_vsock.c
|
||||
index bde1497..9f8f843 100644
|
||||
--- a/vsock-only/linux/af_vsock.c
|
||||
+++ b/vsock-only/linux/af_vsock.c
|
||||
@@ -113,6 +113,9 @@
|
||||
asmlinkage __attribute__((weak)) long
|
||||
sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg);
|
||||
#endif
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 99)
|
||||
+#include <linux/sched/signal.h>
|
||||
+#endif
|
||||
|
||||
#include "compat_cred.h"
|
||||
#include "compat_module.h"
|
||||
@@ -213,7 +216,11 @@
|
||||
struct sockaddr *addr, int addrLen, int flags);
|
||||
static int VSockVmciStreamConnect(struct socket *sock,
|
||||
struct sockaddr *addr, int addrLen, int flags);
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
|
||||
static int VSockVmciAccept(struct socket *sock, struct socket *newsock, int flags);
|
||||
+#else
|
||||
+static int VSockVmciAccept(struct socket *sock, struct socket *newsock, int flags, bool kern);
|
||||
+#endif
|
||||
static int VSockVmciGetname(struct socket *sock,
|
||||
struct sockaddr *addr, int *addrLen, int peer);
|
||||
static unsigned int VSockVmciPoll(struct file *file,
|
||||
@@ -233,13 +240,29 @@ static int VSockVmciStreamSetsockopt(struct socket *sock, int level, int optname
|
||||
static int VSockVmciStreamGetsockopt(struct socket *sock, int level, int optname,
|
||||
char __user *optval, int __user * optlen);
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
|
||||
static int VSockVmciDgramSendmsg(struct kiocb *kiocb,
|
||||
+#else
|
||||
+static int VSockVmciDgramSendmsg(
|
||||
+#endif
|
||||
struct socket *sock, struct msghdr *msg, size_t len);
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
|
||||
static int VSockVmciDgramRecvmsg(struct kiocb *kiocb, struct socket *sock,
|
||||
+#else
|
||||
+static int VSockVmciDgramRecvmsg(struct socket *sock,
|
||||
+#endif
|
||||
struct msghdr *msg, size_t len, int flags);
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
|
||||
static int VSockVmciStreamSendmsg(struct kiocb *kiocb,
|
||||
+#else
|
||||
+static int VSockVmciStreamSendmsg(
|
||||
+#endif
|
||||
struct socket *sock, struct msghdr *msg, size_t len);
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
|
||||
static int VSockVmciStreamRecvmsg(struct kiocb *kiocb, struct socket *sock,
|
||||
+#else
|
||||
+static int VSockVmciStreamRecvmsg(struct socket *sock,
|
||||
+#endif
|
||||
struct msghdr *msg, size_t len, int flags);
|
||||
|
||||
static int VSockVmciCreate(
|
||||
@@ -2872,11 +2895,18 @@ __VSockVmciCreate(struct net *net, // IN: Network namespace
|
||||
* From 2.6.9 to until 2.6.12 sk_alloc() used a cache in
|
||||
* the protocol structure, but you still had to specify the size and cache
|
||||
* yourself.
|
||||
- * Most recently (in 2.6.24), sk_alloc() was changed to expect the
|
||||
+ * In 2.6.24, sk_alloc() was changed to expect the
|
||||
* network namespace, and the option to zero the sock was dropped.
|
||||
*
|
||||
+ * In 4.2, another parameter was added to sk_alloc() allowing you to specify
|
||||
+ * whether or not the socket is to be a kernel socket. Previously, we passed
|
||||
+ * 1 to this new parameter, but following Gentoo's lead
|
||||
+ * ( https://github.com/gentoo/vmware/blob/master/app-emulation/vmware-modules/files/308-4.02-01-sk_alloc.patch#L19 )
|
||||
+ * we have switched to passing 0.
|
||||
*/
|
||||
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12)
|
||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 99)
|
||||
+ sk = sk_alloc(net, vsockVmciFamilyOps.family, priority, &vsockVmciProto, 0);
|
||||
+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12)
|
||||
sk = sk_alloc(vsockVmciFamilyOps.family, priority,
|
||||
vsockVmciProto.slab_obj_size, vsockVmciProto.slab);
|
||||
#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24)
|
||||
@@ -3825,7 +3855,12 @@
|
||||
static int
|
||||
VSockVmciAccept(struct socket *sock, // IN
|
||||
struct socket *newsock, // IN/OUT
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
|
||||
int flags) // IN
|
||||
+#else
|
||||
+ int flags, // IN
|
||||
+ bool kern)
|
||||
+#endif
|
||||
{
|
||||
struct sock *listener;
|
||||
int err;
|
||||
@@ -4260,7 +4295,11 @@ VSockVmciShutdown(struct socket *sock, // IN
|
||||
*/
|
||||
|
||||
static int
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
|
||||
VSockVmciDgramSendmsg(struct kiocb *kiocb, // UNUSED
|
||||
+#else
|
||||
+VSockVmciDgramSendmsg(
|
||||
+#endif
|
||||
struct socket *sock, // IN: socket to send on
|
||||
struct msghdr *msg, // IN: message to send
|
||||
size_t len) // IN: length of message
|
||||
@@ -4352,7 +4391,11 @@ VSockVmciDgramSendmsg(struct kiocb *kiocb, // UNUSED
|
||||
goto out;
|
||||
}
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
|
||||
memcpy_fromiovec(VMCI_DG_PAYLOAD(dg), msg->msg_iov, len);
|
||||
+#else
|
||||
+ memcpy_from_msg(VMCI_DG_PAYLOAD(dg), msg, len);
|
||||
+#endif
|
||||
|
||||
dg->dst = VMCI_MAKE_HANDLE(remoteAddr->svm_cid, remoteAddr->svm_port);
|
||||
dg->src = VMCI_MAKE_HANDLE(vsk->localAddr.svm_cid, vsk->localAddr.svm_port);
|
||||
@@ -4590,7 +4633,11 @@ VSockVmciStreamGetsockopt(struct socket *sock, // IN
|
||||
*/
|
||||
|
||||
static int
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
|
||||
VSockVmciStreamSendmsg(struct kiocb *kiocb, // UNUSED
|
||||
+#else
|
||||
+VSockVmciStreamSendmsg(
|
||||
+#endif
|
||||
struct socket *sock, // IN: socket to send on
|
||||
struct msghdr *msg, // IN: message to send
|
||||
size_t len) // IN: length of message
|
||||
@@ -4712,7 +4759,11 @@ VSockVmciStreamSendmsg(struct kiocb *kiocb, // UNUSED
|
||||
* able to send.
|
||||
*/
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
|
||||
written = vmci_qpair_enquev(vsk->qpair, msg->msg_iov,
|
||||
+#else
|
||||
+ written = vmci_qpair_enquev(vsk->qpair, &msg->msg_iter.iov,
|
||||
+#endif
|
||||
len - totalWritten, 0);
|
||||
if (written < 0) {
|
||||
err = -ENOMEM;
|
||||
@@ -4759,7 +4810,11 @@ out:
|
||||
*/
|
||||
|
||||
static int
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
|
||||
VSockVmciDgramRecvmsg(struct kiocb *kiocb, // UNUSED
|
||||
+#else
|
||||
+VSockVmciDgramRecvmsg(
|
||||
+#endif
|
||||
struct socket *sock, // IN: socket to receive from
|
||||
struct msghdr *msg, // IN/OUT: message to receive into
|
||||
size_t len, // IN: length of receive buffer
|
||||
@@ -4809,7 +4864,11 @@ VSockVmciDgramRecvmsg(struct kiocb *kiocb, // UNUSED
|
||||
}
|
||||
|
||||
/* Place the datagram payload in the user's iovec. */
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
|
||||
err = skb_copy_datagram_iovec(skb, sizeof *dg, msg->msg_iov, payloadLen);
|
||||
+#else
|
||||
+ err = skb_copy_datagram_iter(skb, sizeof *dg, &msg->msg_iter, payloadLen);
|
||||
+#endif
|
||||
if (err) {
|
||||
goto out;
|
||||
}
|
||||
@@ -4850,7 +4909,11 @@ out:
|
||||
*/
|
||||
|
||||
static int
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
|
||||
VSockVmciStreamRecvmsg(struct kiocb *kiocb, // UNUSED
|
||||
+#else
|
||||
+VSockVmciStreamRecvmsg(
|
||||
+#endif
|
||||
struct socket *sock, // IN: socket to receive from
|
||||
struct msghdr *msg, // IN/OUT: message to receive into
|
||||
size_t len, // IN: length of receive buffer
|
||||
@@ -4955,9 +5018,17 @@ VSockVmciStreamRecvmsg(struct kiocb *kiocb, // UNUSED
|
||||
}
|
||||
|
||||
if (flags & MSG_PEEK) {
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
|
||||
read = vmci_qpair_peekv(vsk->qpair, msg->msg_iov, len - copied, 0);
|
||||
+#else
|
||||
+ read = vmci_qpair_peekv(vsk->qpair, &msg->msg_iter.iov, len - copied, 0);
|
||||
+#endif
|
||||
} else {
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
|
||||
read = vmci_qpair_dequev(vsk->qpair, msg->msg_iov, len - copied, 0);
|
||||
+#else
|
||||
+ read = vmci_qpair_dequev(vsk->qpair, &msg->msg_iter.iov, len - copied, 0);
|
||||
+#endif
|
||||
}
|
||||
|
||||
if (read < 0) {
|
||||
diff --git a/vsock-only/linux/notify.c b/vsock-only/linux/notify.c
|
||||
index 5b1e134..82d8738 100644
|
||||
--- a/vsock-only/linux/notify.c
|
||||
+++ b/vsock-only/linux/notify.c
|
||||
@@ -516,7 +516,11 @@ VSockVmciHandleWrote(struct sock *sk, // IN
|
||||
PKT_FIELD(vsk, sentWaitingRead) = FALSE;
|
||||
#endif
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0)
|
||||
sk->sk_data_ready(sk, 0);
|
||||
+#else
|
||||
+ sk->sk_data_ready(sk);
|
||||
+#endif
|
||||
}
|
||||
|
||||
|
||||
diff --git a/vsock-only/linux/notifyQState.c b/vsock-only/linux/notifyQState.c
|
||||
index 464454b..7933be7 100644
|
||||
--- a/vsock-only/linux/notifyQState.c
|
||||
+++ b/vsock-only/linux/notifyQState.c
|
||||
@@ -164,7 +164,11 @@ VSockVmciHandleWrote(struct sock *sk, // IN
|
||||
struct sockaddr_vm *dst, // IN: unused
|
||||
struct sockaddr_vm *src) // IN: unused
|
||||
{
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0)
|
||||
sk->sk_data_ready(sk, 0);
|
||||
+#else
|
||||
+ sk->sk_data_ready(sk);
|
||||
+#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -566,7 +570,11 @@ VSockVmciNotifyPktRecvPostDequeue(struct sock *sk, // IN
|
||||
}
|
||||
|
||||
/* See the comment in VSockVmciNotifyPktSendPostEnqueue */
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0)
|
||||
sk->sk_data_ready(sk, 0);
|
||||
+#else
|
||||
+ sk->sk_data_ready(sk);
|
||||
+#endif
|
||||
}
|
||||
|
||||
return err;
|
|
@ -0,0 +1,145 @@
|
|||
# Copyright 1999-2018 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=6
|
||||
|
||||
inherit eutils flag-o-matic linux-info linux-mod user versionator udev
|
||||
|
||||
PV_MAJOR=$(get_major_version)
|
||||
PV_MINOR=$(get_version_component_range 2-3)
|
||||
|
||||
DESCRIPTION="VMware kernel modules"
|
||||
HOMEPAGE="http://www.vmware.com/"
|
||||
|
||||
SRC_URI=""
|
||||
|
||||
LICENSE="GPL-2"
|
||||
SLOT="0"
|
||||
KEYWORDS="~amd64"
|
||||
IUSE="vmblock vmci vsock"
|
||||
REQUIRED_USE="!vsock? ( !vmci )"
|
||||
|
||||
RDEPEND=""
|
||||
DEPEND="
|
||||
=app-emulation/vmware-workstation-14.${PV_MINOR}*
|
||||
"
|
||||
|
||||
S=${WORKDIR}
|
||||
|
||||
pkg_setup() {
|
||||
CONFIG_CHECK="~HIGH_RES_TIMERS"
|
||||
if kernel_is ge 2 6 37 && kernel_is lt 2 6 39; then
|
||||
CONFIG_CHECK="${CONFIG_CHECK} BKL"
|
||||
fi
|
||||
if use vmci ; then
|
||||
CONFIG_CHECK="${CONFIG_CHECK} !VMWARE_VMCI"
|
||||
else
|
||||
CONFIG_CHECK="${CONFIG_CHECK} VMWARE_VMCI"
|
||||
fi
|
||||
if use vsock ; then
|
||||
CONFIG_CHECK="${CONFIG_CHECK} !VMWARE_VMCI_VSOCKETS"
|
||||
else
|
||||
CONFIG_CHECK="${CONFIG_CHECK} VMWARE_VMCI_VSOCKETS"
|
||||
fi
|
||||
|
||||
linux-info_pkg_setup
|
||||
|
||||
linux-mod_pkg_setup
|
||||
|
||||
VMWARE_GROUP=${VMWARE_GROUP:-vmware}
|
||||
|
||||
VMWARE_MODULE_LIST_ALL="vmblock vmmon vmnet vmci vsock"
|
||||
VMWARE_MODULE_LIST="vmmon vmnet"
|
||||
use vmci && VMWARE_MODULE_LIST="${VMWARE_MODULE_LIST} vmci"
|
||||
use vsock && VMWARE_MODULE_LIST="${VMWARE_MODULE_LIST} vsock"
|
||||
use vmblock && VMWARE_MODULE_LIST="${VMWARE_MODULE_LIST} vmblock"
|
||||
|
||||
VMWARE_MOD_DIR="${PN}-${PVR}"
|
||||
|
||||
BUILD_TARGETS="auto-build KERNEL_DIR=${KERNEL_DIR} KBUILD_OUTPUT=${KV_OUT_DIR}"
|
||||
|
||||
enewgroup "${VMWARE_GROUP}"
|
||||
|
||||
filter-flags -mfpmath=sse -mavx -mpclmul -maes
|
||||
append-cflags -mno-sse # Found a problem similar to bug #492964
|
||||
|
||||
for mod in ${VMWARE_MODULE_LIST}; do
|
||||
MODULE_NAMES="${MODULE_NAMES} ${mod}(misc:${S}/${mod}-only)"
|
||||
done
|
||||
}
|
||||
|
||||
src_unpack() {
|
||||
cd "${S}"
|
||||
for mod in ${VMWARE_MODULE_LIST_ALL}; do
|
||||
tar -xf /opt/vmware/lib/vmware/modules/source/${mod}.tar
|
||||
done
|
||||
}
|
||||
|
||||
src_prepare() {
|
||||
# from Arch Linux: https://aur.archlinux.org/packages/vmware-workstation/
|
||||
if use vmblock; then
|
||||
epatch "${FILESDIR}/${PV_MAJOR}-vmblock.patch"
|
||||
fi
|
||||
if use vmci; then
|
||||
epatch "${FILESDIR}/${PV_MAJOR}-vmci.patch"
|
||||
fi
|
||||
if use vsock; then
|
||||
epatch "${FILESDIR}/${PV_MAJOR}-vsock.patch"
|
||||
epatch "${FILESDIR}/${PV_MAJOR}-4.14-00-vsock-gcc-plugins-randstruct.patch"
|
||||
fi
|
||||
# from https://github.com/mkubecek/vmware-host-modules/tree/workstation-14.0.0
|
||||
epatch "${FILESDIR}/${PV_MAJOR}-00-vmmon-quick-workaround-for-objtool-warnings.patch"
|
||||
kernel_is ge 4 9 0 && epatch "${FILESDIR}/${PV_MAJOR}-4.09-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch"
|
||||
kernel_is ge 4 10 0 && epatch "${FILESDIR}/${PV_MAJOR}-4.10-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch"
|
||||
kernel_is ge 4 12 0 && epatch "${FILESDIR}/${PV_MAJOR}-4.12-00-vmmon-use-standard-definition-of-MSR_MISC_FEATURES_E.patch"
|
||||
kernel_is ge 4 13 0 && epatch "${FILESDIR}/${PV_MAJOR}-4.13-00-vmmon-use-standard-definition-of-CR3_PCID_MASK-if-av.patch"
|
||||
|
||||
# decouple the kernel include dir from the running kernel version: https://github.com/stefantalpalaru/gentoo-overlay/issues/17
|
||||
sed -i -e "s%HEADER_DIR = /lib/modules/\$(VM_UNAME)/build/include%HEADER_DIR = ${KERNEL_DIR}/include%" */Makefile || die "sed failed"
|
||||
|
||||
# Allow user patches so they can support RC kernels and whatever else
|
||||
default
|
||||
}
|
||||
|
||||
src_install() {
|
||||
linux-mod_src_install
|
||||
local udevrules="${T}/60-vmware.rules"
|
||||
cat > "${udevrules}" <<-EOF
|
||||
KERNEL=="vmci", GROUP="vmware", MODE="660"
|
||||
KERNEL=="vmw_vmci", GROUP="vmware", MODE="660"
|
||||
KERNEL=="vmmon", GROUP="vmware", MODE="660"
|
||||
KERNEL=="vsock", GROUP="vmware", MODE="660"
|
||||
EOF
|
||||
udev_dorules "${udevrules}"
|
||||
|
||||
if ! use vmci ; then
|
||||
dodir /etc/modprobe.d/
|
||||
|
||||
cat > "${D}"/etc/modprobe.d/vmware.conf <<-EOF
|
||||
# Support for vmware vmci in kernel module
|
||||
alias vmci vmw_vmci
|
||||
EOF
|
||||
|
||||
export installed_modprobe_conf=1
|
||||
fi
|
||||
if ! use vsock ; then
|
||||
dodir /etc/modprobe.d/
|
||||
cat >> "${D}"/etc/modprobe.d/vmware.conf <<-EOF
|
||||
# Support for vmware vsock in kernel module
|
||||
alias vsock vmw_vsock_vmci_transport
|
||||
EOF
|
||||
|
||||
export installed_modprobe_conf=1
|
||||
fi
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
linux-mod_pkg_postinst
|
||||
if [ "${installed_modprobe_conf}"x == "x" ] ; then
|
||||
if [ -f "${ROOT}/etc/modprobe.d/vmware.conf" ] ; then
|
||||
ewarn "Please check the /etc/modprobe.d/vmware.conf file and"
|
||||
ewarn "possible conflicts when using vmci and/or vsock modules built"
|
||||
ewarn "out of kernel"
|
||||
fi
|
||||
fi
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
AUX configure-hostd.sh 372 BLAKE2B 0ed2d479a46d69ff8498bfac180f0440fb57fb173fc1a427115872a40a47559725623399652e9663fa8a4ca0d7e020d5445bafb6c37f45449dea341fc9f6cce6 SHA512 87c84f5e51e8b4585a9a55f13771cd8b84f2e4e0bb33679e3a1b23eb84a5be5d523a57b6c770095c1d21712a98e9317bbd215ab027843b0586b35ecf9fb85b49
|
||||
AUX vmware-14.1.rc 2476 BLAKE2B dff25b43c5fa57186be2a5f0ca4606d26cd1c3f3dbeb91d855fc07a9fd576f446983c852c8e0b112c5616bb95dfddc7e2c738b4d0ca341c781d7addcb45068cd SHA512 9bae224387128b2cd221d509e2933042e3925fb041670907d8a47c70a488214206912fe25ab24c0bdeb31591149e62aba374d3fa63fdd08644e09667e195967f
|
||||
AUX vmware-server-14.1.rc 1506 BLAKE2B 886ed1de7a99320611a28a43b48cf17715fcab8bf533a73c28a1aa2f8d150ee2b84e1e510e864b18347f3bd7e43faec3cfc90f09d5ac9c0afe821f67654a68c4 SHA512 548ff69f87bee2b6c82bd931d22dd560370c4a00641ae47d05af05bbc72cedc8fd25054abc405a590b72227b10c5997d79f16ded67f3e0cfac142eb248b47d44
|
||||
DIST VMware-Workstation-Full-14.1.1-7528167.x86_64.bundle 460769685 BLAKE2B c9807a94588989e7a1dd0d7964c5d9385f57f19aaf2cdb43be9b29a0b61edcd7cb93865ca8dc84394a306467fb80816334239fc3508d360f2c5e4aeecd5c93d1 SHA512 86f06796fc3657a895fd5766c5b83e4ff88c73e34f789c287f1e9b5b613d138067f151f1c0c92749bb0104490bd0e0ca223c55b71a3a98611b1e9dc5cec6c304
|
||||
DIST com.vmware.fusion.tools.darwin.zip.tar 2836480 BLAKE2B e434280c4cf1f9f38823546e7c15c8425d33db3253d203d56d39b012a17d4862c9aece3b4aad08629d303881ea7b4bdba1ded11686bc3bc8ebc804dea3ad07de SHA512 3a08e3670475ea84ddde8646e7a5b9b1efcaffd801aa3d64a5b0984c84aebff320114b0a8b9f9188a7cdd0640ec0bfae8c237625132fdac448501b4451c78488
|
||||
DIST com.vmware.fusion.tools.darwinPre15.zip.tar 2478080 BLAKE2B 27b0ea99545b33e079994da8f26c8c6c3ecce7dbc108062cedc787c9a20e53b591e119826875895d10d120a81efbe14d47563b24f6889cf9338367488e2a5e44 SHA512 dbac244995a16a3247c3eb81ec5a68979f454e6b9e28d2fe47678502441140bbe1c171da69945ea8f0581dcc9191002e02758ce9aafbd70b442263a5b8818f3c
|
||||
DIST unlocker-2.1.1_p1.zip 16201234 BLAKE2B 486597ba7ef12d2ec5b021ff9f5b56a9d1a58251e26f7bd9df4e84d34df9602ada3eaf69967ea645082e3919187f14801e7f506fa08b457d5763bdba9ec75493 SHA512 4ccea825339ae9303e8676dc773ca54cc929ab4970d8a2ac225f05bf18bad0e0945b7df3dd2b65c5596fd164642296da0f64774b27d7c066597f4d1d4db82bee
|
||||
DIST vmware-systemd-gentoo-02.tgz 14064 BLAKE2B 24ac2c2f295130f4aadad867ec88d652bd292cc60e6b471bb2e01069fe01d84dac3d8b0ca7690ebf218d663adfe0c1dc889d3f4f53cf3178b68291461260748b SHA512 3a382bfd5f1eb2b218d8012588ea55c1f22786dba35a1fc0fdfdb4e40b05e0e735ed09c6961684f6442e863c3ed72024ce01f19113bbd9ca47c32e3f43c55f42
|
||||
EBUILD vmware-workstation-14.1.1.7528167.ebuild 20620 BLAKE2B 302500222d7aa2ca368e26b703215d9122db2745d393b46f8ed55ba2302d2853becdfc384e9f8375d6e19b906fae0271f6cb116353b9d5003a448d02fa24de5d SHA512 5c67a627c23feb300307d22c31a4ad68f4674a8d0b831cf8c35bd842a68232995f9cdf4a6cb0ac88335f17b95b2a9586cffc00485ebc456e170ccf960fc4ca42
|
|
@ -0,0 +1,20 @@
|
|||
#!/bin/bash
|
||||
|
||||
action="$1"
|
||||
|
||||
case $action in
|
||||
add)
|
||||
rc-update -q add vmware-workstation-server default
|
||||
rc-service vmware-workstation-server start
|
||||
;;
|
||||
remove)
|
||||
rc-update -q del vmware-workstation-server default
|
||||
rc-service vmware-workstation-server stop
|
||||
;;
|
||||
status)
|
||||
rc-service -q vmware-workstation-server status
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
|
@ -0,0 +1,102 @@
|
|||
#!/sbin/openrc-run
|
||||
# Copyright 1999-2018 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
depend() {
|
||||
need localmount
|
||||
use net
|
||||
}
|
||||
|
||||
start() {
|
||||
ebegin Starting VMware USB Arbitrator
|
||||
@@BINDIR@@/vmware-usbarbitrator
|
||||
eend $?
|
||||
ebegin Starting VMware services
|
||||
|
||||
# vmci might be:
|
||||
# 1) built as external kernel module
|
||||
# 2) built as internal kernel module (with name vmw_vmci)
|
||||
# 3) embedded in the kernel
|
||||
for mod in /lib/modules/$(uname -r)/misc/vmci.ko \
|
||||
/lib/modules/$(uname -r)/kernel/drivers/misc/vmw_vmci/vmw_vmci.ko ;
|
||||
do
|
||||
if [[ -f "${mod}" ]] ; then
|
||||
modprobe -v $(basename "${mod}" .ko)
|
||||
eend $?
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# vsock might be:
|
||||
# 1) built as external kernel module
|
||||
# 2) built as internal kernel module (with name vmw_vsock_vmci_transport)
|
||||
# 3) embedded in the kernel
|
||||
for mod in /lib/modules/$(uname -r)/misc/vsock.ko \
|
||||
/lib/modules/$(uname -r)/kernel/net/vmw_vsock/vmw_vsock_vmci_transport.ko ;
|
||||
do
|
||||
if [[ -f "${mod}" ]] ; then
|
||||
modprobe -v $(basename "${mod}" .ko)
|
||||
eend $?
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# vmblock
|
||||
if [[ -f /lib/modules/$(uname -r)/misc/vmblock.ko ]]; then
|
||||
modprobe -v vmblock
|
||||
eend $?
|
||||
fi
|
||||
|
||||
# vmci or vsock were already loaded by the previous modprobe,
|
||||
# no need to do it here
|
||||
# quiet for vmci because it may not be there
|
||||
modprobe -av vmmon vmnet
|
||||
eend $?
|
||||
@@BINDIR@@/vmware-networks --start
|
||||
eend $?
|
||||
}
|
||||
|
||||
stop() {
|
||||
ebegin Stopping VMware USB Arbitrator
|
||||
killall --wait vmware-usbarbitrator
|
||||
eend $?
|
||||
@@BINDIR@@/vmware-networks --stop
|
||||
eend $?
|
||||
ebegin Stopping VMware services
|
||||
modprobe -rv vmmon vmnet
|
||||
eend $?
|
||||
|
||||
# vsock might be:
|
||||
# 1) built as external kernel module
|
||||
# 2) built as internal kernel module (with name vmw_vsock_vmci_transport)
|
||||
# 3) embedded in the kernel
|
||||
for mod in /lib/modules/$(uname -r)/misc/vsock.ko \
|
||||
/lib/modules/$(uname -r)/kernel/net/vmw_vsock/vmw_vsock_vmci_transport.ko ;
|
||||
do
|
||||
if [[ -f "${mod}" ]] ; then
|
||||
modprobe -rv $(basename "${mod}" .ko)
|
||||
eend $?
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# vmci might be:
|
||||
# 1) built as external kernel module
|
||||
# 2) built as internal kernel module (with name vmw_vmci)
|
||||
# 3) embedded in the kernel
|
||||
for mod in /lib/modules/$(uname -r)/misc/vmci.ko \
|
||||
/lib/modules/$(uname -r)/kernel/drivers/misc/vmw_vmci/vmw_vmci.ko ;
|
||||
do
|
||||
if [[ -f "${mod}" ]] ; then
|
||||
modprobe -rv $(basename "${mod}" .ko)
|
||||
eend $?
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# vmblock
|
||||
if [[ -f /lib/modules/$(uname -r)/misc/vmblock.ko ]]; then
|
||||
modprobe -rv vmblock
|
||||
eend $?
|
||||
fi
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
#!/sbin/openrc-run
|
||||
# Copyright 1999-2017 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
depend() {
|
||||
need localmount vmware
|
||||
use net
|
||||
}
|
||||
|
||||
checkconfig() {
|
||||
checkpath -d /var/run/vmware
|
||||
|
||||
# Check if certificates exist. If not, we need to generate them, ala sshd.
|
||||
if [ ! -e @@ETCDIR@@/ssl/rui.key -o ! -e @@ETCDIR@@/ssl/rui.crt ]; then
|
||||
checkpath -d -m 0600 @@ETCDIR@@/ssl
|
||||
openssl req -x509 -days 365 -newkey rsa:2048 -keyout @@ETCDIR@@/ssl/rui.key -out @@ETCDIR@@/ssl/rui.crt -config @@ETCDIR@@/ssl/hostd.ssl.config
|
||||
checkpath -f -m 0600 @@ETCDIR@@/ssl/rui.key @@ETCDIR@@/ssl/rui.crt
|
||||
fi
|
||||
}
|
||||
|
||||
start() {
|
||||
checkconfig
|
||||
|
||||
ebegin Starting VMware Authentication Daemon
|
||||
start-stop-daemon --start \
|
||||
--exec @@PREFIX@@/sbin/vmware-authdlauncher
|
||||
eend $?
|
||||
ebegin Starting VMware Workstation Server
|
||||
start-stop-daemon --start \
|
||||
--pidfile /var/run/vmware/vmware-hostd.PID \
|
||||
--exec @@BINDIR@@/vmware-hostd \
|
||||
-- -a -d @@ETCDIR@@/hostd/config.xml
|
||||
eend $?
|
||||
}
|
||||
|
||||
stop() {
|
||||
ebegin "Shutdown VMs in the AutoStart Sequence"
|
||||
local HOHO_ADMIN="$(@@BINDIR@@/vmware-wssc-adminTool "@@ETCDIR@@/hostd/authorization.xml" 2>/dev/null)"
|
||||
|
||||
if [ "x" != "x${HOHO_ADMIN}" ]; then
|
||||
@@BINDIR@@/vmware-vim-cmd -U "${HOHO_ADMIN}" hostsvc/autostartmanager/autostop
|
||||
fi
|
||||
eend $?
|
||||
|
||||
ebegin Stopping VMware Workstation Server
|
||||
start-stop-daemon --stop \
|
||||
--pidfile /var/run/vmware/vmware-hostd.PID
|
||||
eend $?
|
||||
ebegin Stopping VMware Authentication Daemon
|
||||
killall --wait vmware-authdlauncher
|
||||
eend $?
|
||||
}
|
|
@ -0,0 +1,700 @@
|
|||
# Copyright 1999-2018 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=6
|
||||
|
||||
inherit eutils versionator readme.gentoo-r1 gnome2-utils pam systemd xdg-utils
|
||||
|
||||
MY_PN="VMware-Workstation-Full"
|
||||
MY_PV=$(get_version_component_range 1-3)
|
||||
PV_MODULES="329.$(get_version_component_range 2-3)"
|
||||
PV_BUILD=$(get_version_component_range 4)
|
||||
MY_P="${MY_PN}-${MY_PV}-${PV_BUILD}"
|
||||
VMWARE_FUSION_VER="10.1.1_7520154"
|
||||
SYSTEMD_UNITS_TAG="gentoo-02"
|
||||
|
||||
DESCRIPTION="Emulate a complete PC without the performance overhead of most emulators"
|
||||
HOMEPAGE="http://www.vmware.com/products/workstation/"
|
||||
SRC_URI="
|
||||
https://download3.vmware.com/software/wkst/file/${MY_P}.x86_64.bundle
|
||||
macos-guests? (
|
||||
https://github.com/DrDonk/unlocker/archive/b036c40ab1922d9abf4f7d68e34f1eca3b4dc2ad.zip -> unlocker-2.1.1_p1.zip
|
||||
vmware-tools-darwinPre15? ( https://softwareupdate.vmware.com/cds/vmw-desktop/fusion/${VMWARE_FUSION_VER/_//}/packages/com.vmware.fusion.tools.darwinPre15.zip.tar )
|
||||
vmware-tools-darwin? ( https://softwareupdate.vmware.com/cds/vmw-desktop/fusion/${VMWARE_FUSION_VER/_//}/packages/com.vmware.fusion.tools.darwin.zip.tar )
|
||||
)
|
||||
systemd? ( https://github.com/akhuettel/systemd-vmware/archive/${SYSTEMD_UNITS_TAG}.tar.gz -> vmware-systemd-${SYSTEMD_UNITS_TAG}.tgz )
|
||||
"
|
||||
|
||||
LICENSE="GPL-2 GPL-3 MIT-with-advertising vmware"
|
||||
SLOT="0"
|
||||
KEYWORDS="~amd64"
|
||||
IUSE="bundled-libs cups doc macos-guests +modules ovftool server systemd vix"
|
||||
DARWIN_GUESTS="darwin darwinPre15"
|
||||
IUSE_VMWARE_GUESTS="${DARWIN_GUESTS} freebsd linux linuxPreGlibc25 netware solaris windows winPre2k winPreVista"
|
||||
for guest in ${IUSE_VMWARE_GUESTS}; do
|
||||
IUSE+=" vmware-tools-${guest}"
|
||||
done
|
||||
REQUIRED_USE="
|
||||
server? ( modules )
|
||||
vmware-tools-darwin? ( macos-guests )
|
||||
vmware-tools-darwinPre15? ( macos-guests )
|
||||
"
|
||||
RESTRICT="mirror strip"
|
||||
|
||||
BUNDLED_LIBS_DIR=/opt/vmware/lib/vmware/lib
|
||||
|
||||
BUNDLED_LIBS="
|
||||
libX11.so.6
|
||||
libXau.so.6
|
||||
libxcb.so.1
|
||||
libXcomposite.so.1
|
||||
libXcursor.so.1
|
||||
libXdamage.so.1
|
||||
libXdmcp.so.6
|
||||
libXext.so.6
|
||||
libXfixes.so.3
|
||||
libXft.so.2
|
||||
libXinerama.so.1
|
||||
libXi.so.6
|
||||
libXrandr.so.2
|
||||
libXrender.so.1
|
||||
libXtst.so.6
|
||||
libaio.so.1
|
||||
libatk-1.0.so.0
|
||||
libatk-bridge-2.0.so.0
|
||||
libatspi.so.0
|
||||
libcairo.so.2
|
||||
libcairo-gobject.so.2
|
||||
libcroco-0.6.so.3
|
||||
libcrypto.so.1.0.2
|
||||
libcurl.so.4
|
||||
libdbus-1.so.3
|
||||
libepoxy.so.0
|
||||
libexpat.so.1
|
||||
libffi.so.6
|
||||
libfontconfig.so.1
|
||||
libfreetype.so.6
|
||||
libfuse.so.2
|
||||
libgailutil-3.so.0
|
||||
libgcc_s.so.1
|
||||
libgck-1.so.0
|
||||
libgcr-base-3.so.1
|
||||
libgcr-ui-3.so.1
|
||||
libgcrypt.so.20
|
||||
libgdk-3.so.0
|
||||
libgdk_pixbuf-2.0.so.0
|
||||
libgio-2.0.so.0
|
||||
libglib-2.0.so.0
|
||||
libgmodule-2.0.so.0
|
||||
libgobject-2.0.so.0
|
||||
libgpg-error.so.0
|
||||
libgthread-2.0.so.0
|
||||
libgtk-3.so.0
|
||||
libharfbuzz.so.0
|
||||
libICE.so.6
|
||||
libjpeg.so.62
|
||||
libp11-kit.so.0
|
||||
libpango-1.0.so.0
|
||||
libpangocairo-1.0.so.0
|
||||
libpangoft2-1.0.so.0
|
||||
libpcre.so.1
|
||||
libpcsclite.so.1
|
||||
libpixman-1.so.0
|
||||
libpng12.so.0
|
||||
librsvg-2.so.2
|
||||
libsigc-2.0.so.0
|
||||
libSM.so.6
|
||||
libssl.so.1.0.2
|
||||
libstdc++.so.6
|
||||
libtasn1.so.6
|
||||
libtiff.so.5
|
||||
libxml2.so.2
|
||||
libz.so.1
|
||||
"
|
||||
|
||||
BUNDLED_LIB_DEPENDS="
|
||||
app-accessibility/at-spi2-atk
|
||||
app-accessibility/at-spi2-core
|
||||
app-crypt/gcr[gtk]
|
||||
app-crypt/p11-kit
|
||||
dev-libs/atk
|
||||
dev-libs/expat
|
||||
dev-libs/glib:2
|
||||
dev-libs/libaio
|
||||
dev-libs/libcroco
|
||||
dev-libs/libffi
|
||||
dev-libs/libgcrypt:0/20
|
||||
dev-libs/libgpg-error
|
||||
dev-libs/libpcre
|
||||
dev-libs/libsigc++:2
|
||||
dev-libs/libtasn1:0/6
|
||||
dev-libs/libxml2
|
||||
dev-libs/openssl:0
|
||||
gnome-base/librsvg:2
|
||||
media-libs/fontconfig
|
||||
media-libs/freetype
|
||||
media-libs/harfbuzz:0/0.9.18
|
||||
media-libs/libepoxy
|
||||
media-libs/libpng:1.2
|
||||
media-libs/tiff:0
|
||||
net-misc/curl
|
||||
sys-apps/dbus
|
||||
sys-apps/pcsc-lite
|
||||
sys-fs/fuse
|
||||
sys-libs/zlib
|
||||
virtual/jpeg:62
|
||||
x11-libs/cairo[glib]
|
||||
x11-libs/gdk-pixbuf:2
|
||||
x11-libs/gtk+:3
|
||||
x11-libs/libICE
|
||||
x11-libs/libSM
|
||||
x11-libs/libX11
|
||||
x11-libs/libXau
|
||||
x11-libs/libxcb
|
||||
x11-libs/libXcomposite
|
||||
x11-libs/libXcursor
|
||||
x11-libs/libXdamage
|
||||
x11-libs/libXdmcp
|
||||
x11-libs/libXext
|
||||
x11-libs/libXfixes
|
||||
x11-libs/libXft
|
||||
x11-libs/libXi
|
||||
x11-libs/libXinerama
|
||||
x11-libs/libXrandr
|
||||
x11-libs/libXrender
|
||||
x11-libs/libXtst
|
||||
x11-libs/pango
|
||||
x11-libs/pixman
|
||||
"
|
||||
|
||||
# vmware should not use virtual/libc as this is a
|
||||
# precompiled binary package thats linked to glibc.
|
||||
RDEPEND="
|
||||
app-arch/bzip2
|
||||
app-arch/unzip
|
||||
app-shells/bash
|
||||
dev-db/sqlite:3
|
||||
dev-libs/dbus-glib
|
||||
dev-libs/gmp:0
|
||||
dev-libs/icu
|
||||
dev-libs/json-c
|
||||
dev-libs/nettle:0/6.1
|
||||
gnome-base/gconf
|
||||
gnome-base/libgnome-keyring
|
||||
media-gfx/graphite2
|
||||
media-libs/alsa-lib
|
||||
media-libs/libart_lgpl
|
||||
media-libs/libvorbis
|
||||
media-libs/mesa
|
||||
net-dns/libidn
|
||||
net-libs/gnutls
|
||||
cups? ( net-print/cups )
|
||||
sys-apps/tcp-wrappers
|
||||
sys-apps/util-linux
|
||||
x11-libs/gksu
|
||||
x11-libs/libXxf86vm
|
||||
x11-libs/libdrm
|
||||
x11-libs/libxshmfence
|
||||
x11-libs/startup-notification
|
||||
x11-libs/xcb-util
|
||||
x11-themes/hicolor-icon-theme
|
||||
!bundled-libs? ( ${BUNDLED_LIB_DEPENDS} )
|
||||
!app-emulation/vmware-player
|
||||
!app-emulation/vmware-tools
|
||||
"
|
||||
PDEPEND="
|
||||
modules? ( ~app-emulation/vmware-modules-${PV_MODULES} )
|
||||
"
|
||||
DEPEND="
|
||||
dev-lang/python:2.7
|
||||
>=dev-util/patchelf-0.9
|
||||
macos-guests? ( dev-python/six )
|
||||
ovftool? ( app-admin/chrpath )
|
||||
sys-libs/ncurses:5
|
||||
sys-libs/readline:0
|
||||
"
|
||||
|
||||
S=${WORKDIR}/extracted
|
||||
VM_INSTALL_DIR="/opt/vmware"
|
||||
VM_DATA_STORE_DIR="/var/lib/vmware/Shared VMs"
|
||||
VM_HOSTD_USER="root"
|
||||
|
||||
QA_PREBUILT="/opt/*"
|
||||
|
||||
QA_WX_LOAD="opt/vmware/lib/vmware/tools-upgraders/vmware-tools-upgrader-32 opt/vmware/lib/vmware/bin/vmware-vmx-stats opt/vmware/lib/vmware/bin/vmware-vmx-debug opt/vmware/lib/vmware/bin/vmware-vmx"
|
||||
# adding "opt/vmware/lib/vmware/lib/libvmware-gksu.so/libvmware-gksu.so" to QA_WX_LOAD doesn't work
|
||||
|
||||
src_unpack() {
|
||||
for a in ${A}; do
|
||||
if [ ${a##*.} == 'bundle' ]; then
|
||||
cp "${DISTDIR}/${a}" "${WORKDIR}"
|
||||
else
|
||||
unpack ${a}
|
||||
fi
|
||||
done
|
||||
|
||||
local bundle=${MY_P}.x86_64.bundle
|
||||
chmod 755 ${bundle}
|
||||
./${bundle} --console --extract extracted || die "unable to extract bundle"
|
||||
|
||||
if ! use ovftool; then
|
||||
rm -r extracted/vmware-ovftool || die "unable to remove dir"
|
||||
fi
|
||||
|
||||
if ! use server; then
|
||||
rm -r extracted/vmware-workstation-server || die "unable to remove dir"
|
||||
fi
|
||||
|
||||
if ! use vix; then
|
||||
rm -r extracted/vmware-vix-core extracted/vmware-vix-lib-Workstation* || die "unable to remove dir"
|
||||
fi
|
||||
|
||||
for guest in ${DARWIN_GUESTS}; do
|
||||
if use vmware-tools-${guest}; then
|
||||
mkdir extracted/vmware-tools-${guest}
|
||||
unzip -q com.vmware.fusion.tools.${guest}.zip payload/\*
|
||||
mv payload/* extracted/vmware-tools-${guest}/
|
||||
rm -r payload com.vmware.fusion.tools.${guest}.zip
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
clean_bundled_libs() {
|
||||
einfo "Removing bundled libraries"
|
||||
for libname in ${BUNDLED_LIBS} ; do
|
||||
rm -rf "${S}"/*/lib/lib/${libname}
|
||||
done
|
||||
|
||||
rm -rf "${S}"/*/lib/libconf
|
||||
|
||||
# Among the bundled libs there are libcrypto.so.1.0.2 and libssl.so.1.0.2
|
||||
# (needed by libcds.so) which seem to be compiled from openssl-1.0.1l.
|
||||
# Upstream real sonames are *so.1.0.0 so it's necessary to fix DT_NEEDED link
|
||||
# in libcds.so to be able to use system libs.
|
||||
pushd >/dev/null .
|
||||
einfo "Patching libcds.so"
|
||||
for d in "${S}"/*/lib/lib/libcds.so; do
|
||||
cd "${d}" || die
|
||||
patchelf --replace-needed libssl.so.1.0.{2,0} \
|
||||
--replace-needed libcrypto.so.1.0.{2,0} \
|
||||
libcds.so || die
|
||||
cd - >/dev/null
|
||||
done
|
||||
}
|
||||
|
||||
src_prepare() {
|
||||
default
|
||||
|
||||
rm -f */bin/vmware-modconfig
|
||||
rm -rf */lib/modules/binary
|
||||
# Bug 459566
|
||||
mkdir vmware-network-editor/lib/lib
|
||||
mv vmware-network-editor/lib/libvmware-netcfg.so vmware-network-editor/lib/lib/
|
||||
|
||||
if use server; then
|
||||
rm -f vmware-workstation-server/bin/{openssl,configure-hostd.sh}
|
||||
fi
|
||||
|
||||
if ! use bundled-libs ; then
|
||||
clean_bundled_libs
|
||||
fi
|
||||
|
||||
if use ovftool; then
|
||||
chrpath -d vmware-ovftool/libcurl.so.4
|
||||
fi
|
||||
|
||||
if use macos-guests; then
|
||||
sed -i -e "s#vmx_path = '/usr#vmx_path = '${D}${VM_INSTALL_DIR//\//\\/}#" \
|
||||
-e "s#os\.path\.isfile('/usr#os.path.isfile('${D}${VM_INSTALL_DIR//\//\\/}#" \
|
||||
-e "s#vmwarebase = '/usr#vmwarebase = '${D}${VM_INSTALL_DIR//\//\\/}#" \
|
||||
"${WORKDIR}"/unlocker-*/unlocker.py
|
||||
fi
|
||||
|
||||
DOC_CONTENTS="
|
||||
/etc/env.d is updated during ${PN} installation. Please run:\n
|
||||
'env-update && source /etc/profile'\n
|
||||
Before you can use ${PN}, you must configure a default network setup.
|
||||
You can do this by running 'emerge --config ${PN}'.\n
|
||||
To be able to run ${PN} your user must be in the vmware group.\n
|
||||
"
|
||||
}
|
||||
|
||||
src_install() {
|
||||
local major_minor=$(get_version_component_range 1-2 "${PV}")
|
||||
local vmware_installer_version=$(cat "${S}/vmware-installer/manifest.xml" | grep -oPm1 "(?<=<version>)[^<]+")
|
||||
|
||||
# revdep-rebuild entry
|
||||
insinto /etc/revdep-rebuild
|
||||
echo "SEARCH_DIRS_MASK=\"${VM_INSTALL_DIR}\"" >> ${T}/10${PN}
|
||||
doins "${T}"/10${PN}
|
||||
|
||||
# install the binaries
|
||||
into "${VM_INSTALL_DIR}"
|
||||
dobin */bin/*
|
||||
dosbin */sbin/*
|
||||
|
||||
# install the libraries
|
||||
insinto "${VM_INSTALL_DIR}"/lib/vmware
|
||||
doins -r */lib/* vmware-vmx/roms
|
||||
rm -rf "${D}${VM_INSTALL_DIR}"/lib/vmware/*.so
|
||||
|
||||
# install the installer
|
||||
insinto "${VM_INSTALL_DIR}"/lib/vmware-installer/$vmware_installer_version
|
||||
doins vmware-installer/{vmis,vmis-launcher,vmware-installer,vmware-installer.py}
|
||||
insinto /etc/vmware-installer
|
||||
doins vmware-installer/bootstrap
|
||||
|
||||
# workaround for hardcoded search paths needed during shared objects loading
|
||||
if ! use bundled-libs ; then
|
||||
dosym /usr/$(get_libdir)/libglib-2.0.so.0 \
|
||||
"${VM_INSTALL_DIR}"/lib/vmware/lib/libglib-2.0.so.0/libglib-2.0.so.0
|
||||
# Bug 432918
|
||||
dosym /usr/$(get_libdir)/libcrypto.so.1.0.0 \
|
||||
"${VM_INSTALL_DIR}"/lib/vmware/lib/libcrypto.so.1.0.2/libcrypto.so.1.0.2
|
||||
dosym /usr/$(get_libdir)/libssl.so.1.0.0 \
|
||||
"${VM_INSTALL_DIR}"/lib/vmware/lib/libssl.so.1.0.2/libssl.so.1.0.2
|
||||
fi
|
||||
|
||||
# install the ancillaries
|
||||
insinto /usr
|
||||
doins -r */share
|
||||
|
||||
if use cups; then
|
||||
exeinto $(cups-config --serverbin)/filter
|
||||
doexe */extras/thnucups
|
||||
|
||||
insinto /etc/cups
|
||||
doins -r */etc/cups/*
|
||||
fi
|
||||
|
||||
if use doc; then
|
||||
dodoc -r */doc/*
|
||||
fi
|
||||
|
||||
exeinto "${VM_INSTALL_DIR}"/lib/vmware/setup
|
||||
doexe */vmware-config
|
||||
|
||||
# pam
|
||||
pamd_mimic_system vmware-authd auth account
|
||||
|
||||
# fuse
|
||||
insinto /etc/modprobe.d
|
||||
newins vmware-vmx/etc/modprobe.d/modprobe-vmware-fuse.conf vmware-fuse.conf
|
||||
|
||||
# install vmware workstation server
|
||||
if use server; then
|
||||
cd "${S}"/vmware-workstation-server
|
||||
|
||||
# install binaries
|
||||
into "${VM_INSTALL_DIR}"/lib/vmware
|
||||
dobin "${FILESDIR}"/configure-hostd.sh
|
||||
|
||||
# install the libraries
|
||||
insinto "${VM_INSTALL_DIR}"/lib/vmware/lib
|
||||
doins -r lib/*
|
||||
|
||||
into "${VM_INSTALL_DIR}"
|
||||
for tool in vmware-hostd wssc-adminTool ; do
|
||||
cat > "${T}/${tool}" <<-EOF
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
. /etc/vmware/bootstrap
|
||||
|
||||
exec "${VM_INSTALL_DIR}/lib/vmware/bin/${tool}" \\
|
||||
"\$@"
|
||||
EOF
|
||||
dobin "${T}/${tool}"
|
||||
done
|
||||
|
||||
insinto "${VM_INSTALL_DIR}"/lib/vmware
|
||||
doins -r hostd
|
||||
|
||||
# create the configuration
|
||||
insinto /etc/vmware
|
||||
doins -r config/etc/vmware/*
|
||||
doins -r etc/vmware/*
|
||||
|
||||
# create directory for shared virtual machines.
|
||||
keepdir "${VM_DATA_STORE_DIR}"
|
||||
keepdir /var/log/vmware
|
||||
|
||||
cd - >/dev/null
|
||||
fi
|
||||
|
||||
# install vmware-vix
|
||||
if use vix; then
|
||||
# install the binary
|
||||
into "${VM_INSTALL_DIR}"
|
||||
dobin "$S"/vmware-vix-*/bin/*
|
||||
|
||||
# install the libraries
|
||||
insinto "${VM_INSTALL_DIR}"/lib/vmware-vix
|
||||
doins -r "$S"/vmware-vix-*/lib/*
|
||||
|
||||
dosym vmware-vix/libvixAllProducts.so "${VM_INSTALL_DIR}"/lib/libbvixAllProducts.so
|
||||
|
||||
# install headers
|
||||
insinto /usr/include/vmware-vix
|
||||
doins "$S"/vmware-vix-*/include/*
|
||||
|
||||
if use doc; then
|
||||
dodoc -r "$S"/vmware-vix-*/doc/*
|
||||
fi
|
||||
fi
|
||||
|
||||
# install ovftool
|
||||
if use ovftool; then
|
||||
cd "${S}"/vmware-ovftool
|
||||
|
||||
insinto "${VM_INSTALL_DIR}"/lib/vmware-ovftool
|
||||
doins -r *
|
||||
|
||||
chmod 0755 "${D}${VM_INSTALL_DIR}"/lib/vmware-ovftool/{ovftool,ovftool.bin}
|
||||
dosym "${D}${VM_INSTALL_DIR}"/lib/vmware-ovftool/ovftool "${VM_INSTALL_DIR}"/bin/ovftool
|
||||
|
||||
cd - >/dev/null
|
||||
fi
|
||||
|
||||
# create symlinks for the various tools
|
||||
local tool ; for tool in thnuclnt vmware vmplayer{,-daemon} licenseTool vmamqpd \
|
||||
vmware-{app-control,enter-serial,gksu,fuseUI,hostd,modconfig{,-console},netcfg,tray,unity-helper,vim-cmd,vmblock-fuse,vprobe,wssc-adminTool,zenity} ; do
|
||||
dosym appLoader "${VM_INSTALL_DIR}"/lib/vmware/bin/"${tool}"
|
||||
done
|
||||
dosym "${VM_INSTALL_DIR}"/lib/vmware/bin/vmplayer "${VM_INSTALL_DIR}"/bin/vmplayer
|
||||
dosym "${VM_INSTALL_DIR}"/lib/vmware/bin/vmware "${VM_INSTALL_DIR}"/bin/vmware
|
||||
dosym "${VM_INSTALL_DIR}"/lib/vmware/icu /etc/vmware/icu
|
||||
|
||||
# fix permissions
|
||||
fperms 0755 "${VM_INSTALL_DIR}"/lib/vmware/bin/{appLoader,fusermount,mkisofs,vmware-remotemks}
|
||||
fperms 0755 "${VM_INSTALL_DIR}"/lib/vmware/setup/vmware-config
|
||||
fperms 4711 "${VM_INSTALL_DIR}"/lib/vmware/bin/vmware-vmx{,-debug,-stats}
|
||||
fperms 0755 "${VM_INSTALL_DIR}"/lib/vmware/lib/libvmware-gksu.so/gksu-run-helper
|
||||
fperms 4711 "${VM_INSTALL_DIR}"/sbin/vmware-authd
|
||||
if use server; then
|
||||
fperms 0755 "${VM_INSTALL_DIR}"/bin/{vmware-hostd,wssc-adminTool}
|
||||
fperms 1777 "${VM_DATA_STORE_DIR}"
|
||||
fi
|
||||
if use vix; then
|
||||
fperms 0755 "${VM_INSTALL_DIR}"/lib/vmware-vix/setup/vmware-config
|
||||
fi
|
||||
|
||||
# create the environment
|
||||
local envd="${T}/90vmware"
|
||||
cat > "${envd}" <<-EOF
|
||||
PATH='${VM_INSTALL_DIR}/bin'
|
||||
ROOTPATH='${VM_INSTALL_DIR}/bin'
|
||||
CONFIG_PROTECT_MASK='/etc/vmware-installer'
|
||||
EOF
|
||||
use bundled-libs && echo 'VMWARE_USE_SHIPPED_LIBS=1' >> "${envd}"
|
||||
|
||||
doenvd "${envd}"
|
||||
|
||||
# create the configuration
|
||||
dodir /etc/vmware
|
||||
|
||||
cat > "${D}"/etc/vmware/bootstrap <<-EOF
|
||||
BINDIR='${VM_INSTALL_DIR}/bin'
|
||||
LIBDIR='${VM_INSTALL_DIR}/lib'
|
||||
EOF
|
||||
|
||||
cat > "${D}"/etc/vmware/config <<-EOF
|
||||
bindir = "${VM_INSTALL_DIR}/bin"
|
||||
libdir = "${VM_INSTALL_DIR}/lib/vmware"
|
||||
initscriptdir = "/etc/init.d"
|
||||
authd.fullpath = "${VM_INSTALL_DIR}/sbin/vmware-authd"
|
||||
gksu.rootMethod = "su"
|
||||
VMCI_CONFED = "yes"
|
||||
VMBLOCK_CONFED = "yes"
|
||||
VSOCK_CONFED = "yes"
|
||||
NETWORKING = "yes"
|
||||
player.product.version = "${MY_PV}"
|
||||
product.buildNumber = "${PV_BUILD}"
|
||||
product.version = "${MY_PV}"
|
||||
product.name = "VMware Workstation"
|
||||
workstation.product.version = "${MY_PV}"
|
||||
EOF
|
||||
|
||||
if use vix; then
|
||||
cat >> "${D}"/etc/vmware/config <<-EOF
|
||||
vmware.fullpath = "${VM_INSTALL_DIR}/bin/vmware"
|
||||
vix.libdir = "${VM_INSTALL_DIR}/lib/vmware-vix"
|
||||
vix.config.version = "1"
|
||||
EOF
|
||||
fi
|
||||
|
||||
if use server; then
|
||||
cat >> "${D}"/etc/vmware/config <<-EOF
|
||||
authd.client.port = "902"
|
||||
authd.proxy.nfc = "vmware-hostd:ha-nfc"
|
||||
authd.soapserver = "TRUE"
|
||||
EOF
|
||||
fi
|
||||
|
||||
if use modules; then
|
||||
# install the init.d script
|
||||
local initscript="${T}/vmware.rc"
|
||||
sed -e "s:@@BINDIR@@:${VM_INSTALL_DIR}/bin:g" \
|
||||
"${FILESDIR}/vmware-${major_minor}.rc" > "${initscript}" || die
|
||||
newinitd "${initscript}" vmware
|
||||
fi
|
||||
|
||||
if use server; then
|
||||
# install the init.d script
|
||||
local initscript="${T}/vmware-workstation-server.rc"
|
||||
sed -e "s:@@ETCDIR@@:/etc/vmware:g" \
|
||||
-e "s:@@PREFIX@@:${VM_INSTALL_DIR}:g" \
|
||||
-e "s:@@BINDIR@@:${VM_INSTALL_DIR}/bin:g" \
|
||||
-e "s:@@LIBDIR@@:${VM_INSTALL_DIR}/lib/vmware:g" \
|
||||
"${FILESDIR}/vmware-server-${major_minor}.rc" > ${initscript} || die
|
||||
newinitd "${initscript}" vmware-workstation-server
|
||||
fi
|
||||
|
||||
# fill in variable placeholders
|
||||
if use bundled-libs ; then
|
||||
sed -e "s:@@LIBCONF_DIR@@:${VM_INSTALL_DIR}/lib/vmware/libconf:g" \
|
||||
-i "${D}${VM_INSTALL_DIR}"/lib/vmware/libconf/etc/gtk-3.0/gdk-pixbuf.loaders || die
|
||||
fi
|
||||
sed -e "s:@@BINARY@@:${VM_INSTALL_DIR}/bin/vmplayer:g" \
|
||||
-e "/^Encoding/d" \
|
||||
-i "${D}/usr/share/applications/vmware-player.desktop" || die
|
||||
sed -e "s:@@BINARY@@:${VM_INSTALL_DIR}/bin/vmware:g" \
|
||||
-e "/^Encoding/d" \
|
||||
-i "${D}/usr/share/applications/vmware-workstation.desktop" || die
|
||||
sed -e "s:@@BINARY@@:${VM_INSTALL_DIR}/bin/vmware-netcfg:g" \
|
||||
-e "/^Encoding/d" \
|
||||
-i "${D}/usr/share/applications/vmware-netcfg.desktop" || die
|
||||
|
||||
if use server; then
|
||||
# Configuration for vmware-workstation-server
|
||||
local hostdUser="${VM_HOSTD_USER:-root}"
|
||||
sed -e "/ACEDataUser/s:root:${hostdUser}:g" \
|
||||
-i "${D}/etc/vmware/hostd/authorization.xml" || die
|
||||
|
||||
# Shared VMs Path: [standard].
|
||||
sed -e "s:##{DS_NAME}##:standard:g" \
|
||||
-e "s:##{DS_PATH}##:${VM_DATA_STORE_DIR}:g" \
|
||||
-i "${D}/etc/vmware/hostd/datastores.xml" || die
|
||||
|
||||
sed -e "s:##{HTTP_PORT}##:-1:g" \
|
||||
-e "s:##{HTTPS_PORT}##:443:g" \
|
||||
-e "s:##{PIPE_PREFIX}##:/var/run/vmware/:g" \
|
||||
-i "${D}/etc/vmware/hostd/proxy.xml" || die
|
||||
|
||||
# See vmware-workstation-server.py for more details.
|
||||
sed -e "s:##{BUILD_CFGDIR}##:/etc/vmware/hostd/:g" \
|
||||
-e "s:##{CFGALTDIR}##:/etc/vmware/hostd/:g" \
|
||||
-e "s:##{CFGDIR}##:/etc/vmware/:g" \
|
||||
-e "s:##{ENABLE_AUTH}##:true:g" \
|
||||
-e "s:##{HOSTDMODE}##:ws:g" \
|
||||
-e "s:##{HOSTD_CFGDIR}##:/etc/vmware/hostd/:g" \
|
||||
-e "s:##{HOSTD_MOCKUP}##:false:g" \
|
||||
-e "s:##{LIBDIR}##:${VM_INSTALL_DIR}/lib/vmware:g" \
|
||||
-e "s:##{LIBDIR_INSTALLED}##:${VM_INSTALL_DIR}/lib/vmware/:g" \
|
||||
-e "s:##{LOGDIR}##:/var/log/vmware/:g" \
|
||||
-e "s:##{LOGLEVEL}##:verbose:g" \
|
||||
-e "s:##{MOCKUP}##:mockup-host-config.xml:g" \
|
||||
-e "s:##{PLUGINDIR}##:./:g" \
|
||||
-e "s:##{SHLIB_PREFIX}##:lib:g" \
|
||||
-e "s:##{SHLIB_SUFFIX}##:.so:g" \
|
||||
-e "s:##{USE_BLKLISTSVC}##:false:g" \
|
||||
-e "s:##{USE_CBRCSVC}##:false:g" \
|
||||
-e "s:##{USE_CIMSVC}##:false:g" \
|
||||
-e "s:##{USE_DIRECTORYSVC}##:false:g" \
|
||||
-e "s:##{USE_DIRECTORYSVC_MOCKUP}##:false:g" \
|
||||
-e "s:##{USE_DYNAMIC_PLUGIN_LOADING}##:false:g" \
|
||||
-e "s:##{USE_DYNAMO}##:false:g" \
|
||||
-e "s:##{USE_DYNSVC}##:false:g" \
|
||||
-e "s:##{USE_GUESTSVC}##:false:g" \
|
||||
-e "s:##{USE_HBRSVC}##:false:g" \
|
||||
-e "s:##{USE_HBRSVC_MOCKUP}##:false:g" \
|
||||
-e "s:##{USE_HOSTSPECSVC}##:false:g" \
|
||||
-e "s:##{USE_HOSTSVC_MOCKUP}##:false:g" \
|
||||
-e "s:##{USE_HTTPNFCSVC}##:false:g" \
|
||||
-e "s:##{USE_HTTPNFCSVC_MOCKUP}##:false:g" \
|
||||
-e "s:##{USE_LICENSESVC_MOCKUP}##:false:g" \
|
||||
-e "s:##{USE_NFCSVC}##:true:g" \
|
||||
-e "s:##{USE_NFCSVC_MOCKUP}##:false:g" \
|
||||
-e "s:##{USE_OVFMGRSVC}##:true:g" \
|
||||
-e "s:##{USE_PARTITIONSVC}##:false:g" \
|
||||
-e "s:##{USE_SECURESOAP}##:false:g" \
|
||||
-e "s:##{USE_SNMPSVC}##:false:g" \
|
||||
-e "s:##{USE_SOLO_MOCKUP}##:false:g" \
|
||||
-e "s:##{USE_STATSSVC}##:false:g" \
|
||||
-e "s:##{USE_STATSSVC_MOCKUP}##:false:g" \
|
||||
-e "s:##{USE_VCSVC_MOCKUP}##:false:g" \
|
||||
-e "s:##{USE_VSLMSVC}##:false:g" \
|
||||
-e "s:##{USE_VSLMSVC_MOCKUP}##:false:g" \
|
||||
-e "s:##{USE_VDISKSVC}##:false:g" \
|
||||
-e "s:##{USE_VDISKSVC_MOCKUP}##:false:g" \
|
||||
-e "s:##{USE_VMSVC_MOCKUP}##:false:g" \
|
||||
-e "s:##{VM_INVENTORY}##:vmInventory.xml:g" \
|
||||
-e "s:##{VM_RESOURCES}##:vmResources.xml:g" \
|
||||
-e "s:##{WEBSERVER_PORT_ENTRY}##::g" \
|
||||
-e "s:##{WORKINGDIR}##:./:g" \
|
||||
-i "${D}/etc/vmware/hostd/config.xml" || die
|
||||
|
||||
sed -e "s:##{ENV_LOCATION}##:/etc/vmware/hostd/env/:g" \
|
||||
-i "${D}/etc/vmware/hostd/environments.xml" || die
|
||||
|
||||
# @@VICLIENT_URL@@=XXX
|
||||
sed -e "s:@@AUTHD_PORT@@:902:g" \
|
||||
-i "${D}${VM_INSTALL_DIR}/lib/vmware/hostd/docroot/client/clients.xml" || die
|
||||
fi
|
||||
|
||||
# install systemd unit files
|
||||
if use systemd; then
|
||||
systemd_dounit "${WORKDIR}/systemd-vmware-${SYSTEMD_UNITS_TAG}/"*.{service,target}
|
||||
fi
|
||||
|
||||
# enable macOS guests support
|
||||
if use macos-guests; then
|
||||
python2 "${WORKDIR}"/unlocker-*/unlocker.py >/dev/null || die "unlocker.py failed"
|
||||
fi
|
||||
|
||||
# VMware tools
|
||||
for guest in ${IUSE_VMWARE_GUESTS}; do
|
||||
if use vmware-tools-${guest}; then
|
||||
local dbfile="${D}/etc/vmware-installer/database"
|
||||
if ! [ -e "${dbfile}" ]; then
|
||||
> "${dbfile}"
|
||||
sqlite3 "${dbfile}" "CREATE TABLE settings(key VARCHAR PRIMARY KEY, value VARCHAR NOT NULL, component_name VARCHAR NOT NULL);"
|
||||
sqlite3 "${dbfile}" "INSERT INTO settings(key,value,component_name) VALUES('db.schemaVersion','2','vmware-installer');"
|
||||
sqlite3 "${dbfile}" "CREATE TABLE components(id INTEGER PRIMARY KEY, name VARCHAR NOT NULL, version VARCHAR NOT NULL, buildNumber INTEGER NOT NULL, component_core_id INTEGER NOT NULL, longName VARCHAR NOT NULL, description VARCHAR, type INTEGER NOT NULL);"
|
||||
fi
|
||||
local manifest="vmware-tools-${guest}/manifest.xml"
|
||||
if [ -e "${manifest}" ]; then
|
||||
local version="$(grep -oPm1 '(?<=<version>)[^<]+' ${manifest})"
|
||||
sqlite3 "${dbfile}" "INSERT INTO components(name,version,buildNumber,component_core_id,longName,description,type) VALUES(\"vmware-tools-$guest\",\"$version\",\"${PV_BUILD}\",1,\"$guest\",\"$guest\",1);"
|
||||
else
|
||||
sqlite3 "${dbfile}" "INSERT INTO components(name,version,buildNumber,component_core_id,longName,description,type) VALUES(\"vmware-tools-$guest\",\"${VMWARE_FUSION_VER%_*}\",\"${VMWARE_FUSION_VER#*_}\",1,\"$guest\",\"$guest\",1);"
|
||||
fi
|
||||
insinto "${VM_INSTALL_DIR}/lib/vmware/isoimages"
|
||||
doins vmware-tools-${guest}/${guest}.iso
|
||||
doins vmware-tools-${guest}/${guest}.iso.sig
|
||||
fi
|
||||
done
|
||||
|
||||
readme.gentoo_create_doc
|
||||
}
|
||||
|
||||
pkg_config() {
|
||||
"${VM_INSTALL_DIR}"/bin/vmware-networks --postinstall ${PN},old,new
|
||||
}
|
||||
|
||||
pkg_preinst() {
|
||||
gnome2_icon_savelist
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
xdg_desktop_database_update
|
||||
xdg_mimeinfo_database_update
|
||||
gnome2_icon_cache_update
|
||||
readme.gentoo_print_elog
|
||||
}
|
||||
|
||||
pkg_postrm() {
|
||||
xdg_desktop_database_update
|
||||
xdg_mimeinfo_database_update
|
||||
gnome2_icon_cache_update
|
||||
}
|
Loading…
Reference in New Issue