Age | Commit message (Collapse) | Author |
|
Before this time accel-ppp always worked in "ip unnumbered" mode.
This option may turn this mode off (default is on)
|
|
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.
|
|
logging purpose)
|
|
|
|
|
|
interface
|
|
|
|
|
|
First try to rename interface immediately and if it fails then do second try later just before bring interface up.
In case single-session=replace first try to rename interface may fail because first session may be active
|
|
|
|
Use separated thread to write messages to file instead of async io.
On mips platform async io does not work properly by some reason and may stuck logging
|
|
Check if there is space in previous chunk and append log data there.
This reduces memory usage and message fragmentation
|
|
Wait for previous session completely terminated before continuing authorization new session.
|
|
|
|
New options are applied to server option as server=...[,weight=x][,backup]
Weight is used for multi-server configurations (larger weight takes more users).
Backup is used to mark backup server f.e. server which will be used only if all other servers are failed.
|
|
By default list of IP address is serial at startup.
This option shuffles initial IP list so it becomes more random.
|
|
|
|
|
|
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.
|
|
|
|
There is no need to keep auth request structure in memory during whole session life time.
It wastes memory and file descriptors
|
|
|
|
Signed-off-by: Dmitry Kozlov <xeb@mail.ru>
|
|
table
Signed-off-by: Dmitry Kozlov <xeb@mail.ru>
|
|
Signed-off-by: Dmitry Kozlov <xeb@mail.ru>
|
|
Signed-off-by: Dmitry Kozlov <xeb@mail.ru>
|
|
Signed-off-by: Dmitry Kozlov <xeb@mail.ru>
|
|
Use unshare(CLONE_FILES) to create a local file descriptors namespace
for the SNMP thread. This is similar to what was done in bf5340
'net-snmp: run snmp in "special" thread', but without calling clone()
directly. So the net-snmp plugin keeps running in a regular pthread.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
This reverts commit bf5340291badcc631bd855bb924593cd445ecd26.
snmp_thread() needs to be run as regular thread to allow Valgrind
analysis. Using a different namespace for file desciptors will be
done later on using unshare().
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
|
|
|
|
If accel-ppp is compiled with RADIUS support, but run without using it,
then pd->tmp_fname is NULL. This patch verifies that pd->tmp_fname is
valid before renaming the radattr file.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
of NAS-Port in Access-Request and Account-Request)
Signed-off-by: Dmitry Kozlov <xeb@mail.ru>
|
|
Signed-off-by: Dmitry Kozlov <xeb@mail.ru>
|
|
NET-SNMP is built on top of stale file descriptor multiplexing mechanism (select)
which prevents to use descriptors with number >= 1024.
Due to accel-ppp uses a lots of descriptors NET-SNMP easy overflows this limit and fails
and even may crash whole accel-ppp process.
This patch runs snmp in special thread which does not share file descritor table
with main process, so it can use less descriptors and live in __FD_SETSIZE limit.
Signed-off-by: Dmitry Kozlov <xeb@mail.ru>
|
|
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>
|
|
* 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>
|
|
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>
|
|
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>
|
|
Add the recv-window option in accel-ppp.conf.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
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>
|
|
Use stacked error labels for better extensibility.
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|