kernel-pfkey: Add option to set receive buffer size of event socket

If many requests are sent to the kernel the events generated by these
requests may fill the receive buffer before the daemon is able to read
these messages.

Fixes #783.
This commit is contained in:
Tobias Brunner
2015-03-06 16:45:22 +01:00
parent 3fcb59b62a
commit 96e6130537
3 changed files with 21 additions and 0 deletions
+1
View File
@@ -64,6 +64,7 @@ plugins = \
plugins/led.opt \
plugins/kernel-libipsec.opt \
plugins/kernel-netlink.opt \
plugins/kernel-pfkey.opt \
plugins/kernel-pfroute.opt \
plugins/load-tester.opt \
plugins/lookip.opt \
+7
View File
@@ -0,0 +1,7 @@
charon.plugins.kernel-pfkey.events_buffer_size = 0
Size of the receive buffer for the event socket (0 for default size).
Size of the receive buffer for the event socket (0 for default size).
Because events are received asynchronously installing e.g. lots of policies
may require a larger buffer than the default on certain platforms in order
to receive all messages.
@@ -2988,6 +2988,7 @@ kernel_pfkey_ipsec_t *kernel_pfkey_ipsec_create()
{
private_kernel_pfkey_ipsec_t *this;
bool register_for_events = TRUE;
int rcv_buffer;
INIT(this,
.public = {
@@ -3044,6 +3045,18 @@ kernel_pfkey_ipsec_t *kernel_pfkey_ipsec_create()
return NULL;
}
rcv_buffer = lib->settings->get_int(lib->settings,
"%s.plugins.kernel-pfkey.events_buffer_size", 0, lib->ns);
if (rcv_buffer > 0)
{
if (setsockopt(this->socket_events, SOL_SOCKET, SO_RCVBUF,
&rcv_buffer, sizeof(rcv_buffer)) == -1)
{
DBG1(DBG_KNL, "unable to set receive buffer size on PF_KEY "
"event socket: %s", strerror(errno));
}
}
/* register the event socket */
if (register_pfkey_socket(this, SADB_SATYPE_ESP) != SUCCESS ||
register_pfkey_socket(this, SADB_SATYPE_AH) != SUCCESS)