diff options
author | Kevin Krakauer <krakauer@google.com> | 2021-03-15 18:47:41 -0700 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2021-03-15 18:49:59 -0700 |
commit | b1d57877264c2b94e3024375efc9914881f0bbe8 (patch) | |
tree | fcc3ee1d6ff597411847c4beacd3d8349d33178a /pkg/iovec | |
parent | ec45d969236bb98a83e7da0466bd67e540c5e8b5 (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/BUILD | 10 | ||||
-rw-r--r-- | pkg/iovec/iovec.go | 18 | ||||
-rw-r--r-- | pkg/iovec/iovec_max.go | 19 |
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 |