| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
In extreme cases, the response to a CDAP request can arrive before the
AE doing the request has called cdap_request_wait. This PR handles it
by waiting for the state to move away from INIT before responding.
|
| |
|
|
|
|
|
|
|
|
| |
The new element must be added before the larger element
(list_add_tail, since it's a circular list).
Also fixes a bug and improves the locking in rib_pack (rib must be
locked until the subtree is fully packed in the buffer).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The rib_pack function allows packing a subtree of the RIB for
dissemination. The options PACK_HASH_ROOT and PACK_HASH_ALL will add
the hashes for the root object of the packed subtree or every object
to the packed message respectively. Checking of the hashes is
currently only performed at the top level object, verifying the
complete operation.
The rib_unpack function unpacks a packed message and inserts its
contents in the RIB. The option UNPACK_CREATE flags that the unpack
operation is allowed to create new objects, else it will only update
existing objects. More advanced options could be added in the future.
The packed message structure uses Google Protocol Buffers, as defined
in ro.proto.
It adds tests for these functions to the rib_test.
|
|
|
|
|
| |
Returns the names of the nodes (not the full paths). The function
allocates memory to the children pointer that should be freed.
|
|
|
|
|
| |
The -EAGAIN from a failed non-blocking flow read would trigger the
assertion. This snuck in somehow (we need some unit tests for dev.c).
|
|
|
|
|
|
|
|
|
|
|
|
| |
The new RIB is implemented as a tree with doubly linked nodes (parents
keep a link to each child, each child keeps a link to its parent). An
index is kept in a btree using CRC32 hashes of the path name in the
RIB. Nodes keep an SHA3-256 hash value that is unique for the entire
subtree. This allows quick checks to see if two RIB subtrees are in
sync. The event system for the RIB is based on the event system for
flows (fqueue), but implemented completely in dynamic memory using
linked lists. An initial test is performed for the RIB. This PR does
not modify existing code to use the new RIB.
|
|
|
|
|
| |
Allows moving the elements of one linked list to
another. Re-initializes the source list.
|
| |
|
|
|
|
|
| |
Adds an implementation of B-trees of order k (k children, min fill is
k/2, max fill k - 1). Useful to implement indexes for faster lookups.
|
| |
|
|
|
|
| |
The CRC32 implementation will be used to ID objects in the RIB.
|
|
|
|
| |
Test the SHA3 function with known hashes.
|
|\
| |
| |
| | |
Be gam
|
| |
| |
| |
| |
| | |
This allows the selection of a policy for the graph adjacency
manager. Currently we only support constructing a complete graph.
|
| |\ |
|
| | |
| | |
| | |
| | |
| | |
| | | |
This adds CACEP to the library, which can be used for authenticating
the other party after flow allocation and for obtaining other relevant
information.
|
| | |
| | |
| | |
| | |
| | |
| | | |
Adds an SHA-3 hash implementation that will be used in the rib,
adapted and redistributed from the RHASH project
(https://github.com/rhash/RHash)
|
| |/
|/| |
|
| | |
|
| |
| |
| |
| |
| | |
Copyright is set to 2016 - 2017. License text on includes and sources
in the library are changed to indicate the LGPLv2.1 license.
|
|/
|
|
| |
Adds LGPL license to the ouroboros lists.
|
|
|
|
|
|
|
|
|
|
| |
Now correctly relays the qoscube end-to-end in the stack.
A simple function specifying the cube in the spec is used for initial
testing.
The translation is now done in dev.c, but it could be moved elsewhere
when qos cabability matures and the need arises.
|
|
|
|
|
| |
If cdap_req_destroy was called while in REQ_DONE, cdap->state would be
accessed in cdap_req_respond.
|
|
|
|
|
| |
Fixes a memleak of cdap_req structs and correcly releases invoke_ids
if the cdap_request_send operation fails during its execution.
|
|
|
|
|
|
|
| |
An errno EIRMD has been added to errno.h to indicate failure to send a
message tot the IRMd. The IRM tool will report such errors, which
makes it easier for users to detect that the IRM was not started or
has failed.
|
| |
|
|
|
|
|
| |
If a thread with a pending flow terminates, ap_fini would wait for the
condvar to destroy the flow indefinitely.
|
|
|
|
|
| |
The QoS cubes were not initialized in dev.c, which sometimes caused
segfaults in the fmgr when calling ipcp_flow_get_qoscube.
|
|
|
|
|
| |
This corrects the license statements on all files. Installed headers
are LGPLv2.1, the rest of the code is GPLv2.
|
| |
|
|
|
|
|
| |
Refactors the normal IPCP fmgr and ribmgr, and modifies the API for
cdap so that no callbacks are needed.
|
|
|
|
|
|
|
| |
This adds a hash table that takes 64-bit integers as key and uses
separate chaining on collision. It also adds the PDU Forwarding
Function, which the Flow Manager can use to lookup the fd towards the
next hop. Routing policies will add/update/remove entries in the PFF.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Receiver timeouts can now be set on a flow using the flow_set_timeout
function. Specifying NULL disables the timeout. The flow_get_timeout
function gets the value for the timeout.
This commit also deprecates fcntl in favor of flow_get_flags and
flow_set_flags functions.
struct qos_spec is typedef'd as a qosspec_t.
The tools and cdap.c are updated to use the new API.
Fixes a bug in operf client where the client's writer thread wouldn't
cancel on SIGINT.
|
| |
|
| |
|
|
|
|
|
| |
This removes log output in applications and some size_t printf errors
when compiling on 32 bit machines.
|
|
|
|
| |
Also cleans up the flow_set if an AP-I dies abruptly.
|
|
|
|
|
|
|
| |
Timerwheel would skip some additions due to a missed wakeup signal.
Addition of timespecs and timevals in the time utilities would
overflow tv_nsec/tv_usec if the sum is an integer number of seconds.
|
| |
|
|
|
|
|
|
| |
This adds a syntax version to the protobuf files. The latest version
of protobuf otherwise complains that it is missing. The GPL license is
also added on files where it was missing.
|
|
|
|
|
|
| |
Now that we have an rbuff per flow per AP, there is no more need to
keep the dst_api in the rdrbuff. This also simplifies the sanitizer in
the irmd.
|
|
|
|
|
|
| |
This will simplify the CDAP API. Now the opcode has to be given when
sending a CDAP request. Before a separate operation was provided since
some of the function parameters are unused for certain commands.
|
|\
| |
| |
| | |
ipcpd: normal: Add policy for obtaining a flat address
|
| |
| |
| |
| |
| |
| | |
This adds a policy for obtaining a flat address, and thus also the
infrastructure for policies in the IPCP. The IPCP should check if the
address is available; this is currently not there yet.
|
| |
| |
| |
| |
| |
| |
| | |
All calls for opening rbuffs are now concentrated on the dev side.
This allows some simplifications in the np1 calls. The ipcp_fini call
will not destroy the mutex associated with the state, since the final
state needs to be checked before shutting down an IPCP.
|
|/
|
|
|
|
| |
Flow_event_wait will either return -EINVAL, -ETIMEDOUT or a positive
integer indicating the number of SDUs in the fqueue. This allows to
call the function as the condition for a non-terminating while loop.
|
|
|
|
| |
Fixes a little bug that sneaked in with the revised deallocation.
|
|
|
|
|
|
|
|
|
| |
If alloc_res fails all resources will be cleaned, except for the
assigned flow_descriptor, which must be released with a dealloc call.
Calling dealloc after a failed flow_alloc will not try to destroy the
already cleaned up flow in the IRMd and IPCPs.
Also fixes some memleaks in the oping client.
|
|
|
|
|
|
|
|
|
|
|
| |
The steps for flow deallocation have been further refined. An
operation ipcp_flow_fini() which wait for all SDUs to be read from a
flow has been added. The shim IPCPs and the local IPCP have been
adapted to this new API.
Deallocation messages have been removed from the shim IPCPs, since
there is insufficient state synchronisation between them to make this
work reliably.
|