summaryrefslogtreecommitdiffhomepage
path: root/pkg/iovec
diff options
context:
space:
mode:
authorKevin Krakauer <krakauer@google.com>2021-03-15 18:47:41 -0700
committergVisor bot <gvisor-bot@google.com>2021-03-15 18:49:59 -0700
commitb1d57877264c2b94e3024375efc9914881f0bbe8 (patch)
treefcc3ee1d6ff597411847c4beacd3d8349d33178a /pkg/iovec
parentec45d969236bb98a83e7da0466bd67e540c5e8b5 (diff)
Make netstack (//pkg/tcpip) buildable for 32 bit
Doing so involved breaking dependencies between //pkg/tcpip and the rest of gVisor, which are discouraged anyways. Tested on the Go branch via: gvisor.dev/gvisor/pkg/tcpip/... Addresses #1446. PiperOrigin-RevId: 363081778
Diffstat (limited to 'pkg/iovec')
-rw-r--r--pkg/iovec/BUILD10
-rw-r--r--pkg/iovec/iovec.go18
-rw-r--r--pkg/iovec/iovec_max.go19
3 files changed, 30 insertions, 17 deletions
diff --git a/pkg/iovec/BUILD b/pkg/iovec/BUILD
index b92a58556..e0c016fa3 100644
--- a/pkg/iovec/BUILD
+++ b/pkg/iovec/BUILD
@@ -4,12 +4,12 @@ package(licenses = ["notice"])
go_library(
name = "iovec",
- srcs = ["iovec.go"],
- visibility = ["//:sandbox"],
- deps = [
- "//pkg/abi/linux",
- "@org_golang_x_sys//unix:go_default_library",
+ srcs = [
+ "iovec.go",
+ "iovec_max.go",
],
+ visibility = ["//:sandbox"],
+ deps = ["@org_golang_x_sys//unix:go_default_library"],
)
go_test(
diff --git a/pkg/iovec/iovec.go b/pkg/iovec/iovec.go
index 0789c74bf..f6791060f 100644
--- a/pkg/iovec/iovec.go
+++ b/pkg/iovec/iovec.go
@@ -20,12 +20,8 @@ package iovec
import (
"golang.org/x/sys/unix"
- "gvisor.dev/gvisor/pkg/abi/linux"
)
-// MaxIovs is the maximum number of iovecs host platform can accept.
-var MaxIovs = linux.UIO_MAXIOV
-
// Builder is a builder for slice of unix.Iovec.
type Builder struct {
iovec []unix.Iovec
@@ -47,10 +43,10 @@ func (b *Builder) Add(buf []byte) {
b.addByAppend(buf)
return
}
- b.iovec = append(b.iovec, unix.Iovec{
- Base: &buf[0],
- Len: uint64(len(buf)),
- })
+
+ b.iovec = append(b.iovec, unix.Iovec{Base: &buf[0]})
+ b.iovec[len(b.iovec)-1].SetLen(len(buf))
+
// Keep the last buf if iovec is at max capacity. We will need to append to it
// for later bufs.
if len(b.iovec) == MaxIovs {
@@ -61,10 +57,8 @@ func (b *Builder) Add(buf []byte) {
func (b *Builder) addByAppend(buf []byte) {
b.overflow = append(b.overflow, buf...)
- b.iovec[len(b.iovec)-1] = unix.Iovec{
- Base: &b.overflow[0],
- Len: uint64(len(b.overflow)),
- }
+ b.iovec[len(b.iovec)-1] = unix.Iovec{Base: &b.overflow[0]}
+ b.iovec[len(b.iovec)-1].SetLen(len(b.overflow))
}
// Build returns the final Iovec slice. The length of returned iovec will not
diff --git a/pkg/iovec/iovec_max.go b/pkg/iovec/iovec_max.go
new file mode 100644
index 000000000..724b256e8
--- /dev/null
+++ b/pkg/iovec/iovec_max.go
@@ -0,0 +1,19 @@
+// Copyright 2021 The gVisor Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package iovec
+
+// MaxIovs is the maximum number of iovecs host platform can accept. It
+// corresponds to Linux's UIO_MAXIOV, which is not in the unix package.
+const MaxIovs = 1024