| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
We call ike_sa_t.reestablish() so the IKE_SA is only recreated if any
CHILD_SA requires it.
|
| |
|
|
|
|
|
|
| |
When a CHILD_SA is closed in IKEv1, if it is not being rekeyed and
closeaction has been set, we can now perform a restart or hold as is
currently done for IKEv2.
|
| |
|
|
|
|
|
| |
The ifa_msghdr and rt_msghdr structs are not compatible (at least not on
FreeBSD).
|
| |
|
|
|
|
|
| |
As the virtual flag is set after the address has been added to the map,
we make sure we ignore virtual IPs when doing lookups.
|
|
|
|
|
|
|
| |
It seems we sometimes get the virtual IP as source (with
rightsubnet=0.0.0.0/0) even if the exclude route is already
installed. Might be a timing issue because shortly afterwards the
lookup seems to succeed.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
One second might be too short for IPs to appear/disappear, especially on
virtualized hosts.
|
|
|
|
|
| |
The known source address might be gone resulting in an error, making
learning a new source address impossible.
|
|
|
|
|
|
|
|
|
|
|
| |
If IPsec SAs are rekeyed due to an address change (e.g. because
update_sa is not supported) the exact same policy with the same reqid
will be installed, but with different addresses. After the rekeying the
old SA and its policies are removed, using the first matching mapping
breaks the mapping between the policies and the new SA (at least on
FreeBSD, the Linux kernel might only use the reqid for this). Using the
oldest matching SA is still an approximation but it solves the above
issue.
|
| |
|
|
|
|
|
|
|
|
| |
This required some refactoring when handling encrypted payloads.
Also changed log messages so that "encrypted payload" is logged instead
of "encryption payload" (even if we internally still call it that) as
that's the name used in RFC 5996.
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
Its functionality can be replicated by calling insert_before() followed
by remove_at(). Not the other way around, though, because remove_at()
changes the enumerator position.
|
| |
|
|
|
|
| |
Saves up to another 0.5KB of memory per CHILD_SA.
|
|
|
|
|
| |
Not directly returning a linked list allows us to change the internals of
the CHILD_SA transparently.
|
|
|
|
| |
Eliminates another three lists, 0.5KB per IKE_SA.
|
|
|
|
| |
Saves another 4 linked lists (1KB) per IKE_SA
|
|
|
|
| |
Removes another two linked lists (0.5KB) of memory per IKE/CHILD_SA pair.
|
|
|
|
|
| |
Beside that it makes the code actually simpler, it reduces the number of lists
stored by each IKE_SA and each CHILD_SA by 4, which can be up to 1KB per SA.
|
|
|
|
| |
This saves about 1.5KB of memory per IKE_SA.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently we use the very versatile linked-list collection to store elements
with variable count. This is fine, but very inefficient: Due to the many
methods in the linked list, on 64-bit platforms an empty list alone is more
than 200 bytes. As we currently have about 50 lists per IKE_SA/CHILD_SA pair,
this takes up to 10KB just for managing the empty lists. This is about the
half of memory used by an IKE_SA/CHILD_SA pair, and obviously way too much.
The new array type is not an object, but a collection of functions on an
abstract type.
The following lists are per IKE_SA and should be considered for a replacement
with more efficient arrays (this uses load-testers on-demand created dynamic
configurations, other scenarios have different lists):
14 -> ike_sa_create() @ src/libcharon/sa/ike_sa.c:2198
10 -> auth_cfg_create() @ src/libstrongswan/credentials/auth_cfg.c:1088
6 -> task_manager_v2_create() @ src/libcharon/sa/ikev2/task_manager_v2.c:1505
6 -> proposal_create() @ src/libcharon/config/proposal.c:592
5 -> peer_cfg_create() @ src/libcharon/config/peer_cfg.c:657
4 -> child_sa_create() @ src/libcharon/sa/child_sa.c:1090
2 -> child_cfg_create() @ src/libcharon/config/child_cfg.c:536
1 -> ike_cfg_create() @ src/libcharon/config/ike_cfg.c:330
1 -> put_connected_peers() @ src/libcharon/sa/ike_sa_manager.c:854
|
| |
|
| |
|
|
|
|
|
| |
Only keys and shared secrets are moved from the temporary credential set after
loading all secrets.
|
|
|
|
| |
algorithms
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
The only user (bfd backtraces) is fine with that, and we really should not
mess the enable flag while doing allocations with other threads.
|
|
|
|
|
| |
As we don't want to hold the lock, we must make sure backtraces keep valid
while printing them.
|
| |
|
|
|
|
|
|
|
| |
If realloc moves an allocation, the original allocation gets freed. We
therefore must remove the hdr from the list, as it is invalid. We can add it
afterwards once it has been updated, allowing us to unlock the list during
reallocation.
|
| |
|
|
|
|
|
| |
Also disabled listening on IPv6 because the Linux kernel currently does
not support UDP encapsulation for IPv6.
|
|
|
|
|
| |
For nestat output like ::ffff:127.0.0.1:9876 we shall not treat 127 as
port but 9876 instead.
|
| |
|
|
|
|
|
|
| |
Apparently, these functions use the user's default locale which might not
yield the expected result (e.g. lowercase I is not i in the Turkish
locale but ı instead).
|