L2TP: Tear down tunnel when peer stops listening

Stop sending messages on tunnels for which no peer is listening.
Discard retransmissions too.

Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
add 'ppp' filed to CTRL to identify ppp sessions
Merge branch 'master' of ssh://accel-ppp.git.sourceforge.net/gitroot/accel-ppp/accel-ppp
fix typo (successed -> succeeded)

Conflicts:

	accel-pppd/ppp/ppp_auth.c
fix various typos
Add compilation checks for printf-style format strings

Append the format() __attribute__ to function prototypes which
use a format string. This allows GCC to check for consistency
between the format string and its arguments when these
functions are called.

Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
Fix format string errors

Fix several errors and compiler warnings in format string
arguments.

Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
libnetlink: remove unused function
generalize interface statistics gathering
L2TP: Add new structure to store session specific data

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>
L2TP: Add session specific allocation function

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>
L2TP: Define and use dedicated function to free sessions

Move session specific operations out of l2tp_disconnect().

Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
L2TP: Rename function that frees connection strutures

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>
L2TP: Separate session and tunnel connection code

Establish tunnel and session connections upon reception of SCCCN
and ICCN messages respectively.

Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
L2TP: Use different states for handling sessions and tunnels

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>
L2TP: Terminate sessions without closing tunnel

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>
L2TP: Add standalone StopCCN message sending function

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>
L2TP: Start sending HELLO messages upon tunnel connection

Make HELLO messages independent from PPP connections (HELLO
messages are tunnel specific).

Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
L2TP: Close only session (not tunnel) after a PPP disconnection

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>
L2TP: Modify prototype of functions acting only on sessions

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>