summaryrefslogtreecommitdiff
path: root/src/irmd/main.c
Commit message (Collapse)AuthorAgeFilesLines
...
* lib: Demultiplex the fast pathdimitri staessens2016-10-211-7/+7
| | | | | | | | 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: Fix flow deallocation logicdimitri staessens2016-10-131-14/+25
| | | | | Both the N and N-1 entity must now call flow_dealloc for the port_id to be released.
* lib, dev: Add asynchronous deallocationdimitri staessens2016-10-071-27/+18
| | | | | Flow deallocation from the application will immediately return (void call). The IRMd will not send a reply message.
* lib, ipcp: Revise fast path and flow interfacesdimitri staessens2016-10-041-125/+51
| | | | | | | | | | | | 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: Set umask for file creation permissionsdimitri staessens2016-09-071-1/+0
| | | | | Permissions are now set correctly upon creation, removing the need to call fchmod.
* irmd: Fix register with unenrolled IPCPs in systemdimitri staessens2016-09-061-0/+3
| | | | | If there are unregistered IPCPs (no DIF name set) the lookup should skip over them without segfaulting.
* lib: Add northbound ringbuffersdimitri staessens2016-09-021-5/+9
| | | | Fast path is split in north and southbound paths.
* irmd: Fix registering AP-I before binddimitri staessens2016-09-011-2/+7
|
* irmd: Fix binding after registeringdimitri staessens2016-08-311-0/+5
| | | | | Flow will now allocate correctly when the name is registered in a DIF before it is bound to an AP.
* lib: Refactor shm_du_map to shm_rdrbuffdimitri staessens2016-08-291-23/+25
| | | | | | | | | | 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.
* irmd: Revise shutdown proceduredimitri staessens2016-08-261-13/+14
| | | | | Flows are deallocated first, then the socket is closed to prevent IPCPs hanging on the connect.
* irmd: Fix bad lockdimitri staessens2016-08-251-5/+14
|
* irmd: Fix wrong lookupdimitri staessens2016-08-231-1/+2
| | | | ap_table had no function to look for entries by apn.
* irmd: Fix reaping child processesdimitri staessens2016-08-231-3/+4
|
* irmd: Fix cleaning dead AP-Idimitri staessens2016-08-231-2/+1
| | | | | The reg_entry_del_api must be called to correctly set the flow handling state instead of just clearing the entry from the list.
* irmd, ipcp: Unlink file for UNIX socketsdimitri staessens2016-08-221-0/+3
|
* irmd: Add cleanup for new data modeldimitri staessens2016-08-211-54/+60
|
* irmd, lib: Rebuild the IRMd data modeldimitri staessens2016-08-211-272/+496
| | | | | | | | | | | | | | | | | | | | | | The complete data model inside the IRMd has been restructured. The bind operation was revised to allow binding of AP and AP instances and register those names with different DIFs (see "irm bind" for details). Server applications require to call ap_init with a server name argument, client application that do not the be reachable over any DIF can call ap_init(NULL). Calling ap_init for a client with a specified name will not have adverse consequences for the application, but will consume unnecessary resources in the IRMd. Application servers can now be started at any point after the IRMd has been started. Starting servers, binding AP names and registering names in DIFs can be performed in any order that does not defy temporal logic. Supports naming instances by their pid. In case of IPCP Instances created with the IRM tool, the name assigned during "irm ipcp create" can be used. All the changes required updates in the tools.
* Merged in dstaesse/ouroboros/be-api-bind (pull request #203)Sander Vrijders2016-08-101-4/+71
|\ | | | | | | lib, irmd: Bind AP instances to AP_subsets
| * lib, irmd: Bind AP instances to AP_subsetsdimitri staessens2016-08-101-4/+71
| | | | | | | | | | | | | | This call will allow grouping AP instances of a certain AP together which are configured identically. Adds the bind operation to dev and updates the applications to make use of this call. Flow_alloc is now only called with the pid and doesn't send the apn anymore.
* | lib, irmd, ipcp: Add socket timeoutSander Vrijders2016-08-101-7/+10
|/ | | | | | 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.
* Merge branch 'be' of bitbucket.org:ouroboros-rina/ouroboros into be-bugfixingdimitri staessens2016-08-101-2/+61
|\
| * Merged in sandervrijders/ouroboros/be-create-ipcp (pull request #200)dimitri staessens2016-08-101-2/+48
| |\ | | | | | | | | | ipcp, irmd, lib: Notify IRMd upon IPCP initialization
| | * ipcp, irmd, lib: Notify IRMd upon IPCP initializationSander Vrijders2016-08-101-2/+48
| | | | | | | | | | | | | | | | | | This will notify the IRMd when the IPCP is initialized and ready to receive messages. Previously a bootstrap could fail since the IPCP was not listening to the socket yet.
| * | Merged in sandervrijders/ouroboros/be-bootstrap (pull request #199)dimitri staessens2016-08-101-0/+13
| |\ \ | | | | | | | | | | | | Several small fixes and enhancements
| | * | irmd: Remove IPCP from list upon errorSander Vrijders2016-08-101-0/+13
| | |/ | | | | | | | | | | | | | | | | | | If an IPCP crashes (due to a segfault for instance), it is removed from the spawned apis list. However, if it was an IPCP it should also be removed from the IPCPs list, since else on shutdown, the irmd will try to destroy the IPCP that crashed.
* | / irmd: Graceful shutdowndimitri staessens2016-08-101-51/+43
|/ / | | | | | | | | | | 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.
* / irmd: Fix lockingdimitri staessens2016-08-091-2/+2
|/ | | | registry_sanitize_apis should be called under write locked reg_lock.
* irmd: Fix some locking issuesdimitri staessens2016-08-091-3/+4
|
* irmd: Close filedescriptor on exitdimitri staessens2016-08-091-8/+10
|
* lib: Various fixesdimitri staessens2016-08-091-3/+13
| | | | | Fix missing set of api upon flow_alloc. Various locking fixes.
* irmd: Refactor and bugfixesdimitri staessens2016-08-081-189/+131
| | | | | | | Refactors the IRMd to extract reg_api and irm_flow structures to their own sources. Fixes some locking bugs.
* irmd: Remove ipcp type from registration messagedimitri staessens2016-08-041-2/+2
|
* tools: oping: Fix division by zerodimitri staessens2016-08-041-4/+4
| | | | | When killing the oping client before it sent an SDU, some bad operations were being performed.
* irmd: Fix potential object access after freedimitri staessens2016-08-041-0/+1
|
* irmd: Fix destroying allocated flowsdimitri staessens2016-08-041-7/+16
| | | | | When a flow was in FLOW_ALLOCATED state, it would not change to NULL state and irm_flow_destroy would hang forever.
* ipcpd: Fix memory leaksdimitri staessens2016-08-041-1/+1
| | | | ipcp-data was not correctly destroyed.
* lib: Portability to FreeBSDdimitri staessens2016-07-291-22/+24
| | | | | | | | | | 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.
* irmd: Fix allocation resultdimitri staessens2016-07-281-10/+6
| | | | | It was missing the FLOW_PENDING state. All states that are not FLOW_ALLOCATED should return -1. This is now fixed.
* irmd: Fix shutdowndimitri staessens2016-07-271-9/+9
| | | | | | | | When a pending accept is shutdown on irmd exit, there are no more threads running, but it should also change the state to NULL. This is now correctly handled in the cleanup of the cancellation point. Also fixed a busy wait with a condition variable.
* irmd: Revised flow allocationdimitri staessens2016-07-271-419/+393
| | | | | | | | | Flow allocation requests and registered api states revised so all states are tracked with a condition variable. This is a more reliable approach and improves stability of flow allocation. Some other refactoring was also done, such as renaming port_map_entry to irm_flow and hiding some internal structures of the registry.
* irmd: Fix accessing reg_api struct after destroydimitri staessens2016-07-151-0/+30
| | | | | The destroy now only frees after all threads stopped using the object. Also fixes a SEGV when trying to allocate a flow to a remote name.
* irmd: Fix AE name always set to NULLdimitri staessens2016-07-141-5/+6
|
* lib: Remove N-1 DIF param from enroll operationSander Vrijders2016-07-121-13/+1
| | | | | | This removes the parameter N-1 DIF from the enroll operation. IPCPs should just allocate a flow to a DIF name and let the N-1 DIF resolve it.
* irmd: Refactor of registrydimitri staessens2016-07-111-114/+59
| | | | | | Easier names for the functions.The registry now uses a single list to keep track of applications (bindings), moved the auto_exec state per binding.
* irmd: Prioritize local ipcp for local flowsdimitri staessens2016-07-071-44/+84
| | | | | | | | | | For locally registered processes, the IRMd will first look for the local, then the normal, then the shim-udp. It will look for a normal, a shim-eth-llc and ultimately a shim-udp for non-local destinations. It does not yet check if a remote destination is actually known in a DIF. Fixes #18.
* ouroboros: Use ouroboros errno.hdimitri staessens2016-07-071-1/+1
| | | | | All includes of <errno.h> within ouroboros are replaced with the ouroboros errno.
* lib: Add lockfiledimitri staessens2016-07-071-11/+21
| | | | | | | | | | | | 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.
* irmd, ipcps: Close logfile on exitdimitri staessens2016-07-071-3/+5
| | | | | | | IRMd and ipcps will now close the logfile upon exit. Also corrects exit(1) to exit(EXIT_FAILURE) and exit(0) to exit(EXIT_SUCCESS).
* lib:irmd: Fix logs and irm_createdimitri staessens2016-07-061-11/+17
| | | | | | | The irm_create() function called irmd_destroy before some key values were initialized. Logs cleanup was missing.