| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|\
| |
| |
| | |
lib: Fix instability in threadpool manager
|
| |
| |
| |
| |
| |
| | |
The DHT failed when receiving multiple responses in a short
timeframe. The lookup struct now keeps track of the number of
outstanding requests.
|
| |
| |
| |
| |
| |
| | |
The threadpool manager now tracks threads to prevent cyclic behaviour
where too many threads shut down and the TPM responds with creating
additional threads.
|
| | |
|
|/ |
|
|
|
|
| |
This fixes several assignments to the wrong enum type.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This adds support for libgcrypt. If at least version 1.7.0 of
libgcrypt is present, it may be used for secure random number
generation and is used for hashing in the irmd/ipcp.
The hash definitions are moved to the internal hash.h header, and
defined independently of the hashes that are defined as part of the
directory policy for the normal IPCP. The translation is moved from
the IRMd to ipcpd/ipcp.h. The bootstrap call from the IRMd expects the
IPCP to return the correct hash algorithm with a dif_info struct,
which is in line with the behavior of the enroll call.
This also improves how some platform checks in the build system are
handled.
|
| |
|
|
|
|
|
|
|
|
|
| |
The DHT lookup would stop if a node returned no new useful information
(i.e. the value for the key or unknown nodes closer to the key)
without waiting for other pending requests that could still return
useful information. Now it correctly tracks the number of outstanding
requests or returns if it doesn't get a response for KAD_T_RESP
seconds. This fixes multi-hop flow allocation over the normal.
|
|
|
|
|
|
| |
Upon flow_allocation, the IRMd queries IPCPs for the destination
name. After this commit, when an IPCP allocates a flow, the IRMd won't
query that IPCP.
|
|
|
|
|
|
|
|
|
|
| |
When a process was killed, ipcp_flow_dealloc was called under a lock,
causing a deadlock in the IRMd because handling the IPCP response also
needs to take the same lock (the IPCP calls flow_dealloc to finalize
this). This deadlock also resulted in the IPCP always reporting that
it failed to send a reply message as the deadlock effectively blocks
the IRMd until its socket timeout expired and thus the IPCP was always
responding to an already closed socket.
|
|
|
|
|
|
|
| |
The commands towards the IPCPs have different time requirements, but
the irmd had only a single timeout value to wait for a response. This
commit allows setting different timeouts for the IRMd based on the
command, configurable globally.
|
|\ |
|
| | |
|
| |
| |
| |
| |
| |
| | |
The blocking ipcp_query call was called under reg_lock, causing
flow_allocs over the shim-eth-llc to block the irmd for prolonged
timespans.
|
|\| |
|
| |
| |
| |
| |
| |
| | |
This fixes pthread_condtimedwaits in the flow allocator of all IPCPs
that had bad deadlines set (the interval instead of the actual
absolute time).
|
| |
| |
| |
| |
| |
| | |
This adds a check for robust mutexes. The constant HAVE_ROBUST_MUTEX
is set accordingly in config.h. It also adds some other fixes to make
the prototype compile on the Hurd.
|
| |
| |
| |
| |
| | |
This refactors dev.c to have a common function called init_flow that
is called whenever a flow is allocated in dev.c
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| | |
The scheduler in the normal IPCP is now multithreaded. While useful in
itself for scalability, it currently solves thread starvation in case
of executing post_sdu operations that may require a response. This
could be further revised in the future to split the SDU handling
threads from the component tasks.
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| | |
Fixes a memory leak when the DHT is destroyed during a send_msg. Fixes
a deadlock when destroying the DHT with a pending lookup. Removes some
debug logs that clutter output due to expected redundant FIND_VALUE
responses.
|
| |
| |
| |
| |
| |
| |
| |
| | |
This adds a threadpool manager component in the library that is used
in the IRMd and IPCPs. The threadpool manager now doesn't detach
threads but does a join when they exit. This solves a data race in the
previous implementation where some threads were not completely finished
upon release of some resources.
|
| |
| |
| |
| |
| |
| |
| | |
This will make the remote retry sending responses when the DT
component can't send the message. This is most useful at enrollment,
when the remote's routing table may need to wait a bit on the routing
component for a path to the new member,
|
|\| |
|
| |
| |
| |
| |
| |
| |
| | |
The received message list was not correctly freed upon destruction of
the CDAP object. There was also still a rare case in which thread
cancellation would keep a lock, blocking the IPCP shutdown, which is
also fixed.
|
|\| |
|
| |
| |
| |
| |
| |
| | |
The processing state was not correctly reset at all points in the
loop, causing CDAP to block the IPCP on shutdown in some cases. This
also adds a missing unlock and reorders some other unlocks.
|
| |
| |
| |
| |
| | |
Not all returned contacts were processed when a FIND_NODE or
FIND_VALUE message was returned.
|
| |
| |
| |
| |
| | |
This fixes the order of the IPCPs in the IRMd, so that the right type
is queried first on flow allocation.
|
|\ \
| |/
|/|
| | |
ipcpd: Add DHT as directory in normal IPCP
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This implements a Distributed Hash Table (DHT) based on the Kademlia
protocol, with default parameters set as used in the BitTorrent
Mainline DHT. This initial implementation is almost feature complete,
except for some things to be done after a testing period: caching and
stale peer bumping, and setting the expiration timeout via the IRM
tool.
|
| |
| |
| |
| |
| |
| |
| | |
The enrollment calls dealloc immediately after cdap_del_flow(), but
the CDAP instance may still have that fd in its fqueue loop.
cdap_del_flow will now wait for an fqueue loop to end before
returning, to make sure the flow is not needed anymore.
|
|/ |
|
|
|
|
|
|
|
| |
This will hardcode the shim hash algorithms as they don't have an
enrollment phase.
Fixes #44
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
This adds a secure random number generator. It will use OS specific
calls with a fallback to OpenSSL if available.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
This adds more Quality of Service support to Ouroboros. One part is
the network specific characteristics such as bandwidth, delay, ...
The other part is end-to-end QoS like reliability, window based flow
control, ...
|
|
|
|
|
| |
The dev.c source file had some missing include headers. This PR fixes
inconsistencies between the definitions and declarations in ipcp-dev.h
|