kernel-netlink: Use larger buffer for event messages
This commit is contained in:
parent
9de3140dbf
commit
c5b94b2483
|
@ -1131,7 +1131,7 @@ static void process_mapping(private_kernel_netlink_ipsec_t *this,
|
|||
static bool receive_events(private_kernel_netlink_ipsec_t *this, int fd,
|
||||
watcher_event_t event)
|
||||
{
|
||||
char response[1024];
|
||||
char response[netlink_get_buflen()];
|
||||
struct nlmsghdr *hdr = (struct nlmsghdr*)response;
|
||||
struct sockaddr_nl addr;
|
||||
socklen_t addr_len = sizeof(addr);
|
||||
|
|
|
@ -1504,7 +1504,7 @@ static void process_rule(private_kernel_netlink_net_t *this, struct nlmsghdr *hd
|
|||
static bool receive_events(private_kernel_netlink_net_t *this, int fd,
|
||||
watcher_event_t event)
|
||||
{
|
||||
char response[1536];
|
||||
char response[netlink_get_buflen()];
|
||||
struct nlmsghdr *hdr = (struct nlmsghdr*)response;
|
||||
struct sockaddr_nl addr;
|
||||
socklen_t addr_len = sizeof(addr);
|
||||
|
|
|
@ -587,8 +587,31 @@ METHOD(netlink_socket_t, destroy, void,
|
|||
free(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Described in header.
|
||||
/*
|
||||
* Described in header
|
||||
*/
|
||||
u_int netlink_get_buflen()
|
||||
{
|
||||
u_int buflen;
|
||||
|
||||
buflen = lib->settings->get_int(lib->settings,
|
||||
"%s.plugins.kernel-netlink.buflen", 0, lib->ns);
|
||||
if (!buflen)
|
||||
{
|
||||
long pagesize = sysconf(_SC_PAGESIZE);
|
||||
|
||||
if (pagesize == -1)
|
||||
{
|
||||
pagesize = 4096;
|
||||
}
|
||||
/* base this on NLMSG_GOODSIZE */
|
||||
buflen = min(pagesize, 8192);
|
||||
}
|
||||
return buflen;
|
||||
}
|
||||
|
||||
/*
|
||||
* Described in header
|
||||
*/
|
||||
netlink_socket_t *netlink_socket_create(int protocol, enum_name_t *names,
|
||||
bool parallel)
|
||||
|
@ -612,8 +635,7 @@ netlink_socket_t *netlink_socket_create(int protocol, enum_name_t *names,
|
|||
.entries = hashtable_create(hashtable_hash_ptr, hashtable_equals_ptr, 4),
|
||||
.protocol = protocol,
|
||||
.names = names,
|
||||
.buflen = lib->settings->get_int(lib->settings,
|
||||
"%s.plugins.kernel-netlink.buflen", 0, lib->ns),
|
||||
.buflen = netlink_get_buflen(),
|
||||
.timeout = lib->settings->get_int(lib->settings,
|
||||
"%s.plugins.kernel-netlink.timeout", 0, lib->ns),
|
||||
.retries = lib->settings->get_int(lib->settings,
|
||||
|
@ -624,16 +646,6 @@ netlink_socket_t *netlink_socket_create(int protocol, enum_name_t *names,
|
|||
.parallel = parallel,
|
||||
);
|
||||
|
||||
if (!this->buflen)
|
||||
{
|
||||
long pagesize = sysconf(_SC_PAGESIZE);
|
||||
if (pagesize == -1)
|
||||
{
|
||||
pagesize = 4096;
|
||||
}
|
||||
/* base this on NLMSG_GOODSIZE */
|
||||
this->buflen = min(pagesize, 8192);
|
||||
}
|
||||
if (this->socket == -1)
|
||||
{
|
||||
DBG1(DBG_KNL, "unable to create netlink socket: %s (%d)",
|
||||
|
|
|
@ -101,4 +101,11 @@ void netlink_add_attribute(struct nlmsghdr *hdr, int rta_type, chunk_t data,
|
|||
*/
|
||||
void* netlink_reserve(struct nlmsghdr *hdr, int buflen, int type, int len);
|
||||
|
||||
/**
|
||||
* Determine buffer size for received messages (e.g. events).
|
||||
*
|
||||
* @return buffer size
|
||||
*/
|
||||
u_int netlink_get_buflen();
|
||||
|
||||
#endif /* KERNEL_NETLINK_SHARED_H_ */
|
||||
|
|
Loading…
Reference in New Issue