summaryrefslogtreecommitdiff
path: root/src/ipcpd/normal
Commit message (Collapse)AuthorAgeFilesLines
* ipcpd: Only forward new LSAs of the LSDBSander Vrijders2018-07-151-17/+36
| | | | | | | | | | | | This will add a sequence number to the Link State Advertisements so that upon receiving a LSA we can check if we need to forward the LSA or not. If we already have the LSA with the received seqno in the LSDB we do not forward it. This allows for setting up a management network that has loops since the spanning tree upon which the LSAs are sent is pruned on every hop. Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be> Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be>
* ipcpd: React to flow events activelySander Vrijders2018-07-043-15/+38
| | | | | | | | This adds the infrastructure to actively react to flow up, down and deallocated events. Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be> Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be>
* ipcpd: Recalculate PFF only if LSDB changedSander Vrijders2018-06-191-18/+50
| | | | | | | | | This will add a flag so the PFF is only recalculated if the LSDB has changed. It also removes the instant recalculation of the LSDB if a new neighbor is added, since this might cause instabilities. Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be> Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be>
* ipcpd: Change connection down to flow downSander Vrijders2018-06-196-6/+67
| | | | | | | | | | The DT component was flagging a connection as down and passing the fd that was down. Of course the other components expect a connection instead of just a fd. Now the connection manager will listen to flow up and down events, and flag the connection up or down if needed. Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be> Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be>
* Merge branch 'testing' into beSander Vrijders2018-06-151-2/+3
|\
| * ipcpd: Fix RIB output for dt componentDimitri Staessens2018-06-151-2/+3
| | | | | | | | | | | | | | | | The RIB output length was fixed for 3 qos cubes. Now it will scale correctly if QoS cubes are added or removed. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* | Merge branch 'testing' into beSander Vrijders2018-06-132-0/+2
|\|
| * lib: Use macros for all time utility functions0.11.9Dimitri Staessens2018-06-132-0/+2
| | | | | | | | | | | | | | | | | | This replaces the time utility functions with macros. This avoids using library functions in the tools and also slightly speeds up the implementation. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* | lib: Add a data qos cubeDimitri Staessens2018-06-081-1/+2
|/ | | | | | | | This adds a data qos cube that is reliable. Reliable qos can be selected by setting the loss parameter of the qosspec to 0. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Add priority for raw flowsDimitri Staessens2018-06-071-0/+1
| | | | | | | | The raw flows had no priority assigned, causing the scheduler to fail on creation. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* build: Fix running make check standaloneSander Vrijders2018-05-301-2/+2
| | | | | | | | | In the current build an error would happen if a user simply runs make check after running cmake, since the kademlia protocol buffer file was not generated yet. This simply regenerates the file for the test. Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be> Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be>
* ipcpd: Include string for memset in graph.c0.11.8Dimitri Staessens2018-05-291-0/+1
| | | | | | | | The memset function was used without including <string.h>, which some compilers complain about. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* build: Update default values0.11.7Sander Vrijders2018-05-291-1/+1
| | | | | | | | | | | This sets updated default values for the default build. A higher connect timeout until we have asynchronous local IPC. Disabled SWIG since the lastest gcc reports an error. IPCP flow stats enabled by default since their impact on the performance is very limited. Waiting for the directory to enroll before returning to increase stability. Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be> Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be>
* ipcpd: Add address to DT directory name in RIBDimitri Staessens2018-05-291-1/+3
| | | | | | | This adds the address to the DT directory name in the RIB. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Avoid false positive use-after-free in DHTDimitri Staessens2018-05-281-0/+1
| | | | | | | | | The static analyzer misses the linked list logic. An assertion is added that indicates that the pointer was changed indirectly by the previous element. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* build: Check for variable length arraysDimitri Staessens2018-05-281-20/+25
| | | | | | | | | | The clang and gcc compilers don't complain about variable length arrays using the -c89 flag unless the flag -Wvla or -Wpedantic is set. This also fixes a memleak and two false positive uninitialized variable warnings reported by the clang static analyzer in graph.c. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Use eid in fa protocol instead of fdDimitri Staessens2018-05-271-14/+14
| | | | | | | | | The flow allocator protocol used fd in the message exchange since eids were directly mapped to fds. It's better to name them eid in the protocol to avoid confusion. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Fix memleak in DHTDimitri Staessens2018-05-271-9/+5
| | | | | | | | | | This fixes a memleak for the info struct when join thread creation is not needed. Fixes a false positive warning when running the clang static analyzer. Removes a use-after-free warning that is not valid since 0.11.4. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* lib: Use IPCP name as RIB directoryDimitri Staessens2018-05-151-1/+1
| | | | | | | | This will change the FUSE mountpount to the name of the IPCP instead of a generic name based on its pid. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Fix check build for DHT0.11.6Dimitri Staessens2018-05-081-0/+4
| | | | | | | | The DHT test failed on the use of IPCP-specific calls. These calls are now guarded by the correct defition checks. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Include ipcp-dev header in DHT0.11.5Dimitri Staessens2018-05-081-1/+1
| | | | | | | | The DHT called ipcp_sdb_release without including ipcp-dev, causing compiler errors on some machines. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Fix bad memory handling in LFA policySander Vrijders2018-05-042-7/+8
| | | | | | | | | | | | | The Loop-Free Alternates policy had bad memory management in two places. In the calculation of the LFAs a table was freed in the first iteration of a loop, whereas it was still needed in the other iterations. It is now freed outside of the loop. In the alternate PFF the address structs were not freed upon shutdown, this has been added as well. It also fixes some bad initialization in the LFA calculation function. Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be> Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be>
* ipcpd: Limit number of returned query addresses0.11.4Dimitri Staessens2018-05-031-12/+18
| | | | | | | | | The query returned all addresses where a name was registered, causing some scaling problems. Now it will return at most DHT_RETR_ADDR, which is currently set at 1 (anycast). Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Allow wait for dir enrollment on dt connDimitri Staessens2018-05-035-2/+21
| | | | | | | | | This adds the option to wait for the directory (DHT) to enroll on creating a new data transfer connection. This makes scripting network bootstraps more stable. The default setting is OFF. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Recalculate PFF upon adding new neighborSander Vrijders2018-05-031-31/+42
| | | | | | | | | | This recalculates the PFF upon adding a new neighbor, so that the network reconverges faster. It is safe to do so since it is only done by the two IPCPs that established the new flow. The PFF is also recalculated every 4 seconds. Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be> Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be>
* ipcpd: Prevent parallel DHT enrollment threadsDimitri Staessens2018-05-031-22/+24
| | | | | | | | | This will prevent quick calls to ipcp conn for dt flows to create multiple join threads in parallel, instead the subsequent calls will wait for the pending join to finish. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Don't do lookup with new DT when runningDimitri Staessens2018-05-031-4/+8
| | | | | | | | | | The DHT performed a lookup upon a new DT connection when it was running for efficiency reasons. This lookup somehow cause SEGV under stress (rapid bootstrapping of networks). This will be solved with a full revision of the DHT implementation. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Cleanup pending DHT commands on shutdownDimitri Staessens2018-05-031-0/+7
| | | | | | | The list of commands was not cleaned up on shutdown. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Remove cookie from DHT lookup at updateDimitri Staessens2018-05-031-1/+4
| | | | | | | | | | The lookup struct uses the cookies to track pending request messages, but they were not removed when a response is processed. Upon reuse of a cookie for the next message, it could update the wrong lookup. This removes the cookie for a lookup when it is looked for. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Shut down DHT gracefully during enrollmentDimitri Staessens2018-05-031-0/+10
| | | | | | | | | The DHT has a thread that continued to run during shutdown. The shutdown state is now checked for. It will not try to send messages at shutdown. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Create notifier before connmgrDimitri Staessens2018-04-261-9/+9
| | | | | | | | The connmgr requires the notifier, but the notifier was created after and destroyed before the connmgr. This is now fixed. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Enable locking threads to a CPU coreDimitri Staessens2018-04-051-1/+4
| | | | | | | | | This adds a function that locks a thread to a random core. This greatly improves performance on multi-cpu systems. There is no portable way to do this, this only implements it for GNU/Linux. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* lib: Allow disabling partial readDimitri Staessens2018-03-191-2/+6
| | | | | | | | | | | | | | This allows disabling partial reads. It adds a flag FLOWFRNOPART that disables partial reads. Partial read is different from partial delivery (FRCTFPARTIAL), which allows delivery of fragments of an incomplete packet and thus potentially corrupted data. FLOWFRNOPART will never deliver corrupted data (unless FRCTFPARTIAL is also set). If FLOWFRNOPART is set and the buffer provided to flow_read is too small for the SDU, that SDU will be discarded and -EMSGSIZE is returned; Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Fix reading LSAs in link-state policy0.10.7Dimitri Staessens2018-03-161-2/+2
| | | | | | | | | | | The read buffer had the exact length of a link-state message. With the partial read implemented, we should then do another read() to check if there are more parts of the message (which will return 0). To avoid the additional read() call every time, the buffer was extended by 1 byte. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Fix bytes sent in send statisticsDimitri Staessens2018-03-081-6/+11
| | | | | | | | The number of bytes sent was not counting the data transfer PCI. This is now fixed. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* lib: Add fccntl operation to get queue lengthsDimitri Staessens2018-02-281-5/+17
| | | | | | | | | | This adds the FLOWGRXQLEN and FLOWGTXQLEN operations to fccntl to get the number of packets that are in the receive and transmit buffers respectively. The flow statistics are updated to show these queue lengths. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Fix flow statisticDimitri Staessens2018-02-261-1/+1
| | | | | | | There was a wrong rcv_bytes where it should have been snd_bytes. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Fix access to uninitialized valueDimitri Staessens2018-02-261-14/+14
| | | | | | | | | This fixes the access to an uninitialized dt_pci struct when updating flow statistics in the case there is no next hop, which often resulted in a segmentation fault. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Fix data race when accessing DHT stateDimitri Staessens2018-02-261-1/+2
| | | | | | | | The dht_get_state() function should be used to get the state of the DHT. This fixes bug #4. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Fix malformed sprintf in dt component0.10.2Dimitri Staessens2018-02-241-1/+1
| | | | | | | | The sprintf was missing a format string. Some compilers did not complain about this. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Fix missing free in graph implementationSander Vrijders2018-02-241-0/+2
| | | | | | | | There was a missing free in case the address was not found in the routing table when trying to add an LFA for a certain address. Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be> Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be>
* ipcpd: Fix cleanup of sdu schedulerDimitri Staessens2018-02-241-7/+7
| | | | | | | | | | Not all threads were cancelled on exit. This fixes (the rather cryptic) error message "The futex facility returned an unexpected error code" when running the stack with the address sanitizer. Also fixes possible double frees when a pthread_create would fail. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Print establishment time in flow statsDimitri Staessens2018-02-231-22/+35
| | | | | | | | | | The time of establishment will be printed as part of the flow statistics (it is the same as the modification time of the file in the FUSE filesystem). Some output was reordered and the length of the sizes is updated to be sufficient for 64-bit values. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Print endpoint in flow statisticsDimitri Staessens2018-02-234-14/+30
| | | | | | | | | | The flow statistics will now print the endpoint of the flow. If it's a local endpoint for the IPCP, it will print the component (e.g. "flow-allocator"). For remote flows, it will print the address of the IPCP. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Reset flow statistics on reuseDimitri Staessens2018-02-231-0/+2
| | | | | | | | The flow statistics were not reset when a new connection was created, resulting in wrong statistics. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Fix locking issues in flow statisticsDimitri Staessens2018-02-231-12/+59
| | | | | | | | | The locks were not initialised correctly due to a misspelled define and the fail_write was trying to lock a bad mutex (sometimes -1 out of array). This also fixes the statistics gathered. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Fix double definition of ipcp configDimitri Staessens2018-02-233-43/+2
| | | | | | | | | | The import of the IPCP config protobuf message in the enrollment message caused a double definition. The enroll.proto file is deprecated and the definition of the enrollment message is moved to the library to avoid this. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Fix missing lock in link-state policyDimitri Staessens2018-02-231-0/+27
| | | | | | | | The replication of the database was missing a lock. Now the database is first copied under lock and then sent. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* ipcpd: Export flow statistics to RIBDimitri Staessens2018-02-202-20/+397
| | | | | | | | | | This adds flow statistics for the data transfer (DT) component to the RIB. The DT component will keep track of the traffic on each flow. This feature can be enabled or disabled by setting the IPCP_FLOW_STATS variable in the build system. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
* lib: Get RIB attributes from componentDimitri Staessens2018-02-201-29/+80
| | | | | | | | | | | | This revises the RIB so it gets the complete file attribute list from the component instead of setting some attributes in the library. This will allow setting read/write access later on in the component itself. The time of last change of lsdb entries in the file system is now set to the time of the last received Link State Update for that entry. Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be> Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>