From 148619f0ba836ff894185663633556dd04700a60 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 28 Oct 2013 09:33:32 -0400 Subject: [PATCH] Make tap build on OSX 10.9, though not in a way that is easy for users. Instead package binaries. --- Makefile.mac | 16 ++++---- ext/bin/tap-mac/tap.kext/Contents/Info.plist | 36 ++++++++++++++++++ ext/bin/tap-mac/tap.kext/Contents/MacOS/tap | Bin 0 -> 81288 bytes {mac-tap => tap-mac}/README.txt | 0 {mac-tap => tap-mac}/tuntap/Changelog | 0 {mac-tap => tap-mac}/tuntap/INSTALL | 0 {mac-tap => tap-mac}/tuntap/Makefile | 0 {mac-tap => tap-mac}/tuntap/README | 0 {mac-tap => tap-mac}/tuntap/README.installer | 0 tap-mac/tuntap/README.zerotier-build | 18 +++++++++ .../tuntap/pkg/res/License.rtfd/TXT.rtf | 0 .../tuntap/pkg/res/Welcome.rtfd/TXT.rtf | 0 .../pkg/res/Welcome.rtfd/paypal_button.gif | Bin .../pkg/scripts/startup_item_tap/postflight | 0 .../pkg/scripts/startup_item_tun/postflight | 0 .../tuntap/pkg/scripts/tap/postflight | 0 .../tuntap/pkg/scripts/tun/postflight | 0 .../pkg/tuntap.pmdoc/01tun-contents.xml | 0 .../tuntap/pkg/tuntap.pmdoc/01tun.xml | 0 .../pkg/tuntap.pmdoc/02tap-contents.xml | 0 .../tuntap/pkg/tuntap.pmdoc/02tap.xml | 0 .../pkg/tuntap.pmdoc/03tap-contents.xml | 0 .../tuntap/pkg/tuntap.pmdoc/03tap.xml | 0 .../pkg/tuntap.pmdoc/04tun-contents.xml | 0 .../tuntap/pkg/tuntap.pmdoc/04tun.xml | 0 .../tuntap/pkg/tuntap.pmdoc/index.xml | 0 {mac-tap => tap-mac}/tuntap/src/lock.cc | 0 {mac-tap => tap-mac}/tuntap/src/lock.h | 0 {mac-tap => tap-mac}/tuntap/src/mem.cc | 0 {mac-tap => tap-mac}/tuntap/src/mem.h | 0 .../tuntap/src/tap/Info.plist | 0 {mac-tap => tap-mac}/tuntap/src/tap/Makefile | 6 ++- {mac-tap => tap-mac}/tuntap/src/tap/kmod.cc | 0 {mac-tap => tap-mac}/tuntap/src/tap/tap.cc | 0 {mac-tap => tap-mac}/tuntap/src/tap/tap.h | 3 +- .../tuntap/src/tun/Info.plist | 0 {mac-tap => tap-mac}/tuntap/src/tun/Makefile | 0 {mac-tap => tap-mac}/tuntap/src/tun/kmod.cc | 0 {mac-tap => tap-mac}/tuntap/src/tun/tun.cc | 0 {mac-tap => tap-mac}/tuntap/src/tun/tun.h | 0 .../tuntap/src/tun/tun_inet6_proto.c | 0 .../tuntap/src/tun/tun_inet_proto.c | 0 .../tuntap/src/tun/tun_ioctls.h | 0 {mac-tap => tap-mac}/tuntap/src/tuntap.cc | 0 {mac-tap => tap-mac}/tuntap/src/tuntap.h | 0 {mac-tap => tap-mac}/tuntap/src/tuntap_mgr.cc | 0 {mac-tap => tap-mac}/tuntap/src/util.h | 0 .../English.lproj/Localizable.strings | 0 .../startup_item/tap/StartupParameters.plist | 0 .../tuntap/startup_item/tap/tap | 0 .../English.lproj/Localizable.strings | 0 .../startup_item/tun/StartupParameters.plist | 0 .../tuntap/startup_item/tun/tun | 0 .../tuntap/test/tuntap/__init__.py | 0 .../tuntap/test/tuntap/char_dev_harness.py | 0 .../tuntap/test/tuntap/interface_harness.py | 0 .../tuntap/test/tuntap/ioctl.py | 0 .../tuntap/test/tuntap/packet.py | 0 .../tuntap/test/tuntap/packet_codec.py | 0 .../tuntap/test/tuntap/packet_reader.py | 0 .../tuntap/test/tuntap/route.py | 0 .../tuntap/test/tuntap/sockaddr.py | 0 .../tuntap/test/tuntap/test_char_dev.py | 0 .../tuntap/test/tuntap/test_interface.py | 0 .../tuntap/test/tuntap/test_ip.py | 0 .../tuntap/test/tuntap/tun_tap_harness.py | 0 .../tuntap/test/tuntap/tun_tap_test_case.py | 0 .../tuntap/test/tuntap/tuntap_tests.py | 0 68 files changed, 67 insertions(+), 12 deletions(-) create mode 100644 ext/bin/tap-mac/tap.kext/Contents/Info.plist create mode 100755 ext/bin/tap-mac/tap.kext/Contents/MacOS/tap rename {mac-tap => tap-mac}/README.txt (100%) rename {mac-tap => tap-mac}/tuntap/Changelog (100%) rename {mac-tap => tap-mac}/tuntap/INSTALL (100%) rename {mac-tap => tap-mac}/tuntap/Makefile (100%) rename {mac-tap => tap-mac}/tuntap/README (100%) rename {mac-tap => tap-mac}/tuntap/README.installer (100%) create mode 100644 tap-mac/tuntap/README.zerotier-build rename {mac-tap => tap-mac}/tuntap/pkg/res/License.rtfd/TXT.rtf (100%) rename {mac-tap => tap-mac}/tuntap/pkg/res/Welcome.rtfd/TXT.rtf (100%) rename {mac-tap => tap-mac}/tuntap/pkg/res/Welcome.rtfd/paypal_button.gif (100%) rename {mac-tap => tap-mac}/tuntap/pkg/scripts/startup_item_tap/postflight (100%) rename {mac-tap => tap-mac}/tuntap/pkg/scripts/startup_item_tun/postflight (100%) rename {mac-tap => tap-mac}/tuntap/pkg/scripts/tap/postflight (100%) rename {mac-tap => tap-mac}/tuntap/pkg/scripts/tun/postflight (100%) rename {mac-tap => tap-mac}/tuntap/pkg/tuntap.pmdoc/01tun-contents.xml (100%) rename {mac-tap => tap-mac}/tuntap/pkg/tuntap.pmdoc/01tun.xml (100%) rename {mac-tap => tap-mac}/tuntap/pkg/tuntap.pmdoc/02tap-contents.xml (100%) rename {mac-tap => tap-mac}/tuntap/pkg/tuntap.pmdoc/02tap.xml (100%) rename {mac-tap => tap-mac}/tuntap/pkg/tuntap.pmdoc/03tap-contents.xml (100%) rename {mac-tap => tap-mac}/tuntap/pkg/tuntap.pmdoc/03tap.xml (100%) rename {mac-tap => tap-mac}/tuntap/pkg/tuntap.pmdoc/04tun-contents.xml (100%) rename {mac-tap => tap-mac}/tuntap/pkg/tuntap.pmdoc/04tun.xml (100%) rename {mac-tap => tap-mac}/tuntap/pkg/tuntap.pmdoc/index.xml (100%) rename {mac-tap => tap-mac}/tuntap/src/lock.cc (100%) rename {mac-tap => tap-mac}/tuntap/src/lock.h (100%) rename {mac-tap => tap-mac}/tuntap/src/mem.cc (100%) rename {mac-tap => tap-mac}/tuntap/src/mem.h (100%) rename {mac-tap => tap-mac}/tuntap/src/tap/Info.plist (100%) rename {mac-tap => tap-mac}/tuntap/src/tap/Makefile (88%) rename {mac-tap => tap-mac}/tuntap/src/tap/kmod.cc (100%) rename {mac-tap => tap-mac}/tuntap/src/tap/tap.cc (100%) rename {mac-tap => tap-mac}/tuntap/src/tap/tap.h (98%) rename {mac-tap => tap-mac}/tuntap/src/tun/Info.plist (100%) rename {mac-tap => tap-mac}/tuntap/src/tun/Makefile (100%) rename {mac-tap => tap-mac}/tuntap/src/tun/kmod.cc (100%) rename {mac-tap => tap-mac}/tuntap/src/tun/tun.cc (100%) rename {mac-tap => tap-mac}/tuntap/src/tun/tun.h (100%) rename {mac-tap => tap-mac}/tuntap/src/tun/tun_inet6_proto.c (100%) rename {mac-tap => tap-mac}/tuntap/src/tun/tun_inet_proto.c (100%) rename {mac-tap => tap-mac}/tuntap/src/tun/tun_ioctls.h (100%) rename {mac-tap => tap-mac}/tuntap/src/tuntap.cc (100%) rename {mac-tap => tap-mac}/tuntap/src/tuntap.h (100%) rename {mac-tap => tap-mac}/tuntap/src/tuntap_mgr.cc (100%) rename {mac-tap => tap-mac}/tuntap/src/util.h (100%) rename {mac-tap => tap-mac}/tuntap/startup_item/tap/Resources/English.lproj/Localizable.strings (100%) rename {mac-tap => tap-mac}/tuntap/startup_item/tap/StartupParameters.plist (100%) rename {mac-tap => tap-mac}/tuntap/startup_item/tap/tap (100%) rename {mac-tap => tap-mac}/tuntap/startup_item/tun/Resources/English.lproj/Localizable.strings (100%) rename {mac-tap => tap-mac}/tuntap/startup_item/tun/StartupParameters.plist (100%) rename {mac-tap => tap-mac}/tuntap/startup_item/tun/tun (100%) rename {mac-tap => tap-mac}/tuntap/test/tuntap/__init__.py (100%) rename {mac-tap => tap-mac}/tuntap/test/tuntap/char_dev_harness.py (100%) rename {mac-tap => tap-mac}/tuntap/test/tuntap/interface_harness.py (100%) rename {mac-tap => tap-mac}/tuntap/test/tuntap/ioctl.py (100%) rename {mac-tap => tap-mac}/tuntap/test/tuntap/packet.py (100%) rename {mac-tap => tap-mac}/tuntap/test/tuntap/packet_codec.py (100%) rename {mac-tap => tap-mac}/tuntap/test/tuntap/packet_reader.py (100%) rename {mac-tap => tap-mac}/tuntap/test/tuntap/route.py (100%) rename {mac-tap => tap-mac}/tuntap/test/tuntap/sockaddr.py (100%) rename {mac-tap => tap-mac}/tuntap/test/tuntap/test_char_dev.py (100%) rename {mac-tap => tap-mac}/tuntap/test/tuntap/test_interface.py (100%) rename {mac-tap => tap-mac}/tuntap/test/tuntap/test_ip.py (100%) rename {mac-tap => tap-mac}/tuntap/test/tuntap/tun_tap_harness.py (100%) rename {mac-tap => tap-mac}/tuntap/test/tuntap/tun_tap_test_case.py (100%) rename {mac-tap => tap-mac}/tuntap/test/tuntap/tuntap_tests.py (100%) diff --git a/Makefile.mac b/Makefile.mac index 335357984..25bfab110 100644 --- a/Makefile.mac +++ b/Makefile.mac @@ -35,18 +35,18 @@ idtool: $(OBJS) $(CXX) $(CXXFLAGS) -o zerotier-idtool idtool.cpp $(OBJS) $(LIBS) $(STRIP) zerotier-idtool -mac-tap: FORCE - cd mac-tap/tuntap ; make tap.kext +#mac-tap: FORCE +# cd mac-tap/tuntap ; make tap.kext -install-mac-tap: FORCE - mkdir -p /Library/Application\ Support/ZeroTier/One - rm -rf /Library/Application\ Support/ZeroTier/One/tap.kext - cp -R mac-tap/tuntap/tap.kext /Library/Application\ Support/ZeroTier/One - chown -R root:wheel /Library/Application\ Support/ZeroTier/One/tap.kext +#install-mac-tap: FORCE +# mkdir -p /Library/Application\ Support/ZeroTier/One +# rm -rf /Library/Application\ Support/ZeroTier/One/tap.kext +# cp -R mac-tap/tuntap/tap.kext /Library/Application\ Support/ZeroTier/One +# chown -R root:wheel /Library/Application\ Support/ZeroTier/One/tap.kext clean: rm -rf *.dSYM rm -f $(OBJS) zerotier-* - cd mac-tap/tuntap ; make clean + cd tap-mac/tuntap ; make clean FORCE: diff --git a/ext/bin/tap-mac/tap.kext/Contents/Info.plist b/ext/bin/tap-mac/tap.kext/Contents/Info.plist new file mode 100644 index 000000000..3cc41b073 --- /dev/null +++ b/ext/bin/tap-mac/tap.kext/Contents/Info.plist @@ -0,0 +1,36 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + tap + CFBundleIdentifier + com.zerotier.tap + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + tap + CFBundlePackageType + KEXT + CFBundleShortVersionString + 20111101 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + OSBundleLibraries + + com.apple.kpi.mach + 8.0 + com.apple.kpi.bsd + 8.0 + com.apple.kpi.libkern + 8.0 + com.apple.kpi.unsupported + 8.0 + + + + diff --git a/ext/bin/tap-mac/tap.kext/Contents/MacOS/tap b/ext/bin/tap-mac/tap.kext/Contents/MacOS/tap new file mode 100755 index 0000000000000000000000000000000000000000..d464702f4b5a81b492ac7a46bd3668e7030df48c GIT binary patch literal 81288 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