| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
| |
The correct state was returned but not set internally in the
lookup_struct, causing lookup_wait to return a lookup in LU_PENDING if
the wait timedout.
This also unlocks the IRMd during register calls and fixes some
cleanup if lookup_wait gets interrupted.
Fixes #48
|
| |
|
|
|
|
| |
This fixes several bugs as reported by the clang static analyzer.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
This enables user-written tools to instruct IPCPs to establish and
tear down connections (a.k.a. adjacencies) between its internal
components (Management and Data Transfer).
For more info, do "irm ipcp connect" or "irm ipcp disconnect" on the
command line.
This commit exposes a deletion bug in the RIB where FSO's fail to
unpack/parse. This will be fixed when the RIB is deprecated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The graph adjacency manager has been deprecated in favor of providing
an external interface into the connectivity manager so that
adjacencies can be controlled from the command line, user scripts or
user applications.
The gam and its associated policies were removed from the normal IPCP
and the IRM configuration tools. The "/members" part of the RIB was
deprecated. Removal of the gam means that initial connectivity based
on changes in the RIB can't be provided, so some changes were
required throughout the normal IPCP.
The enrollment procedure was revised to establish its own
connectivity. First, it gets boot information from a peer by
establishing a connection to the remote enrollment component and
downloading the IPCP configuratoin. This is now done using its own
protocol buffers message in anticipation of deprecation of the RIB and
CDAP for communication within a DIF.
After the boot information is downloaded, it establishes a data
transfer flow for enrolling the directory (DHT). After the DHT has
enrolled, it signals the peer to that enrollment is done, and the data
transfer connection is torn down.
Signaling connections is done via the nbs struct, which is now passed
to the connmgr, which enables control of the connectivity graph from
external sources.
|
|
|
|
|
| |
This fixes several memleaks as reported by valgrind. It also fixes
some calls to close() with -1.
|
|
|
|
| |
The removal of the mutex and signal in 198b709 was a mistake.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
This revises the build system to have configuration per system
component. System settings can now be set using cmake.
The standard compliance defines were removed from configuration header
and are set in the sources where needed. Also some small code
refactors, such as moving the data for shims out of the ipcp structure
to the respective shims were performed.
|
| |
|
| |
|
| |
|
|\
| |
| |
| | |
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.
|
|/ |
|
|
|
|
| |
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.
|