summaryrefslogtreecommitdiff
path: root/accel-pppd/ctrl
AgeCommit message (Collapse)Author
2014-09-20rewrite of authentication/accounting proceduresDmitry Kozlov
This patch gets rid of synchronuos style of authentication/accounting. Synchronous style of authentication/accounting produced sleeping threads which becomes a problem when lots of sessions started/stopped and all they want authorization/accounting.
2014-09-13pppoe: start interfaces asynchronouslyDmitry Kozlov
When there are many interfaces to start accel-ppp stucks on startup because kernel slowly creates raw sockets. So starting this proccess asynchronous improves accel-ppp responsiveness
2014-09-13pppoe: improved session id allocation procedure (optimizes memory usage)Dmitry Kozlov
2014-09-13pptp: use predefined named framing/bearer values, cosmeticsVladislav Grishenko
2014-09-13pptp: don't delay control connection msg on EINTRVladislav Grishenko
2014-09-13pppoe, pptp: fix socket type for checkingVladislav Grishenko
2014-09-09Merge branch 'master' of ssh://git.code.sf.net/p/accel-ppp/codeDmitry Kozlov
2014-09-09pppoe: improved AC-Cookie mechanismDmitry Kozlov
2014-09-04ipoe: send option 82 from DHCP request to radiusDmitry Kozlov
To enable this specify attr-opt82 option in [ipoe] section. Attribute must be octet type.
2014-08-26ipoe: introduced attr-dhcp-lease-time option to specify radius attribute to ↵Dmitry Kozlov
pass dhcp lease time (attribute must be integer)
2014-08-26ipoe: implemneted proxy-arp=3 mode (always reply by interface mac address)Dmitry Kozlov
2014-08-25ipoe: add route to interface in mode "start=up,shared=0"Dmitry Kozlov
2014-07-24Merge branch 'master' of ssh://git.code.sf.net/p/accel-ppp/codeDmitry Kozlov
2014-07-24radius: exit from active interim request when termination event occuresDmitry Kozlov
2014-07-21Add changeable case in caller-station/calling-station in pppoeDmitry Kozlov
Signed-off-by: Denys Fedoryshchenko <nuclearcat@nuclearcat.com>
2014-07-17ipoe: fixed passing packets in 'redirect on reject' modeDmitry Kozlov
2014-07-17improved 'single session' mechanismDmitry Kozlov
2014-06-27ipoe: improved vlan monitorDmitry Kozlov
Previous version used linear list of vlan monitor enabled interfaces, this caused huge overhead in packet receive path because for each received packet it performed search on linear list to check if vlan monitor is enabled on input device. Current version binds internal structure to net_device->ml_priv so search is not performed more.
2014-06-03Merge branch 'master' of ssh://git.code.sf.net/p/accel-ppp/codeDmitry Kozlov
2014-06-03make IPv4 address to string conversions endian friendlyDmitry Kozlov
2014-05-28ipoe: dhcp: fixed incorrect parsing empty optionsDmitry Kozlov
2014-05-26ipoe: introduced "ip-unnumbered" optionDmitry Kozlov
Before this time accel-ppp always worked in "ip unnumbered" mode. This option may turn this mode off (default is on)
2014-05-26ipoe: send NAK after number of unreplied REQUESTsDmitry Kozlov
After introduction offer-delay accel-ppp stopped to answer NAK for REQUESTs if requested session is not existing to give chance other servers to reply. But this causes that some broken clients enter to infinite REQUEST loop. This patch corrects this issue, so if offer-delay is not configured (means that this is only server in the net) or after receiving few REQUESTs accel-ppp send NAK for non-existing sessions.
2014-05-20ipoe: set initial session interface name to parent interface name (for ↵Dmitry Kozlov
logging purpose)
2014-05-20ipoe: add messages to know parent interface when creating vlan or virtual ↵Dmitry Kozlov
interface
2014-05-18ipoe: use ifindex as connlimit key for non-shared interfacesDmitry Kozlov
2014-05-18improved single-session=replace handlingDmitry Kozlov
Wait for previous session completely terminated before continuing authorization new session.
2014-05-12pppoe: introduced called-sid option.Dmitry Kozlov
This new option will control how to represent Called-Station-ID. Its value maybe ifname,mac or ifname:mac. By default mac is used to keep compatibility with old versions. Also old option ifname-in-sid is removed from documentation, but is still supported for compatibility.
2014-05-12triton: improved epoll events handlingDmitry Kozlov
2014-04-29ipoe: limit only DHCPDISCOVER by connlimitDmitry Kozlov
Signed-off-by: Dmitry Kozlov <xeb@mail.ru>
2014-04-29ipoe: add support for connlimit moduleDmitry Kozlov
Signed-off-by: Dmitry Kozlov <xeb@mail.ru>
2014-04-29ipoe: implemented per-interface username optionDmitry Kozlov
Signed-off-by: Dmitry Kozlov <xeb@mail.ru>
2014-04-11ipoe: early allocate interface for shared vlans (prevents different values ↵Dmitry Kozlov
of NAS-Port in Access-Request and Account-Request) Signed-off-by: Dmitry Kozlov <xeb@mail.ru>
2014-04-11ipoe:lua: update thread-specific value when updating L (fixes segfault)Dmitry Kozlov
Signed-off-by: Dmitry Kozlov <xeb@mail.ru>
2014-04-11l2tp: don't disconnect immediately when receiving StopCCNGuillaume Nault
Wait for a full retransmission cycle after reception of a StopCCN. Introduce STATE_FIN_WAIT to identify tunnels which have received a StopCCN but are waiting for the disconnection timer to expire. A tunnel can go from STATE_FIN (i.e. StopCCN has been sent, waiting for acknowledgement) to STATE_FIN_WAIT (i.e. StopCCN has been received, waiting for full retransmission cycle), but not the other way around. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2014-04-11l2tp: improve configuration of retransmission optionsGuillaume Nault
* Set default retransmission timeout to 1 second. Since we now have exponential backoff, we can afford a smaller value. * Add the rtimeout-cap option to set the maximum value the retransmission timer has to respect during exponential backoff. * Store the maximun number of retransmissions in tunnel's structure (like other retransmission parameters). * Describe all these changes in man page and reset them to their default values if they're removed from configuration file before a reload. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2014-04-11l2tp: implement exponential backoff (retransmit)Guillaume Nault
Rework the l2tp_rtimeout() callback, so that time between retransmissions expands exponentially. This allows for faster retransmissions without without overwhelming the peer. A cap is set on the maximum retransmission time. For now it is set to 16 seconds. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2014-04-11l2tp: allow CDN reception with no Session IDGuillaume Nault
If a peer needs to disconnect a session for which it didn't receive any reply, it sends a CDN with no Session ID. In this case, the Assigned Session ID AVP is the only data that can be used to find out which session has to be closed. Though it isn't supported for now, let's accept and ack these messages. Session will be deleted on our side thanks to the establishment timer. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2014-04-11l2tp: configure receive window in accel-ppp.confGuillaume Nault
Add the recv-window option in accel-ppp.conf. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2014-04-11l2tp: implement local receive windowGuillaume Nault
Add a fixed length receive queue to tunnels and adverdise its length to the peer using the Receive Window Size AVP. Incoming message handling is modified as follow: -Read as much messages as possible and store them in the receive queue. Messages are stored in order, based on their sequence number. Messages not fitting into the queue are discarded (doesn't happen if peer respects our Receive Window AVP). This is the job of the new l2tp_tunnel_store_msg() function. It also automatically finds out if there are new messages to acknowledge. -Once all incoming messages have been read, free acknowledged packets from retransmission queue (based on the highest received acknowledgement number). -Then process messages in the receive queue. This is done by l2tp_tunnel_reply(). Each packet is processed by l2tp_{tunnel,session}_recv() (or dropped in some particular cases). The send queue is then pushed. If there's no message in the send queue and an acknowledgement is necessary, a ZLB is sent instead. -Finally, detect if the peer has acknowledged a StopCCN. There are three components to this test: -Have we tried to send a StopCCN? Check with tunnel's state. -Has the StopCCN been pushed on the network? Check with tunnel's send queue. -Has the peer acknowledged the StopCCN? Check with tunnel's retransmission queue. For now, l2tp_tunnel_store_msg() doesn't perform fast retransmissions. So l2tp_retransmit() is removed. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2014-04-11l2tp: rework error handling in l2tp_tunnel_allocGuillaume Nault
Use stacked error labels for better extensibility. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2014-04-11l2tp: don't initiate new sessions when sending window is fullGuillaume Nault
Refuse to create new sessions when the local send queue is bigger than the peer's receive window (i.e. when there are already more outstanding messages than what the peer can currently accept). Only sessions initiated locally are affected, session requests from the peer are still handled normally. This avoids adding useless presure on the sending window when many sessions are created locally. If sessions were created, they'd add many ICRQ or OCRQ messages in the send queue and we'd have to wait for all these messages to be sent before being able to reply to messages from the peer. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2014-04-11l2tp: respect peer's receive windowGuillaume Nault
Store the Receive Window Size AVP sent by peer and respect it when sending messages. That is, stop sending messages from send queue once the number of unacknowledged messages is higher than peer's receive window. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2014-04-11l2tp: drop tunnel/session messages from send queue upon disconnectionGuillaume Nault
Add a per session send queue. Messages sent by a session are added to both tunnel and session queues. This allows sessions to remove their unsent messages from tunnel's send queue before they disconnect. The same approach is used for tunnels. Before disconnecting, they clear their send queue to avoid sending useless messages. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2014-04-11l2tp: send ZLB messages automaticallyGuillaume Nault
Modify return value of l2tp_tunnel_push_sendqueue() to inform the caller if a message has been sent or if the queue was empty. This information, let l2tp_conn_read() automatically acknowledge received messages using a ZLB when there's no response to send. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2014-04-11l2tp: ignore l2tp_{tunnel, session}_send() return valuesGuillaume Nault
Stop checking for l2tp_{tunnel,session}_send() return values. These functions now always succeed, unless the session or tunnel is closing (in which case packet is automatically dropped and caller doesn't need to take any special action). Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2014-04-11l2tp: separate send and retransmission queuesGuillaume Nault
Don't send messages immediately, store them in conn->send_queue instead, so we have control over how many and when messages are sent on the network. Once a message is sent, it's removed from the send queue and added to the retransmission queue. Retransmission queue is automatically updated based on acknowledgements received from peer. For now, packets in the send queue are pushed on the network after each incoming packet processing. So functions called by l2tp_conn_read() don't have to call l2tp_tunnel_push_sendqueue(). Other functions (e.g. triton callbacks) have to manually push packets out of the send queue. The same applies for disconnection. The l2tp_tunnel_disconnect_push() and l2tp_session_disconnect_push() functions have been defined for use in functions that don't call l2tp_tunnel_push_sendqueue() automatically. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2014-04-11l2tp: use separate function for handling tunnel specific messagesGuillaume Nault
Remove message type switch from l2tp_conn_read(). Define l2tp_tunnel_recv() instead to handle tunnel specific messages. The Session ID field in L2TP control messages is used to determine if packet is tunnel or session oriented. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2014-04-11l2tp: automatically delete tunnel if disconnection failsGuillaume Nault
Let l2tp_tunnel_disconnect() delete the tunnel when an error occurs. Return an int to indicate if conn has been deleted. Most callers are compatible with this new behaviour, either because they never use the tunnel after disconnection or because they hold a reference on the tunnel. A few callers need to be adapted though: -l2tp_conn_close() calls l2tp_tunnel_disconnect() to properly inform the peer of tunnel disconnection. But it also deletes the tunnel immediately, no matter if StopCCN message was sent or not. Since l2tp_conn_close() doesn't hold a reference on the tunnel, care must be taken not to access the tunnel if it was deleted by l2tp_tunnel_disconnect(). Since immediate deletion isn't required, the l2tp_tunnel_free() call is simply removed. The normal disconnection process is now followed, with detection and retransmission of lost messages, acknowledgment handling, etc. -situation is similar for l2tp_tunnel_timeout() and handled in the same way. This patch also deletes tunnel's sessions, as well as the establishment and hello timers. These are of no use once the tunnel enters the disconnection process. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2014-04-11l2tp: delete tunnel in l2tp_recv_StopCCN()Guillaume Nault
Now that l2tp_tunnel_free() can be called directly inside the main reception loop, let l2tp_recv_StopCCN() delete the tunnel itself. This avoids special handling in l2tp_conn_read(). Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>