summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/sparse/sys/socket.h5
-rw-r--r--lib/netlink-socket.c10
2 files changed, 12 insertions, 3 deletions
diff --git a/include/sparse/sys/socket.h b/include/sparse/sys/socket.h
index 89e3c2dc2..1ed195b25 100644
--- a/include/sparse/sys/socket.h
+++ b/include/sparse/sys/socket.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011 Nicira Networks.
+ * Copyright (c) 2011, 2012 Nicira Networks.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -74,7 +74,8 @@ enum {
SO_SNDBUF,
SO_SNDLOWAT,
SO_SNDTIMEO,
- SO_TYPE
+ SO_TYPE,
+ SO_RCVBUFFORCE
};
enum {
diff --git a/lib/netlink-socket.c b/lib/netlink-socket.c
index bc4623534..df6f1d8b5 100644
--- a/lib/netlink-socket.c
+++ b/lib/netlink-socket.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks.
+ * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira Networks.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -89,6 +89,7 @@ nl_sock_create(int protocol, struct nl_sock **sockp)
struct nl_sock *sock;
struct sockaddr_nl local, remote;
socklen_t local_size;
+ int rcvbuf;
int retval = 0;
if (!max_iovs) {
@@ -122,6 +123,13 @@ nl_sock_create(int protocol, struct nl_sock **sockp)
sock->protocol = protocol;
sock->dump = NULL;
+ rcvbuf = 1024 * 1024;
+ if (setsockopt(sock->fd, SOL_SOCKET, SO_RCVBUFFORCE,
+ &rcvbuf, sizeof rcvbuf)) {
+ VLOG_WARN_RL(&rl, "setting %d-byte socket receive buffer failed (%s)",
+ rcvbuf, strerror(errno));
+ }
+
retval = get_socket_rcvbuf(sock->fd);
if (retval < 0) {
retval = -retval;