summaryrefslogtreecommitdiff
path: root/src/lib
Commit message (Collapse)AuthorAgeFilesLines
* lib: Fix FRCT sequence number network endiannessDimitri Staessens2017-11-092-4/+9
| | | | | | | | Endianness conversion from/to the network for the sequence number was missing in 68694bc. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* lib: Use packed struct for FRCT header accessDimitri Staessens2017-11-086-259/+140
| | | | | | | | | | | | | | | This replaces the variable FRCT header with a packed struct, which significantly simplifies the implementation. The shm_du_buff calls to release the head/tail are updated to return a pointer to the original head or the new tail (in symmetry to the alloc calls, which return a pointer to the new head and old tail), so that it immediately points to the structure that is needed. The frct_pci sources are removed and frct is now fully in the frct.c source file. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* lib: Refactor FRCT implementationDimitri Staessens2017-11-077-543/+683
| | | | | | | | | | | | | | | | | | | | 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>
* dev: Split nonblocking read and writeDimitri Staessens2017-10-301-2/+2
| | | | | | | | | | 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>
* dev: Bind python scripts to script nameDimitri Staessens2017-10-251-0/+13
| | | | | | | | | | 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>
* lib: Fix exit bug in dev.cdimitri staessens2017-10-231-0/+4
| | | | | | | | | | 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>
* Merged in dstaesse/ouroboros/be-deprecate-ouroboros-init-fini (pull request ↵dimitri staessens2017-10-143-33/+62
|\ | | | | | | | | | | #626) Be deprecate ouroboros init fini
| * lib: Deprecate ouroboros_init and ourboros_finidimitri staessens2017-10-143-33/+62
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 supportdimitri staessens2017-10-133-0/+5
|/ | | | | | 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.
* lib: Cancel tpm threads instead of marking exitdimitri staessens2017-09-301-41/+21
| | | | | | | | | 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.
* ipcpd: Add threadpool manager to DHTdimitri staessens2017-09-241-75/+87
| | | | | | | | | | | 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.
* Merged in dstaesse/ouroboros/be-bugfixes (pull request #614)dimitri staessens2017-09-231-46/+39
|\ | | | | | | Some bugfixes
| * lib: Clean up bitmap implementationdimitri staessens2017-09-231-46/+39
| | | | | | | | | | | | 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.
* | lib: Disable lockless rbuff by defaultSander Vrijders2017-09-221-2/+2
|/ | | | | This disables the lockless rbuff by default since it is less stable and tested.
* lib: Include string.h in hashtable.c for memcpydimitri staessens2017-09-211-0/+1
|
* ipcpd: normal: Add alternate hop PFFSander Vrijders2017-09-212-23/+46
| | | | | This adds a PFF that returns an alternate hop as next hop in case the hop that would have been returned is down.
* lib: Pass the fuse struct to the handling threaddimitri staessens2017-09-211-4/+2
| | | | This avoids potential data races on rib.fuse.
* Merged in sandervrijders/ouroboros/be-pff (pull request #604)Sander Vrijders2017-09-202-3/+6
|\ | | | | | | ipcpd: normal: Make PFF policy-based
| * ipcpd: normal: Make PFF policy-basedSander Vrijders2017-09-202-3/+6
| | | | | | | | | | This turns the PDU Forwarding Function of the IPCP into a policy. For now only the simple PFF policy is available.
* | ipcpd: Fix shutdown of ribdimitri staessens2017-09-201-0/+3
|/ | | | Fixes #50
* irmd: Init libgcrypt before using itdimitri staessens2017-09-202-3/+2
|
* build: Notify if FUSE is not installeddimitri staessens2017-09-191-0/+2
|
* ipcpd: Enroll DHT when creating dt connectiondimitri staessens2017-09-191-4/+9
| | | | | | | | | The DHT will now enroll or sync when a data transfer connection is added. This avoids the need to create a temporary data transfer connection during enrollment (and speeds it up considerably). The notifier system was modified to take an opaque pointer to the object that registers as a parameter.
* ipcpd, lib: Add flow down eventsSander Vrijders2017-09-194-57/+113
| | | | | | | | This adds the flow down event to Ouroboros. In the shim-eth-llc, a netlink socket is opened which listens to device up/down events. For each event the flow is then adjusted with fccntl to notify the user the flow is down or back up again. In the normal IPCP an event is thrown if a write reports that the flow is down.
* lib: Provide RIB API to export internals via fusedimitri staessens2017-09-183-4/+417
| | | | | | | This adds a virtual RIB that is accessible as a filesystem that is accessed through a fuse mountpoint (configurable , default is /tmp/ouroboros). Currently, each IPCP will export its link state database.
* lib: Add reordering queue to FRCTSander Vrijders2017-09-155-13/+331
| | | | | This adds a reordering queue to FRCT so that SDUs can be delivered in-order when requested.
* build: Fix DDNS tool detection for shim-udpdimitri staessens2017-09-131-6/+5
| | | | | | This fixes output when detecting DDNS tools and homogenizes output and the APIs used to pass variables between the build system and the sources. Fixes some minor issues and typos).
* ipcpd: Revise internals of normal IPCPdimitri staessens2017-09-1211-2944/+132
| | | | | | | | This removes the RIB as a datastructure and CDAP as the protocol between IPCPs. CDAP, the rib and related sources are deprecated. The link-state protocol policy is udpated to use its own protocol based on a simple broadcast strategy along a tree. The neighbors struct is deprecated and moved to the library as a generic notifier component.
* build: Add systemd unit on installSander Vrijders2017-09-051-1/+1
| | | | This adds a systemd unit for the irmd on installation of Ouroboros.
* lib: Add per instance FRCT lockSander Vrijders2017-09-011-21/+35
| | | | | This adds a per instance FRCT lock, since it was taking a write lock, thereby severely impacting parallelism in dev.c
* lib: Add fccntl configuration commanddimitri staessens2017-08-314-156/+133
| | | | | | | This replaces the flow_set_* commands with a single fccntl command that can configure flows and the FRCT instance. For more details, see "man 3 fccntl".
* irmd: Fix deleting corrupt shm fileSander Vrijders2017-08-291-0/+12
| | | | | This will delete the rdrbuff also when it has been corrupted before. Otherwise the irmd won't start, as experienced on my desktop.
* Merged in sandervrijders/ouroboros/be-fix-authors (pull request #575)Sander Vrijders2017-08-295-10/+10
|\ | | | | | | lib, ipcpd: Fix e-mail addresses in protobuf files
| * lib, ipcpd: Fix e-mail addresses in protobuf filesSander Vrijders2017-08-295-10/+10
| | | | | | | | This fixes the wrong e-mail addresses in the protobuf files.
* | dev: Revise fqueue API and add man pagesdimitri staessens2017-08-292-30/+30
|/
* lib, ipcpd, irmd: Fix bugs reported by static analysisSander Vrijders2017-08-296-8/+20
| | | | This fixes several bugs as reported by the clang static analyzer.
* Merged in dstaesse/ouroboros/be-deprecate-gam (pull request #572)dimitri staessens2017-08-286-33/+91
|\ | | | | | | Be deprecate gam
| * tools: Add tool to connect IPCP componentsdimitri staessens2017-08-283-20/+84
| | | | | | | | | | | | | | | | | | | | | | | | 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.
| * ipcpd: Deprecate gam as autonomous componentdimitri staessens2017-08-284-13/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | lib: Add configuration message to FRCTSander Vrijders2017-08-262-95/+173
|/ | | | | This adds the configuration message to FRCT, which allows for configuring the connection.
* lib: Fix bad locking in frcti_readSander Vrijders2017-08-251-1/+1
| | | | A read lock was taken when a write lock was needed.
* lib, ipcpd, irmd: Fix several memleaksSander Vrijders2017-08-232-1/+2
| | | | | This fixes several memleaks as reported by valgrind. It also fixes some calls to close() with -1.
* lib: Make sender and receiver inactivity simple checksSander Vrijders2017-08-231-153/+68
| | | | | | This makes the sender and receiver inactivity timers into simple checks that compare when the last SDU was sent to the current time to set the receiver or sender inactivity.
* lib: Remove bad assertionSander Vrijders2017-08-231-1/+0
| | | | | Timeout was asserted not to be NULL, but sometimes timeout can be NULL and is a valid parameter when NULL.
* lib: Fix timeout value of flow_event_waitSander Vrijders2017-08-222-5/+7
| | | | | shm_flow_set_wait was called with a timeout even though flow_event_wait was called with timeout NULL.
* lib: Fix calling frct_clear in wrong functionSander Vrijders2017-08-221-2/+2
| | | | frct_clear was called in ouroboros_fini instead of ouroboros_init.
* lib: Fix CRC check and add frct_clearSander Vrijders2017-08-223-16/+41
| | | | | | This adds the CRC check by default on outgoing SDUs. It fixes some errors in the serialization and deserialization of the SDU. frct_clear was added to avoid bad initialization of the array of FRCT instances.
* Merged in sandervrijders/ouroboros/be-tw (pull request #560)Sander Vrijders2017-08-224-164/+25
|\ | | | | | | Be tw
| * lib: Make timerwheel a passive componentSander Vrijders2017-08-223-162/+23
| | | | | | | | | | | | This turns the timerwheel into a passive component since it is used by application using the library. The user of the timerwheel now has to call timerwheel_move to advance the timerwheel.
| * lib: Fix check for robust mutexesSander Vrijders2017-08-221-2/+2
| | | | | | | | | | There was an else clause matched with the wrong if statement, resulting in robust mutexes being enabled even in glibc 2.25.