On Tue, 29.07.14 23:10, Susant Sahani ([email protected]) wrote: Looks good. Wanted to apply. But this requires your previous patch, so please rebase on a new version of that! Thanks!
> TCP Fast Open (TFO) speeds up the opening of successive > TCP)connections between two endpoints.It works by using a TFO cookie > in the initial SYN packet to authenticate a previously connected client. > It starts sending data to the client before the receipt > of the final ACK packet of the three way handshake is received, skipping > a round trip and lowering the latency in the start of transmission of > data. > --- > man/systemd.socket.xml | 15 +++++++++++++++ > src/core/dbus-socket.c | 1 + > src/core/load-fragment-gperf.gperf.m4 | 1 + > src/core/socket.c | 8 ++++++++ > src/core/socket.h | 1 + > 5 files changed, 26 insertions(+) > > diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml > index 6dbcc81..e6bbb2e 100644 > --- a/man/systemd.socket.xml > +++ b/man/systemd.socket.xml > @@ -524,6 +524,21 @@ > </varlistentry> > > <varlistentry> > + <term><varname>FastOpen=</varname></term> > + <listitem><para>Takes a boolean > + argument. It works by using a TFO cookie (a > TCP option) in the initial > + SYN packet to authenticate a previously > connected client. If successful, > + it may start sending data to the client > before the receipt of the final > + ACK packet of the three way handshake is > received, skipping a round trip > + and lowering the latency in the start of > transmission of data. > + This controls the TCP_FASTOPEN socket option > (see > + the <ulink > url="http://lwn.net/Articles/508865/">TCP > + Fast Open: expediting web services</ulink> > for details.) > + Defaults to > + <option>false</option>.</para></listitem> > + </varlistentry> > + > + <varlistentry> > <term><varname>Priority=</varname></term> > <listitem><para>Takes an integer > argument controlling the priority for > diff --git a/src/core/dbus-socket.c b/src/core/dbus-socket.c > index 348afbd..f9ef7ef 100644 > --- a/src/core/dbus-socket.c > +++ b/src/core/dbus-socket.c > @@ -100,6 +100,7 @@ const sd_bus_vtable bus_socket_vtable[] = { > SD_BUS_PROPERTY("KeepAliveTime", "t", bus_property_get_usec, > offsetof(Socket, keep_alive_time), SD_BUS_VTABLE_PROPERTY_CONST), > SD_BUS_PROPERTY("KeepAliveInterval", "t", bus_property_get_usec, > offsetof(Socket, keep_alive_interval), SD_BUS_VTABLE_PROPERTY_CONST), > SD_BUS_PROPERTY("KeepAliveProbes", "i", bus_property_get_int, > offsetof(Socket, keep_alive_cnt), SD_BUS_VTABLE_PROPERTY_CONST), > + SD_BUS_PROPERTY("FastOpen" , "b", bus_property_get_bool, > offsetof(Socket, fast_open), SD_BUS_VTABLE_PROPERTY_CONST), > SD_BUS_PROPERTY("Priority", "i", bus_property_get_int, > offsetof(Socket, priority), SD_BUS_VTABLE_PROPERTY_CONST), > SD_BUS_PROPERTY("ReceiveBuffer", "t", bus_property_get_size, > offsetof(Socket, receive_buffer), SD_BUS_VTABLE_PROPERTY_CONST), > SD_BUS_PROPERTY("SendBuffer", "t", bus_property_get_size, > offsetof(Socket, send_buffer), SD_BUS_VTABLE_PROPERTY_CONST), > diff --git a/src/core/load-fragment-gperf.gperf.m4 > b/src/core/load-fragment-gperf.gperf.m4 > index af9f9cc..3fea038 100644 > --- a/src/core/load-fragment-gperf.gperf.m4 > +++ b/src/core/load-fragment-gperf.gperf.m4 > @@ -234,6 +234,7 @@ Socket.KeepAlive, config_parse_bool, > 0, > Socket.KeepAliveTime, config_parse_sec, 0, > offsetof(Socket, keep_alive_time) > Socket.KeepAliveInterval, config_parse_sec, 0, > offsetof(Socket, keep_alive_interval) > Socket.KeepAliveProbes, config_parse_unsigned, 0, > offsetof(Socket, keep_alive_cnt) > +Socket.FastOpen, config_parse_bool, 0, > offsetof(Socket, fast_open) > Socket.Priority, config_parse_int, 0, > offsetof(Socket, priority) > Socket.ReceiveBuffer, config_parse_iec_size, 0, > offsetof(Socket, receive_buffer) > Socket.SendBuffer, config_parse_iec_size, 0, > offsetof(Socket, send_buffer) > diff --git a/src/core/socket.c b/src/core/socket.c > index c770fe2..b798d4e 100644 > --- a/src/core/socket.c > +++ b/src/core/socket.c > @@ -480,6 +480,7 @@ static void socket_dump(Unit *u, FILE *f, const char > *prefix) { > "%sSocketMode: %04o\n" > "%sDirectoryMode: %04o\n" > "%sKeepAlive: %s\n" > + "%sFastOpen: %s\n" > "%sFreeBind: %s\n" > "%sTransparent: %s\n" > "%sBroadcast: %s\n" > @@ -494,6 +495,7 @@ static void socket_dump(Unit *u, FILE *f, const char > *prefix) { > prefix, s->socket_mode, > prefix, s->directory_mode, > prefix, yes_no(s->keep_alive), > + prefix, yes_no(s->fast_open), > prefix, yes_no(s->free_bind), > prefix, yes_no(s->transparent), > prefix, yes_no(s->broadcast), > @@ -823,6 +825,12 @@ static void socket_apply_socket_options(Socket *s, int > fd) { > log_warning_unit(UNIT(s)->id, "TCP_KEEPCNT failed: > %m"); > } > > + if (s->fast_open) { > + int b = s->fast_open; > + if (setsockopt(fd, SOL_TCP, TCP_FASTOPEN, &b, sizeof(b)) < 0) > + log_warning_unit(UNIT(s)->id, "TCP_FASTOPEN failed: > %m"); > + } > + > if (s->broadcast) { > int one = 1; > if (setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &one, > sizeof(one)) < 0) > diff --git a/src/core/socket.h b/src/core/socket.h > index aa300e5..9cb82fa 100644 > --- a/src/core/socket.h > +++ b/src/core/socket.h > @@ -136,6 +136,7 @@ struct Socket { > > /* Socket options */ > bool keep_alive; > + bool fast_open; > bool free_bind; > bool transparent; > bool broadcast; Lennart -- Lennart Poettering, Red Hat _______________________________________________ systemd-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/systemd-devel
