svn commit: r342270 - head/sys/dev/cxgbe/iw_cxgbe
Navdeep Parhar
np at FreeBSD.org
Thu Dec 20 01:00:22 UTC 2018
Author: np
Date: Thu Dec 20 01:00:21 2018
New Revision: 342270
URL: https://svnweb.freebsd.org/changeset/base/342270
Log:
cxgbe/iw_cxgbe: Add a knob for testing that lets iWARP connections cycle
through 4-tuples quickly.
Submitted by: Krishnamraju Eraparaju @ Chelsio
Sponsored by: Chelsio Communications
Modified:
head/sys/dev/cxgbe/iw_cxgbe/cm.c
Modified: head/sys/dev/cxgbe/iw_cxgbe/cm.c
==============================================================================
--- head/sys/dev/cxgbe/iw_cxgbe/cm.c Thu Dec 20 00:58:16 2018 (r342269)
+++ head/sys/dev/cxgbe/iw_cxgbe/cm.c Thu Dec 20 01:00:21 2018 (r342270)
@@ -1273,6 +1273,9 @@ int inline_threshold = 128;
SYSCTL_INT(_hw_iw_cxgbe, OID_AUTO, inline_threshold, CTLFLAG_RWTUN, &inline_threshold, 0,
"inline vs dsgl threshold (default=128)");
+static int reuseaddr = 0;
+SYSCTL_INT(_hw_iw_cxgbe, OID_AUTO, reuseaddr, CTLFLAG_RWTUN, &reuseaddr, 0,
+ "Enable SO_REUSEADDR & SO_REUSEPORT socket options on all iWARP client connections(default = 0)");
static void
start_ep_timer(struct c4iw_ep *ep)
@@ -2519,8 +2522,9 @@ static int
c4iw_sock_create(struct sockaddr_storage *laddr, struct socket **so)
{
int ret;
- int size;
+ int size, on;
struct socket *sock = NULL;
+ struct sockopt sopt;
ret = sock_create_kern(laddr->ss_family,
SOCK_STREAM, IPPROTO_TCP, &sock);
@@ -2528,6 +2532,33 @@ c4iw_sock_create(struct sockaddr_storage *laddr, struc
CTR2(KTR_IW_CXGBE, "%s:Failed to create TCP socket. err %d",
__func__, ret);
return ret;
+ }
+
+ if (reuseaddr) {
+ bzero(&sopt, sizeof(struct sockopt));
+ sopt.sopt_dir = SOPT_SET;
+ sopt.sopt_level = SOL_SOCKET;
+ sopt.sopt_name = SO_REUSEADDR;
+ on = 1;
+ sopt.sopt_val = &on;
+ sopt.sopt_valsize = sizeof(on);
+ ret = sosetopt(sock, &sopt);
+ if (ret != 0) {
+ log(LOG_ERR, "%s: sosetopt(%p, SO_REUSEADDR) "
+ "failed with %d.\n", __func__, sock, ret);
+ }
+ bzero(&sopt, sizeof(struct sockopt));
+ sopt.sopt_dir = SOPT_SET;
+ sopt.sopt_level = SOL_SOCKET;
+ sopt.sopt_name = SO_REUSEPORT;
+ on = 1;
+ sopt.sopt_val = &on;
+ sopt.sopt_valsize = sizeof(on);
+ ret = sosetopt(sock, &sopt);
+ if (ret != 0) {
+ log(LOG_ERR, "%s: sosetopt(%p, SO_REUSEPORT) "
+ "failed with %d.\n", __func__, sock, ret);
+ }
}
ret = sobind(sock, (struct sockaddr *)laddr, curthread);
More information about the svn-src-all
mailing list