diff --git a/.gitignore b/.gitignore index b7bc43b..2b59982 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *~ sidekick -dist/ \ No newline at end of file +dist/ +*.test \ No newline at end of file diff --git a/http-tracer.go b/http-tracer.go index 75bacbb..5654f96 100644 --- a/http-tracer.go +++ b/http-tracer.go @@ -11,7 +11,7 @@ // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see .package main +// along with this program. If not, see . package main diff --git a/main.go b/main.go index f9da921..cb03736 100644 --- a/main.go +++ b/main.go @@ -1,3 +1,18 @@ +// Copyright (c) 2021 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + package main import ( @@ -19,18 +34,17 @@ import ( "strings" "sync" "sync/atomic" - "syscall" "time" "github.com/gorilla/mux" - "github.com/minio/cli" - "github.com/minio/pkg/console" - "github.com/minio/pkg/ellipses" "github.com/rs/dnscache" "github.com/sirupsen/logrus" "golang.org/x/crypto/ssh/terminal" "golang.org/x/net/http2" - "golang.org/x/sys/unix" + + "github.com/minio/cli" + "github.com/minio/pkg/console" + "github.com/minio/pkg/ellipses" ) // Use e.g.: go build -ldflags "-X main.version=v1.0.0" @@ -490,33 +504,6 @@ var dnsCache = &dnscache.Resolver{ Timeout: 5 * time.Second, } -func setTCPParameters(network, address string, c syscall.RawConn) error { - c.Control(func(fdPtr uintptr) { - // got socket file descriptor to set parameters. - fd := int(fdPtr) - - _ = unix.SetsockoptInt(fd, unix.SOL_SOCKET, unix.SO_REUSEADDR, 1) - - _ = unix.SetsockoptInt(fd, unix.SOL_SOCKET, unix.SO_REUSEPORT, 1) - - // Enable TCP open - // https://lwn.net/Articles/508865/ - 16k queue size. - _ = syscall.SetsockoptInt(fd, syscall.SOL_TCP, unix.TCP_FASTOPEN, 16*1024) - - // Enable TCP fast connect - // TCPFastOpenConnect sets the underlying socket to use - // the TCP fast open connect. This feature is supported - // since Linux 4.11. - _ = syscall.SetsockoptInt(fd, syscall.IPPROTO_TCP, unix.TCP_FASTOPEN_CONNECT, 1) - - // Enable TCP quick ACK, John Nagle says - // "Set TCP_QUICKACK. If you find a case where that makes things worse, let me know." - _ = syscall.SetsockoptInt(fd, syscall.IPPROTO_TCP, unix.TCP_QUICKACK, 1) - - }) - return nil -} - // DialContext is a function to make custom Dial for internode communications type DialContext func(ctx context.Context, network, address string) (net.Conn, error) diff --git a/main_linux.go b/main_linux.go new file mode 100644 index 0000000..ba4e7de --- /dev/null +++ b/main_linux.go @@ -0,0 +1,51 @@ +// +build linux + +// Copyright (c) 2021 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package main + +import ( + "syscall" + + "golang.org/x/sys/unix" +) + +func setTCPParameters(network, address string, c syscall.RawConn) error { + c.Control(func(fdPtr uintptr) { + // got socket file descriptor to set parameters. + fd := int(fdPtr) + + _ = unix.SetsockoptInt(fd, unix.SOL_SOCKET, unix.SO_REUSEADDR, 1) + + _ = unix.SetsockoptInt(fd, unix.SOL_SOCKET, unix.SO_REUSEPORT, 1) + + // Enable TCP open + // https://lwn.net/Articles/508865/ - 16k queue size. + _ = syscall.SetsockoptInt(fd, syscall.SOL_TCP, unix.TCP_FASTOPEN, 16*1024) + + // Enable TCP fast connect + // TCPFastOpenConnect sets the underlying socket to use + // the TCP fast open connect. This feature is supported + // since Linux 4.11. + _ = syscall.SetsockoptInt(fd, syscall.IPPROTO_TCP, unix.TCP_FASTOPEN_CONNECT, 1) + + // Enable TCP quick ACK, John Nagle says + // "Set TCP_QUICKACK. If you find a case where that makes things worse, let me know." + _ = syscall.SetsockoptInt(fd, syscall.IPPROTO_TCP, unix.TCP_QUICKACK, 1) + + }) + return nil +} diff --git a/main_others.go b/main_others.go new file mode 100644 index 0000000..7e5a802 --- /dev/null +++ b/main_others.go @@ -0,0 +1,24 @@ +// +build !linux + +// Copyright (c) 2021 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package main + +import "syscall" + +func setTCPParameters(network, address string, c syscall.RawConn) error { + return nil +} diff --git a/main_test.go b/main_test.go index b907e41..e397a86 100644 --- a/main_test.go +++ b/main_test.go @@ -11,7 +11,7 @@ // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see .package main +// along with this program. If not, see . package main diff --git a/metrics.go b/metrics.go index 26e4794..c752bce 100644 --- a/metrics.go +++ b/metrics.go @@ -11,7 +11,7 @@ // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see .package main +// along with this program. If not, see . package main diff --git a/proxy.go b/proxy.go index 4929b9e..8ba6cea 100644 --- a/proxy.go +++ b/proxy.go @@ -11,7 +11,7 @@ // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see .package main +// along with this program. If not, see . package main diff --git a/rlimit.go b/rlimit.go index 1d12743..269586f 100644 --- a/rlimit.go +++ b/rlimit.go @@ -11,7 +11,7 @@ // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see .package main +// along with this program. If not, see . package main diff --git a/ui.go b/ui.go index 7ef6a56..ceb1359 100644 --- a/ui.go +++ b/ui.go @@ -11,7 +11,7 @@ // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see .package main +// along with this program. If not, see . package main diff --git a/write_on_close.go b/write_on_close.go index 3446962..f32e065 100644 --- a/write_on_close.go +++ b/write_on_close.go @@ -11,7 +11,7 @@ // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see .package main +// along with this program. If not, see . package main