1. 25 1月, 2013 19 次提交
  2. 09 9月, 2012 4 次提交
  3. 07 9月, 2012 15 次提交
    • G
      L2TP: Re-enable per session logs · 64d3b900
      Guillaume Nault 提交于
      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: NGuillaume Nault <g.nault@alphalink.fr>
      64d3b900
    • G
      L2TP: Handle multiple sessions per tunnel · b34b73e2
      Guillaume 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: NGuillaume Nault <g.nault@alphalink.fr>
      b34b73e2
    • G
      L2TP: Use different connection timers for tunnels and sessions · 795346e2
      Guillaume 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: NGuillaume Nault <g.nault@alphalink.fr>
      795346e2
    • G
      L2TP: Allocate new sessions after receiving ICRQ messages · ea617abe
      Guillaume 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: NGuillaume Nault <g.nault@alphalink.fr>
      ea617abe
    • G
      L2TP: Modify prototype of functions acting only on sessions · c9d08a0f
      Guillaume 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: NGuillaume Nault <g.nault@alphalink.fr>
      c9d08a0f
    • G
      L2TP: Close only session (not tunnel) after a PPP disconnection · b113d00b
      Guillaume 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: NGuillaume Nault <g.nault@alphalink.fr>
      b113d00b
    • G
      L2TP: Start sending HELLO messages upon tunnel connection · c5786e41
      Guillaume Nault 提交于
      Make HELLO messages independent from PPP connections (HELLO
      messages are tunnel specific).
      Signed-off-by: NGuillaume Nault <g.nault@alphalink.fr>
      c5786e41
    • G
      L2TP: Add standalone StopCCN message sending function · 42773137
      Guillaume 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: NGuillaume Nault <g.nault@alphalink.fr>
      42773137
    • G
      L2TP: Terminate sessions without closing tunnel · a7d5a6af
      Guillaume 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: NGuillaume Nault <g.nault@alphalink.fr>
      a7d5a6af
    • G
      L2TP: Use different states for handling sessions and tunnels · eff719a6
      Guillaume 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: NGuillaume Nault <g.nault@alphalink.fr>
      eff719a6
    • G
      L2TP: Separate session and tunnel connection code · 24d4a04a
      Guillaume Nault 提交于
      Establish tunnel and session connections upon reception of SCCCN
      and ICCN messages respectively.
      Signed-off-by: NGuillaume Nault <g.nault@alphalink.fr>
      24d4a04a
    • G
      L2TP: Rename function that frees connection strutures · 2c095fec
      Guillaume Nault 提交于
      Rename l2tp_disconnect() to l2tp_tunnel_free() for consistency
      with the new l2tp_session_free() function.
      Signed-off-by: NGuillaume Nault <g.nault@alphalink.fr>
      2c095fec
    • G
      L2TP: Define and use dedicated function to free sessions · be64442c
      Guillaume Nault 提交于
      Move session specific operations out of l2tp_disconnect().
      Signed-off-by: NGuillaume Nault <g.nault@alphalink.fr>
      be64442c
    • G
      L2TP: Add session specific allocation function · 5fcc486d
      Guillaume 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: NGuillaume Nault <g.nault@alphalink.fr>
      5fcc486d
    • G
      L2TP: Add new structure to store session specific data · a7025611
      Guillaume 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: NGuillaume Nault <g.nault@alphalink.fr>
      a7025611
  4. 06 9月, 2012 2 次提交