mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Remove reundant global tcpip.LinkEndpointID.
PiperOrigin-RevId: 267709597
This commit is contained in:
@@ -44,14 +44,12 @@ type Endpoint struct {
|
||||
}
|
||||
|
||||
// New creates a new channel endpoint.
|
||||
func New(size int, mtu uint32, linkAddr tcpip.LinkAddress) (tcpip.LinkEndpointID, *Endpoint) {
|
||||
e := &Endpoint{
|
||||
func New(size int, mtu uint32, linkAddr tcpip.LinkAddress) *Endpoint {
|
||||
return &Endpoint{
|
||||
C: make(chan PacketInfo, size),
|
||||
mtu: mtu,
|
||||
linkAddr: linkAddr,
|
||||
}
|
||||
|
||||
return stack.RegisterLinkEndpoint(e), e
|
||||
}
|
||||
|
||||
// Drain removes all outbound packets from the channel and counts them.
|
||||
|
||||
@@ -165,7 +165,7 @@ type Options struct {
|
||||
//
|
||||
// Makes fd non-blocking, but does not take ownership of fd, which must remain
|
||||
// open for the lifetime of the returned endpoint.
|
||||
func New(opts *Options) (tcpip.LinkEndpointID, error) {
|
||||
func New(opts *Options) (stack.LinkEndpoint, error) {
|
||||
caps := stack.LinkEndpointCapabilities(0)
|
||||
if opts.RXChecksumOffload {
|
||||
caps |= stack.CapabilityRXChecksumOffload
|
||||
@@ -190,7 +190,7 @@ func New(opts *Options) (tcpip.LinkEndpointID, error) {
|
||||
}
|
||||
|
||||
if len(opts.FDs) == 0 {
|
||||
return 0, fmt.Errorf("opts.FD is empty, at least one FD must be specified")
|
||||
return nil, fmt.Errorf("opts.FD is empty, at least one FD must be specified")
|
||||
}
|
||||
|
||||
e := &endpoint{
|
||||
@@ -207,12 +207,12 @@ func New(opts *Options) (tcpip.LinkEndpointID, error) {
|
||||
for i := 0; i < len(e.fds); i++ {
|
||||
fd := e.fds[i]
|
||||
if err := syscall.SetNonblock(fd, true); err != nil {
|
||||
return 0, fmt.Errorf("syscall.SetNonblock(%v) failed: %v", fd, err)
|
||||
return nil, fmt.Errorf("syscall.SetNonblock(%v) failed: %v", fd, err)
|
||||
}
|
||||
|
||||
isSocket, err := isSocketFD(fd)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
return nil, err
|
||||
}
|
||||
if isSocket {
|
||||
if opts.GSOMaxSize != 0 {
|
||||
@@ -222,12 +222,12 @@ func New(opts *Options) (tcpip.LinkEndpointID, error) {
|
||||
}
|
||||
inboundDispatcher, err := createInboundDispatcher(e, fd, isSocket)
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("createInboundDispatcher(...) = %v", err)
|
||||
return nil, fmt.Errorf("createInboundDispatcher(...) = %v", err)
|
||||
}
|
||||
e.inboundDispatchers = append(e.inboundDispatchers, inboundDispatcher)
|
||||
}
|
||||
|
||||
return stack.RegisterLinkEndpoint(e), nil
|
||||
return e, nil
|
||||
}
|
||||
|
||||
func createInboundDispatcher(e *endpoint, fd int, isSocket bool) (linkDispatcher, error) {
|
||||
@@ -435,14 +435,12 @@ func (e *InjectableEndpoint) Inject(protocol tcpip.NetworkProtocolNumber, vv buf
|
||||
}
|
||||
|
||||
// NewInjectable creates a new fd-based InjectableEndpoint.
|
||||
func NewInjectable(fd int, mtu uint32, capabilities stack.LinkEndpointCapabilities) (tcpip.LinkEndpointID, *InjectableEndpoint) {
|
||||
func NewInjectable(fd int, mtu uint32, capabilities stack.LinkEndpointCapabilities) *InjectableEndpoint {
|
||||
syscall.SetNonblock(fd, true)
|
||||
|
||||
e := &InjectableEndpoint{endpoint: endpoint{
|
||||
return &InjectableEndpoint{endpoint: endpoint{
|
||||
fds: []int{fd},
|
||||
mtu: mtu,
|
||||
caps: capabilities,
|
||||
}}
|
||||
|
||||
return stack.RegisterLinkEndpoint(e), e
|
||||
}
|
||||
|
||||
@@ -68,11 +68,10 @@ func newContext(t *testing.T, opt *Options) *context {
|
||||
}
|
||||
|
||||
opt.FDs = []int{fds[1]}
|
||||
epID, err := New(opt)
|
||||
ep, err := New(opt)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create FD endpoint: %v", err)
|
||||
}
|
||||
ep := stack.FindLinkEndpoint(epID).(*endpoint)
|
||||
|
||||
c := &context{
|
||||
t: t,
|
||||
|
||||
@@ -32,8 +32,8 @@ type endpoint struct {
|
||||
|
||||
// New creates a new loopback endpoint. This link-layer endpoint just turns
|
||||
// outbound packets into inbound packets.
|
||||
func New() tcpip.LinkEndpointID {
|
||||
return stack.RegisterLinkEndpoint(&endpoint{})
|
||||
func New() stack.LinkEndpoint {
|
||||
return &endpoint{}
|
||||
}
|
||||
|
||||
// Attach implements stack.LinkEndpoint.Attach. It just saves the stack network-
|
||||
|
||||
@@ -105,9 +105,8 @@ func (m *InjectableEndpoint) WriteRawPacket(dest tcpip.Address, packet []byte) *
|
||||
}
|
||||
|
||||
// NewInjectableEndpoint creates a new multi-endpoint injectable endpoint.
|
||||
func NewInjectableEndpoint(routes map[tcpip.Address]stack.InjectableLinkEndpoint) (tcpip.LinkEndpointID, *InjectableEndpoint) {
|
||||
e := &InjectableEndpoint{
|
||||
func NewInjectableEndpoint(routes map[tcpip.Address]stack.InjectableLinkEndpoint) *InjectableEndpoint {
|
||||
return &InjectableEndpoint{
|
||||
routes: routes,
|
||||
}
|
||||
return stack.RegisterLinkEndpoint(e), e
|
||||
}
|
||||
|
||||
@@ -87,8 +87,8 @@ func makeTestInjectableEndpoint(t *testing.T) (*InjectableEndpoint, *os.File, tc
|
||||
if err != nil {
|
||||
t.Fatal("Failed to create socket pair:", err)
|
||||
}
|
||||
_, underlyingEndpoint := fdbased.NewInjectable(pair[1], 6500, stack.CapabilityNone)
|
||||
underlyingEndpoint := fdbased.NewInjectable(pair[1], 6500, stack.CapabilityNone)
|
||||
routes := map[tcpip.Address]stack.InjectableLinkEndpoint{dstIP: underlyingEndpoint}
|
||||
_, endpoint := NewInjectableEndpoint(routes)
|
||||
endpoint := NewInjectableEndpoint(routes)
|
||||
return endpoint, os.NewFile(uintptr(pair[0]), "test route end"), dstIP
|
||||
}
|
||||
|
||||
@@ -94,7 +94,7 @@ type endpoint struct {
|
||||
|
||||
// New creates a new shared-memory-based endpoint. Buffers will be broken up
|
||||
// into buffers of "bufferSize" bytes.
|
||||
func New(mtu, bufferSize uint32, addr tcpip.LinkAddress, tx, rx QueueConfig) (tcpip.LinkEndpointID, error) {
|
||||
func New(mtu, bufferSize uint32, addr tcpip.LinkAddress, tx, rx QueueConfig) (stack.LinkEndpoint, error) {
|
||||
e := &endpoint{
|
||||
mtu: mtu,
|
||||
bufferSize: bufferSize,
|
||||
@@ -102,15 +102,15 @@ func New(mtu, bufferSize uint32, addr tcpip.LinkAddress, tx, rx QueueConfig) (tc
|
||||
}
|
||||
|
||||
if err := e.tx.init(bufferSize, &tx); err != nil {
|
||||
return 0, err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := e.rx.init(bufferSize, &rx); err != nil {
|
||||
e.tx.cleanup()
|
||||
return 0, err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return stack.RegisterLinkEndpoint(e), nil
|
||||
return e, nil
|
||||
}
|
||||
|
||||
// Close frees all resources associated with the endpoint.
|
||||
|
||||
@@ -119,12 +119,12 @@ func newTestContext(t *testing.T, mtu, bufferSize uint32, addr tcpip.LinkAddress
|
||||
initQueue(t, &c.txq, &c.txCfg)
|
||||
initQueue(t, &c.rxq, &c.rxCfg)
|
||||
|
||||
id, err := New(mtu, bufferSize, addr, c.txCfg, c.rxCfg)
|
||||
ep, err := New(mtu, bufferSize, addr, c.txCfg, c.rxCfg)
|
||||
if err != nil {
|
||||
t.Fatalf("New failed: %v", err)
|
||||
}
|
||||
|
||||
c.ep = stack.FindLinkEndpoint(id).(*endpoint)
|
||||
c.ep = ep.(*endpoint)
|
||||
c.ep.Attach(c)
|
||||
|
||||
return c
|
||||
|
||||
@@ -58,10 +58,10 @@ type endpoint struct {
|
||||
|
||||
// New creates a new sniffer link-layer endpoint. It wraps around another
|
||||
// endpoint and logs packets and they traverse the endpoint.
|
||||
func New(lower tcpip.LinkEndpointID) tcpip.LinkEndpointID {
|
||||
return stack.RegisterLinkEndpoint(&endpoint{
|
||||
lower: stack.FindLinkEndpoint(lower),
|
||||
})
|
||||
func New(lower stack.LinkEndpoint) stack.LinkEndpoint {
|
||||
return &endpoint{
|
||||
lower: lower,
|
||||
}
|
||||
}
|
||||
|
||||
func zoneOffset() (int32, error) {
|
||||
@@ -102,15 +102,15 @@ func writePCAPHeader(w io.Writer, maxLen uint32) error {
|
||||
// snapLen is the maximum amount of a packet to be saved. Packets with a length
|
||||
// less than or equal too snapLen will be saved in their entirety. Longer
|
||||
// packets will be truncated to snapLen.
|
||||
func NewWithFile(lower tcpip.LinkEndpointID, file *os.File, snapLen uint32) (tcpip.LinkEndpointID, error) {
|
||||
func NewWithFile(lower stack.LinkEndpoint, file *os.File, snapLen uint32) (stack.LinkEndpoint, error) {
|
||||
if err := writePCAPHeader(file, snapLen); err != nil {
|
||||
return 0, err
|
||||
return nil, err
|
||||
}
|
||||
return stack.RegisterLinkEndpoint(&endpoint{
|
||||
lower: stack.FindLinkEndpoint(lower),
|
||||
return &endpoint{
|
||||
lower: lower,
|
||||
file: file,
|
||||
maxPCAPLen: snapLen,
|
||||
}), nil
|
||||
}, nil
|
||||
}
|
||||
|
||||
// DeliverNetworkPacket implements the stack.NetworkDispatcher interface. It is
|
||||
|
||||
@@ -40,11 +40,10 @@ type Endpoint struct {
|
||||
// New creates a new waitable link-layer endpoint. It wraps around another
|
||||
// endpoint and allows the caller to block new write/dispatch calls and wait for
|
||||
// the inflight ones to finish before returning.
|
||||
func New(lower tcpip.LinkEndpointID) (tcpip.LinkEndpointID, *Endpoint) {
|
||||
e := &Endpoint{
|
||||
lower: stack.FindLinkEndpoint(lower),
|
||||
func New(lower stack.LinkEndpoint) *Endpoint {
|
||||
return &Endpoint{
|
||||
lower: lower,
|
||||
}
|
||||
return stack.RegisterLinkEndpoint(e), e
|
||||
}
|
||||
|
||||
// DeliverNetworkPacket implements stack.NetworkDispatcher.DeliverNetworkPacket.
|
||||
|
||||
@@ -72,7 +72,7 @@ func (e *countedEndpoint) WritePacket(r *stack.Route, _ *stack.GSO, hdr buffer.P
|
||||
|
||||
func TestWaitWrite(t *testing.T) {
|
||||
ep := &countedEndpoint{}
|
||||
_, wep := New(stack.RegisterLinkEndpoint(ep))
|
||||
wep := New(ep)
|
||||
|
||||
// Write and check that it goes through.
|
||||
wep.WritePacket(nil, nil /* gso */, buffer.Prependable{}, buffer.VectorisedView{}, 0)
|
||||
@@ -97,7 +97,7 @@ func TestWaitWrite(t *testing.T) {
|
||||
|
||||
func TestWaitDispatch(t *testing.T) {
|
||||
ep := &countedEndpoint{}
|
||||
_, wep := New(stack.RegisterLinkEndpoint(ep))
|
||||
wep := New(ep)
|
||||
|
||||
// Check that attach happens.
|
||||
wep.Attach(ep)
|
||||
@@ -139,7 +139,7 @@ func TestOtherMethods(t *testing.T) {
|
||||
hdrLen: hdrLen,
|
||||
linkAddr: linkAddr,
|
||||
}
|
||||
_, wep := New(stack.RegisterLinkEndpoint(ep))
|
||||
wep := New(ep)
|
||||
|
||||
if v := wep.MTU(); v != mtu {
|
||||
t.Fatalf("Unexpected mtu: got=%v, want=%v", v, mtu)
|
||||
|
||||
@@ -47,11 +47,13 @@ func newTestContext(t *testing.T) *testContext {
|
||||
s := stack.New([]string{ipv4.ProtocolName, arp.ProtocolName}, []string{icmp.ProtocolName4}, stack.Options{})
|
||||
|
||||
const defaultMTU = 65536
|
||||
id, linkEP := channel.New(256, defaultMTU, stackLinkAddr)
|
||||
ep := channel.New(256, defaultMTU, stackLinkAddr)
|
||||
wep := stack.LinkEndpoint(ep)
|
||||
|
||||
if testing.Verbose() {
|
||||
id = sniffer.New(id)
|
||||
wep = sniffer.New(ep)
|
||||
}
|
||||
if err := s.CreateNIC(1, id); err != nil {
|
||||
if err := s.CreateNIC(1, wep); err != nil {
|
||||
t.Fatalf("CreateNIC failed: %v", err)
|
||||
}
|
||||
|
||||
@@ -73,7 +75,7 @@ func newTestContext(t *testing.T) *testContext {
|
||||
return &testContext{
|
||||
t: t,
|
||||
s: s,
|
||||
linkEP: linkEP,
|
||||
linkEP: ep,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -36,11 +36,11 @@ func TestExcludeBroadcast(t *testing.T) {
|
||||
s := stack.New([]string{ipv4.ProtocolName}, []string{udp.ProtocolName}, stack.Options{})
|
||||
|
||||
const defaultMTU = 65536
|
||||
id, _ := channel.New(256, defaultMTU, "")
|
||||
ep := stack.LinkEndpoint(channel.New(256, defaultMTU, ""))
|
||||
if testing.Verbose() {
|
||||
id = sniffer.New(id)
|
||||
ep = sniffer.New(ep)
|
||||
}
|
||||
if err := s.CreateNIC(1, id); err != nil {
|
||||
if err := s.CreateNIC(1, ep); err != nil {
|
||||
t.Fatalf("CreateNIC failed: %v", err)
|
||||
}
|
||||
|
||||
@@ -184,15 +184,12 @@ type errorChannel struct {
|
||||
// newErrorChannel creates a new errorChannel endpoint. Each call to WritePacket
|
||||
// will return successive errors from packetCollectorErrors until the list is
|
||||
// empty and then return nil each time.
|
||||
func newErrorChannel(size int, mtu uint32, linkAddr tcpip.LinkAddress, packetCollectorErrors []*tcpip.Error) (tcpip.LinkEndpointID, *errorChannel) {
|
||||
_, e := channel.New(size, mtu, linkAddr)
|
||||
ec := errorChannel{
|
||||
Endpoint: e,
|
||||
func newErrorChannel(size int, mtu uint32, linkAddr tcpip.LinkAddress, packetCollectorErrors []*tcpip.Error) *errorChannel {
|
||||
return &errorChannel{
|
||||
Endpoint: channel.New(size, mtu, linkAddr),
|
||||
Ch: make(chan packetInfo, size),
|
||||
packetCollectorErrors: packetCollectorErrors,
|
||||
}
|
||||
|
||||
return stack.RegisterLinkEndpoint(e), &ec
|
||||
}
|
||||
|
||||
// packetInfo holds all the information about an outbound packet.
|
||||
@@ -242,9 +239,8 @@ type context struct {
|
||||
func buildContext(t *testing.T, packetCollectorErrors []*tcpip.Error, mtu uint32) context {
|
||||
// Make the packet and write it.
|
||||
s := stack.New([]string{ipv4.ProtocolName}, []string{}, stack.Options{})
|
||||
_, linkEP := newErrorChannel(100 /* Enough for all tests. */, mtu, "", packetCollectorErrors)
|
||||
linkEPId := stack.RegisterLinkEndpoint(linkEP)
|
||||
s.CreateNIC(1, linkEPId)
|
||||
ep := newErrorChannel(100 /* Enough for all tests. */, mtu, "", packetCollectorErrors)
|
||||
s.CreateNIC(1, ep)
|
||||
const (
|
||||
src = "\x10\x00\x00\x01"
|
||||
dst = "\x10\x00\x00\x02"
|
||||
@@ -266,7 +262,7 @@ func buildContext(t *testing.T, packetCollectorErrors []*tcpip.Error, mtu uint32
|
||||
}
|
||||
return context{
|
||||
Route: r,
|
||||
linkEP: linkEP,
|
||||
linkEP: ep,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -83,8 +83,7 @@ func (*stubLinkAddressCache) AddLinkAddress(tcpip.NICID, tcpip.Address, tcpip.Li
|
||||
func TestICMPCounts(t *testing.T) {
|
||||
s := stack.New([]string{ProtocolName}, []string{icmp.ProtocolName6}, stack.Options{})
|
||||
{
|
||||
id := stack.RegisterLinkEndpoint(&stubLinkEndpoint{})
|
||||
if err := s.CreateNIC(1, id); err != nil {
|
||||
if err := s.CreateNIC(1, &stubLinkEndpoint{}); err != nil {
|
||||
t.Fatalf("CreateNIC(_) = %s", err)
|
||||
}
|
||||
if err := s.AddAddress(1, ProtocolNumber, lladdr0); err != nil {
|
||||
@@ -211,14 +210,13 @@ func newTestContext(t *testing.T) *testContext {
|
||||
}
|
||||
|
||||
const defaultMTU = 65536
|
||||
_, linkEP0 := channel.New(256, defaultMTU, linkAddr0)
|
||||
c.linkEP0 = linkEP0
|
||||
wrappedEP0 := endpointWithResolutionCapability{LinkEndpoint: linkEP0}
|
||||
id0 := stack.RegisterLinkEndpoint(wrappedEP0)
|
||||
c.linkEP0 = channel.New(256, defaultMTU, linkAddr0)
|
||||
|
||||
wrappedEP0 := stack.LinkEndpoint(endpointWithResolutionCapability{LinkEndpoint: c.linkEP0})
|
||||
if testing.Verbose() {
|
||||
id0 = sniffer.New(id0)
|
||||
wrappedEP0 = sniffer.New(wrappedEP0)
|
||||
}
|
||||
if err := c.s0.CreateNIC(1, id0); err != nil {
|
||||
if err := c.s0.CreateNIC(1, wrappedEP0); err != nil {
|
||||
t.Fatalf("CreateNIC s0: %v", err)
|
||||
}
|
||||
if err := c.s0.AddAddress(1, ProtocolNumber, lladdr0); err != nil {
|
||||
@@ -228,11 +226,9 @@ func newTestContext(t *testing.T) *testContext {
|
||||
t.Fatalf("AddAddress sn lladdr0: %v", err)
|
||||
}
|
||||
|
||||
_, linkEP1 := channel.New(256, defaultMTU, linkAddr1)
|
||||
c.linkEP1 = linkEP1
|
||||
wrappedEP1 := endpointWithResolutionCapability{LinkEndpoint: linkEP1}
|
||||
id1 := stack.RegisterLinkEndpoint(wrappedEP1)
|
||||
if err := c.s1.CreateNIC(1, id1); err != nil {
|
||||
c.linkEP1 = channel.New(256, defaultMTU, linkAddr1)
|
||||
wrappedEP1 := stack.LinkEndpoint(endpointWithResolutionCapability{LinkEndpoint: c.linkEP1})
|
||||
if err := c.s1.CreateNIC(1, wrappedEP1); err != nil {
|
||||
t.Fatalf("CreateNIC failed: %v", err)
|
||||
}
|
||||
if err := c.s1.AddAddress(1, ProtocolNumber, lladdr1); err != nil {
|
||||
|
||||
@@ -32,15 +32,14 @@ func setupStackAndEndpoint(t *testing.T, llladdr, rlladdr tcpip.Address) (*stack
|
||||
t.Helper()
|
||||
|
||||
s := stack.New([]string{ProtocolName}, []string{icmp.ProtocolName6}, stack.Options{})
|
||||
{
|
||||
id := stack.RegisterLinkEndpoint(&stubLinkEndpoint{})
|
||||
if err := s.CreateNIC(1, id); err != nil {
|
||||
t.Fatalf("CreateNIC(_) = %s", err)
|
||||
}
|
||||
if err := s.AddAddress(1, ProtocolNumber, llladdr); err != nil {
|
||||
t.Fatalf("AddAddress(_, %d, %s) = %s", ProtocolNumber, llladdr, err)
|
||||
}
|
||||
|
||||
if err := s.CreateNIC(1, &stubLinkEndpoint{}); err != nil {
|
||||
t.Fatalf("CreateNIC(_) = %s", err)
|
||||
}
|
||||
if err := s.AddAddress(1, ProtocolNumber, llladdr); err != nil {
|
||||
t.Fatalf("AddAddress(_, %d, %s) = %s", ProtocolNumber, llladdr, err)
|
||||
}
|
||||
|
||||
{
|
||||
subnet, err := tcpip.NewSubnet(rlladdr, tcpip.AddressMask(strings.Repeat("\xff", len(rlladdr))))
|
||||
if err != nil {
|
||||
|
||||
@@ -15,8 +15,6 @@
|
||||
package stack
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"gvisor.dev/gvisor/pkg/sleep"
|
||||
"gvisor.dev/gvisor/pkg/tcpip"
|
||||
"gvisor.dev/gvisor/pkg/tcpip/buffer"
|
||||
@@ -379,10 +377,6 @@ var (
|
||||
networkProtocols = make(map[string]NetworkProtocolFactory)
|
||||
|
||||
unassociatedFactory UnassociatedEndpointFactory
|
||||
|
||||
linkEPMu sync.RWMutex
|
||||
nextLinkEndpointID tcpip.LinkEndpointID = 1
|
||||
linkEndpoints = make(map[tcpip.LinkEndpointID]LinkEndpoint)
|
||||
)
|
||||
|
||||
// RegisterTransportProtocolFactory registers a new transport protocol factory
|
||||
@@ -406,28 +400,6 @@ func RegisterUnassociatedFactory(f UnassociatedEndpointFactory) {
|
||||
unassociatedFactory = f
|
||||
}
|
||||
|
||||
// RegisterLinkEndpoint register a link-layer protocol endpoint and returns an
|
||||
// ID that can be used to refer to it.
|
||||
func RegisterLinkEndpoint(linkEP LinkEndpoint) tcpip.LinkEndpointID {
|
||||
linkEPMu.Lock()
|
||||
defer linkEPMu.Unlock()
|
||||
|
||||
v := nextLinkEndpointID
|
||||
nextLinkEndpointID++
|
||||
|
||||
linkEndpoints[v] = linkEP
|
||||
|
||||
return v
|
||||
}
|
||||
|
||||
// FindLinkEndpoint finds the link endpoint associated with the given ID.
|
||||
func FindLinkEndpoint(id tcpip.LinkEndpointID) LinkEndpoint {
|
||||
linkEPMu.RLock()
|
||||
defer linkEPMu.RUnlock()
|
||||
|
||||
return linkEndpoints[id]
|
||||
}
|
||||
|
||||
// GSOType is the type of GSO segments.
|
||||
//
|
||||
// +stateify savable
|
||||
|
||||
+11
-16
@@ -620,12 +620,7 @@ func (s *Stack) NewRawEndpoint(transport tcpip.TransportProtocolNumber, network
|
||||
|
||||
// createNIC creates a NIC with the provided id and link-layer endpoint, and
|
||||
// optionally enable it.
|
||||
func (s *Stack) createNIC(id tcpip.NICID, name string, linkEP tcpip.LinkEndpointID, enabled, loopback bool) *tcpip.Error {
|
||||
ep := FindLinkEndpoint(linkEP)
|
||||
if ep == nil {
|
||||
return tcpip.ErrBadLinkEndpoint
|
||||
}
|
||||
|
||||
func (s *Stack) createNIC(id tcpip.NICID, name string, ep LinkEndpoint, enabled, loopback bool) *tcpip.Error {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
|
||||
@@ -645,33 +640,33 @@ func (s *Stack) createNIC(id tcpip.NICID, name string, linkEP tcpip.LinkEndpoint
|
||||
}
|
||||
|
||||
// CreateNIC creates a NIC with the provided id and link-layer endpoint.
|
||||
func (s *Stack) CreateNIC(id tcpip.NICID, linkEP tcpip.LinkEndpointID) *tcpip.Error {
|
||||
return s.createNIC(id, "", linkEP, true, false)
|
||||
func (s *Stack) CreateNIC(id tcpip.NICID, ep LinkEndpoint) *tcpip.Error {
|
||||
return s.createNIC(id, "", ep, true, false)
|
||||
}
|
||||
|
||||
// CreateNamedNIC creates a NIC with the provided id and link-layer endpoint,
|
||||
// and a human-readable name.
|
||||
func (s *Stack) CreateNamedNIC(id tcpip.NICID, name string, linkEP tcpip.LinkEndpointID) *tcpip.Error {
|
||||
return s.createNIC(id, name, linkEP, true, false)
|
||||
func (s *Stack) CreateNamedNIC(id tcpip.NICID, name string, ep LinkEndpoint) *tcpip.Error {
|
||||
return s.createNIC(id, name, ep, true, false)
|
||||
}
|
||||
|
||||
// CreateNamedLoopbackNIC creates a NIC with the provided id and link-layer
|
||||
// endpoint, and a human-readable name.
|
||||
func (s *Stack) CreateNamedLoopbackNIC(id tcpip.NICID, name string, linkEP tcpip.LinkEndpointID) *tcpip.Error {
|
||||
return s.createNIC(id, name, linkEP, true, true)
|
||||
func (s *Stack) CreateNamedLoopbackNIC(id tcpip.NICID, name string, ep LinkEndpoint) *tcpip.Error {
|
||||
return s.createNIC(id, name, ep, true, true)
|
||||
}
|
||||
|
||||
// CreateDisabledNIC creates a NIC with the provided id and link-layer endpoint,
|
||||
// but leave it disable. Stack.EnableNIC must be called before the link-layer
|
||||
// endpoint starts delivering packets to it.
|
||||
func (s *Stack) CreateDisabledNIC(id tcpip.NICID, linkEP tcpip.LinkEndpointID) *tcpip.Error {
|
||||
return s.createNIC(id, "", linkEP, false, false)
|
||||
func (s *Stack) CreateDisabledNIC(id tcpip.NICID, ep LinkEndpoint) *tcpip.Error {
|
||||
return s.createNIC(id, "", ep, false, false)
|
||||
}
|
||||
|
||||
// CreateDisabledNamedNIC is a combination of CreateNamedNIC and
|
||||
// CreateDisabledNIC.
|
||||
func (s *Stack) CreateDisabledNamedNIC(id tcpip.NICID, name string, linkEP tcpip.LinkEndpointID) *tcpip.Error {
|
||||
return s.createNIC(id, name, linkEP, false, false)
|
||||
func (s *Stack) CreateDisabledNamedNIC(id tcpip.NICID, name string, ep LinkEndpoint) *tcpip.Error {
|
||||
return s.createNIC(id, name, ep, false, false)
|
||||
}
|
||||
|
||||
// EnableNIC enables the given NIC so that the link-layer endpoint can start
|
||||
|
||||
+139
-139
File diff suppressed because it is too large
Load Diff
@@ -278,9 +278,9 @@ func (f *fakeTransportProtocol) Option(option interface{}) *tcpip.Error {
|
||||
}
|
||||
|
||||
func TestTransportReceive(t *testing.T) {
|
||||
id, linkEP := channel.New(10, defaultMTU, "")
|
||||
linkEP := channel.New(10, defaultMTU, "")
|
||||
s := stack.New([]string{"fakeNet"}, []string{"fakeTrans"}, stack.Options{})
|
||||
if err := s.CreateNIC(1, id); err != nil {
|
||||
if err := s.CreateNIC(1, linkEP); err != nil {
|
||||
t.Fatalf("CreateNIC failed: %v", err)
|
||||
}
|
||||
|
||||
@@ -340,9 +340,9 @@ func TestTransportReceive(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestTransportControlReceive(t *testing.T) {
|
||||
id, linkEP := channel.New(10, defaultMTU, "")
|
||||
linkEP := channel.New(10, defaultMTU, "")
|
||||
s := stack.New([]string{"fakeNet"}, []string{"fakeTrans"}, stack.Options{})
|
||||
if err := s.CreateNIC(1, id); err != nil {
|
||||
if err := s.CreateNIC(1, linkEP); err != nil {
|
||||
t.Fatalf("CreateNIC failed: %v", err)
|
||||
}
|
||||
|
||||
@@ -408,9 +408,9 @@ func TestTransportControlReceive(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestTransportSend(t *testing.T) {
|
||||
id, _ := channel.New(10, defaultMTU, "")
|
||||
linkEP := channel.New(10, defaultMTU, "")
|
||||
s := stack.New([]string{"fakeNet"}, []string{"fakeTrans"}, stack.Options{})
|
||||
if err := s.CreateNIC(1, id); err != nil {
|
||||
if err := s.CreateNIC(1, linkEP); err != nil {
|
||||
t.Fatalf("CreateNIC failed: %v", err)
|
||||
}
|
||||
|
||||
@@ -497,16 +497,16 @@ func TestTransportForwarding(t *testing.T) {
|
||||
s.SetForwarding(true)
|
||||
|
||||
// TODO(b/123449044): Change this to a channel NIC.
|
||||
id1 := loopback.New()
|
||||
if err := s.CreateNIC(1, id1); err != nil {
|
||||
ep1 := loopback.New()
|
||||
if err := s.CreateNIC(1, ep1); err != nil {
|
||||
t.Fatalf("CreateNIC #1 failed: %v", err)
|
||||
}
|
||||
if err := s.AddAddress(1, fakeNetNumber, "\x01"); err != nil {
|
||||
t.Fatalf("AddAddress #1 failed: %v", err)
|
||||
}
|
||||
|
||||
id2, linkEP2 := channel.New(10, defaultMTU, "")
|
||||
if err := s.CreateNIC(2, id2); err != nil {
|
||||
ep2 := channel.New(10, defaultMTU, "")
|
||||
if err := s.CreateNIC(2, ep2); err != nil {
|
||||
t.Fatalf("CreateNIC #2 failed: %v", err)
|
||||
}
|
||||
if err := s.AddAddress(2, fakeNetNumber, "\x02"); err != nil {
|
||||
@@ -545,7 +545,7 @@ func TestTransportForwarding(t *testing.T) {
|
||||
req[0] = 1
|
||||
req[1] = 3
|
||||
req[2] = byte(fakeTransNumber)
|
||||
linkEP2.Inject(fakeNetNumber, req.ToVectorisedView())
|
||||
ep2.Inject(fakeNetNumber, req.ToVectorisedView())
|
||||
|
||||
aep, _, err := ep.Accept()
|
||||
if err != nil || aep == nil {
|
||||
@@ -559,7 +559,7 @@ func TestTransportForwarding(t *testing.T) {
|
||||
|
||||
var p channel.PacketInfo
|
||||
select {
|
||||
case p = <-linkEP2.C:
|
||||
case p = <-ep2.C:
|
||||
default:
|
||||
t.Fatal("Response packet not forwarded")
|
||||
}
|
||||
|
||||
@@ -600,9 +600,6 @@ func (r Route) String() string {
|
||||
return out.String()
|
||||
}
|
||||
|
||||
// LinkEndpointID represents a data link layer endpoint.
|
||||
type LinkEndpointID uint64
|
||||
|
||||
// TransportProtocolNumber is the number of a transport protocol.
|
||||
type TransportProtocolNumber uint32
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user