| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| |
| |
| |
| |
| |
| | |
The DHT failed when receiving multiple responses in a short
timeframe. The lookup struct now keeps track of the number of
outstanding requests.
|
|/ |
|
|
|
|
| |
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.
|
|\ |
|
| |
| |
| |
| |
| |
| | |
This fixes pthread_condtimedwaits in the flow allocator of all IPCPs
that had bad deadlines set (the interval instead of the actual
absolute time).
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| | |
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 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,
|
| |
| |
| |
| |
| | |
Not all returned contacts were processed when a FIND_NODE or
FIND_VALUE message was returned.
|
|/
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
| |
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, ...
|
| |
|
| |
|
|
|
|
|
|
| |
Other protocol machines now have to register on top of the DT AE. This
allows multiple instances of the same protocol machine and avoids
preallocating fds for each protocol machine instance.
|
|
|
|
|
|
| |
This makes the routing component into a policy since different
approaches may exist to do this, depending on how high the rank of the
DIF is.
|
|
|
|
|
|
| |
This commits adds the functions and messages to specify a fixed
protocol syntax during CACEP. It also revises the messages for
specifying the DT protocol syntax from the irm tool.
|
|
|
|
|
|
|
| |
In order to ensure 100% reliable transfer, the protocol state machine
that takes care of retransmission and SDU ordering has to be in the
application. Flow allocation in the normal now uses fds. The PDU_type
field was deprecated and AE's within the DIF can use reserved fds.
|
|
|
|
|
|
|
| |
The flow resources are Delta-t protocol machines that will time out
and free their resources without any required signaling. Flows can be
cleaned locally when the application requests it and all FRCT
instances have timed out and released their resources.
|
|
|
|
|
|
|
| |
The frct instance was previously destroyed before sending the message,
resulting in the destination address being 0 and the message getting
dropped. Some fixes in the normal for deallocation, but will require
further revision once all data transfer protocols are in place.
|
| |
|
|\
| |
| |
| | |
ipcpd: normal: Split connection establishment
|
| |
| |
| |
| |
| |
| | |
Connection establishment was done at the same time as flow
allocation. This splits it more cleanly, and allows to re-use the DT
AE for other purposes.
|
|/
|
|
|
|
|
|
| |
The IPCP will now report the DIF name and the hash value to the IRMd
as a dif_info struct. This can later be extended to add further
capability reporting. Some bugfixes in normal.
Fixes #24
|
| |
|
|
|
|
|
|
|
| |
This adds a call ipcp_sdb_reserve to reserve memory in the rdrbuff
without directly writing to a flow. The ipcp_flow_del function was
renamed to ipcp_sdb_release. The functions operating on sdbs are moved
to their own header.
|
|
|
|
|
|
| |
The flow sets were still kept within the FA and DT components, when it
makes more sense that they are kept within the SDU scheduler
component.
|
|
|
|
|
|
| |
This splits the flow manager into the Data Transfer AE, which is in
charge of routing SDUs, and the Flow Allocator AE, which handles flow
allocations.
|
|\
| |
| |
| | |
ipcpd: Build complete graph with gam
|
| |
| |
| |
| |
| | |
The complete policy will now build a complete graph. Currently a
simple timer is used to check the member list periodically.
|
|/
|
|
|
|
| |
This extracts the SDU scheduling component out of the Flow Manager
since the functionality was duplicated. For both the N-1 and N+1 flow
sets an SDU scheduling component is now created.
|
|
|
|
| |
Currently CRC32, MD5, and SHA3 (224, 256, 384 and 512 bit) are supported.
|
| |
|
|
|
|
|
|
|
|
|
| |
All information passed over the IRMd/IPCP boundary for using IPC
services (flow allocation, registration) is now hashed. This
effectively fixes the shared namespace between DIFs and the IRMDs.
This PR also fixes some API issues (adding const identifiers),
shuffles the include headers a bit and some small bugs.
|
| |
|
|
|
|
|
|
| |
An assertion was done instead of NULL check, where the FRCT instance
could legitimately be NULL, resulting in the IPCP dying when it
shouldn't.
|
|
|
|
|
| |
A missing else clause was missing in the fast path, causing the PCI to
be shrunk when it should not be. A double free has also been fixed.
|
|
|
|
|
| |
This adds a lock to prevent a race condition between flow_req_arr and
flow_alloc_resp.
|
|
|
|
|
|
|
| |
Since there are no SDUs on most QoS cubes, the fmgr was always timing
out on most QoS cubes, causing considerable delays in most SDUs. The
timeout was reset to a very small value (so the bug in glibc 2.25 will
cause lockups again).
|
| |
|
|
|
|
|
| |
This removes some logs in the graph component and replaces prints of
uin64_t variables with an architecture agnostic variant.
|
|
|
|
| |
This fixes the bug in handling multiple concurrent flow allocations.
|
|\
| |
| |
| | |
lib: Revise flow allocation API
|
| |
| |
| |
| |
| |
| | |
The flow_alloc_res and flow_alloc_resp calls have been removed. The
flow_alloc and flow_accept calls are now both blocking and take an
additional timeout argument.
|