summaryrefslogtreecommitdiff
path: root/include/ouroboros/shm_ap_rbuff.h
Commit message (Collapse)AuthorAgeFilesLines
* lib: Demultiplex the fast pathdimitri staessens2016-10-211-73/+0
| | | | | | | | 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: Stabilize fast flow deallocation over local IPCPdimitri staessens2016-10-151-1/+1
|
* lib: Track SDUs in the fast pathdimitri staessens2016-10-111-0/+6
| | | | | | This will allow to finalize deallocating flows until all SDUs have been processed. Read and write calls will now block when a flow was deallocated. Replaces NULL checks in the fast path with asserts.
* lib: Fix shutdown with pending SDUsdimitri staessens2016-10-061-1/+1
| | | | | The SDU's were not correctly removed upon shutdown, peek should be pop.
* lib, ipcp: Revise fast path and flow interfacesdimitri staessens2016-10-041-10/+2
| | | | | | | | | | | | 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: dev: Provide a set of fds to flow_selectdimitri staessens2016-09-061-1/+4
| | | | | | | The flow_select call now takes as a parameter a flow_set_t, which specifies a set of flow descriptors that will unblock the select call when an SDU for one of them arrives. The select call has been moved to its own header.
* lib: Add northbound ringbuffersdimitri staessens2016-09-021-6/+24
| | | | Fast path is split in north and southbound paths.
* lib: Refactor shm_du_map to shm_rdrbuffdimitri staessens2016-08-291-2/+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.
* lib: Various fixesdimitri staessens2016-08-091-1/+0
| | | | | Fix missing set of api upon flow_alloc. Various locking fixes.
* lib: Revise blocking I/Odimitri staessens2016-08-031-0/+3
| | | | | | | | | 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.
* lib: dev: Add select-like calldimitri staessens2016-08-031-0/+3
| | | | | | | This adds a flow_select() call that will sleep until an SDU can be read on a flow. It returns the file descriptor for which an SDU is ready. It takes as optional argument a timespec struct to specify a timeout.
* lib: robust locking in shared memory and crash recoverydimitri staessens2016-07-021-10/+4
| | | | | | | | | | | | | | 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
* tools: updated cbr with flood and sleep optionsdimitri staessens2016-05-271-1/+1
| | | | | | | The cbr client will now use busy waiting by default to control the sending rate. A --sleep option has been added to allow low CPU usage when sending at low data rates. A --flood option has been added that writes SDU's as fast as possible.
* lib, ipcpd, irmd: fixes deallocation and fast pathdimitri staessens2016-05-221-2/+3
| | | | | | The fast path has been rewritten to have certainty to read the correct flow. Deallocation will not release port_id's or fd's until they are explicitly released locally.
* lib: allow parallel connectionsdimitri staessens2016-05-201-0/+1
| | | | | | dev.c: read now only reads an SDU if is is for the correct port_id shm_ap_rbuff: added a function peek() that returns the port_id of the tail.
* lib: Add missing modulo calculationSander Vrijders2016-05-161-2/+2
| | | | | | Adds a missing modulo calculation that would result in index -1 being returned instead of zero when the ringbuffer skipped back to the beginning.
* lib: changed SHM_AP_RBUFF to SHM_AP_RBUFF_PREFIXdimitri staessens2016-05-081-1/+1
| | | | This better reflects the use as the pid is appended to that name.
* irmd: flow allocation and fast pathdimitri staessens2016-05-071-0/+52
This commit has a first implementation of flow allocation (the "slow path") and read/write (the "fast path") for ouroboros. It provides basic but unstable communications over the shared memory. It required a lot of changes all over the stack, and fixes a number of previously undetected issues. This PR still need heavy revision regarding data model, locking and cleanup. lib/dev: modifications to the API. It now uses an ap_init() call to set the AP name and sets the Instance ID to the pid of the process. It also binds the AP to the shared memory and creates tables for mappings in the fast path. A call to ap_fini() releases the resources. lib/shm_ap_rbuff: added ring buffer for data exchange between processes in the fast path. It passes an index in the shm_du_map. lib/shm_du_map: rewrote API to work with calls from dev.c. Garbage collector added. Tests updated to new API. ipcpd/ipcp-data: removed everything related to flows, as these are universal for all ap's and kept in ap_data (dev.c), or similar structs for shim ipcps. shim-udp: added flow allocator and read/write functions and shm elements. irmd: revised data model and structures necessary for flow allocation. tools: echo updated to new dev.h API. messaging system was updated to comply with new flow allocation messages. All exchanges use pid and port_id to bootstrap the fast path.