| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
| |
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 <dimitri.staessens@ugent.be>
Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The frct_pci and rq headers are moved from include/ouroboros to
src/lib since they are only needed in the library. FRCT is moved to
its own source file.
FRCT takes the application PDUs, encapsulates and processes them and
hands them back. This makes it easier to disable FRCT should the
application want to write to a "raw" flow. An FRCT instance is now
allocated upon alloc and released upon dealloc.
The FRCT data structure is split into a sender and receiver connection
record. Setting a new configuration will now be done upon sending the
next data PDU, which will flag the DRF for a new run and use that
configuration. This avoids some issues should packets arrive
out-of-order, and simplifies setting a configuration.
Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be>
Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
|
|
|
|
|
|
|
|
|
|
| |
The FLOWFNONBLOCK flag now has two subflags FLOWFRNOBLOCK and
FLOWFWNOBLOCK which allows setting the behavior of read and write
independently. The default behavior is unchanged (blocking read and
write).
Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be>
Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
|
|
|
|
|
|
|
|
|
|
| |
This revises the library init script so that it checks whether the
program is run by a python executable (python, python2 or python3) and
announces the script name instead of the python interpreter. This
enables binding python scripts.
Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be>
Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
|
|
|
|
|
|
|
| |
There were unnecessary comment lines in cbr.c, this removes them.
Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be>
|
|
|
|
|
|
|
|
|
| |
A more permissive license is needed on the tools since they serve as
example code for programs built on top of the ouroboros-dev and
ouroboros-irm libraries.
Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be>
Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
|
|
|
|
|
|
|
|
| |
This simplifies the echo-app tool implementation to a single source
file since it's meant to be a small example application.
Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be>
Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
|
|
|
|
|
|
|
|
|
|
| |
If the library init() fails, the fini() call tries to access
unreleased resources. The fix resets the ai struct to 0 if init()
fails and checks a heap pointer for NULL before the fini() accesses
internals.
Signed-off-by: dimitri staessens <dimitri.staessens@ugent.be>
Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
|
|\
| |
| |
| |
| |
| | |
#626)
Be deprecate ouroboros init fini
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
|\ \
| |/
|/|
| | |
lib: Re-enable multi-block support
|
| |
| |
| |
| |
| |
| | |
Multi-block support was forgotten during the update of the build
system. This enables it again and fixes some bugs when it is disabled
and larger SDUs are sent.
|
|/
|
|
|
| |
Closing the file descriptor after a while(true) loop led to clang
compiler errors. This is fixed by adding a cleanup handler.
|
|\
| |
| |
| | |
ipcpd: Handle cancellation while writing LSAs
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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 adds the --version option to the IRMd. With this option it will
print the version of Ouroboros to stdout and exit. Checking the
version does not require root privileges.
Also fixes calling log functions before log_init() and after
log_fini().
|
|
|
|
|
|
| |
This allows the IPCPs to call ouroboros_fini() and clean up their
buffers and drastically reduce chances of getting an assertion error
that some rbuffs are not empty when shutting down the irmd.
|
|
|
|
|
|
|
|
|
| |
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
|
| | |
|
| |
| |
| |
| |
| |
| | |
There was a return -1 in the allocate call which is unsafe since -1
may be a valid id in the bitmap. Since it's a data structure for
internal use, I replaced the NULL checks with assertions.
|
|\|
| |
| |
| | |
Some bugfixes
|
| | |
|
| |
| |
| |
| |
| | |
This fixes a data race in the shim-udp where the alloc_lock was
released before the ipcpi.alloc_id was set.
|
| |
| |
| |
| |
| | |
This disables the lockless rbuff by default since it is less stable
and tested.
|
|/ |
|
| |
|
| |
|
|\
| |
| |
| | |
ipcpd: Cancel threads in IPCPs
|
| |
| |
| |
| |
| |
| | |
This reduces CPU consumption and shutdown times.
Invalidates #43
|
|\ \
| |/
|/|
| | |
ipcpd: normal: Add alternate hop PFF
|
| |
| |
| |
| |
| | |
This adds a PFF that returns an alternate hop as next hop in case the
hop that would have been returned is down.
|
|/
|
|
|
|
|
|
|
| |
This revises the sdu_scheduler of the normal IPCP to create a
scheduler thread per QoS cube and let the kernel scheduler schedule
them based on a priority. Priorities can be set at build time in a
range of 0-100, which will be mapped onto a suitable priority for the
kernel scheduler. The current scheduler policy is fixed to SCHED_RR
since it is the most suitable scheduler defined by POSIX.
|
|
|
|
| |
This avoids potential data races on rib.fuse.
|
|\
| |
| |
| | |
ipcpd: Handle DHT SDUs in different thread
|
| |
| |
| |
| |
| |
| |
| | |
The DHT will now spawn a thread when receiving SDUs to avoid
starvation of sdu scheduler threads.
Also fixes some locking issues.
|
|\ \
| |/
|/|
| | |
ipcpd: normal: Make PFF policy-based
|