0b87790df72dd730ef361a1ce1a8d40ed4d15e10vboxsync# $Id$
0b87790df72dd730ef361a1ce1a8d40ed4d15e10vboxsync## @file
0b87790df72dd730ef361a1ce1a8d40ed4d15e10vboxsync#
0b87790df72dd730ef361a1ce1a8d40ed4d15e10vboxsync
0b87790df72dd730ef361a1ce1a8d40ed4d15e10vboxsync#
772269936494ffaddd0750ba9e28e805ba81398cvboxsync# Copyright (C) 2006-2012 Oracle Corporation
0b87790df72dd730ef361a1ce1a8d40ed4d15e10vboxsync#
0b87790df72dd730ef361a1ce1a8d40ed4d15e10vboxsync# This file is part of VirtualBox Open Source Edition (OSE), as
0b87790df72dd730ef361a1ce1a8d40ed4d15e10vboxsync# available from http://www.virtualbox.org. This file is free software;
0b87790df72dd730ef361a1ce1a8d40ed4d15e10vboxsync# you can redistribute it and/or modify it under the terms of the GNU
0b87790df72dd730ef361a1ce1a8d40ed4d15e10vboxsync# General Public License (GPL) as published by the Free Software
0b87790df72dd730ef361a1ce1a8d40ed4d15e10vboxsync# Foundation, in version 2 as it comes in the "COPYING" file of the
0b87790df72dd730ef361a1ce1a8d40ed4d15e10vboxsync# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
0b87790df72dd730ef361a1ce1a8d40ed4d15e10vboxsync# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
0b87790df72dd730ef361a1ce1a8d40ed4d15e10vboxsync#
0b87790df72dd730ef361a1ce1a8d40ed4d15e10vboxsync
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncSUB_DEPTH = ../../../..
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncinclude $(KBUILD_PATH)/subheader.kmk
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync
68805e5ad6a674c39dfa0172a85949fff3aaea14vboxsyncVBOX_PATH_NAT_SRC := $(PATH_SUB_CURRENT)
68805e5ad6a674c39dfa0172a85949fff3aaea14vboxsync
2622c26c6b4105d944a29c5e2c77b6ef26e10101vboxsyncifdef VBOX_WITH_LWIP_NAT
4acc8b08449be3ee3745e66d85e79f474098870bvboxsync# XXX: do not depend on order
4acc8b08449be3ee3745e66d85e79f474098870bvboxsyncifndef LWIP_SOURCES
68805e5ad6a674c39dfa0172a85949fff3aaea14vboxsync include $(PATH_SUB_CURRENT)/../../Devices/Network/lwip-new/Makefile.kmk
4acc8b08449be3ee3745e66d85e79f474098870bvboxsyncendif
2622c26c6b4105d944a29c5e2c77b6ef26e10101vboxsync
1b23da133a9fa48adc1ea464ef9f17ceeacf6742vboxsyncifdef VBOX_WITH_HARDENING
1b23da133a9fa48adc1ea464ef9f17ceeacf6742vboxsync PROGRAMS += VBoxNetLwipNATHardened
1b23da133a9fa48adc1ea464ef9f17ceeacf6742vboxsync DLLS += VBoxNetLwipNAT
1b23da133a9fa48adc1ea464ef9f17ceeacf6742vboxsyncelse
1b23da133a9fa48adc1ea464ef9f17ceeacf6742vboxsync PROGRAMS += VBoxNetLwipNAT
1b23da133a9fa48adc1ea464ef9f17ceeacf6742vboxsyncendif
1b23da133a9fa48adc1ea464ef9f17ceeacf6742vboxsync
1b23da133a9fa48adc1ea464ef9f17ceeacf6742vboxsyncifdef VBOX_WITH_HARDENING
1b23da133a9fa48adc1ea464ef9f17ceeacf6742vboxsync VBoxNetLwipNATHardened_SOURCES += VBoxNetNATHardened.cpp
dcea28d87546913d664d332092030127558b642cvboxsync VBoxNetLwipNATHardened_SOURCES.win = $(VBoxNetLwipNAT_0_OUTDIR)/VBoxNetLwipNAT-icon.rc
20fc4a350a4a8e56ffaac6cf57dcd677a7ac36c5vboxsync VBoxNetLwipNATHardened_DEFS += SERVICE_NAME=\"VBoxNetNAT\"
38ce01f0174eaa361f03608d5576e517a615a9dbvboxsync VBoxNetLwipNATHardened_TEMPLATE=VBOXR3HARDENEDEXE
20fc4a350a4a8e56ffaac6cf57dcd677a7ac36c5vboxsync VBoxNetLwipNATHardened_NAME = VBoxNetNAT
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync VBoxNetLwipNATHardened_LDFLAGS.win = /SUBSYSTEM:windows
1b23da133a9fa48adc1ea464ef9f17ceeacf6742vboxsyncendif
1b23da133a9fa48adc1ea464ef9f17ceeacf6742vboxsync
2622c26c6b4105d944a29c5e2c77b6ef26e10101vboxsyncVBoxNetLwipNAT_TEMPLATE =
38ce01f0174eaa361f03608d5576e517a615a9dbvboxsyncVBoxNetLwipNAT_TEMPLATE := VBOXMAIN$(if-expr defined(VBOX_WITH_HARDENING),DLL,CLIENTEXE)
c550c12592dedfe03ef31ce25305c688073dc72cvboxsyncVBoxNetLwipNAT_NAME = VBoxNetNAT
a24a5c1de771bb93e5b0fe0adb3e16dc6d835838vboxsyncVBoxNetLwipNAT_DEFS += ${LWIP_DEFS} IPv6
2fa7e677ac62fdf33911319f0f558306a19d477cvboxsync# VBoxNetLwipNAT_DEFS.linux += WITH_VALGRIND # instrument lwip memp.c
177727c096bdc6d5749f5f95c7307d9e6af5653dvboxsyncVBoxNetLwipNAT_DEFS.win += VBOX_COM_OUTOFPROC_MODULE _WIN32_WINNT=0x501 # Windows XP
2622c26c6b4105d944a29c5e2c77b6ef26e10101vboxsyncVBoxNetLwipNAT_SOURCES += VBoxNetLwipNAT.cpp \
68805e5ad6a674c39dfa0172a85949fff3aaea14vboxsync $(VBOX_PATH_NAT_SRC)/../NetLib/VBoxNetBaseService.cpp \
68805e5ad6a674c39dfa0172a85949fff3aaea14vboxsync $(VBOX_PATH_NAT_SRC)/../NetLib/VBoxNetPortForwardString.cpp \
68805e5ad6a674c39dfa0172a85949fff3aaea14vboxsync $(VBOX_PATH_NAT_SRC)/../NetLib/VBoxNetIntIf.cpp \
68805e5ad6a674c39dfa0172a85949fff3aaea14vboxsync $(VBOX_PATH_NAT_SRC)/../NetLib/VBoxNetUDP.cpp \
68805e5ad6a674c39dfa0172a85949fff3aaea14vboxsync $(VBOX_PATH_NAT_SRC)/../NetLib/VBoxNetARP.cpp \
68805e5ad6a674c39dfa0172a85949fff3aaea14vboxsync $(VBOX_PATH_NAT_SRC)/../NetLib/ComHostUtils.cpp
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync
2622c26c6b4105d944a29c5e2c77b6ef26e10101vboxsyncVBoxNetLwipNAT_LIBS = \
2622c26c6b4105d944a29c5e2c77b6ef26e10101vboxsync $(LIB_RUNTIME)
6418539e7e63a36f6c1f2e6170e4e881a3693947vboxsyncVBoxNetLwipNAT_LIBS.solaris += socket nsl
2622c26c6b4105d944a29c5e2c77b6ef26e10101vboxsyncVBoxNetLwipNAT_LDFLAGS.win = /SUBSYSTEM:windows
2622c26c6b4105d944a29c5e2c77b6ef26e10101vboxsync
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync# Convince Solaris headers to expose socket stuff we need.
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync#
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync# Setting _XOPEN_SOURCE to either 500 or 600 would always work, but
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync# <sys/feature_tests.h> insists that 600 requires C99 and so it
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync# explodes for older g++. It also insists that 500 is NOT to be used
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync# with C99.
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync#
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync# Newer g++ in C++11 mode (formerly known as C++0x) needs 600, so it
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync# employs sleight of hand to pretend it's C99 to keep feature test
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync# happy.
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync#
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync# Compile the C code with settings that match g++. This probably
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync# should be centralized so that whole codebase uses consistent
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync# settings.
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsyncifeq ($(KBUILD_TARGET),solaris)
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync ifneq ($(VBOX_GCC_VERSION_CXX),)
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync ifneq ($(int-ge $(VBOX_GCC_VERSION_CXX),40600),)
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync # we compile C++ code with -std=c++0x / -std=c++11
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync VBoxNetLwipNAT_CFLAGS.solaris += -std=c99
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync VBoxNetLwipNAT_DEFS.solaris += _XOPEN_SOURCE=600
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync else
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync VBoxNetLwipNAT_DEFS.solaris += _XOPEN_SOURCE=500
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync endif
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync endif
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsync VBoxNetLwipNAT_DEFS.solaris += __EXTENSIONS__=1
6378953a7e2b7787c4955fdf1a88710f5f98c769vboxsyncendif
2ac7f49e11a553a348be2be368bed8fd942820c4vboxsync
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsyncVBoxNetLwipNAT_SOURCES += \
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsync proxy_pollmgr.c \
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsync proxy_rtadvd.c \
f0c792e78a8bf77c28c7814441e514bea7c5362bvboxsync proxy.c \
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsync pxremap.c \
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsync pxtcp.c \
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsync pxudp.c \
2d5c2f8b7f8e7cfeb5eb272b1242e4258dcd64bevboxsync pxdns.c \
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsync fwtcp.c \
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsync fwudp.c \
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsync portfwd.c \
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsync proxy_dhcp6ds.c \
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsync proxy_tftpd.c
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsync
9f8403c919ff34010f07a4e697c619fbfe832555vboxsyncifeq ($(KBUILD_TARGET),win)
9f8403c919ff34010f07a4e697c619fbfe832555vboxsync # unprivileged Icmp API
9f8403c919ff34010f07a4e697c619fbfe832555vboxsync VBoxNetLwipNAT_SOURCES += pxping_win.c
9f8403c919ff34010f07a4e697c619fbfe832555vboxsyncelse
9f8403c919ff34010f07a4e697c619fbfe832555vboxsync # raw sockets
9f8403c919ff34010f07a4e697c619fbfe832555vboxsync VBoxNetLwipNAT_SOURCES += pxping.c
9f8403c919ff34010f07a4e697c619fbfe832555vboxsyncendif
9f8403c919ff34010f07a4e697c619fbfe832555vboxsync
c12ea5636f55fa8c4d8de7d0ccb870c5f8bcc231vboxsync# ifeq ($(VBOX_WITH_HARDENING),)
c12ea5636f55fa8c4d8de7d0ccb870c5f8bcc231vboxsync# ifn1of ($(KBUILD_TARGET), darwin win)
c12ea5636f55fa8c4d8de7d0ccb870c5f8bcc231vboxsync# # helper for debugging unprivileged
5eb4b75eda15627221295b5a3edf2d0622b4da28vboxsync# VBoxNetLwipNAT_DEFS += VBOX_RAWSOCK_DEBUG_HELPER
c12ea5636f55fa8c4d8de7d0ccb870c5f8bcc231vboxsync# VBoxNetLwipNAT_SOURCES += getrawsock.c
c12ea5636f55fa8c4d8de7d0ccb870c5f8bcc231vboxsync# endif
c12ea5636f55fa8c4d8de7d0ccb870c5f8bcc231vboxsync# endif
c12ea5636f55fa8c4d8de7d0ccb870c5f8bcc231vboxsync
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsyncVBoxNetLwipNAT_SOURCES.darwin += rtmon_bsd.c
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsyncVBoxNetLwipNAT_SOURCES.freebsd += rtmon_bsd.c
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsyncVBoxNetLwipNAT_SOURCES.linux += rtmon_linux.c
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsyncVBoxNetLwipNAT_SOURCES.solaris += rtmon_bsd.c
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsyncVBoxNetLwipNAT_SOURCES.win += rtmon_win.c
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsync
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsyncVBoxNetLwipNAT_SOURCES.win += \
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsync RTWinPoll.cpp \
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsync RTWinSocketPair.cpp
a218a3f92594b5f2beb9c8298c6fe6e3a8e502f8vboxsync
60ab040676f3fed809de7b4bb12233b1b4a96136vboxsyncVBoxNetLwipNAT_INCS += . # for lwipopts.h
a3d9dd392ec76233e30f01423ed5755e6187618evboxsync$(eval $(call def_vbox_lwip_public, \
68805e5ad6a674c39dfa0172a85949fff3aaea14vboxsync VBoxNetLwipNAT, $(PATH_SUB_CURRENT)/../../Devices/Network/lwip-new))
2622c26c6b4105d944a29c5e2c77b6ef26e10101vboxsyncendif
2622c26c6b4105d944a29c5e2c77b6ef26e10101vboxsync
68805e5ad6a674c39dfa0172a85949fff3aaea14vboxsyncifeq ($(KBUILD_TARGET),win)
d86f28d9c698e2ec000650267e4599177ceaeac3vboxsync# Icon include file.
68805e5ad6a674c39dfa0172a85949fff3aaea14vboxsyncVBoxNetLwipNAT_SOURCES += VBoxNetNAT.rc
5c3a81a007ccffcd30c91a085725d1d78b8c1053vboxsyncVBoxNetNAT.rc_INCS = $(VBoxNetLwipNAT_0_OUTDIR)
f56ae76497dcd1260c5acd63943de5326b75cfa5vboxsyncVBoxNetNAT.rc_DEPS = $(VBoxNetLwipNAT_0_OUTDIR)/VBoxNetLwipNAT-icon.rc
68805e5ad6a674c39dfa0172a85949fff3aaea14vboxsyncVBoxNetNAT.rc_CLEAN = $(VBoxNetLwipNAT_0_OUTDIR)/VBoxNetLwipNAT-icon.rc
d86f28d9c698e2ec000650267e4599177ceaeac3vboxsync$$(VBoxNetLwipNAT_0_OUTDIR)/VBoxNetLwipNAT-icon.rc: $(VBOX_WINDOWS_ICON_FILE) $$(VBoxNetLwipNAT_DEFPATH)/Makefile.kmk | $$(dir $$@)
d86f28d9c698e2ec000650267e4599177ceaeac3vboxsync $(RM) -f $@
d86f28d9c698e2ec000650267e4599177ceaeac3vboxsync $(APPEND) $@ 'IDI_VIRTUALBOX ICON DISCARDABLE "$(subst /,\\,$(VBOX_WINDOWS_ICON_FILE))"'
68805e5ad6a674c39dfa0172a85949fff3aaea14vboxsyncendif # win
d86f28d9c698e2ec000650267e4599177ceaeac3vboxsync
772269936494ffaddd0750ba9e28e805ba81398cvboxsyncinclude $(FILE_KBUILD_SUB_FOOTER)