Skip to contentSkip to conversation

ipv4: Add option to get TCP_FASTOPEN to getsockopt()

PATCH Superseded Kenjiro Nakayama 2 participants 2 messages Apr 14, 2014 – Apr 15, 2014

Subsystems (3)

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ipv4: Add option to get TCP_FASTOPEN to getsockopt()

TCP_FASTOPEN option can be set via setsockopt(), but the value cannot be gotten via getsockopt(). This patch adds the option to getsockopt().

Add option to get TCP_FASTOPEN to getsockopt()

---
 net/ipv4/tcp.c | 5 +++++
 1 file changed, 5 insertions(+)
net/ipv4/tcp.c +5 -0
index 4bd6d52..6ccdbcc 100644
@@ -2916,6 +2916,11 @@ static int do_tcp_getsockopt(struct sock *sk, int level,
 	case TCP_USER_TIMEOUT:
 		val = jiffies_to_msecs(icsk->icsk_user_timeout);
 		break;
+
+	case TCP_FASTOPEN:
+		val = sysctl_tcp_fastopen;
+		break;
+
 	case TCP_TIMESTAMP:
 		val = tcp_time_stamp + tp->tsoffset;
 		break;

--
1.9.0

maintainer
#1 lore raw
Quoted 27 lines · Kenjiro Nakayama

TCP_FASTOPEN option can be set via setsockopt(), but the value cannot be gotten via getsockopt(). This patch adds the option to getsockopt().

Add option to get TCP_FASTOPEN to getsockopt()

---
 net/ipv4/tcp.c | 5 +++++
 1 file changed, 5 insertions(+)
net/ipv4/tcp.c +5 -1
index 4bd6d52..6ccdbcc 100644
@@ -2916,6 +2916,11 @@ static int do_tcp_getsockopt(struct sock *sk, int level,
        case TCP_USER_TIMEOUT:
                val = jiffies_to_msecs(icsk->icsk_user_timeout);
                break;
+
+       case TCP_FASTOPEN:
+               val = sysctl_tcp_fastopen;
+               break;
+
        case TCP_TIMESTAMP:
                val = tcp_time_stamp + tp->tsoffset;
                break;
--
Quoted 1 line

1.9.0

Hi,

Please cc the Linux network development mailing list at [email protected] (cc-ed) for Linux networking patches like this.

I don't think this is the implementation we'd want for a getsockopt() for TCP_FASTOPEN. I imagine that since the setsockopt(TCP_FASTOPEN) enables Fast Open on a listening socket with a given backlog, if we add a corresponding getsockopt() then it should return that Fast Open backlog if Fast Open is enabled on the listening socket, or 0 otherwise. That is, basically it would be querying whether fastopen_init_queue() has been run and returning fastopenq->max_qlen if so. That way setsockopt(TCP_FASTOPEN, getsockopt(TCP_FASTOPEN)) will be a NOP in most cases, as one would expect.

neal