summaryrefslogtreecommitdiff
path: root/accel-pppd/ctrl/l2tp/l2tp.c
AgeCommit message (Collapse)Author
2012-09-07L2TP: Handle multiple sessions per tunnelGuillaume Nault
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>
2012-09-07L2TP: Use different connection timers for tunnels and sessionsGuillaume Nault
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>
2012-09-07L2TP: Allocate new sessions after receiving ICRQ messagesGuillaume Nault
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>
2012-09-07L2TP: Modify prototype of functions acting only on sessionsGuillaume Nault
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>
2012-09-07L2TP: Close only session (not tunnel) after a PPP disconnectionGuillaume Nault
When a PPP connection is torn down, close the underlying session but not the tunnel (unless its last session has been closed). Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2012-09-07L2TP: Start sending HELLO messages upon tunnel connectionGuillaume Nault
Make HELLO messages independent from PPP connections (HELLO messages are tunnel specific). Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2012-09-07L2TP: Add standalone StopCCN message sending functionGuillaume Nault
Split StopCCN message building/sending from l2tp_terminate to make it re-usable. Rename l2tp_terminate() to l2tp_tunnel_disconnect() for consistency with other tunnel/session management functions. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2012-09-07L2TP: Terminate sessions without closing tunnelGuillaume Nault
Implement CDN message sending in order to give the possibility to close a session without closing the underlying tunnel (close a tunnel only when closing its last session, which is always the case as long as session-multiplexing is not implemented). Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2012-09-07L2TP: Use different states for handling sessions and tunnelsGuillaume Nault
Use the "state" field (struct l2tp_conn_t) for tracking tunnel states and "state1" (struct l2tp_sess_t) for sessions. The meaning of the STATE_* has been slightly modified: * STATE_WAIT_SCCN (tunnel): no modification. * STATE_WAIT_ICRQ (session): now unused. Acceptation of ICRQ messages now depend on the tunnel state (STATE_ESTB). * STATE_WAIT_ICCN (session): no modification. * STATE_ESTB (tunnel and session): for tunnels, means that the tunnel is ready to accept new sessions. For sessions, means that the L2TP session is established, but that it doesn't carry any PPP session yet. * STATE_PPP (session): the session is in use (i.e. it is established and carries a PPP session). * STATE_FIN (tunnel): the tunnel is being closed. * STATE_CLOSE (tunnel and session): default state after allocation/free. For session, this is also the state used once disconnected. Since outgoing calls are not implemented yet, STATE_WAIT_OCRP and STATE_WAIT_OCCN are not used. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2012-09-07L2TP: Separate session and tunnel connection codeGuillaume Nault
Establish tunnel and session connections upon reception of SCCCN and ICCN messages respectively. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2012-09-07L2TP: Rename function that frees connection struturesGuillaume Nault
Rename l2tp_disconnect() to l2tp_tunnel_free() for consistency with the new l2tp_session_free() function. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2012-09-07L2TP: Define and use dedicated function to free sessionsGuillaume Nault
Move session specific operations out of l2tp_disconnect(). Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2012-09-07L2TP: Add session specific allocation functionGuillaume Nault
Separate session allocation from the rest of tunnel allocation operations. This implies a few extra modifications: * Store destination address of the SCCRQ message in the connection structure (and rename the "addr" field to "lac_addr" for consistency). This information is required for allocating the session. * No more PPP information in log prefix: with session multiplexing, tunnels are no longer tied to a single PPP session, so there is no struct ppp_t to pass as parameter to the log_switch() function. Session allocation is currently still done inside l2tp_tunnel_alloc(). It should rather be done at session establishment once tunnel/session separation will be terminated. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2012-09-07L2TP: Add new structure to store session specific dataGuillaume Nault
Use struct l2tp_sess_t to separate session data from other connection information. This is required in order to implement session multiplexing. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2012-08-29Merge branch 'master' of ↵Kozlov Dmitry
ssh://accel-ppp.git.sourceforge.net/gitroot/accel-ppp/accel-ppp
2012-08-29add 'ppp' filed to CTRL to identify ppp sessionsKozlov Dmitry
2012-08-23L2TP: Tear down tunnel when peer stops listeningGuillaume Nault
Stop sending messages on tunnels for which no peer is listening. Discard retransmissions too. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2012-08-15l2tp: fixed missing ctrl.terminate assignmentKozlov Dmitry
2012-07-13L2TP: Check for fcntl() errors in l2tp_connect()Kozlov Dmitry
Add error detection to ensure the FD_CLOEXEC flag gets set for every new socket. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2012-07-13Merge commit 'e04b9b2b35ed36ceb89d6991d2322210f6dd6abc'Kozlov Dmitry
* commit 'e04b9b2b35ed36ceb89d6991d2322210f6dd6abc': L2TP: Close sockets opened by l2tp_connect() upon failure
2012-07-13Merge commit '0b99fef73bce3f1abed63e581594de9d1f132312'Kozlov Dmitry
* commit '0b99fef73bce3f1abed63e581594de9d1f132312': L2TP: Fix socket() error handling in l2tp_connect() iprange: accept network with null mask (which actually disables iprange module)
2012-07-13L2TP: Check for fcntl() errors in l2tp_connect()Guillaume Nault
Add error detection to ensure the FD_CLOEXEC flag gets set for every new socket. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2012-07-13L2TP: Close sockets opened by l2tp_connect() upon failureGuillaume Nault
Centralise error management to ensure full cleanup upon failure. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2012-07-13L2TP: Fix socket() error handling in l2tp_connect()Guillaume Nault
Check if the tunnel file descriptor has been successfully created. Explicitely check for negative values to detect socket() errors. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2012-06-22initial ipoe implementationKozlov Dmitry
2012-06-19general preparation for IPoE integrationKozlov Dmitry
2012-06-04Revert "implemented delayed fd close (speeds up session termination process)"Kozlov Dmitry
Low interface creation/deletion rate is kernel issue and should be fixed in 3.5. This reverts commit 9ae4a0151805229face3385e6c966de90c7fec29.
2012-05-28implemented delayed fd close (speeds up session termination process)Kozlov Dmitry
2012-05-22Some AVP we are not handling yet, and it is better to provide optionKozlov Dmitry
to ignore them, instead of refusing connection. Signed-off-by: Denys Fedoryshchenko <denys@visp.net.lb>
2012-05-16l2tp: implemented Challenge attribute handling (shared secret)Kozlov Dmitry
2012-05-16write message to log if unable to load necessary kernel moduleKozlov Dmitry
2012-04-21implemented per CTRL mppe configKozlov Dmitry
2012-01-23load necessary kernel modules at startupKozlov Dmitry
2012-01-18implemented connlimit module which can be used to reduce system overload due ↵Kozlov Dmitry
to flood of connections
2012-01-18l2tp: add Host-Name attribute to SCCRP necessarilyKozlov Dmitry
l2tp: add Vendor-Name attribute to SCCRP
2012-01-13set FD_CLOEXEC on opened file descriptorsKozlov Dmitry
2011-09-19shaper_tbf: fix temporary rate change functionalityKozlov Dmitry
2011-09-15l2tp: don't send OCRQKozlov Dmitry
2011-08-19snmp supportKozlov Dmitry
2011-05-30rewrited initialization procedure (fix gcc-4.6 builds)Kozlov Dmitry
2011-05-10l2tp: dir300 quirkKozlov Dmitry
2011-01-05rename accel-pptp to accel-pppDmitry Kozlov