aboutsummaryrefslogtreecommitdiff
path: root/emulators
diff options
context:
space:
mode:
authorMartin Blapp <mbr@FreeBSD.org>2008-03-28 13:30:31 +0000
committerMartin Blapp <mbr@FreeBSD.org>2008-03-28 13:30:31 +0000
commit4b967f9e693a8ad11a4746ad058aed81082ef3b2 (patch)
treee38ec988ec767f2eabde899998dac53e63bf06d3 /emulators
parent3c423fe9eb4963c7e807e21e9dc9500376db0ad2 (diff)
Notes
Diffstat (limited to 'emulators')
-rw-r--r--emulators/open-vm-tools/Makefile72
-rw-r--r--emulators/open-vm-tools/distinfo2
-rw-r--r--emulators/open-vm-tools/files/patch-arch12
-rw-r--r--emulators/open-vm-tools/files/patch-asm55
-rw-r--r--emulators/open-vm-tools/files/patch-cpus30
-rw-r--r--emulators/open-vm-tools/files/patch-freebsd7194
-rw-r--r--emulators/open-vm-tools/files/patch-getpwnam40
-rw-r--r--emulators/open-vm-tools/files/patch-header11
-rw-r--r--emulators/open-vm-tools/files/patch-vmblock-vfsops.c11
-rw-r--r--emulators/open-vm-tools/files/vmware-guestd.sh.in101
-rw-r--r--emulators/open-vm-tools/pkg-descr13
-rw-r--r--emulators/open-vm-tools/pkg-plist19
-rw-r--r--emulators/open-vm-tools/pkg-plist-x1121
13 files changed, 581 insertions, 0 deletions
diff --git a/emulators/open-vm-tools/Makefile b/emulators/open-vm-tools/Makefile
new file mode 100644
index 000000000000..b598618f7e09
--- /dev/null
+++ b/emulators/open-vm-tools/Makefile
@@ -0,0 +1,72 @@
+# New ports collection makefile for: open-vm-tools for FreeBSD
+# Date created: 28 Mar 2008
+# Whom: mbr@FreeBSD.org
+#
+# $FreeBSD$
+#
+
+PORTNAME= open-vm-tools-FreeBSD${OSREL}-${ARCH}-Build
+PORTVERSION= ${BUILD_VER}
+CATEGORIES= emulators
+DISTNAME= open-vm-tools-${RELEASE_DATE}-${BUILD_VER}
+MASTER_SITES= ${MASTER_SITE_SOURCEFORGE}
+MASTER_SITE_SUBDIR= open-vm-tools
+
+MAINTAINER= mbr@freebsd.org
+COMMENT?= Open VMware tools for FreeBSD VMware guests
+
+RELEASE_DATE= 2008.03.19
+BUILD_VER= 82724
+
+GNU_CONFIGURE= yes
+
+.if defined(WITHOUT_X11)
+CONFIGURE_ARGS+= --without-x
+.else
+USE_XLIB= yes
+USE_GNOME= gtk12
+PLIST_SUB+= X11=""
+PLIST= ${PKGDIR}/pkg-plist-x11
+.endif
+
+CONFLICTS= vmware-guestd* vmware-tools*
+
+.if defined(WITHOUT_DNET)
+CONFIGURE_ARGS+= --without-dnet
+.else
+BUILD_DEPENDS= ${LOCALBASE}/lib/libdnet.so:${PORTSDIR}/net/libdnet
+.endif
+
+USE_RC_SUBR= vmware-guestd.sh
+
+.include <bsd.port.pre.mk>
+
+post-build:
+ cd ${WRKSRC}/modules && make
+
+post-install:
+ ${MKDIR} -p ${PREFIX}/lib/vmware-tools/modules/drivers
+ ${MKDIR} -p ${PREFIX}/lib/vmware-tools/modules/input
+ ${MKDIR} -p ${PREFIX}/share/vmware-tools
+ ${INSTALL} ${WRKSRC}/guestd/guestd ${PREFIX}/sbin/vmware-guestd
+ ${INSTALL} ${WRKSRC}/checkvm/checkvm ${PREFIX}/sbin/vmware-checkvm
+.if ${OSREL} >= 6
+ ${INSTALL} ${WRKSRC}/hgfsmounter/hgfsmounter ${PREFIX}/sbin/vmware-hgfsmounter
+.endif
+ ${INSTALL} ${WRKSRC}/xferlogs/xferlogs ${PREFIX}/sbin/vmware-xferlogs
+ ${INSTALL_DATA} ${WRKSRC}/modules/freebsd/vmmemctl.ko ${PREFIX}/lib/vmware-tools/modules/drivers/vmmemctl.ko
+ ${INSTALL_DATA} ${WRKSRC}/modules/freebsd/vmxnet.ko ${PREFIX}/lib/vmware-tools/modules/drivers/vmxnet.ko
+.if ${OSREL} >= 6
+ ${INSTALL_DATA} ${WRKSRC}/modules/freebsd/vmhgfs.ko ${PREFIX}/lib/vmware-tools/modules/drivers/vmhgfs.ko
+ ${INSTALL_DATA} ${WRKSRC}/modules/freebsd/vmblock.ko ${PREFIX}/lib/vmware-tools/modules/drivers/vmblock.ko
+.endif
+ ${INSTALL_SCRIPT} ${WRKSRC}/scripts/freebsd/poweroff-vm-default ${PREFIX}/share/vmware-tools/poweroff-vm-default
+ ${INSTALL_SCRIPT} ${WRKSRC}/scripts/freebsd/poweron-vm-default ${PREFIX}/share/vmware-tools/poweron-vm-default
+ ${INSTALL_SCRIPT} ${WRKSRC}/scripts/freebsd/resume-vm-default ${PREFIX}/share/vmware-tools/resume-vm-default
+ ${INSTALL_SCRIPT} ${WRKSRC}/scripts/freebsd/suspend-vm-default ${PREFIX}/share/vmware-tools/suspend-vm-default
+.if !defined(WITHOUT_X11)
+ ${INSTALL} ${WRKSRC}/toolbox/toolbox ${X11BASE}/sbin/vmware-toolbox
+ ${INSTALL} ${WRKSRC}/vmware-user/vmware-user ${X11BASE}/sbin/vmware-user
+.endif
+
+.include <bsd.port.post.mk>
diff --git a/emulators/open-vm-tools/distinfo b/emulators/open-vm-tools/distinfo
new file mode 100644
index 000000000000..04a871e82127
--- /dev/null
+++ b/emulators/open-vm-tools/distinfo
@@ -0,0 +1,2 @@
+MD5 (open-vm-tools-2008.03.19-82724.tar.gz) = 708bdbfd55cbda9ec57e1cd4b7a98579
+SHA256 (open-vm-tools-2008.03.19-82724.tar.gz) = ee725d5908a78dc2f2ab4dd5759281b56d5b500105315fce08e64c5d5ddb9b3c
diff --git a/emulators/open-vm-tools/files/patch-arch b/emulators/open-vm-tools/files/patch-arch
new file mode 100644
index 000000000000..543a1870645e
--- /dev/null
+++ b/emulators/open-vm-tools/files/patch-arch
@@ -0,0 +1,12 @@
+--- configure.orig 2008-03-28 10:36:13.000000000 +0100
++++ configure 2008-03-28 10:36:45.000000000 +0100
+@@ -2167,6 +2167,9 @@
+ x86_64)
+ userSpaceBitness="64"
+ ;;
++ amd64)
++ userSpaceBitness="64"
++ ;;
+ *)
+ { { echo "$as_me:$LINENO: error: Unknown architecture." >&5
+ echo "$as_me: error: Unknown architecture." >&2;}
diff --git a/emulators/open-vm-tools/files/patch-asm b/emulators/open-vm-tools/files/patch-asm
new file mode 100644
index 000000000000..4d6e803d0897
--- /dev/null
+++ b/emulators/open-vm-tools/files/patch-asm
@@ -0,0 +1,55 @@
+--- modules/freebsd/vmhgfs/vm_basic_asm_x86.h.orig 2008-03-19 08:49:45.000000000 +0100
++++ modules/freebsd/vmhgfs/vm_basic_asm_x86.h 2008-03-27 17:40:38.000000000 +0100
+@@ -100,14 +100,14 @@
+ static INLINE void
+ FXSAVE_ES1(uint8 *save)
+ {
+- asm ("fxsave %0 \n"
++ __asm ("fxsave %0 \n"
+ : "=m" (*save));
+ }
+
+ static INLINE void
+ FXRSTOR_ES1(const uint8 *load)
+ {
+- asm ("fxrstor %0 \n"
++ __asm ("fxrstor %0 \n"
+ :
+ : "m" (*load));
+ }
+@@ -117,7 +117,7 @@
+ {
+ uint64 dummy = 0;
+
+- asm ("fnstsw %%ax \n" // Grab x87 ES bit
++ __asm ("fnstsw %%ax \n" // Grab x87 ES bit
+ "bt $7,%%ax \n" // Test ES bit
+ "jnc 1f \n" // Jump if ES=0
+ "fnclex \n" // ES=1. Clear it so fild doesn't trap
+@@ -306,7 +306,7 @@
+ * smart enough, at least in the version we are currently using.
+ */
+ if (shift < 32) {
+- asm("mov %%eax, %2 \n\t" // Save lo(multiplicand) in tmp2
++ __asm("mov %%eax, %2 \n\t" // Save lo(multiplicand) in tmp2
+ "mov %%edx, %%eax \n\t" // Get hi(multiplicand)
+ "mull %4 \n\t" // p2 = hi(multiplicand) * multiplier
+ "xchg %%eax, %2 \n\t" // Save lo(p2) in tmp2, get lo(multiplicand)
+@@ -325,7 +325,7 @@
+ : "cc"
+ );
+ } else {
+- asm("mov %%edx, %2 \n\t" // Save hi(multiplicand) in tmp2
++ __asm("mov %%edx, %2 \n\t" // Save hi(multiplicand) in tmp2
+ "mull %4 \n\t" // p1 = lo(multiplicand) * multiplier
+ "mov %%edx, %1 \n\t" // Save hi(p1) in tmp1
+ "mov %2, %%eax \n\t" // Discard lo(p1), get hi(multiplicand)
+@@ -421,7 +421,7 @@
+
+ /* Written and tested by mann, checked by dbudko and hpreg */
+ /* XXX hpreg suggested some improvements that we haven't converged on yet */
+- asm("mov %%eax, %2\n\t" // Save lo(multiplicand)
++ __asm("mov %%eax, %2\n\t" // Save lo(multiplicand)
+ "mov %%edx, %%eax\n\t" // Get hi(multiplicand)
+ "test %%eax, %%eax\n\t" // Check sign of multiplicand
+ "jl 0f\n\t" // Go if negative
diff --git a/emulators/open-vm-tools/files/patch-cpus b/emulators/open-vm-tools/files/patch-cpus
new file mode 100644
index 000000000000..4fbb6ca6fb9a
--- /dev/null
+++ b/emulators/open-vm-tools/files/patch-cpus
@@ -0,0 +1,30 @@
+--- lib/user/hostinfoPosix.c.orig 2008-03-19 08:49:50.000000000 +0100
++++ lib/user/hostinfoPosix.c 2008-03-27 17:40:38.000000000 +0100
+@@ -68,6 +68,11 @@
+ #endif
+ #endif
+
++#if defined(__FreeBSD__)
++#include <sys/types.h>
++#include <sys/sysctl.h>
++#endif
++
+ #include "vmware.h"
+ #include "hostType.h"
+ #include "hostinfo.h"
+@@ -674,6 +679,15 @@
+ }
+
+ return out;
++#elseif (defined(__FreeBSD__)
++ uint32 out;
++ size_t outSize = sizeof out;
++
++ if (sysctlbyname("kern.smp.cpus", &out, &outSize, NULL, 0) == -1) {
++ return -1;
++ }
++
++ return out;
+ #else
+ static int count = 0;
+
diff --git a/emulators/open-vm-tools/files/patch-freebsd7 b/emulators/open-vm-tools/files/patch-freebsd7
new file mode 100644
index 000000000000..e256614919dc
--- /dev/null
+++ b/emulators/open-vm-tools/files/patch-freebsd7
@@ -0,0 +1,194 @@
+--- hgfsmounter/hgfsmounter.c.orig 2008-03-19 08:49:53.000000000 +0100
++++ hgfsmounter/hgfsmounter.c 2008-03-27 18:28:03.000000000 +0100
+@@ -44,7 +44,9 @@
+ # define MS_SYNCHRONOUS MNT_SYNCHRONOUS
+ # define MS_NOEXEC MNT_NOEXEC
+ # define MS_NOSUID MNT_NOSUID
++#if __FreeBSD_version < 700000
+ # define MS_NODEV MNT_NODEV
++#endif
+ # define MS_UNION MNT_UNION
+ # define MS_ASYNC MNT_ASYNC
+ # define MS_SUIDDIR MNT_SUIDDIR
+@@ -199,8 +201,10 @@
+ printf(" rw mount read-write (default)\n");
+ printf(" nosuid ignore suid/sgid bits\n");
+ printf(" suid allow suid/sgid bits (default)\n");
++#if __FreeBSD_version < 700000
+ printf(" nodev prevent device node access\n");
+ printf(" dev allow device node access (default)\n");
++#endif
+ printf(" noexec prevent program execution\n");
+ printf(" exec allow program execution (default)\n");
+ printf(" sync file writes are synchronous\n");
+@@ -603,12 +607,14 @@
+ } else if (strcmp(key, "suid") == 0) {
+ *flags &= ~MS_NOSUID;
+ LOG("Setting mount option for allowing suid/sgid bits on\n");
++#if __FreeBSD_version < 700000
+ } else if (strcmp(key, "nodev") == 0) { // allow access to device nodes?
+ *flags |= MS_NODEV;
+ LOG("Setting mount option for accessing device nodes off\n");
+ } else if (strcmp(key, "dev") == 0) {
+ *flags &= ~MS_NODEV;
+ LOG("Setting mount option for accessing device nodes on\n");
++#endif
+ } else if (strcmp(key, "noexec") == 0) { // allow program execution?
+ *flags |= MS_NOEXEC;
+ LOG("Setting mount option for program execution off\n");
+--- modules/freebsd/vmxnet/net_compat.h.orig 2008-03-19 08:49:47.000000000 +0100
++++ modules/freebsd/vmxnet/net_compat.h 2008-03-27 18:30:45.000000000 +0100
+@@ -132,7 +132,11 @@
+ #define VXN_IF_FREE(softc) if_free((softc)->arpcom.ac_ifp)
+
+ #define VXN_SC2IFP(softc) ((softc)->arpcom.ac_ifp)
++#if __FreeBSD_version >= 700000
++ #define VXN_SC2ENADDR(softc) ((softc)->vxn_enaddr)
++#else
+ #define VXN_SC2ENADDR(softc) ((softc)->arpcom._ac_enaddr)
++#endif
+
+ #define VXN_PCIR_MAPS PCIR_BARS
+
+--- modules/freebsd/vmxnet/if_vxn.c.orig 2008-03-19 08:49:47.000000000 +0100
++++ modules/freebsd/vmxnet/if_vxn.c 2008-03-27 18:33:12.000000000 +0100
+@@ -108,6 +108,9 @@
+ Vmxnet2_TxRingEntry *vxn_tx_ring;
+ int vxn_tx_pending;
+ int vxn_rings_allocated;
++#if __FreeBSD_version >= 700000
++ u_char vxn_enaddr[ETHER_ADDR_LEN];
++#endif
+ uint32 vxn_max_tx_frags;
+
+ struct mbuf *vxn_tx_buffptr[VMXNET2_MAX_NUM_TX_BUFFERS];
+@@ -299,11 +302,20 @@
+ }
+ #ifdef VXN_MPSAFE
+ error = bus_setup_intr(dev, sc->vxn_irq, INTR_TYPE_NET | INTR_MPSAFE,
++#if __FreeBSD_version >= 700000
++ NULL, vxn_intr, sc, &sc->vxn_intrhand);
++#else
+ vxn_intr, sc, &sc->vxn_intrhand);
++#endif
+ #else
+ error = bus_setup_intr(dev, sc->vxn_irq, INTR_TYPE_NET,
++#if __FreeBSD_version >= 700000
++ NULL, vxn_intr, sc, &sc->vxn_intrhand);
++#else
+ vxn_intr, sc, &sc->vxn_intrhand);
+ #endif
++
++#endif
+ if (error) {
+ printf("vxn%d: couldn't set up irq\n", unit);
+ error = ENXIO;
+--- modules/freebsd/vmhgfs/vnops.c.orig 2008-03-19 08:49:45.000000000 +0100
++++ modules/freebsd/vmhgfs/vnops.c 2008-03-27 18:34:58.000000000 +0100
+@@ -138,7 +138,9 @@
+ .vop_islocked = vop_stdislocked,
+ .vop_kqfilter = vop_stdkqfilter,
+ .vop_lease = VOP_NULL,
++#if __FreeBSD_version < 700000
+ .vop_lock = vop_stdlock,
++#endif
+ .vop_pathconf = VOP_EINVAL,
+ .vop_poll = vop_nopoll,
+ .vop_putpages = vop_stdputpages,
+--- modules/freebsd/vmblock/vnops.c.orig 2008-03-19 08:49:43.000000000 +0100
++++ modules/freebsd/vmblock/vnops.c 2008-03-27 18:43:03.000000000 +0100
+@@ -187,6 +187,9 @@
+ #include <sys/file.h>
+ #include <sys/filedesc.h>
+ #include <sys/kdb.h>
++#if __FreeBSD_version >= 700000
++#include <sys/priv.h>
++#endif
+
+ #include "vmblock_k.h"
+ #include "vmblock.h"
+@@ -210,13 +213,18 @@
+ static vop_inactive_t VMBlockVopInactive;
+ static vop_ioctl_t VMBlockVopIoctl;
+ static vop_islocked_t VMBlockVopIsLocked;
++#if __FreeBSD_version < 700000
+ static vop_lock_t VMBlockVopLock;
++#endif
+ static vop_lookup_t VMBlockVopLookup;
+ static vop_open_t VMBlockVopOpen;
+ static vop_print_t VMBlockVopPrint;
+ static vop_reclaim_t VMBlockVopReclaim;
+ static vop_rename_t VMBlockVopRename;
+ static vop_setattr_t VMBlockVopSetAttr;
++#if __FreeBSD_version >= 700000
++static vop_lock1_t VMBlockVopLock;
++#endif
+ static vop_unlock_t VMBlockVopUnlock;
+
+
+@@ -254,7 +262,9 @@
+ .vop_inactive = VMBlockVopInactive,
+ .vop_ioctl = VMBlockVopIoctl,
+ .vop_islocked = VMBlockVopIsLocked,
++#if __FreeBSD_version < 700000
+ .vop_lock = VMBlockVopLock,
++#endif
+ .vop_lookup = VMBlockVopLookup,
+ .vop_open = VMBlockVopOpen,
+ .vop_print = VMBlockVopPrint,
+@@ -262,6 +272,9 @@
+ .vop_rename = VMBlockVopRename,
+ .vop_setattr = VMBlockVopSetAttr,
+ .vop_strategy = VOP_EOPNOTSUPP,
++#if __FreeBSD_version >= 700000
++ .vop_lock1 = VMBlockVopLock,
++#endif
+ .vop_unlock = VMBlockVopUnlock,
+ };
+
+@@ -720,7 +733,11 @@
+ * readdir() of the filesystem root for non-privileged users.
+ */
+ if ((retval = suser(ap->a_td)) == 0) {
++#if __FreeBSD_version >= 700000
++ fp = ap->a_fp;
++#else
+ fp = ap->a_td->td_proc->p_fd->fd_ofiles[ap->a_fdidx];
++#endif
+ fp->f_ops = &VMBlockFileOps;
+ }
+ } else {
+@@ -1100,7 +1117,11 @@
+ */
+
+ static int
++#if __FreeBSD_version >= 700000
++VMBlockVopLock(struct vop_lock1_args *ap)
++#else
+ VMBlockVopLock(struct vop_lock_args *ap)
++#endif
+ /*
+ struct vop_lock_args {
+ struct vnode *vp; // IN: vnode operand
+--- modules/freebsd/vmhgfs/vfsops.c.orig 2008-03-19 08:49:45.000000000 +0100
++++ modules/freebsd/vmhgfs/vfsops.c 2008-03-27 19:04:20.000000000 +0100
+@@ -29,6 +29,9 @@
+ #include <sys/malloc.h>
+ #include <sys/kernel.h>
+ #include <sys/systm.h>
++#if __FreeBSD_version >= 700000
++#include <sys/priv.h>
++#endif
+
+ #include "hgfs_kernel.h"
+ #include "request.h"
+@@ -64,7 +67,9 @@
+ .vfs_vget = vfs_stdvget,
+ .vfs_fhtovp = vfs_stdfhtovp,
+ .vfs_checkexp = vfs_stdcheckexp,
++#if __FreeBSD_version < 700000
+ .vfs_vptofh = vfs_stdvptofh,
++#endif
+ .vfs_init = HgfsVfsInit,
+ .vfs_uninit = HgfsVfsUninit,
+ .vfs_extattrctl = vfs_stdextattrctl,
diff --git a/emulators/open-vm-tools/files/patch-getpwnam b/emulators/open-vm-tools/files/patch-getpwnam
new file mode 100644
index 000000000000..2b75f17bbf7e
--- /dev/null
+++ b/emulators/open-vm-tools/files/patch-getpwnam
@@ -0,0 +1,40 @@
+--- lib/auth/authPosix.c 2008-03-19 08:49:49.000000000 +0100
++++ lib/auth/authPosix.c 2008-03-27 11:20:20.000000000 +0100
+@@ -264,7 +264,11 @@
+ #endif
+ /* If this point is reached, the user has been authenticated. */
+ setpwent();
++#if defined(__FreeBSD__)
++ pwd = getpwnam(user);
++#else
+ pwd = Posix_Getpwnam(user);
++#endif
+ endpwent();
+
+ #else /* !USE_PAM */
+@@ -274,7 +278,11 @@
+ corresponding #endif below. */
+
+ setpwent(); //XXX can kill?
++#if defined(__FreeBSD__)
++ pwd = getpwnam(user);
++#else
+ pwd = Posix_Getpwnam(user);
++#endif
+ endpwent(); //XXX can kill?
+
+ if (!pwd) {
+--- lib/impersonate/impersonatePosix.c 2008-03-19 08:49:50.000000000 +0100
++++ lib/impersonate/impersonatePosix.c 2008-03-27 11:21:38.000000000 +0100
+@@ -432,7 +432,11 @@
+ struct passwd *ppw = &pw;
+ int error;
+
++#if defined(__FreeBSD__)
++ if ((error = getpwnam_r(user, &pw, buffer, BUFSIZ, &ppw)) != 0 || !ppw) {
++#else
+ if ((error = Posix_Getpwnam_r(user, &pw, buffer, BUFSIZ, &ppw)) != 0 || !ppw) {
++#endif
+ if (error == 0) {
+ error = ENOENT;
+ }
diff --git a/emulators/open-vm-tools/files/patch-header b/emulators/open-vm-tools/files/patch-header
new file mode 100644
index 000000000000..01559ed80a1d
--- /dev/null
+++ b/emulators/open-vm-tools/files/patch-header
@@ -0,0 +1,11 @@
+--- modules/freebsd/vmhgfs/os.h.orig 2008-03-19 08:49:45.000000000 +0100
++++ modules/freebsd/vmhgfs/os.h 2008-03-27 17:40:38.000000000 +0100
+@@ -29,6 +29,8 @@
+
+ #if defined(__FreeBSD__)
+ # include <sys/param.h> // for <everything>
++# include <sys/proc.h>
++# include <sys/condvar.h>
+ # include <sys/lock.h> // for struct mtx
+ # include <sys/mutex.h> // for struct mtx
+ # include <sys/sx.h>
diff --git a/emulators/open-vm-tools/files/patch-vmblock-vfsops.c b/emulators/open-vm-tools/files/patch-vmblock-vfsops.c
new file mode 100644
index 000000000000..5f272a04bc54
--- /dev/null
+++ b/emulators/open-vm-tools/files/patch-vmblock-vfsops.c
@@ -0,0 +1,11 @@
+--- modules/freebsd/vmblock/vfsops.c 2007-11-21 09:10:18.000000000 +0100
++++ modules/freebsd/vmblock/vfsops.c 2007-12-06 12:26:47.000000000 +0100
+@@ -217,7 +217,7 @@
+ */
+ MNT_ILOCK(mp);
+ mp->mnt_flag |= lowerrootvp->v_mount->mnt_flag & MNT_LOCAL;
+-#if BSD_VERSION >= 60
++#if __FreeBSD_version >= 60
+ mp->mnt_kern_flag |= lowerrootvp->v_mount->mnt_kern_flag & MNTK_MPSAFE;
+ #endif
+ MNT_IUNLOCK(mp);
diff --git a/emulators/open-vm-tools/files/vmware-guestd.sh.in b/emulators/open-vm-tools/files/vmware-guestd.sh.in
new file mode 100644
index 000000000000..93a95c0cef68
--- /dev/null
+++ b/emulators/open-vm-tools/files/vmware-guestd.sh.in
@@ -0,0 +1,101 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+# PROVIDE: vmware-guestd
+# REQUIRE: DAEMON
+# BEFORE: LOGIN
+
+PREFIX=%%PREFIX%%
+. %%RC_SUBR%%
+
+# Global
+checkvm_cmd="${PREFIX}/sbin/vmware-checkvm > /dev/null"
+
+# Functions
+vmware_guest_vmmemctl_start()
+{
+ echo 'Loading vmmemctl kernel module.'
+ kldload ${PREFIX}/lib/vmware-tools/modules/drivers/vmmemctl.ko >/dev/null 2>&1
+}
+vmware_guest_vmxnet_start()
+{
+ echo 'Loading vmxnet kernel module.'
+ kldload ${PREFIX}/lib/vmware-tools/modules/drivers/vmxnet.ko >/dev/null 2>&1
+}
+vmware_guest_vmblock_start()
+{
+ echo 'Loading vmblock kernel module.'
+ kldload ${PREFIX}/lib/vmware-tools/modules/drivers/vmblock.ko >/dev/null 2>&1
+}
+vmware_guest_vmhgfs_start()
+{
+ echo 'Loading vmhgfs kernel module.'
+ kldload ${PREFIX}/lib/vmware-tools/modules/drivers/vmhgfs.ko >/dev/null 2>&1
+}
+
+# VMware kernel module: vmmemctl
+name="vmware_guest_vmmemctl"
+rcvar=`set_rcvar`
+start_precmd="${checkvm_cmd}"
+start_cmd="vmware_guest_vmmemctl_start"
+stop_precmd="${checkvm_cmd}"
+stop_cmd=":"
+
+load_rc_config $name
+[ -z "$vmware_guest_vmmemctl_enable" ] && vmware_guest_vmmemctl_enable="NO"
+[ -n "$vmware_guest_kmod_enable" ] && vmware_guest_vmmemctl_enable="$vmware_guest_kmod_enable"
+run_rc_command "$1"
+
+# VMware kernel module: vmxnet
+name="vmware_guest_vmxnet"
+rcvar=`set_rcvar`
+start_precmd="${checkvm_cmd}"
+start_cmd="vmware_guest_vmxnet_start"
+stop_precmd="${checkvm_cmd}"
+stop_cmd=":"
+
+load_rc_config $name
+[ -z "$vmware_guest_vmxnet_enable" ] && vmware_guest_vmxnet_enable="NO"
+run_rc_command "$1"
+
+# VMware kernel module: vmblock
+name="vmware_guest_vmblock"
+rcvar=`set_rcvar`
+start_precmd="${checkvm_cmd}"
+start_cmd="vmware_guest_vmblock_start"
+stop_precmd="${checkvm_cmd}"
+stop_cmd=":"
+
+load_rc_config $name
+[ -z "$vmware_guest_vmblock_enable" ] && vmware_guest_vmblock_enable="NO"
+run_rc_command "$1"
+
+# VMware kernel module: vmhgfs
+name="vmware_guest_vmhgfs"
+rcvar=`set_rcvar`
+start_precmd="${checkvm_cmd}"
+start_cmd="vmware_guest_vmhgfs_start"
+stop_precmd="${checkvm_cmd}"
+stop_cmd=":"
+
+load_rc_config $name
+[ -z "$vmware_guest_vmhgfs_enable" ] && vmware_guest_vmhgfs_enable="NO"
+run_rc_command "$1"
+
+# VMware guest daemon
+name="vmware_guestd"
+rcvar=`set_rcvar`
+start_precmd="${checkvm_cmd}"
+unset start_cmd
+stop_precmd="${checkvm_cmd}"
+unset stop_cmd
+command="${PREFIX}/sbin/vmware-guestd"
+command_args="--halt-command '/sbin/shutdown -p now' >/dev/null 2>&1"
+pidfile="/var/run/${name}.pid"
+
+load_rc_config $name
+[ -z "$vmware_guestd_enable" ] && vmware_guestd_enable="YES"
+[ -z "$vmware_guestd_flags" ] && vmware_guestd_flags="--background ${pidfile}"
+run_rc_command "$1"
diff --git a/emulators/open-vm-tools/pkg-descr b/emulators/open-vm-tools/pkg-descr
new file mode 100644
index 000000000000..de459cc22b5e
--- /dev/null
+++ b/emulators/open-vm-tools/pkg-descr
@@ -0,0 +1,13 @@
+The Open Virtual Machine Tools (open-vm-tools) are the open source
+implementation of VMware Tools. They are a set of guest operating
+system virtualization components that enhance performance and user
+experience of virtual machines. As virtualization technology rapidly
+becomes mainstream, each virtualization solution provider implements
+their own set of tools and utilities to supplement the guest virtual
+machine. However, most of the implementations are proprietary and
+are tied to a specific virtualization platform.
+
+This port replaces the vmware guest ports and the binary only vmware
+tools ports in the ports tree.
+
+WWW: http://open-vm-tools.sourceforge.net
diff --git a/emulators/open-vm-tools/pkg-plist b/emulators/open-vm-tools/pkg-plist
new file mode 100644
index 000000000000..e10588563978
--- /dev/null
+++ b/emulators/open-vm-tools/pkg-plist
@@ -0,0 +1,19 @@
+lib/libguestlib.a
+lib/libguestlib.so
+lib/libguestlib.so.0
+lib/vmware-tools/modules/drivers/vmmemctl.ko
+lib/vmware-tools/modules/drivers/vmxnet.ko
+lib/vmware-tools/modules/drivers/vmhgfs.ko
+lib/vmware-tools/modules/drivers/vmblock.ko
+share/vmware-tools/poweroff-vm-default
+share/vmware-tools/poweron-vm-default
+share/vmware-tools/resume-vm-default
+share/vmware-tools/suspend-vm-default
+sbin/vmware-guestd
+sbin/vmware-checkvm
+sbin/vmware-hgfsmounter
+sbin/vmware-xferlogs
+@dirrm share/vmware-tools
+@dirrmtry lib/vmware-tools/modules/drivers
+@dirrmtry lib/vmware-tools/modules/input
+@unexec if test -f %D/share/vmware-tools/tools.conf; then rm -f %D/share/vmware-tools/tools.conf; fi
diff --git a/emulators/open-vm-tools/pkg-plist-x11 b/emulators/open-vm-tools/pkg-plist-x11
new file mode 100644
index 000000000000..d49a5c5b7c7d
--- /dev/null
+++ b/emulators/open-vm-tools/pkg-plist-x11
@@ -0,0 +1,21 @@
+lib/libguestlib.a
+lib/libguestlib.so
+lib/libguestlib.so.0
+lib/vmware-tools/modules/drivers/vmmemctl.ko
+lib/vmware-tools/modules/drivers/vmxnet.ko
+lib/vmware-tools/modules/drivers/vmhgfs.ko
+lib/vmware-tools/modules/drivers/vmblock.ko
+share/vmware-tools/poweroff-vm-default
+share/vmware-tools/poweron-vm-default
+share/vmware-tools/resume-vm-default
+share/vmware-tools/suspend-vm-default
+sbin/vmware-guestd
+sbin/vmware-checkvm
+sbin/vmware-hgfsmounter
+sbin/vmware-xferlogs
+%%X11%%/sbin/vmware-toolbox
+%%X11%%/sbin/vmware-user
+@dirrm share/vmware-tools
+@dirrmtry lib/vmware-tools/modules/drivers
+@dirrmtry lib/vmware-tools/modules/input
+@unexec if test -f %D/share/vmware-tools/tools.conf; then rm -f %D/share/vmware-tools/tools.conf; fi