summaryrefslogtreecommitdiff
path: root/src/lib/shm_ap_rbuff.c
Commit message (Collapse)AuthorAgeFilesLines
* lib, ipcp: Revise fast path and flow interfacesdimitri staessens2016-10-041-42/+8
| | | | | | | | | | | | 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: Fix shm for evil devicesdimitri staessens2016-09-081-2/+2
| | | | | | Cupertino's finest don't seem to support a write call with a filedescriptor that points to a shared memory file. ENOTSUP is not mentioned in their manpage either. Classic.
* lib: Set umask for file creation permissionsdimitri staessens2016-09-071-5/+4
| | | | | Permissions are now set correctly upon creation, removing the need to call fchmod.
* lib: dev: Provide a set of fds to flow_selectdimitri staessens2016-09-061-6/+82
| | | | | | | 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-7/+44
| | | | Fast path is split in north and southbound paths.
* lib, ipcp: Compile on Apple junkdimitri staessens2016-08-301-18/+41
| | | | | | 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-2/+26
| | | | | | | | | | 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: normal: Handle enrollment repliesSander Vrijders2016-08-191-2/+0
| | | | | | | | 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: Various fixesdimitri staessens2016-08-091-13/+0
| | | | | Fix missing set of api upon flow_alloc. Various locking fixes.
* lib: shm_ap_rbuff: Fix cleanup of locksdimitri staessens2016-08-091-29/+20
|
* lib: shm_ap_rbuff: Fix endless waitdimitri staessens2016-08-081-17/+37
| | | | | When the rbuff was empty, the blocking read would wait forever for a read.
* lib: shm_ap_rbuff: Remove obsolete clean functiondimitri staessens2016-08-061-15/+0
|
* lib: shm_ap_rbuff: Fix memleakdimitri staessens2016-08-041-0/+1
|
* lib: Revise blocking I/Odimitri staessens2016-08-031-32/+94
| | | | | | | | | 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-59/+113
| | | | | | | 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.
* Merged in sandervrijders/ouroboros/be-enrolment (pull request #182)dimitri staessens2016-08-011-1/+1
|\ | | | | | | Be enrolment
| * ipcpd: normal: Allow initiating enrollmentSander Vrijders2016-08-011-1/+1
| | | | | | | | | | | | | | This will add more functionality for enrolling two normal IPCPs with each other. Some bugs were fixed in CDAP. Now on enrolling, an IPCP will send a START message to the other IPCP. Next step is syncing the RIBs.
* | lib: Portability to FreeBSDdimitri staessens2016-07-291-1/+1
|/ | | | | | | | | | 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.
* 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-6/+8
| | | | | | | | | | | | 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: shm_du_map: Clean sdus upon exitdimitri staessens2016-07-061-1/+2
| | | | | | | | When an application closes the shm_du_map, it will clean all remaining sdu's for that application. Adds a function to clean the shm_du_map on close. Fixes #20.
* lib: Change invalid pid to -1dimitri staessens2016-07-051-2/+2
| | | | | | | | The stack used pid 0 (the scheduler) to indicate an invalid process instance, probably as a leftover from the deprecated application process instance id. Using -1 is a better solution. Fixes #16.
* lib: robust locking in shared memory and crash recoverydimitri staessens2016-07-021-7/+63
| | | | | | | | | | | | | | 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
* lib, irmd, ipcpd: Change pid to apiSander Vrijders2016-06-281-7/+7
| | | | Changes the variable name as well to API instead of PID.
* build: Change install directories and set correct permissionsSander Vrijders2016-06-201-1/+10
| | | | | | | | | This sets the correct install directories for all the binaries, library and header files. It also sets the right permissions on the sockets and shared memory so that regular users can also use the ouroboros library. Root privileges are required to run the irmd. Fixes #7
* ipcpd: fixes shutdown lockup in local and shim-udpdimitri staessens2016-05-291-2/+2
|
* lib: small tweaks for shm_ap_rbuffdimitri staessens2016-05-291-7/+5
|
* lib: shm_ap_rbuff: sleep when read on empty rbuffdimitri staessens2016-05-281-9/+23
| | | | | When the ring buffer is empty, a read call will sleep. A write call on an empty ring buffer will wake up sleeping readers.
* lib, ipcpd, irmd: fixes deallocation and fast pathdimitri staessens2016-05-221-18/+26
| | | | | | 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-4/+20
| | | | | | 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: cleanup file descriptors for shared memorydimitri staessens2016-05-151-0/+6
| | | | | cleanup of file descriptors for the shared memory. also adds a missing NULL check and some invalidation in dev.c
* lib: shm_ap_rbuff: simplified file offsetsdimitri staessens2016-05-151-13/+9
| | | | Used simpler pointer arithmetic to calculate the file offset pointers.
* lib: dev.c: added lockingdimitri staessens2016-05-141-1/+3
| | | | | Locking is required for multi-threaded applications. Flows are locked separately. Read/Write locks are used for concurrent reads.
* lib: shm_ap_rbuff: removed bad memory allocationdimitri staessens2016-05-141-5/+4
| | | | | moved a malloc so there is no malloc/free when there is no data to be read from the shm_ap_rbuff.
* lib: shm_ap_rbuff: small fixesdimitri staessens2016-05-121-5/+0
| | | | Unnecessary filename string removed. Formatting fix.
* lib: dev: implementation of flow_cntldimitri staessens2016-05-121-0/+1
| | | | | allows setting the oflags to make flow_read and flow_write blocking or non-blocking (FLOW_O_NONBLOCK).
* lib: fixed enormous memory leak in shm_ap_rbuffdimitri staessens2016-05-081-3/+6
| | | | thanks Sander ;)
* lib: changed SHM_AP_RBUFF to SHM_AP_RBUFF_PREFIXdimitri staessens2016-05-081-4/+4
| | | | This better reflects the use as the pid is appended to that name.
* irmd: flow allocation and fast pathdimitri staessens2016-05-071-0/+268
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.