Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
This reverts commit 2b9c6812f4558b74843c6e3740ee5319dc1df48d.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Explicitely interpret zero values when parsing boolean options. This
allows to unset boolean parameters such as "verbose" when reloading
the configuration.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
|
|
Retrieve the socket address size from the address passed to connect().
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Use l2tp_tunnel_alloc() cleanup code for handling TID assignment
failure. The previous manual cleanup did not close the triton handler
file descriptor.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Tunnel establishment may not be immediately followed by the creation of
a new session. In this case there is no message to send to the peer
after receiving an SCCCN; so it won't be acknowledged and the peer will
then have to retransmit it.
This patch makes the tunnel always acknowledge SCCCN by replying with a
ZLB, thus avoiding useless retransmission from the peer.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Send a ZLB upon reception of a CDN message.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Update call to l2tp_send_CDN() to avoid using the 0 result code
(reserved by RFC 2661).
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
The sessions timeout timers were registered in the triton context of
their parent tunnel. This patch uses the session's context instead
because the timer's callback function, l2tp_session_timeout(), expects
to be called from a session context.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
When a PPP session terminates on its own (i.e. not on behalf of a L2TP
tunnel/session request), the l2tp_ppp_finished() callback calls the
L2TP session disconnection function without updating the session's
state.
Session disconnection code then works like if the PPP session was still
up: it tries to disconnect the PPP by calling ap_session_terminate().
But since the PPP is already terminated, it returns immediately,
without calling the l2tp_ppp_finished() callback; so session cleanup
won't happen.
This patch updates the session's state upon PPP disconnection, so that
the session disconnection code won't try to disconnect the PPP in
__l2tp_session_free().
The stat_active counter is now updated inside the l2tp_ppp_finished()
callback so that it gets called upon any PPP disconnection.
Sending of the EV_CTRL_FINISHED event has also been moved. It is now
performed in the generic part of __l2tp_session_free() because it has
to be done every time the session really terminates.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
PPP and L2TP session contexts are the same. So since l2tp_ppp_finished()
is called within the PPP context, it doesn't need to switch to the
session context for calling l2tp_ppp_session_disconnect().
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Freeing a session requires four steps:
1-The session asynchronously requests its parent tunnel to
remove the session (the tunnel must start the process).
2-The parent tunnel removes its reference to this session,
then makes an asynchronous call to the session cleanup
function.
3-The session performs its cleanup, frees its memory and
asynchronously notifies its parent tunnel.
4-The parent tunnel decrements its sessions counter (so that
it knows when it doesn't have any session depending on it).
If two requests, A and B, for removing the same session, arrive
almost simultaneously, then the following scenario may occur:
1a-The session handles request A and transmits it to its
parent tunnel.
2a-The parent tunnel removes its reference to this session
and requests the session to perform cleanup.
1b-In the mean time, the session handles request B and
transmit it to its parent tunnel.
3a-The session continues to handle request A, cleans up the
session and frees memory.
2b-The parent tunnel handles request B: it removes its
reference to the session and tells it to perform cleanup.
But the session pointer used has just been freed at step 3a.
This patch modifies step 1, so that the session transmit the
session-id instead of a pointer to the session structure. That
way, the tunnel can check if the session has already been
deleted (or is pending deletion), without having to manipulate a
potentially invalid pointer.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Use a session counter for each tunnel to avoid freeing a tunnel
while still having sessions depending on it.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
|
|
|
|
This reverts commit 3bff891eac97037c633be960b822c688e8629165.
|
|
|
|
This reverts commit 9f4f36169f03857b6910402028717210270a0339.
|
|
|
|
|
|
* l2tp: Fix allocation checking when adding octets AVP
* cli, tcp: Fix non-NULL terminated string reception
* Fix va_end() missing calls
* chap-secrets: implemented encryption
* auth_pap: make messages like other auth modules
* cli: check xmit_buf is not null at enter to write function
* pppoe: implemented regular expression support
* chap-secrets: implemented encryption
* ippool: fixed initialization order
* optional shaper compiling
* ppp: dns/wins code cleanup
|
|
session: don't accept new sessions in shutdown mode
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[BConflicts:
accel-pppd/ctrl/openvpn/openvpn.c
|
|
|
|
|
|
|
|
|
|
Use a triton context per session so that log_ppp_*() functions can
prepend log messages with PPP session information.
Since functions must now be called within the right context,
allocating and freeing sessions is done in the following manner:
* Tunnels allocate new sessions within their own context and
activate the new session's context just before answering
the ICRQ.
* Freeing sessions is slightly more complex. The session is
first removed from its tunnel session list (done within the
tunnel context), then the session itself if disconnected and
freed (done within the session context).
The l2tp_tunnel_*() and the l2tp_session_*() functions must now be
used within tunnel and session contexts respectively.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Accept to create several sessions for each tunnel. Session IDs
are generated randomly and stored in a binary search tree in
their corresponding tunnel (i.e. field "sessions" of the
l2tp_conn_t structure). A new mempool is defined for session
allocations.
Generation of the session IDs is simple but quite limited: it
selects a 16 bits random ID and checks if a session with this
ID already exists. If so the allocation fails and the session
is closed. Otherwise the selected ID is used for the new
session. So tunnels that handle many sessions may reject new
ones, even if unused session IDs are available (just because
the randomly choosen ID is already in use).
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Deactivate the tunnel connection establishment timer upon
reception of SCCCN messages and use a new session specific
timer for session establishment.
This new session timer follows the same behaviour as the
tunnel timeout timer: it is activated when sending the ICRP
message and deactivated upon reception of the corresponding
ICCN message.
This approach is necessary for handling several sessions per
tunnel, but it generates the following side effect: if a
tunnel is created but no session establishment is requested
from the LAC, the tunnel will no longer be automatically torn
down (since the tunnel is correctly set up, its timer is no
longer running, but since no session establishment process
has been started, there is no session timer neither).
Later on, tunnel and session timers could be turned into
inactivity timeouts to address this limitation.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Separate tunnels and sessions allocation: initialise tunnels
after receiving SCCRQ messages (with no session inside), then
initialise sessions upon reception of ICRQ messages.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Pass a struct l2tp_sess_t as parameter of functions acting on
sessions, instead of retrieving the session from an l2tp_conn_t
structure (which will no longer be possible once tunnels will
handle several sessions).
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|