mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Rename epsocket to netstack.
PiperOrigin-RevId: 273365058
This commit is contained in:
committed by
gVisor bot
parent
8fce24d33a
commit
6a98237949
@@ -3,15 +3,15 @@ package(licenses = ["notice"])
|
||||
load("//tools/go_stateify:defs.bzl", "go_library")
|
||||
|
||||
go_library(
|
||||
name = "epsocket",
|
||||
name = "netstack",
|
||||
srcs = [
|
||||
"device.go",
|
||||
"epsocket.go",
|
||||
"netstack.go",
|
||||
"provider.go",
|
||||
"save_restore.go",
|
||||
"stack.go",
|
||||
],
|
||||
importpath = "gvisor.dev/gvisor/pkg/sentry/socket/epsocket",
|
||||
importpath = "gvisor.dev/gvisor/pkg/sentry/socket/netstack",
|
||||
visibility = [
|
||||
"//pkg/sentry:internal",
|
||||
],
|
||||
@@ -12,9 +12,9 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package epsocket
|
||||
package netstack
|
||||
|
||||
import "gvisor.dev/gvisor/pkg/sentry/device"
|
||||
|
||||
// epsocketDevice is the endpoint socket virtual device.
|
||||
var epsocketDevice = device.NewAnonDevice()
|
||||
// netstackDevice is the endpoint socket virtual device.
|
||||
var netstackDevice = device.NewAnonDevice()
|
||||
@@ -12,7 +12,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Package epsocket provides an implementation of the socket.Socket interface
|
||||
// Package netstack provides an implementation of the socket.Socket interface
|
||||
// that is backed by a tcpip.Endpoint.
|
||||
//
|
||||
// It does not depend on any particular endpoint implementation, and thus can
|
||||
@@ -22,7 +22,7 @@
|
||||
// Lock ordering: netstack => mm: ioSequencePayload copies user memory inside
|
||||
// tcpip.Endpoint.Write(). Netstack is allowed to (and does) hold locks during
|
||||
// this operation.
|
||||
package epsocket
|
||||
package netstack
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
@@ -176,7 +176,7 @@ var Metrics = tcpip.Stats{
|
||||
|
||||
const sizeOfInt32 int = 4
|
||||
|
||||
var errStackType = syserr.New("expected but did not receive an epsocket.Stack", linux.EINVAL)
|
||||
var errStackType = syserr.New("expected but did not receive a netstack.Stack", linux.EINVAL)
|
||||
|
||||
// ntohs converts a 16-bit number from network byte order to host byte order. It
|
||||
// assumes that the host is little endian.
|
||||
@@ -262,8 +262,8 @@ type SocketOperations struct {
|
||||
// valid when timestampValid is true. It is protected by readMu.
|
||||
timestampNS int64
|
||||
|
||||
// sockOptInq corresponds to TCP_INQ. It is implemented on the epsocket
|
||||
// level, because it takes into account data from readView.
|
||||
// sockOptInq corresponds to TCP_INQ. It is implemented at this level
|
||||
// because it takes into account data from readView.
|
||||
sockOptInq bool
|
||||
}
|
||||
|
||||
@@ -275,7 +275,7 @@ func New(t *kernel.Task, family int, skType linux.SockType, protocol int, queue
|
||||
}
|
||||
}
|
||||
|
||||
dirent := socket.NewDirent(t, epsocketDevice)
|
||||
dirent := socket.NewDirent(t, netstackDevice)
|
||||
defer dirent.DecRef()
|
||||
return fs.NewFile(t, dirent, fs.FileFlags{Read: true, Write: true, NonSeekable: true}, &SocketOperations{
|
||||
Queue: queue,
|
||||
@@ -760,7 +760,7 @@ func (s *SocketOperations) Shutdown(t *kernel.Task, how int) *syserr.Error {
|
||||
// tcpip.Endpoint.
|
||||
func (s *SocketOperations) GetSockOpt(t *kernel.Task, level, name int, outPtr usermem.Addr, outLen int) (interface{}, *syserr.Error) {
|
||||
// TODO(b/78348848): Unlike other socket options, SO_TIMESTAMP is
|
||||
// implemented specifically for epsocket.SocketOperations rather than
|
||||
// implemented specifically for netstack.SocketOperations rather than
|
||||
// commonEndpoint. commonEndpoint should be extended to support socket
|
||||
// options where the implementation is not shared, as unix sockets need
|
||||
// their own support for SO_TIMESTAMP.
|
||||
@@ -1229,7 +1229,7 @@ func getSockOptIP(t *kernel.Task, ep commonEndpoint, name, outLen int) (interfac
|
||||
// tcpip.Endpoint.
|
||||
func (s *SocketOperations) SetSockOpt(t *kernel.Task, level int, name int, optVal []byte) *syserr.Error {
|
||||
// TODO(b/78348848): Unlike other socket options, SO_TIMESTAMP is
|
||||
// implemented specifically for epsocket.SocketOperations rather than
|
||||
// implemented specifically for netstack.SocketOperations rather than
|
||||
// commonEndpoint. commonEndpoint should be extended to support socket
|
||||
// options where the implementation is not shared, as unix sockets need
|
||||
// their own support for SO_TIMESTAMP.
|
||||
@@ -2235,7 +2235,7 @@ func (s *SocketOperations) SendMsg(t *kernel.Task, src usermem.IOSequence, to []
|
||||
|
||||
// Ioctl implements fs.FileOperations.Ioctl.
|
||||
func (s *SocketOperations) Ioctl(ctx context.Context, _ *fs.File, io usermem.IO, args arch.SyscallArguments) (uintptr, error) {
|
||||
// SIOCGSTAMP is implemented by epsocket rather than all commonEndpoint
|
||||
// SIOCGSTAMP is implemented by netstack rather than all commonEndpoint
|
||||
// sockets.
|
||||
// TODO(b/78348848): Add a commonEndpoint method to support SIOCGSTAMP.
|
||||
switch args[1].Int() {
|
||||
@@ -2538,7 +2538,7 @@ func ifconfIoctl(ctx context.Context, io usermem.IO, ifc *linux.IFConf) error {
|
||||
// Flag values and meanings are described in greater detail in netdevice(7) in
|
||||
// the SIOCGIFFLAGS section.
|
||||
func interfaceStatusFlags(stack inet.Stack, name string) (uint32, *syserr.Error) {
|
||||
// epsocket should only ever be passed an epsocket.Stack.
|
||||
// We should only ever be passed a netstack.Stack.
|
||||
epstack, ok := stack.(*Stack)
|
||||
if !ok {
|
||||
return 0, errStackType
|
||||
@@ -12,7 +12,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package epsocket
|
||||
package netstack
|
||||
|
||||
import (
|
||||
"syscall"
|
||||
+1
-1
@@ -12,7 +12,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package epsocket
|
||||
package netstack
|
||||
|
||||
import (
|
||||
"gvisor.dev/gvisor/pkg/tcpip/stack"
|
||||
@@ -12,7 +12,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package epsocket
|
||||
package netstack
|
||||
|
||||
import (
|
||||
"gvisor.dev/gvisor/pkg/abi/linux"
|
||||
@@ -24,7 +24,7 @@ go_library(
|
||||
"//pkg/sentry/safemem",
|
||||
"//pkg/sentry/socket",
|
||||
"//pkg/sentry/socket/control",
|
||||
"//pkg/sentry/socket/epsocket",
|
||||
"//pkg/sentry/socket/netstack",
|
||||
"//pkg/sentry/socket/unix/transport",
|
||||
"//pkg/sentry/usermem",
|
||||
"//pkg/syserr",
|
||||
|
||||
@@ -31,7 +31,7 @@ import (
|
||||
ktime "gvisor.dev/gvisor/pkg/sentry/kernel/time"
|
||||
"gvisor.dev/gvisor/pkg/sentry/socket"
|
||||
"gvisor.dev/gvisor/pkg/sentry/socket/control"
|
||||
"gvisor.dev/gvisor/pkg/sentry/socket/epsocket"
|
||||
"gvisor.dev/gvisor/pkg/sentry/socket/netstack"
|
||||
"gvisor.dev/gvisor/pkg/sentry/socket/unix/transport"
|
||||
"gvisor.dev/gvisor/pkg/sentry/usermem"
|
||||
"gvisor.dev/gvisor/pkg/syserr"
|
||||
@@ -40,8 +40,8 @@ import (
|
||||
"gvisor.dev/gvisor/pkg/waiter"
|
||||
)
|
||||
|
||||
// SocketOperations is a Unix socket. It is similar to an epsocket, except it
|
||||
// is backed by a transport.Endpoint instead of a tcpip.Endpoint.
|
||||
// SocketOperations is a Unix socket. It is similar to a netstack socket,
|
||||
// except it is backed by a transport.Endpoint instead of a tcpip.Endpoint.
|
||||
//
|
||||
// +stateify savable
|
||||
type SocketOperations struct {
|
||||
@@ -116,7 +116,7 @@ func (s *SocketOperations) Endpoint() transport.Endpoint {
|
||||
|
||||
// extractPath extracts and validates the address.
|
||||
func extractPath(sockaddr []byte) (string, *syserr.Error) {
|
||||
addr, _, err := epsocket.AddressAndFamily(linux.AF_UNIX, sockaddr, true /* strict */)
|
||||
addr, _, err := netstack.AddressAndFamily(linux.AF_UNIX, sockaddr, true /* strict */)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -143,7 +143,7 @@ func (s *SocketOperations) GetPeerName(t *kernel.Task) (linux.SockAddr, uint32,
|
||||
return nil, 0, syserr.TranslateNetstackError(err)
|
||||
}
|
||||
|
||||
a, l := epsocket.ConvertAddress(linux.AF_UNIX, addr)
|
||||
a, l := netstack.ConvertAddress(linux.AF_UNIX, addr)
|
||||
return a, l, nil
|
||||
}
|
||||
|
||||
@@ -155,19 +155,19 @@ func (s *SocketOperations) GetSockName(t *kernel.Task) (linux.SockAddr, uint32,
|
||||
return nil, 0, syserr.TranslateNetstackError(err)
|
||||
}
|
||||
|
||||
a, l := epsocket.ConvertAddress(linux.AF_UNIX, addr)
|
||||
a, l := netstack.ConvertAddress(linux.AF_UNIX, addr)
|
||||
return a, l, nil
|
||||
}
|
||||
|
||||
// Ioctl implements fs.FileOperations.Ioctl.
|
||||
func (s *SocketOperations) Ioctl(ctx context.Context, _ *fs.File, io usermem.IO, args arch.SyscallArguments) (uintptr, error) {
|
||||
return epsocket.Ioctl(ctx, s.ep, io, args)
|
||||
return netstack.Ioctl(ctx, s.ep, io, args)
|
||||
}
|
||||
|
||||
// GetSockOpt implements the linux syscall getsockopt(2) for sockets backed by
|
||||
// a transport.Endpoint.
|
||||
func (s *SocketOperations) GetSockOpt(t *kernel.Task, level, name int, outPtr usermem.Addr, outLen int) (interface{}, *syserr.Error) {
|
||||
return epsocket.GetSockOpt(t, s, s.ep, linux.AF_UNIX, s.ep.Type(), level, name, outLen)
|
||||
return netstack.GetSockOpt(t, s, s.ep, linux.AF_UNIX, s.ep.Type(), level, name, outLen)
|
||||
}
|
||||
|
||||
// Listen implements the linux syscall listen(2) for sockets backed by
|
||||
@@ -474,13 +474,13 @@ func (s *SocketOperations) EventUnregister(e *waiter.Entry) {
|
||||
// SetSockOpt implements the linux syscall setsockopt(2) for sockets backed by
|
||||
// a transport.Endpoint.
|
||||
func (s *SocketOperations) SetSockOpt(t *kernel.Task, level int, name int, optVal []byte) *syserr.Error {
|
||||
return epsocket.SetSockOpt(t, s, s.ep, level, name, optVal)
|
||||
return netstack.SetSockOpt(t, s, s.ep, level, name, optVal)
|
||||
}
|
||||
|
||||
// Shutdown implements the linux syscall shutdown(2) for sockets backed by
|
||||
// a transport.Endpoint.
|
||||
func (s *SocketOperations) Shutdown(t *kernel.Task, how int) *syserr.Error {
|
||||
f, err := epsocket.ConvertShutdown(how)
|
||||
f, err := netstack.ConvertShutdown(how)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -546,7 +546,7 @@ func (s *SocketOperations) RecvMsg(t *kernel.Task, dst usermem.IOSequence, flags
|
||||
var from linux.SockAddr
|
||||
var fromLen uint32
|
||||
if r.From != nil && len([]byte(r.From.Addr)) != 0 {
|
||||
from, fromLen = epsocket.ConvertAddress(linux.AF_UNIX, *r.From)
|
||||
from, fromLen = netstack.ConvertAddress(linux.AF_UNIX, *r.From)
|
||||
}
|
||||
|
||||
if r.ControlTrunc {
|
||||
@@ -581,7 +581,7 @@ func (s *SocketOperations) RecvMsg(t *kernel.Task, dst usermem.IOSequence, flags
|
||||
var from linux.SockAddr
|
||||
var fromLen uint32
|
||||
if r.From != nil {
|
||||
from, fromLen = epsocket.ConvertAddress(linux.AF_UNIX, *r.From)
|
||||
from, fromLen = netstack.ConvertAddress(linux.AF_UNIX, *r.From)
|
||||
}
|
||||
|
||||
if r.ControlTrunc {
|
||||
|
||||
@@ -32,8 +32,8 @@ go_library(
|
||||
"//pkg/sentry/arch",
|
||||
"//pkg/sentry/kernel",
|
||||
"//pkg/sentry/socket/control",
|
||||
"//pkg/sentry/socket/epsocket",
|
||||
"//pkg/sentry/socket/netlink",
|
||||
"//pkg/sentry/socket/netstack",
|
||||
"//pkg/sentry/syscalls/linux",
|
||||
"//pkg/sentry/usermem",
|
||||
],
|
||||
|
||||
@@ -23,8 +23,8 @@ import (
|
||||
"gvisor.dev/gvisor/pkg/binary"
|
||||
"gvisor.dev/gvisor/pkg/sentry/kernel"
|
||||
"gvisor.dev/gvisor/pkg/sentry/socket/control"
|
||||
"gvisor.dev/gvisor/pkg/sentry/socket/epsocket"
|
||||
"gvisor.dev/gvisor/pkg/sentry/socket/netlink"
|
||||
"gvisor.dev/gvisor/pkg/sentry/socket/netstack"
|
||||
slinux "gvisor.dev/gvisor/pkg/sentry/syscalls/linux"
|
||||
"gvisor.dev/gvisor/pkg/sentry/usermem"
|
||||
)
|
||||
@@ -332,7 +332,7 @@ func sockAddr(t *kernel.Task, addr usermem.Addr, length uint32) string {
|
||||
|
||||
switch family {
|
||||
case linux.AF_INET, linux.AF_INET6, linux.AF_UNIX:
|
||||
fa, _, err := epsocket.AddressAndFamily(int(family), b, true /* strict */)
|
||||
fa, _, err := netstack.AddressAndFamily(int(family), b, true /* strict */)
|
||||
if err != nil {
|
||||
return fmt.Sprintf("%#x {Family: %s, error extracting address: %v}", addr, familyStr, err)
|
||||
}
|
||||
|
||||
+1
-1
@@ -57,10 +57,10 @@ go_library(
|
||||
"//pkg/sentry/pgalloc",
|
||||
"//pkg/sentry/platform",
|
||||
"//pkg/sentry/sighandling",
|
||||
"//pkg/sentry/socket/epsocket",
|
||||
"//pkg/sentry/socket/hostinet",
|
||||
"//pkg/sentry/socket/netlink",
|
||||
"//pkg/sentry/socket/netlink/route",
|
||||
"//pkg/sentry/socket/netstack",
|
||||
"//pkg/sentry/socket/unix",
|
||||
"//pkg/sentry/state",
|
||||
"//pkg/sentry/strace",
|
||||
|
||||
@@ -27,7 +27,7 @@ import (
|
||||
"gvisor.dev/gvisor/pkg/sentry/control"
|
||||
"gvisor.dev/gvisor/pkg/sentry/fs"
|
||||
"gvisor.dev/gvisor/pkg/sentry/kernel"
|
||||
"gvisor.dev/gvisor/pkg/sentry/socket/epsocket"
|
||||
"gvisor.dev/gvisor/pkg/sentry/socket/netstack"
|
||||
"gvisor.dev/gvisor/pkg/sentry/state"
|
||||
"gvisor.dev/gvisor/pkg/sentry/time"
|
||||
"gvisor.dev/gvisor/pkg/sentry/watchdog"
|
||||
@@ -142,7 +142,7 @@ func newController(fd int, l *Loader) (*controller, error) {
|
||||
}
|
||||
srv.Register(manager)
|
||||
|
||||
if eps, ok := l.k.NetworkStack().(*epsocket.Stack); ok {
|
||||
if eps, ok := l.k.NetworkStack().(*netstack.Stack); ok {
|
||||
net := &Network{
|
||||
Stack: eps.Stack,
|
||||
}
|
||||
@@ -355,7 +355,7 @@ func (cm *containerManager) Restore(o *RestoreOpts, _ *struct{}) error {
|
||||
fs.SetRestoreEnvironment(*renv)
|
||||
|
||||
// Prepare to load from the state file.
|
||||
if eps, ok := networkStack.(*epsocket.Stack); ok {
|
||||
if eps, ok := networkStack.(*netstack.Stack); ok {
|
||||
stack.StackFromEnv = eps.Stack // FIXME(b/36201077)
|
||||
}
|
||||
info, err := specFile.Stat()
|
||||
|
||||
@@ -62,10 +62,10 @@ import (
|
||||
"gvisor.dev/gvisor/runsc/specutils"
|
||||
|
||||
// Include supported socket providers.
|
||||
"gvisor.dev/gvisor/pkg/sentry/socket/epsocket"
|
||||
"gvisor.dev/gvisor/pkg/sentry/socket/hostinet"
|
||||
_ "gvisor.dev/gvisor/pkg/sentry/socket/netlink"
|
||||
_ "gvisor.dev/gvisor/pkg/sentry/socket/netlink/route"
|
||||
"gvisor.dev/gvisor/pkg/sentry/socket/netstack"
|
||||
_ "gvisor.dev/gvisor/pkg/sentry/socket/unix"
|
||||
)
|
||||
|
||||
@@ -914,11 +914,11 @@ func newEmptyNetworkStack(conf *Config, clock tcpip.Clock) (inet.Stack, error) {
|
||||
// NetworkNone sets up loopback using netstack.
|
||||
netProtos := []stack.NetworkProtocol{ipv4.NewProtocol(), ipv6.NewProtocol(), arp.NewProtocol()}
|
||||
transProtos := []stack.TransportProtocol{tcp.NewProtocol(), udp.NewProtocol(), icmp.NewProtocol4()}
|
||||
s := epsocket.Stack{stack.New(stack.Options{
|
||||
s := netstack.Stack{stack.New(stack.Options{
|
||||
NetworkProtocols: netProtos,
|
||||
TransportProtocols: transProtos,
|
||||
Clock: clock,
|
||||
Stats: epsocket.Metrics,
|
||||
Stats: netstack.Metrics,
|
||||
HandleLocal: true,
|
||||
// Enable raw sockets for users with sufficient
|
||||
// privileges.
|
||||
|
||||
Reference in New Issue
Block a user