| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
Calling api_bind during bootstrap caused the IRMd to lock up.
api_bind is now called after the normal completes bootstrapping.
|
|
|
|
|
|
|
| |
This adds a condition variable to the IPCP state, so that upon state
changes any listeners to state changes can be notified. It also
replaces the read/write lock with a mutex in order to be able to do
so.
|
|
|
|
|
| |
conf->dif_name was not copied from the dif_config gpb message.
Fixes some logs.
|
| |
|
|
|
|
|
| |
Now the correct max length of an SDU is checked upon writing a frame,
as well as on receiving it.
|
|\
| |
| |
| | |
lib, irmd: Bind AP instances to AP_subsets
|
| |
| |
| |
| |
| |
| |
| | |
This call will allow grouping AP instances of a certain AP together
which are configured identically. Adds the bind operation to dev and
updates the applications to make use of this call. Flow_alloc is now
only called with the pid and doesn't send the apn anymore.
|
| |
| |
| |
| |
| |
| | |
This adds the MSG_DONTWAIT flag to the send function of the
shim-eth-llc, when using PF_PACKET. Previously the send would return
only after the frame was sent, resulting in poor performance.
|
|/
|
|
|
|
| |
This will add a timeout to the socket so that a process won't be
blocked by the actions of the process with which it is communicating
over the socket.
|
|\
| |
| |
| | |
ipcp, irmd, lib: Notify IRMd upon IPCP initialization
|
| |
| |
| |
| |
| |
| | |
This will notify the IRMd when the IPCP is initialized and ready to
receive messages. Previously a bootstrap could fail since the IPCP was
not listening to the socket yet.
|
|/
|
|
|
| |
A lock was not being taken to check the state, but then it was
released if the state was not IPCP_NULL, resulting in a segfault.
|
| |
|
|
|
|
|
|
| |
This changes the amount of time the shim-eth-llc will hold the IPCP
state lock when sending and receiving frames. Before it was holding
the lock for too long.
|
| |
|
|
|
|
|
|
| |
This adds the functionality of exchanging the static DIF information
between 2 DIF members. After exchange the enrollment is stopped, and
the IPCP that initiated enrollment transitions to the enrolled state.
|
|
|
|
| |
The entry from the ringbuffer was never freed, causing memleak per SDU.
|
|
|
|
|
| |
When a flow was in FLOW_ALLOCATED state, it would not change to NULL
state and irm_flow_destroy would hang forever.
|
|
|
|
| |
ipcp-data was not correctly destroyed.
|
|
|
|
| |
The cleanup was trying to close a pointer to the file descriptor.
|
|
|
|
|
|
|
|
|
| |
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.
|
|\
| |
| |
| | |
shim-eth-llc: Fix for bad drivers
|
| |
| |
| |
| |
| |
| |
| |
| | |
It seems like drivers are setting the Ethernet length field wrong when
sending an LLC message. The LLC shim now writes the payload length in
the frame to circumvent the wrong information from the driver.
Also fixes deallocation.
|
|\ \
| |/
|/|
| | |
Be enrolment
|
| |
| |
| |
| |
| |
| |
| | |
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.
|
| |\ |
|
| |\ \ |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This provides the normal IPCP with bootstrapping and the initial steps
for enrollment. Next step is actually reacting to an enrollment
request and sending the data transfer constants.
|
| |_|/
|/| |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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.
|
| |/
|/|
| |
| |
| |
| |
| |
| | |
Upon receipt of a frame, the minimum of the length reported in the
frame and the frame length reported by kernel is taken. Some device
drivers change the length in the frame. Some others add padding,
making the length reported by the kernel too high. This is a lousy
workaround to make it work on as many systems as possible.
|
|/
|
|
|
|
| |
The protobuf include directory was not being correctly handed to the
compiler when building. Now the include directory is added
project-wide. And the protobuf package is searched for only once.
|
|
|
|
|
|
| |
This adds the main loop to the normal IPCP, just like it is present in
the shim IPCPs. So in essence, the normal IPCP now reacts to all
operations from ipcp.h.
|
|
|
|
|
|
|
|
|
| |
This adds the intial implementation of establishing management N-1
flows between normal IPCPs. On calling fmgr_mgmt_flow, a management
flow will be setup to a certain destination IPCP. After flow
allocation, the fd is handed to the RIB manager. The flow manager also
listens for incoming flow requests. In case they are management flows,
they are handed to the RIB manager, otherwise to the FRCT.
|
|
|
|
|
|
|
|
|
| |
This adds the initial headers for the normal IPCP. The normal IPCP
consists of 3 main components:
* The flow manager, in charge of managing N and N-1 flows.
* The RIB manager, in charge of managing the RIB
* FRCT: The flow and retransmission control task
|
|
|
|
|
|
| |
This removes the parameter N-1 DIF from the enroll operation. IPCPs
should just allocate a flow to a DIF name and let the N-1 DIF resolve
it.
|
| |
|
|
|
|
|
| |
All includes of <errno.h> within ouroboros are replaced with the
ouroboros errno.
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
| |
IRMd and ipcps will now close the logfile upon exit.
Also corrects exit(1) to exit(EXIT_FAILURE) and exit(0) to
exit(EXIT_SUCCESS).
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Writing output to log files is now enabled by default. Logs are
written to <INSTALL_PREFIX>/var/log/ouroboros, which is created on
install. There is a log file for the irmd and one per IPCP. To still
get (colored) output on stdout, provide the --stdout switch when
starting the irmd.
Fixes #17
|
|/
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
| |
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.
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| | |
When introducing robust mutexes, ouroboros moved to POSIX 200809L
which includes the strdup function in <string.h>. Including
<ouroboros/config.h> will give access to strdup.
Fixes #15.
|
|/
|
|
|
|
|
|
| |
This commit introduces a first version of the revised CDAP
specification. CACEP (for authentication purposes) has been separated
from CDAP. Application developers may use CDAP if they find it
useful. Within Ouroboros CDAP will be used to perform operations on
the RIB of an IPCP.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
Fixes #3
|
|
|
|
| |
Changes the variable name as well to API instead of PID.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This changes the IRM API after discussions with Dimitri. The register
operation is now split into a bind and register operation. The same
for unregister; unbind and unregister. PIDs are now used as the
application instance name. A name for a PID is only provided for
scriptability in bash. It is therefore also no longer passed down to
the IPCP. Every operation on an IPCP through the IRM API has to use
the PID. Quering of the PIDs by name is possible. The IRM tool has
been updated to use this new API as well. A subcommand 'ipcp' has been
added for operations that take effect on IPCPs only.
Fixes #12
|