13630 Commits

Author SHA1 Message Date
Martin Willi
09624c6cec windows: Provide a read(2) wrapper that uses recv(2) on sockets 2014-11-21 12:02:08 +01:00
Martin Willi
f518b52c2d unit-tests: Test cancellability of some cancellation points we rely on 2014-11-21 12:02:07 +01:00
Martin Willi
78725e68c1 thread: Test for pending cancellation requests before poll()ing on OS X
As we are now using poll(2) instead of select(2), we need the work-around from
76dc329e for poll() as well.
2014-11-21 12:02:07 +01:00
Martin Willi
eeaa6f9b1a kernel-libipsec: Use poll(2) instead of select 2014-11-21 12:02:07 +01:00
Martin Willi
03bccc240c watcher: Use poll(2) instead of select 2014-11-21 12:02:07 +01:00
Martin Willi
10743ac9d6 libtls: Use poll(2) instead of select() in tls_socket 2014-11-21 12:02:07 +01:00
Martin Willi
ed247660e8 socket-default: Use round-robin selection of sockets to read from
If multiple sockets are ready, we previously preferred the IPv4 non-NAT socket
over others. To handle all with equal priority, use a round-robin selection.
2014-11-21 12:02:07 +01:00
Martin Willi
ce13ba62cc socket-default: Use poll(2) instead of select
It is not only simpler, but also allows the use of arbitrary high fd numbers,
which silently fails with select().
2014-11-21 12:02:07 +01:00
Martin Willi
946cf367d4 tun-device: Read from tun to buffer on stack to avoid over-allocation of packets
Instead of allocating MTU-sized buffers for each packet, read to a stack buffer
and copy to an allocation of the actual packet size. While it requires an
additional copy on non-Apple platforms, this should make allocation more
efficient for small packets.
2014-11-21 12:02:07 +01:00
Martin Willi
eaca7f2143 tun-device: Remove the superfluous use of select() before read() 2014-11-21 11:16:48 +01:00
Martin Willi
1abaff6a3c libradius: Use poll(2) to wait for RADIUS responses 2014-11-21 11:16:48 +01:00
Martin Willi
fc829ec9fb windows: Provide a poll(2) wrapper calling WSAPoll() 2014-11-21 11:16:48 +01:00
Martin Willi
e796b88e86 Merge branch 'netlink-extensions'
Introduces options to enable concurrent Netlink queries. While this does not
make much sense on vanilla Linux, this can help on third party stacks to
increase throughput if longer latencies are to expect. Netlink message
retransmission can be optionally enabled if transmission is unreliable.
Non-socket based IKE bypass policies and other tweaks bring better compatibility
to third party stacks using Netlink.
2014-11-21 11:01:39 +01:00
Martin Willi
50bb81425e kernel-netlink: Optionally ignore errors resulting from response message loss
As some backends over unreliable transport do not cache response messages,
retransmissions due the loss of responses perform the operation again. Add an
option to ignore some errors arising from such duplicate operations.

Note: This approach can't distinguish between real EXIST/NOTFOUND errors
and packet failures, and therefore is a source of race conditions and can't
detect any of these errors actually happening. Therefore that behavior is
disabled by default, and can be enabled with the ignore_retransmit_errors
strongswan.conf option.

To properly distinguish between real and retransmission errors, a Netlink
backend should implement retransmission detection using sequence numbers.
2014-11-21 10:55:45 +01:00
Martin Willi
8925abbec4 kernel-netlink: Add an option to enforce using XFRM_MSG_UPDPOLICY 2014-11-21 10:55:45 +01:00
Martin Willi
3065081c3e kernel-netlink: Fallback to UDP if detecting socket protocol fails
getsockopt(SO_PROTOCOL) is not supported before 2.6.32. Default to UDP if
either the SO_PROTOCOL define is missing or the syscall fails.
2014-11-21 10:55:45 +01:00
Martin Willi
87888f9926 kernel-netlink: Alternatively support global port based IKE bypass policies
The socket based IKE bypass policies are usually superior, but not supported
on all networking stacks. The port based variant uses global policies for the
UDP ports we have IKE sockets for.
2014-11-21 10:55:45 +01:00
Martin Willi
6f9df556ba conf: Document kernel-netlink retransmission and parallelization options 2014-11-21 10:55:45 +01:00
Martin Willi
6c58fabe29 kernel-netlink: Add options to enable parallel Netlink queries explicitly
As under vanilla Linux the kernel can't handle parallel dump queries and returns
EBUSY, it makes not much sense to use them. Disable parallel queries by default
to basically restore original behavior, improving performance.
2014-11-21 10:55:45 +01:00
Martin Willi
9b43dddff4 kernel-netlink: Release lock while doing Netlink NEW/DELADDR operations
Besides that it can improve throughput, it avoids a deadlock situation. If
all threads are busy, watcher will invoke the FD notification for NEWADDR
events itself. If the lock is held, it gets locked up. As watcher is not
dispatching anymore, it can't signal Netlink socket send() completion, and
the send() operation does not return and keeps the lock.
2014-11-21 10:55:45 +01:00
Martin Willi
4b41ea956c kernel-netlink: Add non-dumping variants of echo and stress tests 2014-11-21 10:55:45 +01:00
Martin Willi
adb930ed4f kernel-netlink: Add test cases for successful and timing out retransmissions 2014-11-21 10:55:45 +01:00
Martin Willi
553be051b7 kernel-netlink: Add a compile-time hook to simulate request message loss 2014-11-21 10:55:45 +01:00
Martin Willi
15dc61757c kernel-netlink: Implement configurable Netlink request retransmission 2014-11-21 10:55:45 +01:00
Martin Willi
aa762bed7b kernel-netlink: Add a stress test with several threads doing Netlink exchanges 2014-11-21 10:55:45 +01:00
Martin Willi
84f6853c42 kernel-netlink: Retry netlink query while kernel returns EBUSY
If the kernel can't execute a Netlink query because a different query is already
active, it returns EBUSY. As this can happen now as we support parallel queries,
retry on this error condition.
2014-11-21 10:55:45 +01:00
Martin Willi
3c7193f114 kernel-netlink: Support parallel Netlink queries
Instead of locking the socket exclusively to wait for replies, use watcher
to wait for and read in responses asynchronously. This allows multiple parallel
Netlink queries, which can significantly improve performance if the kernel
Netlink layer has longer latencies and supports parallel queries.

For vanilla Linux, parallel queries don't make much sense, as it usually returns
EBUSY for the relevant dump requests. This requires a retry, and in the end
makes queries more expensive under high load.

Instead of checking the Netlink message sequence number to detect multi-part
messages, this code now relies on the NLM_F_MULTI flag to detect them. This
has previously been avoided (by 1d51abb7). It is unclear if the flag did not
work correctly on very old Linux kernels, or if the flag was not used
appropriately by strongSwan. The flag seems to work just fine back to 2.6.18,
which is a kernel still in use by RedHat/CentOS 5.
2014-11-21 10:55:45 +01:00
Martin Willi
02794456a9 kernel-netlink: Add a simple send message test querying available links 2014-11-21 10:55:44 +01:00
Martin Willi
f572b38816 kernel-netlink: Add a stub for a test-runner 2014-11-21 10:55:44 +01:00
Tobias Brunner
8ab1b29da4 mem-pool: Fix potential memory leak and lost leases when reassigning leases
If no offline leases are available for the current client and assigning online
leases is disabled, and if all IPs of the pool have already been assigned to
clients we look for offline leases that previously were assigned to other
clients.

In case the current client has online leases the previous code would
replace the existing mapping entry and besides resulting in a memory leak
the online leases would be lost forever (even if the client later releases
the addresses).  If this happens repeatedly the number of available addresses
would decrease even though the total number of online and offline leases seen
in `ipsec leases` would indicate that there are free addresses available.

Fixes #764.
2014-11-11 19:00:02 +01:00
Tobias Brunner
fc02a9d4b9 android: New release based on 5.2.1 and after adding EAP-TLS
Also enables support for IKEv2 fragmentation, provides improved MOBIKE
handling and optionally enables PFS for CHILD_SAs.
2014-11-06 17:16:27 +01:00
Tobias Brunner
baa4e774c1 android: Build binaries for MIPS 2014-11-06 17:11:55 +01:00
Tobias Brunner
bdc4cea316 android: Increase fragment size
We use the same value we use as MTU on TUN devices.
2014-11-06 17:05:47 +01:00
Tobias Brunner
6fddf2af73 android: Enable IKEv2 fragmentation 2014-11-06 16:56:54 +01:00
Tobias Brunner
2d19ff462a Merge branch 'android-eap-tls'
This adds support for EAP-TLS authentication on Android.

EAP-only authentication is currently not allowed because the AAA identity
is not configurable, so to prevent anyone with a valid certificate from
impersonating the AAA server and thus the gateway, we authenticate the
gateway (like we do with other authentication methods).
Also, it's currently not possible to select a specific CA certificate to
authenticate the AAA server certificate, so it either must be issued by the
same CA as that of the gateway or automatic CA certificate selection must
be used.
2014-11-06 16:53:34 +01:00
Tobias Brunner
0e44999867 android: Use %any as AAA identity, but disable EAP-only authentication
Without verification of the identity we can't prevent a malicious user
with a valid certificate from impersonating the AAA server and thus the
VPN gateway.  So unless we make the AAA identity configurable we have to
prevent EAP-only authentication.
2014-11-06 16:28:40 +01:00
Tobias Brunner
4b39a4117a android: Add support for signature schemes used by EAP-TLS 2014-11-06 16:28:40 +01:00
Tobias Brunner
0ef74bec98 android: Allow enumeration of untrusted certificates 2014-11-06 16:28:40 +01:00
Tobias Brunner
34ca3795c8 android: Handle EAP-TLS in Android service 2014-11-06 16:28:40 +01:00
Tobias Brunner
93923149e4 android: Enable EAP-TLS plugin in the app 2014-11-06 16:28:40 +01:00
Tobias Brunner
a1700c9903 android: Add EAP-TLS VPN type to the GUI 2014-11-06 16:28:40 +01:00
Tobias Brunner
a64089738d android: Change how features of VPN types are stored and checked 2014-11-06 16:28:40 +01:00
Reto Buerki
0de4ba58ce testing: Update tkm/multiple-clients/evaltest.dat
Since the CC context is now properly reset in the bus listener plugin,
the second connection from host dave re-uses the first CC ID. Adjust
the expect string on gateway sun accordingly.
2014-10-31 13:49:40 +01:00
Reto Buerki
1ec7ee65c5 charon-tkm: Properly reset CC context in listener
Make sure that the acquired CC context is correctly reset and the
associated ID released in the authorize() function of the TKM bus
listener.
2014-10-31 13:49:40 +01:00
Reto Buerki
a62d03d36b charon-tkm: Add missing comma to enum
Add missing comma to tkm_context_kind_names enum definition.
2014-10-31 13:49:33 +01:00
Tobias Brunner
b1ef481ce1 proposal: Add default PRF for HMAC-MD5-128 and HMAC-SHA1-160 integrity algorithms 2014-10-31 10:09:54 +01:00
Tobias Brunner
406f3af1ed Merge branch 'mem-pool-range'
Adds support to configure address pools as ranges (from-to) in
ipsec.conf and swanctl.conf.

The first and last addresses in subnet based pools are now skipped
properly and the pools' sizes are adjusted accordingly.  Which is also
the case if pools are configured with an offset, e.g. 192.168.0.100/24,
which reduces the number of available addresses from 254 to 155, and
assignment now starts at .100 not .101, i.e. .100-.254 are assignable
to clients.

References #744.
2014-10-30 15:08:05 +01:00
Tobias Brunner
cd67cd70c8 host: Ignore spaces around - when parsing ranges 2014-10-30 12:32:45 +01:00
Tobias Brunner
e0cd3bad3d ike-cfg: Use host_create_from_range() helper 2014-10-30 12:32:45 +01:00
Tobias Brunner
5e92534313 vici: Add support for address range definitions of pools 2014-10-30 12:32:45 +01:00