summaryrefslogtreecommitdiff
path: root/include/ouroboros/config.h.in
Commit message (Collapse)AuthorAgeFilesLines
* ipcpd, lib: Revise normal IPCPdimitri staessens2017-02-061-2/+7
| | | | | | | | | | This PR updates the normal IPCP to use the new RIB. The old ribmgr is removed and replaced by a stub that needs to be implemented. All components (dir, fmgr, frct) were adapted to the new RIB API. A lot of functionality was moved outside of the ribmgr, such as the addr_auth, which is now a component of the IPCP. The address is also stored to the ipcpi struct. The irm tool has an option to set the gam policy of the rib manager.
* 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.
* build: Update licenses and copyrightdimitri staessens2017-01-091-10/+11
| | | | | Copyright is set to 2016 - 2017. License text on includes and sources in the library are changed to indicate the LGPLv2.1 license.
* ouroboros: Correct license statementsdimitri staessens2016-12-241-3/+2
| | | | | This corrects the license statements on all files. Installed headers are LGPLv2.1, the rest of the code is GPLv2.
* 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.
* ipcpd: Add threadpool for main loopSander Vrijders2016-10-261-0/+1
| | | | | | | This adds a threadpool for the main loop of the IPCPs. Before there was a single thread handling each request, which could result in starvation since performing name queries at the same time as enrolling a normal IPCP was impossible.
* build: Compile with strict conversiondimitri staessens2016-10-221-1/+1
| | | | | This has the code checked with -Wcast-qual and -Wconversion flags. These flags were removed because SWIG generated code fails.
* lib: Demultiplex the fast pathdimitri staessens2016-10-211-1/+3
| | | | | | | | 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: Refactor shm_du_map to shm_rdrbuffdimitri staessens2016-08-291-3/+3
| | | | | | | | | | 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.
* ipcpd: Revised lockingdimitri staessens2016-08-241-0/+1
| | | | | | The state lock was reverted to an rwlock to avoid interference of management functions with the fast path. IPCPs now close without calling unsafe functions in the signal handler.
* ipcpd: normal: Handle enrollment repliesSander Vrijders2016-08-191-4/+8
| | | | | | | | This adds a condition variable with a timeout to the CDAP request so that we can respond correctly to the answer from the remote. It also adds a timeout to the condition variable waiting on completion of enrollment. Furthermore, for every CDAP callback a new thread is now spawned, to avoid deadlocking in case a callback is stuck.
* lib, irmd, ipcp: Add socket timeoutSander Vrijders2016-08-101-0/+1
| | | | | | This will add a timeout to the socket so that a process won't be blocked by the actions of the process with which it is communicating over the socket.
* irmd: Graceful shutdowndimitri staessens2016-08-101-0/+1
| | | | | | Threads from the threadpool will now check the state of the IRMd and exit gracefully without a need to cancel them. This avoids the unsafe call of pthread_cancel in the signal handler.
* lib: Revise blocking I/Odimitri staessens2016-08-031-2/+1
| | | | | | | | | Blocking I/O now uses condition variables in the shared memory instead of busy waiting. Timeouts can be specified. This requires the size of the rbuffs and du_map to be the same, to guarantee that when the shm_du_map is not full, the ap_rbuffs can't be full either. Added the timeout option to the flow for future use.
* Merged in sandervrijders/ouroboros/be-enrolment (pull request #182)dimitri staessens2016-08-011-1/+1
|\ | | | | | | Be enrolment
| * ipcpd: normal: Provide initial steps for enrollmentSander Vrijders2016-07-271-1/+1
| | | | | | | | | | | | This provides the normal IPCP with bootstrapping and the initial steps for enrollment. Next step is actually reacting to an enrollment request and sending the data transfer constants.
* | lib: Portability to FreeBSDdimitri staessens2016-07-291-3/+7
|/ | | | | | | | | | Various portability fixes for FreeBSD. POSIX requires shm file names to start with a "/" to be portable. lseek(2) can be undefined on POSIX shm, replaced with ftruncate(2). IRMd check on existing lockfile more portable. FreeBSD 11.0 is preferred as it natively supports robust mutexes. Full working LLC implementation pending.
* lib: Add lockfiledimitri staessens2016-07-071-2/+3
| | | | | | | | | | | | 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
* irmd: Move registry to its own sourcesdimitri staessens2016-07-051-0/+3
| | | | | All registry functionality has been extracted from the IRMd to improve modularity and legibility of the code.
* lib: shm_du_map full multi-block supportdimitri staessens2016-07-031-1/+2
| | | | | | | shm_du_map now fully supports multi-block SDU's when the SHM_DU_MAP_MULTI_BLOCK compilation flag is set (enabled by default). Fixes #11.
* lib: robust locking in shared memory and crash recoverydimitri staessens2016-07-021-1/+7
| | | | | | | | | | | | | | This PR enhances the shared memory providing recovery if a process crashes. It adds a SHM_DU_TIMEOUT_MICROS variable, setting an expiration time for SDU's when shared memory is full. If an application doesn't read a blocking SDU within this time, the shared memory will be cleansed of all SDU's for this application and the application's rbuff will be cleared. Some refactoring of the API's. Fixed wrong pthread checks in IRMd. Fixes #13 Fixes #14
* build: Fix installation prefixSander Vrijders2016-06-271-1/+1
| | | | | | The installation prefix was taking a trailing backslash, while it is common not to do so. Fixed it so that any trailing backslash is removed by the compilation and installation scripts.
* lib, irmd, ipcp: robust mutexesdimitri staessens2016-06-211-1/+1
| | | | | | | | Update to POSIX 200112L to allow use of robust mutexes in the shm_du_map. Removed the implementation of the rw_lock in favor of pthread_rwlock_t. Placeholder for the shm_du_map_sanitize function.
* ipcpd: Adds a shim over IEEE 802.2 over IEEE 802.3Sander Vrijders2016-06-141-10/+11
| | | | | This adds a shim over LLC over Ethernet. It uses the raw socket API to send messages directly over an interface.
* ipcpd: IPCP over local memorydimitri staessens2016-05-281-0/+1
| | | | | | | | | | | | | This introduces an IPC process that relays data between two local AP's over the shm_du_map. Only configuration it has is a DIF name. It required small modification elsewhere: lib: added support for the IPCP_LOCAL type irm: added support for the IPCP_LOCAL type dif_config: added the IPCP_LOCAL type tools: added support for the IPCP_LOCAL type
* ipcpd: Allow disabling of DNSSander Vrijders2016-05-101-2/+3
| | | | | | This allows someone to disable the use of DNS in the shim UDP. It also adds a config file specific for the shim UDP (which holds the nsupdate location). Certain defines were also moved to the global config file.
* ipcpd: Add registration to DNS serverSander Vrijders2016-04-271-0/+1
| | | | | This adds support for adding the application name to a BIND DNS server through the nsupdate utility.
* ipcpd: initial IPC processesdimitri staessens2016-04-181-5/+7
| | | | | | | | | | | Basic functions for implementation of IPC processes, and implementation of core functions of the shim IPCP over UDP. Updates to the build system to compile these IPC processes, as well as some fixes in the irmd (rudimentary capturing exit signals) and some fixes in the library, mainly relating to the messaging. Basic implementation of creation / bootstrapping / deletion of the shim UDP. Placeholders for other functions.
* lib, irmd: Update communication with IRMdSander Vrijders2016-03-301-4/+5
| | | | | All messages sent to the IRMd now also get a reply back with the result of the operation.
* irmd, lib: Create and destroy IPC ProcessesSander Vrijders2016-03-151-0/+31
This adds the functionality to create and destroy IPCPs. Upon creation a new process is forked and execve'd. Upon destruction the IPCP is destroyed by killing it with SIGTERM.