| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This commit deprecates ouroboros_init and ouroboros_fini and adds them
as a constructor or destructor, causing these function to be run
automatically when a program that links to the library calls and exits
main(). For this to fully work, the library had to be split so that we
can avoid the irmd calling these functions (the IRMd has to create the
shm structures on which these calls depend).
The library is split in 3 parts: libouroboros-dev, libouroboros-irm
and libouroboros-common. The latter is linked to the other two so that
including libouroboros-dev or libouroboros-irm will also link
libouroboros-common.
|
|
|
|
|
| |
This turns the PDU Forwarding Function of the IPCP into a policy. For
now only the simple PFF policy is available.
|
|
|
|
|
|
|
|
|
| |
The DHT will now enroll or sync when a data transfer connection is
added. This avoids the need to create a temporary data transfer
connection during enrollment (and speeds it up considerably).
The notifier system was modified to take an opaque pointer to the
object that registers as a parameter.
|
|
|
|
|
|
|
| |
This adds a virtual RIB that is accessible as a filesystem that is
accessed through a fuse mountpoint (configurable , default is
/tmp/ouroboros). Currently, each IPCP will export its link state
database.
|
|
|
|
|
|
|
|
| |
This removes the RIB as a datastructure and CDAP as the protocol
between IPCPs. CDAP, the rib and related sources are deprecated. The
link-state protocol policy is udpated to use its own protocol based on
a simple broadcast strategy along a tree. The neighbors struct is
deprecated and moved to the library as a generic notifier component.
|
|
|
|
|
| |
When enroll or bootstrap failed, finalize_components could be called
twice, resulting in double frees or use-after-free.
|
|
|
|
|
|
|
| |
This will remove the dst parameter from enroll_boot, since it was only
being used in logging. It also turns some other debug logs into info
logs, and makes the component names as they are used in logs all
lowercase.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
This enables user-written tools to instruct IPCPs to establish and
tear down connections (a.k.a. adjacencies) between its internal
components (Management and Data Transfer).
For more info, do "irm ipcp connect" or "irm ipcp disconnect" on the
command line.
This commit exposes a deletion bug in the RIB where FSO's fail to
unpack/parse. This will be fixed when the RIB is deprecated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The graph adjacency manager has been deprecated in favor of providing
an external interface into the connectivity manager so that
adjacencies can be controlled from the command line, user scripts or
user applications.
The gam and its associated policies were removed from the normal IPCP
and the IRM configuration tools. The "/members" part of the RIB was
deprecated. Removal of the gam means that initial connectivity based
on changes in the RIB can't be provided, so some changes were
required throughout the normal IPCP.
The enrollment procedure was revised to establish its own
connectivity. First, it gets boot information from a peer by
establishing a connection to the remote enrollment component and
downloading the IPCP configuratoin. This is now done using its own
protocol buffers message in anticipation of deprecation of the RIB and
CDAP for communication within a DIF.
After the boot information is downloaded, it establishes a data
transfer flow for enrolling the directory (DHT). After the DHT has
enrolled, it signals the peer to that enrollment is done, and the data
transfer connection is torn down.
Signaling connections is done via the nbs struct, which is now passed
to the connmgr, which enables control of the connectivity graph from
external sources.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
| |
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: normal: Split connection establishment
|
| |
| |
| |
| |
| |
| | |
Connection establishment was done at the same time as flow
allocation. This splits it more cleanly, and allows to re-use the DT
AE for other purposes.
|
|/
|
|
|
|
|
|
| |
The IPCP will now report the DIF name and the hash value to the IRMd
as a dif_info struct. This can later be extended to add further
capability reporting. Some bugfixes in normal.
Fixes #24
|
|
|
|
|
|
| |
This splits the flow manager into the Data Transfer AE, which is in
charge of routing SDUs, and the Flow Allocator AE, which handles flow
allocations.
|
|
|
|
| |
Currently CRC32, MD5, and SHA3 (224, 256, 384 and 512 bit) are supported.
|
|
|
|
|
|
|
|
|
| |
All information passed over the IRMd/IPCP boundary for using IPC
services (flow allocation, registration) is now hashed. This
effectively fixes the shared namespace between DIFs and the IRMDs.
This PR also fixes some API issues (adding const identifiers),
shuffles the include headers a bit and some small bugs.
|
|
|
|
|
|
| |
The shm PCI was never initialized during flow manager init. This
commit will do that, and initialize the pdu length correctly as well,
since it was not being written into the RIB, nor read in shm_pci_init.
|
| |
|
|
|
|
| |
This fixes some memleaks as reported by valgrind.
|
|
|
|
| |
These solve several bugfixes in the normal.
|
|
|
|
|
|
| |
This split the initialization of the flow manager into an init part
and a start part. This avoids the usage of data structures that have
not been properly initialized yet.
|
|
|
|
| |
Fixed trying to double lock and cleanup order in main.
|
|
|
|
|
|
|
| |
Our mailserver was migrated from intec.ugent.be to the central
ugent.be emailserver. This PR updates the header files to reflect this
change as well. Some header files were also homogenized if the
parameters within the functions were badly aligned.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This refactors the different Application Entities of the normal
IPCP. They all listen to and use the connection manager to establish
new application connections.
This commit also adds a neighbors struct to the normal IPCP. It
contains neighbor structs that contain application
connection. Notifiers can be registered in case a neighbor changes
(added, removed, QoS changed).
The flow manager has an instance of this neighbors struct and listens
to these events to update its flow set. The routing component also
listens to these events so that it can update the FSDB if needed. The
flow manager now also creates the PFF instances and the routing
instances per QoS cube.
The RIB manager also uses this an instance of the neighbors struct and
listens to neighbor events as well.
|
|
|
|
|
|
|
| |
This adds the connection manager which allows the different AEs of the
normal IPCP to register with it. An AE can then use the connection
manager to allocate a flow to a neighbor, or to wait for a new
connection from a neighbor.
|
|
|
|
|
|
|
| |
By removing authentication as part of CACEP, all policies
disappear. CACEP becomes a policy-free connection establishment
protocol between Application Entities. Authentication can later be
added cleanly as a pure policy function when needed.
|
|
|
|
|
| |
The AE name should not be passed over the layer boundaries. If an
application has more than one AE it should exchange this in CACEP.
|
|\ |
|
| |
| |
| |
| |
| | |
This prevents assertion failures in the IPCP in some cases. IPCPs can
now safely assert the type.
|
| |
| |
| |
| |
| |
| | |
This changes the address authority to follow a similar approach to
that of the other policies. No function pointers are passed to its
user anymore.
|
|/
|
|
|
|
|
|
|
| |
Revises CACEP policies to stateless library calls. It provides two
policies: an anonymous authentication policy that will generate random
credentials for the peer, and a simple authentication policy that will
return a name for the peer and an address.
Changes the normal IPCP to use the updates API calls.
|
|
|
|
|
| |
Moves the definitions of paths in the RIB for the normal IPCP to a
header ribconfig.h to avoid repetition.
|
|
|
|
|
| |
The acceptor will not log disconnects with IRMd. Unexpected
disconnects will be reported and handled by management components.
|
|
|
|
|
|
| |
This removes the logs that would print to stdout if the IPCP fails to
initialize. If the user had asked that logs would be printed to the
syslog this would be unwanted behaviour.
|
|
|
|
|
|
| |
On 32-bit systems size_t is different than on 64 bit systems. The
correct way to print a size_t is with %z. uint64_t is printed portably
with the PRIu64 macro.
|
|
|
|
|
|
|
|
| |
The IPCP will now respond with an ipcp_create_r message when it fails,
informing the IRMd.
Also adds some const qualifiers in the public headers and fixes
some formatting in dev.c.
|
|
|
|
|
|
| |
irm_bind has to be called after ipcp_init() since it targets the AP-I
and needs the pid to be registered with the IRMd. Also fixes missing
unbinding of the AP-I.
|
|
|
|
|
|
|
|
|
|
| |
This removes the logfile and outputs log messages to the logging
system. The creation of the logfiles (as well as the ap_init() call)
were moved into ipcp_init() to simplify the IPCP creation and
shutdown.
Fixes #25
Fixes #27
|
|
|
|
|
|
|
|
|
| |
The ipcp-ops header was removed and merged into ipcp.h. The common
components dif_name and ipcp_type have been moved to the main ipcp
struct. After this move, ipcp_data only contained shim information, so
it was renamed to shim_data. The ipcp_init() function checks the type
and will only include the shim_data if the type is not an IPCP_NORMAL.
All ipcps have been adapted to this change in API.
|
|
|
|
|
|
|
|
|
|
| |
This PR updates the normal IPCP to use the new RIB. The old ribmgr is
removed and replaced by a stub that needs to be implemented. All
components (dir, fmgr, frct) were adapted to the new RIB API. A lot
of functionality was moved outside of the ribmgr, such as the
addr_auth, which is now a component of the IPCP. The address is also
stored to the ipcpi struct. The irm tool has an option to set the gam
policy of the rib manager.
|