| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
| |
Not all threads were cancelled on exit. This fixes (the rather
cryptic) error message "The futex facility returned an unexpected
error code" when running the stack with the address sanitizer. Also
fixes possible double frees when a pthread_create would fail.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
|
|
| |
The time of establishment will be printed as part of the flow
statistics (it is the same as the modification time of the file in the
FUSE filesystem). Some output was reordered and the length of the
sizes is updated to be sufficient for 64-bit values.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
|
|
| |
The flow statistics will now print the endpoint of the flow. If it's a
local endpoint for the IPCP, it will print the component
(e.g. "flow-allocator"). For remote flows, it will print the address
of the IPCP.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
| |
The flow statistics were not reset when a new connection was created,
resulting in wrong statistics.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
|
| |
The locks were not initialised correctly due to a misspelled define
and the fail_write was trying to lock a bad mutex (sometimes -1 out of
array). This also fixes the statistics gathered.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
|
|
| |
The import of the IPCP config protobuf message in the enrollment
message caused a double definition. The enroll.proto file is
deprecated and the definition of the enrollment message is moved to
the library to avoid this.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
| |
The replication of the database was missing a lock. Now the database
is first copied under lock and then sent.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
|
|
| |
This adds flow statistics for the data transfer (DT) component to the
RIB. The DT component will keep track of the traffic on each
flow. This feature can be enabled or disabled by setting the
IPCP_FLOW_STATS variable in the build system.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
|
|
|
|
| |
This revises the RIB so it gets the complete file attribute list from
the component instead of setting some attributes in the library. This
will allow setting read/write access later on in the component
itself. The time of last change of lsdb entries in the file system is
now set to the time of the last received Link State Update for that
entry.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
|
|
|
| |
This makes the TTL non-optional and allows the maximum (initial) value
of the TTL to be specified at bootstrap (the default is set to
60). The fd in the DT PCI is now called EID (Endpoint ID). The names
"dif" and "ae" have been replaced by "layer" and "component"
respectively in all sources.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
|
|
| |
The lookups now track the responses by cookie instead of just counting
the remaining number of responses. This is needed because simultaneous
lookups for the same hash interfere with eachother and lead to missed
responses.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
| |
This changes the build to use GNUInstallDirs instead of hardcoded
values. Package maintainers can then override these defaults by
passing the correct value to cmake on the command line.
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
| |
This will trigger the existing member to send all entries in its
database as LSAs to the new member.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
| |
The DHT would enter an infinite loop in lookup_wait() because the
LU_DONE state was not handled correctly.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
|
| |
This will make the register and query calls at the DHT wait for a JOIN
to complete. This avoids fails when calling register immediately after
creating a data transfer connection.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
| |
Some responses for a query were missed because the lookup went into
LU_COMPLETE state while still having pending requests.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
| |
Happy New Year, Ouroboros.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This changes the terminology to use layer instead of DIF and deprecate
the word "shim" for the IPCPs that attach to Ethernet LLC and UDP .The
terminology has not yet been changed in the variable names etc.
This reflects the design choices in Ouroboros to make IPCPs pure
resource allocators instead of also providing an "IPC service". The
Ouroboros IPCPs that attach to Ethernet and UDP implement the
allocator and are thus not really shims.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
|
|
| |
The DHT will now wait for the DHT_RUNNING state before handling
request messages, ensuring that the parameters are set correctly
before they are read and sent at JOIN. Also fixes a re-introduced
assertion failure when a JOIN fails.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
| |
ca2f47d had a missing bracket after a last-minute update to simplify
the logic.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
|
|
| |
The DHT buckets were not updated in JOINING state, which sometimes
caused the DHT to miss its first peer update when joining and become
isolated. This also checks if a name is already registered to avoid
adding it multiple times.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
| |
This will remove google protocol buffers from the flow allocator
component in the normal IPCP. It now uses packed structs, as supported
by the compilers of choice.
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
|
| |
This will remove google protocol buffers from the link state routing
algorithm in the normal IPCP. It now uses packed structs, as supported
by the compilers of choice.
Signed-off-by: Sander Vrijders <[email protected]>
Signed-off-by: Dimitri Staessens <[email protected]>
|
|
|
|
|
|
|
|
|
|
|
| |
This refactors ouroboros to use "program" instead of "application
process" and "process" instead of "application process instance" to
align with current naming in current Operating Systems courses instead
of the ISO nomenclature adopted by RINA. This change permeates through
the entire implementation. Also contains some minor other refactors.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
|
|
| |
The binding of the normal IPCP to its name is moved from the source
code to the irm tool introducing the "autobind" option for the
bootstrap and enroll commands. With this option, the IPCP will be
bound to the IPCP name and the DIF name automatically.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
| |
This fixes accessing buckets when a DHT join fails.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
|
|
| |
The *dist pointer was not reset on failure, causing the caller to try
to free an unmalloced or already freed pointer.
Reported-by: Nick Aerts <[email protected]>
Tested-by: Nick Aerts <[email protected]>
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
|
| |
This adds three build types, DebugASan, DebugTSan and DebugLSan that
enable the Address, Thread and Leak Sanitizer by setting the fsanitize
flag to the compiler. This option is supported by both gcc and clang.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
| |
The lsdb will now list management and data transfer adjacencies.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
|
|
| |
The DHT join operation left an SDU in the rdrbuff for a couple of
seconds during retries, which may cause the system to block if there
is heavy traffic. This patch releases the sdb when the write fails and
creates a new packet for every retry.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This commit deprecates ouroboros_init and ouroboros_fini and adds them
as a constructor or destructor, causing these function to be run
automatically when a program that links to the library calls and exits
main(). For this to fully work, the library had to be split so that we
can avoid the irmd calling these functions (the IRMd has to create the
shm structures on which these calls depend).
The library is split in 3 parts: libouroboros-dev, libouroboros-irm
and libouroboros-common. The latter is linked to the other two so that
including libouroboros-dev or libouroboros-irm will also link
libouroboros-common.
|
|
|
|
|
|
|
|
|
|
| |
This adds a cleanup handler to ensure the lock is released in the
event that the thread is cancelled during a write. An alternative
solution could be to make the flow write in a non-blocking way (only
the blocking write contains an execution path that has a cancellation
point).
Fixes #55
|
|
|
|
|
|
|
|
|
| |
This makes the threadpool use pthread_cancel instead of setting an
exit flag that threadpool managed threads check periodically. This
drastically reduces CPU consumption in the irmd when running a lot of
applications. It requires cancellation handlers in the ipcp and irmd
to be implemented to ensure safe cancellation during operation and
shutdown.
|
|
|
|
|
|
| |
This will let the link state policy react to flow up and down events
by notifying the PFFs of the routing instances of this event so they
can take an appropriate action.
|
|
|
|
|
|
| |
This adds the Loop-Free Alternates (LFA) policy. In case a link goes
down a LFA may be selected to route the SDUs on without causing loops
instead of the main hop that just went down.
|
|\
| |
| |
| | |
Be routing
|
| |
| |
| |
| |
| | |
This adds a refcount to the graph edges so that it is only included in
the calculation if both sides announced it.
|
| |
| |
| |
| |
| | |
This keeps the index in the vertex struct so that is more easily
available during Dijkstra.
|
| |
| |
| |
| |
| |
| | |
This simplifies the Dijkstra implementation by immediately setting the
correct next hop during Dijkstra instead of looping through the list
of predecessors afterwards.
|
| |
| |
| |
| |
| | |
This simplifies several internal graph functions by passing an array
of bools instead of an array of vertices.
|
| |
| |
| |
| |
| |
| | |
This returns a list as routing table instead of a pointer to a pointer
to a pointer, which simplifies the looping through the routing table
and makes it more extensible for future additions.
|
|\ \
| | |
| | |
| | | |
ipcpd: normal: Set clock to realtime clock
|
| |/
| |
| |
| |
| |
| | |
A pthread_cond_wait was using the pthread_cond_clock and thereby
timing out constantly, consuming 100% CPU. This changes it to use the
realtime clock.
|
|/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The lookup_update was waiting for the LU_INIT state to resolve under
dht->lock which prevented that update.
This PR fixes this bug, but leaves a (very rare) bug when the
lookup_destroy is called while the lookup_update is waiting for the
LU_INIT state to resolve. The solution also is a (harmless) lock
inversion, but this is also not the best.
Fixes #51
Fixes #52
|
|
|
|
|
|
|
|
|
|
|
| |
This adds a threadpool manager to the DHT. This was needed because the
detached thread could cause a data race on shutdown.
The threadpool manager is revised to allow multiple instances in a
single program.
The irmd and ipcp now store commands in a buffer (list) instead of a
single buffer before passing it to handler threads.
|
|\
| |
| |
| | |
Some bugfixes
|
| | |
|
|\|
| |
| |
| | |
Some bugfixes
|
| | |
|