Age | Commit message (Collapse) | Author |
|
|
|
Print details about errors that can occur when using the
"l2tp create tunnel" command line.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Print details about errors that can occur when using the
"l2tp create session" command line.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Check for errors in start_udp_server() and return exit status to
calling function.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Use memdebug variants of {m,re}alloc() so that the corresponding
_free() will work correctly if MEMDEBUG is defined.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Update l2tp_session_free's prototype to return its error status.
Do the opposite for l2tp_tunnel_cancel_session (make it return void)
as it never fails.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Define macros for logging tunnel or session messages with automatic
context information display.
Use these macros to replace most existing error messages + add
missing ones.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Add entries in accel-ppp.conf.5 for configuration options defined by
the CLI module.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Define the "sessions-columns" option (in the [cli] section) to let
the user select the default set of columns that will be displayed by
the "show sessions" command.
Unrecognised column names are silently discarded.
Configuration example:
[cli]
telnet=127.0.0.1:2000
password=secret
sessions-columns=ifname,ip,username
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Gracefully handle the case where no column has been selected for the
"show sessions" command. Such situation will be possible once the set
of default displayed columns will be made configurable from
accel-ppp.conf.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
When several messages are sent consecutively, the peer can reply with
a single ZLB to acknowledge all messages. In this case, removing
only the first message from the retransmission queue isn't enough
(acknowledged messages left in the queue will be retransmitted).
This case can happen when replying to an outgoing call request, wich
is handled by sending two messages in a row (an OCRP and an OCCN).
This patch avoids useless retransmissions by removing all messages
acknowledged by peer from the retransmission queue.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Handle OCRQ requests when operating as LAC.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Send the Result and Error fields of StopCCN and CDN messages in network
byte order.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Use the Assigned Tunnel ID and Result Code AVPs when handling StopCCN
messages.
The Result Code AVP is used to improve log messages, while the Assigned
Tunnel ID is used to set the tunnel's peer-tid field.
Setting peer-tid makes the ZLB to be sent to the right tunnel in case
no Assigned Tunnel ID had been received yet (this happens when the host
sends an SCCRQ but the peer directly rejects the connection with
StopCCN).
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Send a ZLB after reception of Set-Link-Info (SLI) messages to avoid
retransmissions from the LNS.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Fix a few errors in dictionary.rfc2661 and dictionary.rfc3931 (missing
entries, typos, wrong type/flags, etc.) and re-generate attr_defs.h.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Add const qualifier to attributes pointers used for parsing incoming
L2TP messages.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Add const qualifier to the Message Type variable used by the generic
L2TP reception functions.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Add const qualifier to packet passed to l2tp_recv_*() functions.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Define the address parameter of l2tp_packet_alloc() as constant.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Add const qualifiers to the string used for reading configuration.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Declare parameters and variables of l2tp_packet_print() as constant.
Also update l2tp_dict_find_value() prototype to accept options passed
by l2tp_packet_print().
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Handle CLI_CMD_FAILED like other command errors (i.e. return 0 to the
caller and send a generic error message).
This makes the CLI handler to flush its input buffer, so that
processing of the next command will be made correctly. This also makes
the telnet handler to send its prompt message.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Refuse to initiate tunnel creation to peers not defined in the
"client-ip-range" configuration section.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Don't call strlen() if conf_secret is NULL.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Implement incomming call placement for tunnels operating as LAC.
A user can place incomming calls using the command line interface.
For example, the following command will place a call on tunnel 1:
accel-ppp# l2tp create session tid 1
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Add the "l2tp create tunnel" command to initiate new tunnels.
This command accepts three parameters:
* peer-addr (mandatory): IPv4 address of the remote tunnel end.
* host-addr (optional): IPv4 address of the local tunnel end.
By default the "l2tp bind" configuration option is used (if
defined).
* mode (optional): tunnel operating mode: lac (default) or lns.
Example with the telnet interface:
accel-ppp# l2tp create tunnel peer-addr 192.0.2.1 host-addr 192.0.2.2
The above command tells accel-ppp to establish a new tunnel with the
peer at 192.0.2.1. The local address will be 192.0.2.2 and the tunnel
will operate as lac.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
When peer's port isn't known (i.e. right after a tunnel establishment
request has been sent), use the source port of the first peer's
response as the destination port of any future L2TP message sent over
that tunnel.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Send L2TP messages to the host set in the addr field of l2tp_packet_t,
instead of relying on the file descriptor's connection state. This
will allow the file descriptor to be disconnected (allowing it to
wait for a message from an arbitrary source port) while still being
able to retransmit previous L2TP messages.
This possibility is necessary for initiating tunnel establishment: the
initial SCCRQ is sent to the peer on port 1701, but the peer may reply
with an arbitrary source port. The socket thus needs to be disconnected
to be able to receive the peer's SCCRP. But in the mean time, the
initial SCCRQ may need to be retransmitted (if no answer is received
from the peer after a given amount of time). Hence the need for sending
L2TP messages over unconnected sockets.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Rename field lns_addr, as it identifies the host address, whether it be
a LAC or a LNS.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Rename field lac_addr, as it identifies the peer address, whether it be
a LAC or a LNS.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Define the lns_mode flag for tunnels and sessions to keep track
of their operating state. A session's mode is inherited from its
parent tunnel.
The session's mode is used to set the PPPOL2TP_SO_LNSMODE socket
option to its PPP socket.
For tunnels, the mode is used to define how new sessions may be
created:
-In LNS mode, new sessions may be created by accepting incomming
calls (ICRQ) or by placing outgoing calls (OCRQ).
-In LAC mode, tunnels will create sessions by accepting outgoing
calls or by placing incomming calls.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Define STATE_WAIT_SCCRP which will be required for creating new tunnels
on behalf of the host. This state will be entered right after sending
an SCCRQ message.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Change the meaning of the Nr field in struct l2tp_conn_t: instead of
setting it to the last received message sequence, set it with the
value of the next expected message sequence number (i.e. one above
the previous value). This simplifies processing and avoids the
l2tp_send() function to increment the L2TP packet Nr field (it's now
directly set to the correct value).
Having Nr correctly set before calling l2tp_send() is necessary for
implementing tunnel establishment requests (SCCRQ messages) since the
Nr field of this message must be 0.
This patch also replaces the formula used to check if a message Ns is
lower than a tunnel Nr.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
When allocating tunnels, set the lns_addr field of tunnels using
getsockname() instead of using the "host" parameter. This will allow
the caller to pass an unspecified port in "host" (for binding to
any source port) and to set the lns_addr field with the address really
bound to.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Remove the "serv" parameter from l2tp_tunnel_alloc() prototype.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Send the Challenge AVP in SCCRP messages and check for the Challenge
Response AVP in SCCCN.
This patch adds two functions:
-l2tp_tunnel_genchall() generates the Challenge, stores it in the
tunnel structure and adds the AVP in the packet to be sent.
-l2tp_tunnel_checkchallresp() reads a Challenge Response, computes
the expected response using the Challenge stored in the tunnel
structure and finally checks if both responses match.
These two functions are meant to be used in the upcoming implementation
of SCCRQ message sending and SCCRP message reception.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Create the l2tp_tunnel_genchallresp() function for building and
adding the Challenge Response AVP to messages that need it.
Support for this AVP is needed for sending SCCRP and SCCCN messages.
This patch replaces the previous Challenge Response computation by
calling the new function and prepares implementation of SCCCN message
sending.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Move challenge computation out of tunnel allocation by using a
generic CHAP-MD5 calculation function. This will allow to initiate
tunnels on the host side (i.e. sending SCCRQ) and to compute the
challenge response later on, when handling the peer response (i.e.
during SCCRP handling).
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Use a "struct sockaddr_in" pointer for passing the peer address to the
tunnel allocation function (instead of a "struct l2tp_packet_t *"). This
makes l2tp_tunnel_alloc() usable in situations where tunnel creation
doesn't happen in response to a peer request.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
The "recv <SCCRQ packet>" message printing should logically belong to
the SCCRQ message reception function. This patch moves this message
from l2tp_tunnel_alloc() to l2tp_recv_SCCRQ() in order to make
l2tp_tunnel_alloc() usable in situations different than SCCRQ
message handling.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Pass the host address as a directly usable sockaddr_in in
l2tp_tunnel_alloc(), instead of an in_pktinfo. This will allow to
allocate tunnels without having to artificially create in_pktinfo
structures in situations where the tunnel is not created in response
to an SCCRQ.
As a side effect, this patch makes accel-ppp reply to SCCRQ using
an arbitrary source port, as specified in RFC 2661.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Directly pass the framing capabilities argument of l2tp_tunnel_alloc()
as an integer. The previous type (struct l2tp_attr_t *) won't
make make sense when creating a tunnel in situations different from
SCCRQ message handling.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Peer TID assignment is specific to SCCRQ message processing. When
creating a tunnel in different conditions (e.g. upon user request),
the peer TID will be unknown.
This patch moves peer TID assignment from l2tp_tunnel_alloc() to
l2tp_recv_SCCRQ().
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Register and start triton contexts/handlers in l2tp_tunnel_start()
instead of l2tp_tunnel_alloc(). The objective is to make
l2tp_tunnel_alloc() more generic by removing some specific
initialisation code. At a later stage, these would be done by the
caller between the calls to l2tp_tunnel_alloc() and l2tp_tunnel_start().
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Avoid unregistering uninitialised tunnel data when freeing tunnel
structures. This makes l2tp_tunnel_free() suitable for freeing
partially initialised tunnels.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Update the prototype of l2tp_tunnel_alloc() so that it returns the
allocated tunnel structure. This will allow the caller to act on the
newly created tunnel in different ways depending on the creation
context.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Verify return values of functions called by l2tp_tunnel_alloc().
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Don't send the EV_CTRL_FINISHED event when closing sessions which
haven't been established, because no corresponding EV_CTRL_STARTED
events have been sent by such sessions.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
Call regexp command handler without command line's leading spaces.
This makes leading spaces handling consistent between the exec and help
command handlers (leading spaces are already skipped before calling
help handlers).
This also gives the possibility to register an anchored regexp command
without having to manage the leading spaces in that regexp.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|