Skip to content

Commit

Permalink
FreeBSD support
Browse files Browse the repository at this point in the history
  • Loading branch information
er2off committed Aug 11, 2024
1 parent 084921e commit b6c53d6
Show file tree
Hide file tree
Showing 9 changed files with 58 additions and 25 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
.vscode
ciadpi.exe
ciadpi*
*.o
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
TARGET = ciadpi

CPPFLAGS = -D_XOPEN_SOURCE=500
#CPPFLAGS = -D_XOPEN_SOURCE=500
CFLAGS += -I. -std=c99 -Wall -Wno-unused -O2
WIN_LDFLAGS = -lws2_32 -lmswsock

Expand Down
35 changes: 27 additions & 8 deletions desync.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,16 @@
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/tcp.h>

#ifdef __linux__

#include <sys/mman.h>
#include <sys/sendfile.h>
#ifdef __linux__
#include <sys/sendfile.h>
#endif
#include <fcntl.h>

#include <desync.h>

#include "desync.h"

#ifdef __linux__
#ifdef MFD_CLOEXEC
#include <sys/syscall.h>
#define memfd_create(name, flags) syscall(__NR_memfd_create, name, flags);
Expand Down Expand Up @@ -82,7 +84,7 @@ static inline void delay(long ms)
#define delay(ms) Sleep(ms)
#endif

#ifdef __linux__
#if defined(__linux__) || defined(__FreeBSD__)
void wait_send(int sfd)
{
for (int i = 0; params.wait_send && i < 500; i++) {
Expand Down Expand Up @@ -118,7 +120,7 @@ void wait_send(int sfd)
#define wait_send_if_support(sfd) // :(
#endif

#ifdef __linux__
#if defined(__linux__) || defined(__FreeBSD__)
ssize_t send_fake(int sfd, char *buffer,
int cnt, long pos, int fa, struct desync_params *opt)
{
Expand Down Expand Up @@ -165,11 +167,18 @@ ssize_t send_fake(int sfd, char *buffer,
break;
}
if (opt->md5sig) {
#ifdef __linux__
struct tcp_md5sig md5 = {
.tcpm_keylen = 5
};
memcpy(&md5.tcpm_addr, &addr, addr_size);

#elif defined(__FreeBSD__)
// FIXME: Should be struct tcpmd5_support
// but netipsec/ipsec_support.h hides this under ifdef KERNEL
int md5 = 1;
#else
#error
#endif
if (setsockopt(sfd, IPPROTO_TCP,
TCP_MD5SIG, (char *)&md5, sizeof(md5)) < 0) {
uniperror("setsockopt TCP_MD5SIG");
Expand All @@ -183,7 +192,11 @@ ssize_t send_fake(int sfd, char *buffer,
break;
}

#ifdef __linux__
len = sendfile(sfd, ffd, 0, pos);
#else
len = sendfile(sfd, ffd, 0, pos, NULL, NULL, 0);
#endif
if (len < 0) {
uniperror("sendfile");
break;
Expand All @@ -201,10 +214,16 @@ ssize_t send_fake(int sfd, char *buffer,
break;
}
if (opt->md5sig) {
#ifdef __linux__
struct tcp_md5sig md5 = {
.tcpm_keylen = 0
};
memcpy(&md5.tcpm_addr, &addr, addr_size);
#elif defined(__FreeBSD__)
int md5 = 0;
#else
#error
#endif

if (setsockopt(sfd, IPPROTO_TCP,
TCP_MD5SIG, (char *)&md5, sizeof(md5)) < 0) {
Expand Down
7 changes: 4 additions & 3 deletions extend.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,16 @@ int set_timeout(int fd, unsigned int s)
uniperror("setsockopt TCP_USER_TIMEOUT");
return -1;
}
#else
#ifdef _WIN32
#elif defined(__FreeBSD__)
// https://wiki.freebsd.org/CatalinNicutar/TCPUTO
// sadly not yet available
#elif defined(_WIN32)
if (setsockopt(fd, IPPROTO_TCP,
TCP_MAXRT, (char *)&s, sizeof(s))) {
uniperror("setsockopt TCP_MAXRT");
return -1;
}
#endif
#endif
return 0;
}

Expand Down
10 changes: 7 additions & 3 deletions main.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@
#define close(fd) closesocket(fd)
#endif

#ifdef __FreeBSD__
#include <netinet/in.h>
#endif

#define VERSION "12"

char oob_char[1] = "a";
Expand Down Expand Up @@ -57,7 +61,7 @@ struct params params = {
.sin6_family = AF_INET6
},
.laddr = {
.sin6_family = AF_INET
.sin6_family = AF_INET6
},
.debug = 0
};
Expand Down Expand Up @@ -94,7 +98,7 @@ const char help_text[] = {
#ifdef FAKE_SUPPORT
" -f, --fake <n[+s]> Split and send fake packet\n"
" -t, --ttl <num> TTL of fake packets, default 8\n"
#ifdef __linux__
#if defined(__linux__) || defined(__FreeBSD__)
" -k, --ip-opt[=f|:str] IP options of fake packets\n"
" -S, --md5sig Add MD5 Signature option for fake packets\n"
#endif
Expand Down Expand Up @@ -138,7 +142,7 @@ const struct option options[] = {
#ifdef FAKE_SUPPORT
{"fake", 1, 0, 'f'},
{"ttl", 1, 0, 't'},
#ifdef __linux__
#if defined(__linux__) || defined(__FreeBSD__)
{"ip-opt", 2, 0, 'k'},
{"md5sig", 0, 0, 'S'},
#endif
Expand Down
8 changes: 6 additions & 2 deletions packets.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
#define _GNU_SOURCE
#ifdef __FreeBSD__
#include <strings.h>
#else
#define _GNU_SOURCE
#endif

#include <packets.h>
#include "packets.h"
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
Expand Down
9 changes: 7 additions & 2 deletions params.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include <stdint.h>
#include <stdio.h>
#include <unistd.h>

#include "mpool.h"

Expand All @@ -9,7 +10,11 @@
#include <arpa/inet.h>
#endif

#if defined(__linux__) || defined(_WIN32)
#ifdef __FreeBSD__
#include <netinet/in.h>
#endif

#if defined(__linux__) || defined(_WIN32) || defined(__FreeBSD__)
#define FAKE_SUPPORT 1
#define TIMEOUT_SUPPORT 1
#endif
Expand Down Expand Up @@ -107,4 +112,4 @@ extern struct packet fake_http;
extern struct packet oob_data;
extern struct packet fake_udp;

extern char ip_option[1];
extern char ip_option[1];
8 changes: 3 additions & 5 deletions proxy.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ static inline char addr_equ(

static inline int nb_socket(int domain, int type)
{
#ifdef __linux__
#if defined(__linux__) || defined(__FreeBSD__)
int fd = socket(domain, type | SOCK_NONBLOCK, 0);
#else
int fd = socket(domain, type, 0);
Expand All @@ -96,15 +96,13 @@ static inline int nb_socket(int domain, int type)
close(fd);
return -1;
}
#else
#ifndef __linux__
#elif !defined(__linux__)
if (fcntl(fd, F_SETFL, O_NONBLOCK) < 0) {
uniperror("fcntl");
close(fd);
return -1;
}
#endif
#endif
return fd;
}

Expand Down Expand Up @@ -515,7 +513,7 @@ static inline int on_accept(struct poolhd *pool, struct eval *val)

while (1) {
socklen_t len = sizeof(client);
#ifdef __linux__
#if defined(__linux__) || defined(__FreeBSD__)
int c = accept4(val->fd, &client.sa, &len, SOCK_NONBLOCK);
#else
int c = accept(val->fd, &client.sa, &len);
Expand Down
1 change: 1 addition & 0 deletions proxy.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include <ws2tcpip.h>
#else
#include <arpa/inet.h>
#include <sys/socket.h>
#endif

#include "conev.h"
Expand Down

0 comments on commit b6c53d6

Please sign in to comment.