summaryrefslogtreecommitdiff
path: root/src/lib/CMakeLists.txt
Commit message (Collapse)AuthorAgeFilesLines
* build: Add options for debug builds with sanitizerDimitri Staessens2017-11-141-2/+2
| | | | | | | | | 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 <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* build: Set libraries for OpenSSL when not foundDimitri Staessens2017-11-141-0/+1
| | | | | | | | | The build didn't reset the CMake variable for OPENSSL_LIBRARIES, causing bad input to the linker. This error showed up when trying to build on XUbuntu 17.10 without OpenSSL or libgrcypt installed. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* build: Avoid duplicate definitions in librariesDimitri Staessens2017-11-131-4/+2
| | | | | | | | There were sources defined in multiple libraries. This issue was reported by the address sanitizer on FreeBSD. 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-081-1/+0
| | | | | | | | | | | | | | | 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>
* Merged in dstaesse/ouroboros/be-deprecate-ouroboros-init-fini (pull request ↵dimitri staessens2017-10-141-19/+45
|\ | | | | | | | | | | #626) Be deprecate ouroboros init fini
| * lib: Deprecate ouroboros_init and ourboros_finidimitri staessens2017-10-141-19/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-131-0/+2
|/ | | | | | 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: Disable lockless rbuff by defaultSander Vrijders2017-09-221-2/+2
| | | | | This disables the lockless rbuff by default since it is less stable and tested.
* irmd: Init libgcrypt before using itdimitri staessens2017-09-201-1/+1
|
* build: Notify if FUSE is not installeddimitri staessens2017-09-191-0/+2
|
* ipcpd, lib: Add flow down eventsSander Vrijders2017-09-191-0/+2
| | | | | | | | 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-181-2/+23
| | | | | | | 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-151-0/+1
| | | | | 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-121-9/+2
| | | | | | | | 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: Fix CRC check and add frct_clearSander Vrijders2017-08-221-1/+1
| | | | | | 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.
* build: Revise the build systemdimitri staessens2017-08-211-15/+89
| | | | | | | | | | 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: Add basic FRCT mechanismsSander Vrijders2017-08-171-0/+2
| | | | | | | | | | This adds the basic FRCT mechanisms to the library. Upon flow alloc or accept an FRCT instance is now created and used when reading or writing to the flow. The timerwheel has been refactored to allow recharging timers and removing them and is now part of the library. The first SDU sent over the connection has the DRF set and this initializes the connection. Sender and receiver inactivity timers are added.
* build: Fix compilation on OS X Sierradimitri staessens2017-08-111-14/+21
|
* build: Reset LIBGCRYPT_LIBRARIES when not founddimitri staessens2017-08-101-0/+2
|
* build, lib, ipcpd, irmd: Add support for libgcryptdimitri staessens2017-08-091-23/+44
| | | | | | | | | | | | | | | | 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.
* build: Add check for robust mutexesSander Vrijders2017-08-031-2/+1
| | | | | | This adds a check for robust mutexes. The constant HAVE_ROBUST_MUTEX is set accordingly in config.h. It also adds some other fixes to make the prototype compile on the Hurd.
* lib: Simplify initializing flowsSander Vrijders2017-08-011-2/+1
| | | | | This refactors dev.c to have a common function called init_flow that is called whenever a flow is allocated in dev.c
* lib: Add threadpool managerdimitri staessens2017-07-261-0/+1
| | | | | | | | This adds a threadpool manager component in the library that is used in the IRMd and IPCPs. The threadpool manager now doesn't detach threads but does a join when they exit. This solves a data race in the previous implementation where some threads were not completely finished upon release of some resources.
* lib: Add secure random generatordimitri staessens2017-07-091-5/+30
| | | | | This adds a secure random number generator. It will use OS specific calls with a fallback to OpenSSL if available.
* lib, ipcpd, irmd: Add full-fledged QoSSander Vrijders2017-06-211-1/+4
| | | | | | | 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, ...
* lib: Add implementation for MD5 hashesdimitri staessens2017-04-161-0/+1
|
* lib, ipcpd, irmd: Register hash instead of namedimitri staessens2017-04-131-1/+2
| | | | | | | | | 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.
* build: Format CMakeLists.txt filesSander Vrijders2017-03-031-9/+9
| | | | The CMakeLists files are now properly indented.
* lib: Split authentication from CACEPdimitri staessens2017-02-271-12/+2
| | | | | | | By removing authentication as part of CACEP, all policies disappear. CACEP becomes a policy-free connection establishment protocol between Application Entities. Authentication can later be added cleanly as a pure policy function when needed.
* lib: Exchange protocol info during CACEPdimitri staessens2017-02-211-0/+6
| | | | | | | | | This exchanges a protocol name, a protocol version and concrete syntax for the protocol upon CACEP. For CDAP, only version 1 and GPB are supported. No lists for other supported versions or syntaxes are exchanged (but the proto file supports it). CACEP fails if there is a mismatch between the protocol names, version and syntax specified by the communicating parties.
* lib: Revise CACEPdimitri staessens2017-02-201-3/+7
| | | | | | | | | Revises CACEP policies to stateless library calls. It provides two policies: an anonymous authentication policy that will generate random credentials for the peer, and a simple authentication policy that will return a name for the peer and an address. Changes the normal IPCP to use the updates API calls.
* lib: Add packing and unpacking RIBdimitri staessens2017-01-311-1/+2
| | | | | | | | | | | | | | | | | | | The rib_pack function allows packing a subtree of the RIB for dissemination. The options PACK_HASH_ROOT and PACK_HASH_ALL will add the hashes for the root object of the packed subtree or every object to the packed message respectively. Checking of the hashes is currently only performed at the top level object, verifying the complete operation. The rib_unpack function unpacks a packed message and inserts its contents in the RIB. The option UNPACK_CREATE flags that the unpack operation is allowed to create new objects, else it will only update existing objects. More advanced options could be added in the future. The packed message structure uses Google Protocol Buffers, as defined in ro.proto. It adds tests for these functions to the rib_test.
* lib: Add new version of Resource Information Basedimitri staessens2017-01-211-0/+1
| | | | | | | | | | | | The new RIB is implemented as a tree with doubly linked nodes (parents keep a link to each child, each child keeps a link to its parent). An index is kept in a btree using CRC32 hashes of the path name in the RIB. Nodes keep an SHA3-256 hash value that is unique for the entire subtree. This allows quick checks to see if two RIB subtrees are in sync. The event system for the RIB is based on the event system for flows (fqueue), but implemented completely in dynamic memory using linked lists. An initial test is performed for the RIB. This PR does not modify existing code to use the new RIB.
* lib: Add B-tree implementationdimitri staessens2017-01-161-0/+1
| | | | | Adds an implementation of B-trees of order k (k children, min fill is k/2, max fill k - 1). Useful to implement indexes for faster lookups.
* lib: Move CRC32 implementation to librarydimitri staessens2017-01-141-0/+1
| | | | The CRC32 implementation will be used to ID objects in the RIB.
* Merged in sandervrijders/ouroboros/be-gam (pull request #345)dimitri staessens2017-01-121-5/+6
|\ | | | | | | Be gam
| * lib: Add Common Application Connection Establishment PhaseSander Vrijders2017-01-091-5/+6
| | | | | | | | | | | | This adds CACEP to the library, which can be used for authenticating the other party after flow allocation and for obtaining other relevant information.
* | lib: Add SHA3 hash functiondimitri staessens2017-01-111-0/+1
|/ | | | | | Adds an SHA-3 hash implementation that will be used in the rib, adapted and redistributed from the RHASH project (https://github.com/rhash/RHash)
* ipcpd, lib: Refactor normal ipcp and cdapdimitri staessens2016-12-241-0/+1
| | | | | Refactors the normal IPCP fmgr and ribmgr, and modifies the API for cdap so that no callbacks are needed.
* lib, ipcpd: Add hashtable and PDU Forwarding FunctionSander Vrijders2016-12-211-0/+1
| | | | | | | This adds a hash table that takes 64-bit integers as key and uses separate chaining on collision. It also adds the PDU Forwarding Function, which the Flow Manager can use to lookup the fd towards the next hop. Routing policies will add/update/remove entries in the PFF.
* lib: Demultiplex the fast pathdimitri staessens2016-10-211-1/+2
| | | | | | | | The fast path will now use an incoming ring buffer per flow per process. This necessitated the development of a new method for the asynchronous io call, which is now based on an event queue system for scalability (fqueue). The ipcpd's and tools have been updated to this API.
* lib, ipcp: Revise fast path and flow interfacesdimitri staessens2016-10-041-1/+0
| | | | | | | | | | | | IPCPs can now use ap_init() to initialize the memory. All flows are accessed using flow descriptors, this greatly simplifies IPCP development. Reverts the fast path to a single ap_rbuff per process. Splits lib/ipcp into irmd/ipcp and lib/ipcp-dev. Adds a lib/shim-dev holding tailored functions for shims. Moves the buffer_t to utils.h. Fixes the shim-eth-llc length field. Removes the flow from shared.h. Fixes #4 Fixes #5
* lib, ipcp: Compile on Apple junkdimitri staessens2016-08-301-3/+7
| | | | | | Disables robust mutexes and clock attributes for condition variables for compatibility with OSX (SUSv2). Implements clock_gettime and adds some defines for OSX compatibility in time_utils.
* lib: Refactor shm_du_map to shm_rdrbuffdimitri staessens2016-08-291-1/+1
| | | | | | | | | | The shm_du_map is renamed to shm_rdrbuff to reflect the Random Deletion Ringbuffer used in the implementation. The close_on_exit call is removed and SDUs are cleaned up by the application in the ap_fini() call. This required a non-blocking peek() operation in the shm_ap_rbuff. Some initial implementation for future support of qos cubes has been added to the shm_rdrbuff.
* build: Fix wrong inclusionSander Vrijders2016-07-261-2/+0
| | | | | | The protobuf include directory was not being correctly handed to the compiler when building. Now the include directory is added project-wide. And the protobuf package is searched for only once.
* lib: Add lockfiledimitri staessens2016-07-071-0/+1
| | | | | | | | | | | | The pid of the IRMd is stored in a lockfile in shared memory. This makes checking if the IRMd is running independent of the configuration, as previously the IRMd pid was stored at the end of the shm_du_map, which could not be read by an IRMd that would be compiled with different configuration options. Also corrects some unnecessary includes Fixes #21.
* lib, irmd, ipcpd: Provide the feature to write to logsSander Vrijders2016-07-061-0/+1
| | | | | | | | | | Writing output to log files is now enabled by default. Logs are written to <INSTALL_PREFIX>/var/log/ouroboros, which is created on install. There is a log file for the irmd and one per IPCP. To still get (colored) output on stdout, provide the --stdout switch when starting the irmd. Fixes #17
* lib: Provide first implementation of revised CDAPSander Vrijders2016-07-051-2/+5
| | | | | | | | This commit introduces a first version of the revised CDAP specification. CACEP (for authentication purposes) has been separated from CDAP. Application developers may use CDAP if they find it useful. Within Ouroboros CDAP will be used to perform operations on the RIB of an IPCP.