summaryrefslogtreecommitdiff
path: root/src/ipcpd
Commit message (Collapse)AuthorAgeFilesLines
...
| * build: Revise the build systemdimitri staessens2017-08-2136-292/+294
| | | | | | | | | | | | | | | | | | | | 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.
* | Merge branch 'testing' into beSander Vrijders2017-08-201-3/+2
|\ \ | |/ |/|
| * ipcpd, irmd: Fix data racesdimitri staessens2017-08-191-3/+2
| | | | | | | | | | | | Fixes a data race in the IRMd when IPCPs bail immediately after being created (e.g. due to an error). Fixes a race between the acceptor threads and the threads managed by threadpool manager upon shutdown.
* | lib: Add basic FRCT mechanismsSander Vrijders2017-08-175-547/+0
|/ | | | | | | | | | 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.
* ipcpd: Support Berkeley Packet Filter in LLC shimdimitri staessens2017-08-173-147/+250
| | | | | This adds support reading Ethernet frames using the Berkeley Packet Filter (BPF). Ouroboros now fully runs on OS X Sierra.
* irmd, ipcpd: Signal acceptor onlydimitri staessens2017-08-162-2/+11
| | | | | This adds an extra condvar so the mainloops can signal the acceptor thread without waking up all mainloops.
* ipcpd: Fix missing clock_gettime in flow allocatordimitri staessens2017-08-161-0/+2
|
* ipcpd: Refactor normal IPCP failure handlingdimitri staessens2017-08-161-35/+24
|
* irmd, ipcpd: Listen on a dedicated accept() threaddimitri staessens2017-08-162-61/+146
| | | | | | | | | | | The IRMd and IPCPs will now call accept on their command sockets from a single thread that will dispatch work to the other threads. This solves a problem on OS X and FreeBSD where accept() doesn't time out when setting SO_RCVTIMEO on the socket. Calling kqueue or select() on that socket to wait for events before calling accept() didn't solve it since select() or kqueue() might wake up multiple threads, with the non-working threads again blocked on the accept() on shutdown.
* build: Replace fsf snail mail with contact URLdimitri staessens2017-08-1362-65/+62
|
* Merged in dstaesse/ouroboros/be-tpm (pull request #550)dimitri staessens2017-08-131-7/+28
|\ | | | | | | lib: Fix instability in threadpool manager
| * ipcpd: Fix tracking of outstanding DHT requestsdimitri staessens2017-08-131-7/+28
| | | | | | | | | | | | The DHT failed when receiving multiple responses in a short timeframe. The lookup struct now keeps track of the number of outstanding requests.
* | build: Fix compilation on OS X Sierradimitri staessens2017-08-112-1/+5
|/
* lib, ipcpd, tools: Fix enum assignmentsSander Vrijders2017-08-102-6/+1
| | | | This fixes several assignments to the wrong enum type.
* build, lib, ipcpd, irmd: Add support for libgcryptdimitri staessens2017-08-093-14/+46
| | | | | | | | | | | | | | | | 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.
* ipcpd: Fix assignment of fd's in flow allocatorDimitri Staessens2017-08-081-2/+4
|
* ipcpd: Fix finding values in DHTDimitri Staessens2017-08-051-5/+18
| | | | | | | | | The DHT lookup would stop if a node returned no new useful information (i.e. the value for the key or unknown nodes closer to the key) without waiting for other pending requests that could still return useful information. Now it correctly tracks the number of outstanding requests or returns if it doesn't get a response for KAD_T_RESP seconds. This fixes multi-hop flow allocation over the normal.
* Merge branch 'testing' into beSander Vrijders2017-08-041-1/+1
|\
| * ipcpd: Fix missing space in shim-eth-llcdimitri staessens2017-08-041-1/+1
| |
* | Merge branch 'testing' into beSander Vrijders2017-08-034-16/+54
|\|
| * ipcpd: Fix pthread_cond_timedwait deadlinesdimitri staessens2017-08-034-16/+54
| | | | | | | | | | | | This fixes pthread_condtimedwaits in the flow allocator of all IPCPs that had bad deadlines set (the interval instead of the actual absolute time).
* | build: Add check for robust mutexesSander Vrijders2017-08-031-1/+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-1/+3
| | | | | | | | | | This refactors dev.c to have a common function called init_flow that is called whenever a flow is allocated in dev.c
* | ipcpd: Fix registration bug in DHTdimitri staessens2017-07-291-2/+2
| |
* | ipcpd: Add multithreading to schedulerdimitri staessens2017-07-291-25/+43
| | | | | | | | | | | | | | | | The scheduler in the normal IPCP is now multithreaded. While useful in itself for scalability, it currently solves thread starvation in case of executing post_sdu operations that may require a response. This could be further revised in the future to split the SDU handling threads from the component tasks.
* | ipcpd: Cleanup sdb after unpackeddimitri staessens2017-07-291-6/+3
| |
* | ipcpd: Harmonize logs in directorydimitri staessens2017-07-291-1/+5
| |
* | ipcpd: Some fixes in DHTdimitri staessens2017-07-291-13/+10
| | | | | | | | | | | | | | Fixes a memory leak when the DHT is destroyed during a send_msg. Fixes a deadlock when destroying the DHT with a pending lookup. Removes some debug logs that clutter output due to expected redundant FIND_VALUE responses.
* | lib: Add threadpool managerdimitri staessens2017-07-262-169/+21
| | | | | | | | | | | | | | | | 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.
* | ipcpd: Retry sending DHT response messagesdimitri staessens2017-07-241-4/+16
| | | | | | | | | | | | | | This will make the remote retry sending responses when the DT component can't send the message. This is most useful at enrollment, when the remote's routing table may need to wait a bit on the routing component for a path to the new member,
* | ipcpd: Fix DHT lookup processingdimitri staessens2017-07-201-20/+25
| | | | | | | | | | Not all returned contacts were processed when a FIND_NODE or FIND_VALUE message was returned.
* | Merged in dstaesse/ouroboros/be-dht (pull request #529)dimitri staessens2017-07-1816-161/+2742
|\ \ | |/ |/| | | ipcpd: Add DHT as directory in normal IPCP
| * ipcpd: Add DHT as directory in normal IPCPdimitri staessens2017-07-1816-161/+2742
| | | | | | | | | | | | | | | | | | This implements a Distributed Hash Table (DHT) based on the Kademlia protocol, with default parameters set as used in the BitTorrent Mainline DHT. This initial implementation is almost feature complete, except for some things to be done after a testing period: caching and stale peer bumping, and setting the expiration timeout via the IRM tool.
* | ipcpd: Log exit status before log_fini()dimitri staessens2017-07-161-2/+2
|/
* ipcpd, lib, irmd: Hardcode shim hash algorithmsSander Vrijders2017-07-124-7/+5
| | | | | | | This will hardcode the shim hash algorithms as they don't have an enrollment phase. Fixes #44
* ipcpd: Shutdown shim-udp without cancellationdimitri staessens2017-07-121-17/+14
|
* ipcpd: Check connmgr acceptor thread at createdimitri staessens2017-07-121-1/+2
|
* lib, ipcpd, irmd: Add full-fledged QoSSander Vrijders2017-06-217-20/+12
| | | | | | | 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, ...
* ipcpd: Fix flow allocation over normaldimitri staessens2017-06-192-3/+1
|
* Merged in dstaesse/ouroboros/be-macro (pull request #514)dimitri staessens2017-06-053-3/+3
|\ | | | | | | include: Fix macro for printing hash
| * include: Fix macro for printing hashdimitri staessens2017-06-043-3/+3
| |
* | ipcpd: Fix routing type configurationdimitri staessens2017-06-051-5/+6
| |
* | ipcpd: Fix flow allocation over UDP shimdimitri staessens2017-06-041-1/+1
|/
* ipcpd: Start DT component before flow allocatordimitri staessens2017-05-241-15/+15
|
* ipcpd: Allow registering protocol machines with DTdimitri staessens2017-05-244-119/+176
| | | | | | Other protocol machines now have to register on top of the DT AE. This allows multiple instances of the same protocol machine and avoids preallocating fds for each protocol machine instance.
* ipcpd: normal: Make routing a policySander Vrijders2017-05-1514-337/+490
| | | | | | This makes the routing component into a policy since different approaches may exist to do this, depending on how high the rank of the DIF is.
* ipcpd: Allow specifying fixed syntaxdimitri staessens2017-05-158-103/+81
| | | | | | This commits adds the functions and messages to specify a fixed protocol syntax during CACEP. It also revises the messages for specifying the DT protocol syntax from the irm tool.
* ipcpd: Remove FRCT from normal IPCPdimitri staessens2017-05-1015-709/+91
| | | | | | | In order to ensure 100% reliable transfer, the protocol state machine that takes care of retransmission and SDU ordering has to be in the application. Flow allocation in the normal now uses fds. The PDU_type field was deprecated and AE's within the DIF can use reserved fds.
* ipcpd: Don't send deallocation messagesdimitri staessens2017-05-022-39/+0
| | | | | | | The flow resources are Delta-t protocol machines that will time out and free their resources without any required signaling. Flows can be cleaned locally when the application requests it and all FRCT instances have timed out and released their resources.
* ipcpd: Fix sending fa dealloc messagedimitri staessens2017-04-292-18/+31
| | | | | | | The frct instance was previously destroyed before sending the message, resulting in the destination address being 0 and the message getting dropped. Some fixes in the normal for deallocation, but will require further revision once all data transfer protocols are in place.