Compare commits

...

5 Commits
v0.0.33 ... tcp

Author SHA1 Message Date
Adrien Gallouët
0a797b4f5f Try value 42 for mptcp (fallback to 26) 2017-06-07 11:27:44 +02:00
Adrien Gallouët
8cb849fbc3 Update pkg.m4 2017-06-07 11:26:22 +02:00
Adrien Gallouët
13f9f4c896 Fix printf format 2016-07-20 15:32:22 +00:00
Adrien Gallouët
cfd7af9241 Add .build.sh 2016-07-11 11:13:29 +00:00
Adrien Gallouët
c81592fcc5 Don't fd_set_nonblock(-1) 2016-06-23 12:15:01 +00:00
3 changed files with 57 additions and 27 deletions

15
.build.sh Executable file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
export CC="gcc -static"
git clone https://github.com/jedisct1/libsodium --depth=1 --branch stable
cd libsodium || exit 1
./autogen.sh && ./configure --enable-minimal --disable-shared --prefix=/usr && make install
cd ..
./autogen.sh && ./configure && make
[ -x glorytun ] || exit 1
mkdir -p deploy
strip -s glorytun
mv glorytun deploy/glorytun-$(cat VERSION)-$(uname -m).bin

View File

@@ -1,6 +1,6 @@
dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
dnl serial 11 (pkg-config-0.29) # serial 12 (pkg-config-0.29.2)
dnl
dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>. dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com> dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
dnl dnl
@@ -41,7 +41,7 @@ dnl
dnl See the "Since" comment for each macro you use to see what version dnl See the "Since" comment for each macro you use to see what version
dnl of the macros you require. dnl of the macros you require.
m4_defun([PKG_PREREQ], m4_defun([PKG_PREREQ],
[m4_define([PKG_MACROS_VERSION], [0.29]) [m4_define([PKG_MACROS_VERSION], [0.29.2])
m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
[m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
])dnl PKG_PREREQ ])dnl PKG_PREREQ
@@ -142,7 +142,7 @@ AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
pkg_failed=no pkg_failed=no
AC_MSG_CHECKING([for $1]) AC_MSG_CHECKING([for $2])
_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
_PKG_CONFIG([$1][_LIBS], [libs], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2])
@@ -152,11 +152,11 @@ and $1[]_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.]) See the pkg-config man page for more details.])
if test $pkg_failed = yes; then if test $pkg_failed = yes; then
AC_MSG_RESULT([no]) AC_MSG_RESULT([no])
_PKG_SHORT_ERRORS_SUPPORTED _PKG_SHORT_ERRORS_SUPPORTED
if test $_pkg_short_errors_supported = yes; then if test $_pkg_short_errors_supported = yes; then
$1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
else else
$1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
fi fi
# Put the nasty error message in config.log where it belongs # Put the nasty error message in config.log where it belongs
@@ -173,7 +173,7 @@ installed software in a non-standard prefix.
_PKG_TEXT])[]dnl _PKG_TEXT])[]dnl
]) ])
elif test $pkg_failed = untried; then elif test $pkg_failed = untried; then
AC_MSG_RESULT([no]) AC_MSG_RESULT([no])
m4_default([$4], [AC_MSG_FAILURE( m4_default([$4], [AC_MSG_FAILURE(
[The pkg-config script could not be found or is too old. Make sure it [The pkg-config script could not be found or is too old. Make sure it
is in your PATH or set the PKG_CONFIG environment variable to the full is in your PATH or set the PKG_CONFIG environment variable to the full

View File

@@ -53,8 +53,6 @@
#define GT_ABYTES (16) #define GT_ABYTES (16)
#define GT_KEYBYTES (32) #define GT_KEYBYTES (32)
#define MPTCP_ENABLED (26)
static struct { static struct {
volatile sig_atomic_t quit; volatile sig_atomic_t quit;
volatile sig_atomic_t info; volatile sig_atomic_t info;
@@ -116,13 +114,16 @@ enum sk_opt {
sk_acceptfilter, sk_acceptfilter,
sk_quickack, sk_quickack,
sk_user_timeout, sk_user_timeout,
sk_mptcp, sk_mptcp_26,
sk_mptcp_42,
}; };
static void sk_set (int fd, enum sk_opt opt, const void *val, socklen_t len) static int sk_set (int fd, enum sk_opt opt, const void *val, socklen_t len)
{ {
if (!val || len<=0) if (!val || len<=0) {
return; errno = EINVAL;
return -1;
}
struct { struct {
const char *name; const char *name;
@@ -173,33 +174,44 @@ static void sk_set (int fd, enum sk_opt opt, const void *val, socklen_t len)
1, IPPROTO_TCP, TCP_USER_TIMEOUT, 1, IPPROTO_TCP, TCP_USER_TIMEOUT,
#endif #endif
}, },
[sk_mptcp] = { "MPTCP_ENABLED", [sk_mptcp_26] = { "MPTCP_ENABLED (26)", 1, IPPROTO_TCP, 26 },
#ifdef MPTCP_ENABLED [sk_mptcp_42] = { "MPTCP_ENABLED (42)", 1, IPPROTO_TCP, 42 },
1, IPPROTO_TCP, MPTCP_ENABLED,
#endif
},
}; };
if (!opts[opt].present) { if (!opts[opt].present) {
gt_na(opts[opt].name); gt_na(opts[opt].name);
return; errno = EINVAL;
return -1;
} }
if (setsockopt(fd, opts[opt].level, opts[opt].option, val, len)==-1) int ret = setsockopt(fd, opts[opt].level, opts[opt].option, val, len);
if (ret==-1) {
int err = errno;
gt_log("couldn't set socket option `%s'\n", opts[opt].name); gt_log("couldn't set socket option `%s'\n", opts[opt].name);
errno = err;
}
return ret;
} }
static void sk_set_int (int fd, enum sk_opt opt, int val) static int sk_set_int (int fd, enum sk_opt opt, int val)
{ {
return sk_set(fd, opt, &val, sizeof(val)); return sk_set(fd, opt, &val, sizeof(val));
} }
static void sk_set_mptcp (int fd)
{
if (sk_set_int(fd, sk_mptcp_42, 1)==-1)
sk_set_int(fd, sk_mptcp_26, 1);
}
static int sk_listen (int fd, struct addrinfo *ai) static int sk_listen (int fd, struct addrinfo *ai)
{ {
sk_set_int(fd, sk_reuseaddr, 1); sk_set_int(fd, sk_reuseaddr, 1);
if (gt.mptcp) if (gt.mptcp)
sk_set_int(fd, sk_mptcp, 1); sk_set_mptcp(fd);
if (bind(fd, ai->ai_addr, ai->ai_addrlen)==-1) { if (bind(fd, ai->ai_addr, ai->ai_addrlen)==-1) {
perror("bind"); perror("bind");
@@ -226,7 +238,7 @@ static int sk_connect (int fd, struct addrinfo *ai)
fd_set_nonblock(fd); fd_set_nonblock(fd);
if (gt.mptcp) if (gt.mptcp)
sk_set_int(fd, sk_mptcp, 1); sk_set_mptcp(fd);
int ret = connect(fd, ai->ai_addr, ai->ai_addrlen); int ret = connect(fd, ai->ai_addr, ai->ai_addrlen);
@@ -282,8 +294,11 @@ static int sk_accept (int fd)
int ret = accept(fd, (struct sockaddr *)&addr, &addr_size); int ret = accept(fd, (struct sockaddr *)&addr, &addr_size);
if (ret==-1 && errno!=EINTR) if (ret==-1) {
perror("accept"); if (errno!=EINTR)
perror("accept");
return -1;
}
fd_set_nonblock(ret); fd_set_nonblock(ret);
@@ -1145,7 +1160,7 @@ static int gt_setup_crypto (struct crypto_ctx *ctx, int fd, int listener)
return -1; return -1;
if (memcmp(&data_r[size-hash_size-sizeof(proto)], proto, 3)) { if (memcmp(&data_r[size-hash_size-sizeof(proto)], proto, 3)) {
gt_log("bad packet [%02X%02X%02X] !\n", gt_log("bad packet [%02"PRIX8"%02"PRIX8"%02"PRIX8"] !\n",
&data_r[size-hash_size-sizeof(proto)+0], &data_r[size-hash_size-sizeof(proto)+0],
&data_r[size-hash_size-sizeof(proto)+1], &data_r[size-hash_size-sizeof(proto)+1],
&data_r[size-hash_size-sizeof(proto)+2]); &data_r[size-hash_size-sizeof(proto)+2]);