Skip to content

Commit b774852

Browse files
committed
Draft for freeBSD port
1 parent 700f7fd commit b774852

14 files changed

Lines changed: 461 additions & 78 deletions

.github/workflows/freebsd.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
name: FreeBSD interop tests
2+
3+
on:
4+
push:
5+
branches: [ 'master', 'main', 'release/**' ]
6+
pull_request:
7+
branches: [ '*' ]
8+
9+
jobs:
10+
freebsd_test:
11+
runs-on: ubuntu-latest
12+
13+
steps:
14+
- uses: actions/checkout@v4
15+
with:
16+
submodules: true
17+
18+
- name: Build and run tests on FreeBSD
19+
uses: vmactions/freebsd-vm@v0
20+
with:
21+
release: '14.1'
22+
run: |
23+
pkg update -f
24+
pkg install -y gmake gcc wolfssl
25+
kldload if_tap || true
26+
sysctl net.link.tap.up_on_open=1 || true
27+
cd /github/workspace
28+
gmake build/test-evloop build/test-wolfssl build/test-ttl-expired
29+
./build/test-evloop
30+
./build/test-wolfssl
31+
./build/test-ttl-expired

Makefile

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,19 @@ CFLAGS:=-Wall -Werror -Wextra -I. -D_GNU_SOURCE
33
CFLAGS+=-g -ggdb -Wdeclaration-after-statement
44
LDFLAGS+=-pthread
55

6+
UNAME_S:=$(shell uname -s)
7+
UNAME_LC:=$(shell echo $(UNAME_S) | tr 'A-Z' 'a-z')
8+
ifeq ($(UNAME_S),FreeBSD)
9+
CFLAGS+=-I/usr/local/include
10+
LDFLAGS+=-L/usr/local/lib
11+
endif
12+
TAP_SRC:=src/port/posix/tap_$(UNAME_LC).c
13+
ifeq ($(wildcard $(TAP_SRC)),)
14+
TAP_SRC:=src/port/posix/tap_linux.c
15+
endif
16+
TAP_OBJ:=$(patsubst src/%.c,build/%.o,$(TAP_SRC))
17+
TAP_PIE_OBJ:=$(patsubst src/%.c,build/pie/%.o,$(TAP_SRC))
18+
619
CPPCHECK=cppcheck
720
CPPCHECK_FLAGS=--enable=warning,performance,portability,missingInclude \
821
--suppress=missingIncludeSystem \
@@ -21,11 +34,16 @@ CPPCHECK_FLAGS=--enable=warning,performance,portability,missingInclude \
2134
--error-exitcode=1 --xml --xml-version=2
2235

2336
OBJ=build/wolfip.o \
24-
build/port/posix/linux_tap.o
37+
$(TAP_OBJ)
38+
39+
HAVE_WOLFSSL:=$(shell printf "#include <wolfssl/options.h>\nint main(void){return 0;}\n" | $(CC) $(CFLAGS) -x c - -c -o /dev/null 2>/dev/null && echo 1)
40+
ifeq ($(HAVE_WOLFSSL),)
41+
$(error wolfSSL headers not found. Please install wolfSSL or adjust include paths)
42+
endif
2543

2644
EXE=build/tcpecho build/tcp_netcat_poll build/tcp_netcat_select \
2745
build/test-evloop build/test-dns build/test-wolfssl-forwarding \
28-
build/test-ttl-expired build/test-wolfssl
46+
build/test-ttl-expired build/test-wolfssl build/test-httpd
2947
LIB=libwolfip.so
3048

3149
PREFIX=/usr/local
@@ -44,7 +62,7 @@ libtcpip.a: $(OBJ)
4462

4563
libwolfip.so:CFLAGS+=-fPIC
4664
libwolfip.so: build/pie/port/posix/bsd_socket.o build/pie/wolfip.o \
47-
build/pie/port/posix/linux_tap.o
65+
$(TAP_PIE_OBJ)
4866
@mkdir -p `dirname $@` || true
4967
@echo "[LD] $@"
5068
@$(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ -Wl,--start-group $(^) -Wl,--end-group
@@ -62,11 +80,11 @@ asan:LDFLAGS+=-static-libasan
6280
# Test
6381

6482
unit:LDFLAGS+=-lcheck -lm -lpthread -lrt -ldl -lsubunit
65-
build/test-evloop: $(OBJ) build/test/test_linux_eventloop.o
83+
build/test-evloop: $(OBJ) build/test/test_eventloop.o
6684
@echo "[LD] $@"
6785
@$(CC) $(CFLAGS) $(LDFLAGS) -o $@ -Wl,--start-group $(^) -Wl,--end-group
6886

69-
build/test-dns: $(OBJ) build/test/test_linux_dhcp_dns.o
87+
build/test-dns: $(OBJ) build/test/test_dhcp_dns.o
7088
@echo "[LD] $@"
7189
@$(CC) $(CFLAGS) $(LDFLAGS) -o $@ -Wl,--start-group $(^) -Wl,--end-group
7290

@@ -87,12 +105,11 @@ build/test-wolfssl:CFLAGS+=-Wno-cpp -DWOLFSSL_DEBUG -DWOLFSSL_WOLFIP
87105
build/test-httpd:CFLAGS+=-Wno-cpp -DWOLFSSL_DEBUG -DWOLFSSL_WOLFIP -Isrc/http
88106
build/test-wolfssl-forwarding:CFLAGS+=-Wno-cpp -DWOLFSSL_DEBUG -DWOLFSSL_WOLFIP -DWOLFIP_MAX_INTERFACES=2 -DWOLFIP_ENABLE_FORWARDING=1
89107

90-
91108
build/test-wolfssl: $(OBJ) build/test/test_native_wolfssl.o build/port/wolfssl_io.o build/certs/server_key.o build/certs/ca_cert.o build/certs/server_cert.o
92109
@echo "[LD] $@"
93110
@$(CC) $(CFLAGS) $(LDFLAGS) -o $@ -Wl,--start-group $(^) -lwolfssl -Wl,--end-group
94111

95-
build/test-wolfssl-forwarding: build/test/test_wolfssl_forwarding.o build/test/wolfip_forwarding.o build/port/posix/linux_tap.o build/port/wolfssl_io.o build/certs/server_key.o build/certs/ca_cert.o build/certs/server_cert.o
112+
build/test-wolfssl-forwarding: build/test/test_wolfssl_forwarding.o build/test/wolfip_forwarding.o $(TAP_OBJ) build/port/wolfssl_io.o build/certs/server_key.o build/certs/ca_cert.o build/certs/server_cert.o
96113
@echo "[LD] $@"
97114
@$(CC) $(CFLAGS) $(LDFLAGS) -o $@ -Wl,--start-group $(^) -lwolfssl -Wl,--end-group
98115

config.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,6 @@
2929

3030
/* Linux test configuration */
3131
#define WOLFIP_IP "10.10.10.2"
32-
#define LINUX_IP "10.10.10.1"
32+
#define HOST_STACK_IP "10.10.10.1"
3333

3434
#endif

src/port/posix/bsd_socket.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -532,8 +532,8 @@ int poll(struct pollfd *fds, nfds_t nfds, int timeout) {
532532

533533

534534
/* Catch-all function to initialize a new tap device as the network interface.
535-
* This is defined in port/linux.c
536-
* */
535+
* Implemented in port/posix/tap_*.c
536+
*/
537537
extern int tap_init(struct wolfIP_ll_dev *dev, const char *name, uint32_t host_ip);
538538

539539
void *wolfIP_sock_posix_ip_loop(void *arg) {
@@ -552,12 +552,12 @@ void *wolfIP_sock_posix_ip_loop(void *arg) {
552552
}
553553

554554
void __attribute__((constructor)) init_wolfip_posix() {
555-
struct in_addr linux_ip;
555+
struct in_addr host_stack_ip;
556556
struct wolfIP_ll_dev *tapdev;
557557
pthread_t wolfIP_thread;
558558
if (IPSTACK)
559559
return;
560-
inet_aton(LINUX_IP, &linux_ip);
560+
inet_aton(HOST_STACK_IP, &host_stack_ip);
561561
swap_socketcall(socket, "socket");
562562
swap_socketcall(bind, "bind");
563563
swap_socketcall(listen, "listen");
@@ -581,14 +581,13 @@ void __attribute__((constructor)) init_wolfip_posix() {
581581
pthread_mutex_init(&wolfIP_mutex, NULL);
582582
wolfIP_init_static(&IPSTACK);
583583
tapdev = wolfIP_getdev(IPSTACK);
584-
if (tap_init(tapdev, "wtcp0", linux_ip.s_addr) < 0) {
584+
if (tap_init(tapdev, "wtcp0", host_stack_ip.s_addr) < 0) {
585585
perror("tap init");
586586
}
587587
wolfIP_ipconfig_set(IPSTACK, atoip4(WOLFIP_IP), atoip4("255.255.255.0"),
588-
atoip4(LINUX_IP));
588+
atoip4(HOST_STACK_IP));
589589
printf("IP: manually configured - %s\n", WOLFIP_IP);
590590
sleep(1);
591591
pthread_create(&wolfIP_thread, NULL, wolfIP_sock_posix_ip_loop, IPSTACK);
592592
in_the_stack = 0;
593593
}
594-

0 commit comments

Comments
 (0)