summaryrefslogtreecommitdiff
path: root/accel-pppd
AgeCommit message (Collapse)Author
2013-02-12l2tp: Implement on demand tunnel creationGuillaume Nault
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>
2013-02-12l2tp: Connect to peer once first reply receivedGuillaume Nault
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>
2013-02-12l2tp: Send L2TP messages with sendto()Guillaume Nault
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>
2013-02-12l2tp: Replace the lns_addr tunnel field by host_addrGuillaume Nault
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>
2013-02-12l2tp: Replace the lac_addr tunnel field by peer_addrGuillaume Nault
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>
2013-02-12l2tp: Add l2tp mode flag (LAC or LNS)Guillaume Nault
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>
2013-02-12l2tp: Add WAIT_SCCRP stateGuillaume Nault
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>
2013-02-12l2tp: Update Ns/Nr handlingGuillaume Nault
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>
2013-02-12l2tp: Set LNS address with the one really bound toGuillaume Nault
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>
2013-02-12l2tp: Remove unused parameter in tunnel allocationGuillaume Nault
Remove the "serv" parameter from l2tp_tunnel_alloc() prototype. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2013-02-12l2tp: Implement peer authenticationGuillaume Nault
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>
2013-02-12l2tp: Define function to compute Challenge ResponseGuillaume Nault
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>
2013-02-12l2tp: Use separate function for computing CHAP-MD5Guillaume Nault
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>
2013-02-12l2tp: Pass peer address as sockaddr in tunnel alloc.Guillaume Nault
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>
2013-02-12l2tp: Display SCCRQ packets in l2tp_recv_SCCRQ()Guillaume Nault
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>
2013-02-12l2tp: Pass host address as sockaddr in tunnel alloc.Guillaume Nault
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>
2013-02-12l2tp: Alloc tunnels with integer framing cap.Guillaume Nault
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>
2013-02-12l2tp: No peer-tid assignment in tunnel allocationGuillaume Nault
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>
2013-02-12l2tp: Separate tunnel launching from initialisationGuillaume Nault
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>
2013-02-12l2tp: Support for freeing partially initialised tunnelsGuillaume Nault
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>
2013-02-12l2tp: Make l2tp_tunnel_alloc() return a new tunnelGuillaume Nault
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>
2013-02-12l2tp: Add error checking for l2tp_tunnel_alloc()Guillaume Nault
Verify return values of functions called by l2tp_tunnel_alloc(). Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2013-02-12l2tp: Send EV_CTRL_FINISHED only on established sessionsGuillaume Nault
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>
2013-02-12cli: Skip leading spaces before calling regexp cmdsGuillaume Nault
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>
2013-02-12pppoe: Improve help message displayGuillaume Nault
Match PPPoE "exec" and "help" commands. This makes the PPPoE module behave nicely with the new help command handling. For example: * "help pppoe set" won't print help messages for the "pppoe show" set of commands * "help pppoe mac-filter add" will only print help message for this specific command (i.e. without the other "pppoe mac-filter" ones) Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2013-02-12cli: Handle arguments to the "help" commandGuillaume Nault
When arguments are supplied to the "help" command, only display help messages corresponding to the command these arguments refer to (e.g. "help pppoe" will only show help messages for commands starting with "pppoe"). Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2013-02-12cli: Modify regexp command handler registrationGuillaume Nault
Pass a full string, instead of an array of words, to the "help" callback of regexp command handlers. Also register these command handlers using a regexp to apply on "help" commands, just like for exec commands. The "help" callback will then be called only if the command matches the "help" regexp. As a side effect, the "help" word and its following spaces are skipped before calling the "help" callback for both simple and regexp commands. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2013-02-12cli: Improve word splitting functionsGuillaume Nault
* skip_word(): ensure the for() loop won't pass over a '\0' character * split(): ensure the for() loop won't try to fill buf[MAX_CMD_ITEMS] * split(): skip leading spaces. * split(): fix exit value if no item is found (return 0 instead of 1) Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2013-02-12cli: Pass complete command line to regexp handlersGuillaume Nault
Split regexp and simple command handling from the generic command processing function and handle regexp commands before simple ones. This avoids splitting the original command line before processing regexp command handlers, so that these handlers get the full command line instead of only the first word. The regexp command handlers are now only called when the command matches the regexp (regexp handlers were called unconditionaly before this patch). The rest of the processing properties should remain unchanged. Command processing summary: -If the command starts with the "help" keyword, then all help commands are called, starting with regexp help commands. -Otherwise, regexp command handlers whose regexp matches the command line are called. Then, simple command handlers whose header matches the command line are called. Any command handler that returns a value different from CLI_CMD_OK stops the process, thus preventing the following handlers from being called. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2013-02-12cli: Use dedicated "help" command handlerGuillaume Nault
Process "help" commands in a separated function with no side effect when the command doesn't match. This avoids splitting the input command line if not necessary (regexp command handlers need to receive the entire command line for being useful). Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2013-02-12cli: Fix regexp command handlingGuillaume Nault
* Call pcre_compile2() with all mandatory arguments and improve error message. * Register regexp commands in regexp_cmd_list instead of simple_cmd_list. * Fix "help" function call. * Interpret regexp command return codes (CLI_CMD_*) in the same way as for simple commands. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2013-02-06l2tp: Remove unused field "state2" in struct l2tp_sess_tGuillaume Nault
Since it's not possible to mix incomming and outgoing states in a session, the "state2" field isn't necessary. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2013-02-06l2tp: Implement outgoing callsGuillaume Nault
Add the "l2tp create session" command to place an outgoing call. For example, "l2tp create session tid 3" will send an OCRQ within tunnel 3. This allows the LNS to request establishment of a new session inside an existing tunnel. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2013-02-06l2tp: No automatic CDN before cancelling sessionsGuillaume Nault
This patch removes the automatic sending of a CDN message when cancelling creation of new sessions. This is necessary in order to give the possibility for a tunnel to create (and possibly cancel) new sessions on its own (e.g. for placing outgoing calls). In such cases, sending a CDN message would not make sense if the session gets cancelled before any creation message was sent. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2013-02-06utils: Add function for strict str to int conversionGuillaume Nault
Define the u_readlong() function as a wrapper for strtol(). It performs stricter checks on the input value and let the caller specify an interval of acceptable values. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2013-02-06build: Set ACCEL_PPP_VERSION in top level cmake fileGuillaume Nault
Move definition of ACCEL_PPP_VERSION from /accel-pppd/CMakeLists.txt to /CMakeLists.txt so that it gets visible by any cmake file. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2013-02-05ipoe: do not assign ip to interface if shared=0 and ifcfg=0 (ip unnumbered)Kozlov Dmitry
2013-02-01ipoe: update lease time and mask on each relay replyKozlov Dmitry
ipoe: fixed DHCP Discover handling when session is in active state
2013-01-28ipoe: implemented noauth optionKozlov Dmitry
2013-01-28ipoe: changed assignment of Server-ID and Router optionsKozlov Dmitry
2013-01-26ipoe: various fixesKozlov Dmitry
2013-01-26ipoe: insert opt82 to each relay packetKozlov Dmitry
2013-01-26Revert "ipoe: insert opt82 to each relay packet"Kozlov Dmitry
This reverts commit cde7ee4d629b32c810ceac836b70a4289b4f00b3.
2013-01-26ipoe: insert opt82 to each relay packetKozlov Dmitry
2013-01-25ipoe: fix compilation errorKozlov Dmitry
2013-01-25ipoe: always assign IP address in mode=L2Kozlov Dmitry
2013-01-25Revert "ipoe: assign giaddr to interface only if mode=L3"Kozlov Dmitry
This reverts commit 2b9c6812f4558b74843c6e3740ee5319dc1df48d.
2013-01-25ipoe: assign giaddr to interface only if mode=L3Kozlov Dmitry
2013-01-25ipoe: properly insert option 82 before ENDKozlov Dmitry
2013-01-25ipoe: add missing LIB_SUFFIX to install pathKozlov Dmitry