Merge release-20190806.1-379-g0c424ea (automated)
This commit is contained in:
commit
57af32e218
|
@ -42,7 +42,7 @@ const (
|
|||
|
||||
// endpoint implements stack.NetworkEndpoint.
|
||||
type endpoint struct {
|
||||
nicid tcpip.NICID
|
||||
nicID tcpip.NICID
|
||||
linkEP stack.LinkEndpoint
|
||||
linkAddrCache stack.LinkAddressCache
|
||||
}
|
||||
|
@ -58,7 +58,7 @@ func (e *endpoint) MTU() uint32 {
|
|||
}
|
||||
|
||||
func (e *endpoint) NICID() tcpip.NICID {
|
||||
return e.nicid
|
||||
return e.nicID
|
||||
}
|
||||
|
||||
func (e *endpoint) Capabilities() stack.LinkEndpointCapabilities {
|
||||
|
@ -102,7 +102,7 @@ func (e *endpoint) HandlePacket(r *stack.Route, pkt tcpip.PacketBuffer) {
|
|||
switch h.Op() {
|
||||
case header.ARPRequest:
|
||||
localAddr := tcpip.Address(h.ProtocolAddressTarget())
|
||||
if e.linkAddrCache.CheckLocalAddress(e.nicid, header.IPv4ProtocolNumber, localAddr) == 0 {
|
||||
if e.linkAddrCache.CheckLocalAddress(e.nicID, header.IPv4ProtocolNumber, localAddr) == 0 {
|
||||
return // we have no useful answer, ignore the request
|
||||
}
|
||||
hdr := buffer.NewPrependable(int(e.linkEP.MaxHeaderLength()) + header.ARPSize)
|
||||
|
@ -118,7 +118,7 @@ func (e *endpoint) HandlePacket(r *stack.Route, pkt tcpip.PacketBuffer) {
|
|||
case header.ARPReply:
|
||||
addr := tcpip.Address(h.ProtocolAddressSender())
|
||||
linkAddr := tcpip.LinkAddress(h.HardwareAddressSender())
|
||||
e.linkAddrCache.AddLinkAddress(e.nicid, addr, linkAddr)
|
||||
e.linkAddrCache.AddLinkAddress(e.nicID, addr, linkAddr)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -135,12 +135,12 @@ func (*protocol) ParseAddresses(v buffer.View) (src, dst tcpip.Address) {
|
|||
return tcpip.Address(h.ProtocolAddressSender()), ProtocolAddress
|
||||
}
|
||||
|
||||
func (p *protocol) NewEndpoint(nicid tcpip.NICID, addrWithPrefix tcpip.AddressWithPrefix, linkAddrCache stack.LinkAddressCache, dispatcher stack.TransportDispatcher, sender stack.LinkEndpoint) (stack.NetworkEndpoint, *tcpip.Error) {
|
||||
func (p *protocol) NewEndpoint(nicID tcpip.NICID, addrWithPrefix tcpip.AddressWithPrefix, linkAddrCache stack.LinkAddressCache, dispatcher stack.TransportDispatcher, sender stack.LinkEndpoint) (stack.NetworkEndpoint, *tcpip.Error) {
|
||||
if addrWithPrefix.Address != ProtocolAddress {
|
||||
return nil, tcpip.ErrBadLocalAddress
|
||||
}
|
||||
return &endpoint{
|
||||
nicid: nicid,
|
||||
nicID: nicID,
|
||||
linkEP: sender,
|
||||
linkAddrCache: linkAddrCache,
|
||||
}, nil
|
||||
|
|
|
@ -47,7 +47,7 @@ const (
|
|||
)
|
||||
|
||||
type endpoint struct {
|
||||
nicid tcpip.NICID
|
||||
nicID tcpip.NICID
|
||||
id stack.NetworkEndpointID
|
||||
prefixLen int
|
||||
linkEP stack.LinkEndpoint
|
||||
|
@ -57,9 +57,9 @@ type endpoint struct {
|
|||
}
|
||||
|
||||
// NewEndpoint creates a new ipv4 endpoint.
|
||||
func (p *protocol) NewEndpoint(nicid tcpip.NICID, addrWithPrefix tcpip.AddressWithPrefix, linkAddrCache stack.LinkAddressCache, dispatcher stack.TransportDispatcher, linkEP stack.LinkEndpoint) (stack.NetworkEndpoint, *tcpip.Error) {
|
||||
func (p *protocol) NewEndpoint(nicID tcpip.NICID, addrWithPrefix tcpip.AddressWithPrefix, linkAddrCache stack.LinkAddressCache, dispatcher stack.TransportDispatcher, linkEP stack.LinkEndpoint) (stack.NetworkEndpoint, *tcpip.Error) {
|
||||
e := &endpoint{
|
||||
nicid: nicid,
|
||||
nicID: nicID,
|
||||
id: stack.NetworkEndpointID{LocalAddress: addrWithPrefix.Address},
|
||||
prefixLen: addrWithPrefix.PrefixLen,
|
||||
linkEP: linkEP,
|
||||
|
@ -89,7 +89,7 @@ func (e *endpoint) Capabilities() stack.LinkEndpointCapabilities {
|
|||
|
||||
// NICID returns the ID of the NIC this endpoint belongs to.
|
||||
func (e *endpoint) NICID() tcpip.NICID {
|
||||
return e.nicid
|
||||
return e.nicID
|
||||
}
|
||||
|
||||
// ID returns the ipv4 endpoint ID.
|
||||
|
|
|
@ -180,7 +180,7 @@ func (e *endpoint) handleICMP(r *stack.Route, netHeader buffer.View, pkt tcpip.P
|
|||
// rxNICID so the packet is processed as defined in RFC 4861,
|
||||
// as per RFC 4862 section 5.4.3.
|
||||
|
||||
if e.linkAddrCache.CheckLocalAddress(e.nicid, ProtocolNumber, targetAddr) == 0 {
|
||||
if e.linkAddrCache.CheckLocalAddress(e.nicID, ProtocolNumber, targetAddr) == 0 {
|
||||
// We don't have a useful answer; the best we can do is ignore the request.
|
||||
return
|
||||
}
|
||||
|
@ -218,7 +218,7 @@ func (e *endpoint) handleICMP(r *stack.Route, netHeader buffer.View, pkt tcpip.P
|
|||
//
|
||||
// Furthermore, the entirety of NDP handling here seems to be
|
||||
// contradicted by RFC 4861.
|
||||
e.linkAddrCache.AddLinkAddress(e.nicid, r.RemoteAddress, r.RemoteLinkAddress)
|
||||
e.linkAddrCache.AddLinkAddress(e.nicID, r.RemoteAddress, r.RemoteLinkAddress)
|
||||
|
||||
// RFC 4861 Neighbor Discovery for IP version 6 (IPv6)
|
||||
//
|
||||
|
@ -274,9 +274,9 @@ func (e *endpoint) handleICMP(r *stack.Route, netHeader buffer.View, pkt tcpip.P
|
|||
// inform the netstack integration that a duplicate address was
|
||||
// detected outside of DAD.
|
||||
|
||||
e.linkAddrCache.AddLinkAddress(e.nicid, targetAddr, r.RemoteLinkAddress)
|
||||
e.linkAddrCache.AddLinkAddress(e.nicID, targetAddr, r.RemoteLinkAddress)
|
||||
if targetAddr != r.RemoteAddress {
|
||||
e.linkAddrCache.AddLinkAddress(e.nicid, r.RemoteAddress, r.RemoteLinkAddress)
|
||||
e.linkAddrCache.AddLinkAddress(e.nicID, r.RemoteAddress, r.RemoteLinkAddress)
|
||||
}
|
||||
|
||||
case header.ICMPv6EchoRequest:
|
||||
|
|
|
@ -43,7 +43,7 @@ const (
|
|||
)
|
||||
|
||||
type endpoint struct {
|
||||
nicid tcpip.NICID
|
||||
nicID tcpip.NICID
|
||||
id stack.NetworkEndpointID
|
||||
prefixLen int
|
||||
linkEP stack.LinkEndpoint
|
||||
|
@ -65,7 +65,7 @@ func (e *endpoint) MTU() uint32 {
|
|||
|
||||
// NICID returns the ID of the NIC this endpoint belongs to.
|
||||
func (e *endpoint) NICID() tcpip.NICID {
|
||||
return e.nicid
|
||||
return e.nicID
|
||||
}
|
||||
|
||||
// ID returns the ipv6 endpoint ID.
|
||||
|
@ -218,9 +218,9 @@ func (*protocol) ParseAddresses(v buffer.View) (src, dst tcpip.Address) {
|
|||
}
|
||||
|
||||
// NewEndpoint creates a new ipv6 endpoint.
|
||||
func (p *protocol) NewEndpoint(nicid tcpip.NICID, addrWithPrefix tcpip.AddressWithPrefix, linkAddrCache stack.LinkAddressCache, dispatcher stack.TransportDispatcher, linkEP stack.LinkEndpoint) (stack.NetworkEndpoint, *tcpip.Error) {
|
||||
func (p *protocol) NewEndpoint(nicID tcpip.NICID, addrWithPrefix tcpip.AddressWithPrefix, linkAddrCache stack.LinkAddressCache, dispatcher stack.TransportDispatcher, linkEP stack.LinkEndpoint) (stack.NetworkEndpoint, *tcpip.Error) {
|
||||
return &endpoint{
|
||||
nicid: nicid,
|
||||
nicID: nicID,
|
||||
id: stack.NetworkEndpointID{LocalAddress: addrWithPrefix.Address},
|
||||
prefixLen: addrWithPrefix.PrefixLen,
|
||||
linkEP: linkEP,
|
||||
|
|
|
@ -78,7 +78,7 @@ const (
|
|||
// receive and handle NDP related events.
|
||||
type NDPDispatcher interface {
|
||||
// OnDuplicateAddressDetectionStatus will be called when the DAD process
|
||||
// for an address (addr) on a NIC (with ID nicid) completes. resolved
|
||||
// for an address (addr) on a NIC (with ID nicID) completes. resolved
|
||||
// will be set to true if DAD completed successfully (no duplicate addr
|
||||
// detected); false otherwise (addr was detected to be a duplicate on
|
||||
// the link the NIC is a part of, or it was stopped for some other
|
||||
|
@ -87,7 +87,7 @@ type NDPDispatcher interface {
|
|||
//
|
||||
// This function is permitted to block indefinitely without interfering
|
||||
// with the stack's operation.
|
||||
OnDuplicateAddressDetectionStatus(nicid tcpip.NICID, addr tcpip.Address, resolved bool, err *tcpip.Error)
|
||||
OnDuplicateAddressDetectionStatus(nicID tcpip.NICID, addr tcpip.Address, resolved bool, err *tcpip.Error)
|
||||
|
||||
// OnDefaultRouterDiscovered will be called when a new default router is
|
||||
// discovered. Implementations must return true along with a new valid
|
||||
|
@ -97,7 +97,7 @@ type NDPDispatcher interface {
|
|||
//
|
||||
// This function is not permitted to block indefinitely. This function
|
||||
// is also not permitted to call into the stack.
|
||||
OnDefaultRouterDiscovered(nicid tcpip.NICID, addr tcpip.Address) (bool, []tcpip.Route)
|
||||
OnDefaultRouterDiscovered(nicID tcpip.NICID, addr tcpip.Address) (bool, []tcpip.Route)
|
||||
|
||||
// OnDefaultRouterInvalidated will be called when a discovered default
|
||||
// router is invalidated. Implementers must return a new valid route
|
||||
|
@ -105,7 +105,7 @@ type NDPDispatcher interface {
|
|||
//
|
||||
// This function is not permitted to block indefinitely. This function
|
||||
// is also not permitted to call into the stack.
|
||||
OnDefaultRouterInvalidated(nicid tcpip.NICID, addr tcpip.Address) []tcpip.Route
|
||||
OnDefaultRouterInvalidated(nicID tcpip.NICID, addr tcpip.Address) []tcpip.Route
|
||||
}
|
||||
|
||||
// NDPConfigurations is the NDP configurations for the netstack.
|
||||
|
|
|
@ -117,7 +117,7 @@ type PacketEndpoint interface {
|
|||
// should construct its own ethernet header for applications.
|
||||
//
|
||||
// HandlePacket takes ownership of pkt.
|
||||
HandlePacket(nicid tcpip.NICID, addr tcpip.LinkAddress, netProto tcpip.NetworkProtocolNumber, pkt tcpip.PacketBuffer)
|
||||
HandlePacket(nicID tcpip.NICID, addr tcpip.LinkAddress, netProto tcpip.NetworkProtocolNumber, pkt tcpip.PacketBuffer)
|
||||
}
|
||||
|
||||
// TransportProtocol is the interface that needs to be implemented by transport
|
||||
|
@ -281,7 +281,7 @@ type NetworkProtocol interface {
|
|||
ParseAddresses(v buffer.View) (src, dst tcpip.Address)
|
||||
|
||||
// NewEndpoint creates a new endpoint of this protocol.
|
||||
NewEndpoint(nicid tcpip.NICID, addrWithPrefix tcpip.AddressWithPrefix, linkAddrCache LinkAddressCache, dispatcher TransportDispatcher, sender LinkEndpoint) (NetworkEndpoint, *tcpip.Error)
|
||||
NewEndpoint(nicID tcpip.NICID, addrWithPrefix tcpip.AddressWithPrefix, linkAddrCache LinkAddressCache, dispatcher TransportDispatcher, sender LinkEndpoint) (NetworkEndpoint, *tcpip.Error)
|
||||
|
||||
// SetOption allows enabling/disabling protocol specific features.
|
||||
// SetOption returns an error if the option is not supported or the
|
||||
|
@ -440,10 +440,10 @@ type LinkAddressResolver interface {
|
|||
type LinkAddressCache interface {
|
||||
// CheckLocalAddress determines if the given local address exists, and if it
|
||||
// does not exist.
|
||||
CheckLocalAddress(nicid tcpip.NICID, protocol tcpip.NetworkProtocolNumber, addr tcpip.Address) tcpip.NICID
|
||||
CheckLocalAddress(nicID tcpip.NICID, protocol tcpip.NetworkProtocolNumber, addr tcpip.Address) tcpip.NICID
|
||||
|
||||
// AddLinkAddress adds a link address to the cache.
|
||||
AddLinkAddress(nicid tcpip.NICID, addr tcpip.Address, linkAddr tcpip.LinkAddress)
|
||||
AddLinkAddress(nicID tcpip.NICID, addr tcpip.Address, linkAddr tcpip.LinkAddress)
|
||||
|
||||
// GetLinkAddress looks up the cache to translate address to link address (e.g. IP -> MAC).
|
||||
// If the LinkEndpoint requests address resolution and there is a LinkAddressResolver
|
||||
|
@ -454,10 +454,10 @@ type LinkAddressCache interface {
|
|||
// If address resolution is required, ErrNoLinkAddress and a notification channel is
|
||||
// returned for the top level caller to block. Channel is closed once address resolution
|
||||
// is complete (success or not).
|
||||
GetLinkAddress(nicid tcpip.NICID, addr, localAddr tcpip.Address, protocol tcpip.NetworkProtocolNumber, w *sleep.Waker) (tcpip.LinkAddress, <-chan struct{}, *tcpip.Error)
|
||||
GetLinkAddress(nicID tcpip.NICID, addr, localAddr tcpip.Address, protocol tcpip.NetworkProtocolNumber, w *sleep.Waker) (tcpip.LinkAddress, <-chan struct{}, *tcpip.Error)
|
||||
|
||||
// RemoveWaker removes a waker that has been added in GetLinkAddress().
|
||||
RemoveWaker(nicid tcpip.NICID, addr tcpip.Address, waker *sleep.Waker)
|
||||
RemoveWaker(nicID tcpip.NICID, addr tcpip.Address, waker *sleep.Waker)
|
||||
}
|
||||
|
||||
// RawFactory produces endpoints for writing various types of raw packets.
|
||||
|
|
|
@ -1055,13 +1055,13 @@ func (s *Stack) CheckNetworkProtocol(protocol tcpip.NetworkProtocolNumber) bool
|
|||
// CheckLocalAddress determines if the given local address exists, and if it
|
||||
// does, returns the id of the NIC it's bound to. Returns 0 if the address
|
||||
// does not exist.
|
||||
func (s *Stack) CheckLocalAddress(nicid tcpip.NICID, protocol tcpip.NetworkProtocolNumber, addr tcpip.Address) tcpip.NICID {
|
||||
func (s *Stack) CheckLocalAddress(nicID tcpip.NICID, protocol tcpip.NetworkProtocolNumber, addr tcpip.Address) tcpip.NICID {
|
||||
s.mu.RLock()
|
||||
defer s.mu.RUnlock()
|
||||
|
||||
// If a NIC is specified, we try to find the address there only.
|
||||
if nicid != 0 {
|
||||
nic := s.nics[nicid]
|
||||
if nicID != 0 {
|
||||
nic := s.nics[nicID]
|
||||
if nic == nil {
|
||||
return 0
|
||||
}
|
||||
|
@ -1120,35 +1120,35 @@ func (s *Stack) SetSpoofing(nicID tcpip.NICID, enable bool) *tcpip.Error {
|
|||
}
|
||||
|
||||
// AddLinkAddress adds a link address to the stack link cache.
|
||||
func (s *Stack) AddLinkAddress(nicid tcpip.NICID, addr tcpip.Address, linkAddr tcpip.LinkAddress) {
|
||||
fullAddr := tcpip.FullAddress{NIC: nicid, Addr: addr}
|
||||
func (s *Stack) AddLinkAddress(nicID tcpip.NICID, addr tcpip.Address, linkAddr tcpip.LinkAddress) {
|
||||
fullAddr := tcpip.FullAddress{NIC: nicID, Addr: addr}
|
||||
s.linkAddrCache.add(fullAddr, linkAddr)
|
||||
// TODO: provide a way for a transport endpoint to receive a signal
|
||||
// that AddLinkAddress for a particular address has been called.
|
||||
}
|
||||
|
||||
// GetLinkAddress implements LinkAddressCache.GetLinkAddress.
|
||||
func (s *Stack) GetLinkAddress(nicid tcpip.NICID, addr, localAddr tcpip.Address, protocol tcpip.NetworkProtocolNumber, waker *sleep.Waker) (tcpip.LinkAddress, <-chan struct{}, *tcpip.Error) {
|
||||
func (s *Stack) GetLinkAddress(nicID tcpip.NICID, addr, localAddr tcpip.Address, protocol tcpip.NetworkProtocolNumber, waker *sleep.Waker) (tcpip.LinkAddress, <-chan struct{}, *tcpip.Error) {
|
||||
s.mu.RLock()
|
||||
nic := s.nics[nicid]
|
||||
nic := s.nics[nicID]
|
||||
if nic == nil {
|
||||
s.mu.RUnlock()
|
||||
return "", nil, tcpip.ErrUnknownNICID
|
||||
}
|
||||
s.mu.RUnlock()
|
||||
|
||||
fullAddr := tcpip.FullAddress{NIC: nicid, Addr: addr}
|
||||
fullAddr := tcpip.FullAddress{NIC: nicID, Addr: addr}
|
||||
linkRes := s.linkAddrResolvers[protocol]
|
||||
return s.linkAddrCache.get(fullAddr, linkRes, localAddr, nic.linkEP, waker)
|
||||
}
|
||||
|
||||
// RemoveWaker implements LinkAddressCache.RemoveWaker.
|
||||
func (s *Stack) RemoveWaker(nicid tcpip.NICID, addr tcpip.Address, waker *sleep.Waker) {
|
||||
func (s *Stack) RemoveWaker(nicID tcpip.NICID, addr tcpip.Address, waker *sleep.Waker) {
|
||||
s.mu.RLock()
|
||||
defer s.mu.RUnlock()
|
||||
|
||||
if nic := s.nics[nicid]; nic == nil {
|
||||
fullAddr := tcpip.FullAddress{NIC: nicid, Addr: addr}
|
||||
if nic := s.nics[nicID]; nic == nil {
|
||||
fullAddr := tcpip.FullAddress{NIC: nicID, Addr: addr}
|
||||
s.linkAddrCache.removeWaker(fullAddr, waker)
|
||||
}
|
||||
}
|
||||
|
@ -1344,9 +1344,9 @@ func (s *Stack) unregisterPacketEndpointLocked(nicID tcpip.NICID, netProto tcpip
|
|||
|
||||
// WritePacket writes data directly to the specified NIC. It adds an ethernet
|
||||
// header based on the arguments.
|
||||
func (s *Stack) WritePacket(nicid tcpip.NICID, dst tcpip.LinkAddress, netProto tcpip.NetworkProtocolNumber, payload buffer.VectorisedView) *tcpip.Error {
|
||||
func (s *Stack) WritePacket(nicID tcpip.NICID, dst tcpip.LinkAddress, netProto tcpip.NetworkProtocolNumber, payload buffer.VectorisedView) *tcpip.Error {
|
||||
s.mu.Lock()
|
||||
nic, ok := s.nics[nicid]
|
||||
nic, ok := s.nics[nicID]
|
||||
s.mu.Unlock()
|
||||
if !ok {
|
||||
return tcpip.ErrUnknownDevice
|
||||
|
@ -1372,9 +1372,9 @@ func (s *Stack) WritePacket(nicid tcpip.NICID, dst tcpip.LinkAddress, netProto t
|
|||
|
||||
// WriteRawPacket writes data directly to the specified NIC without adding any
|
||||
// headers.
|
||||
func (s *Stack) WriteRawPacket(nicid tcpip.NICID, payload buffer.VectorisedView) *tcpip.Error {
|
||||
func (s *Stack) WriteRawPacket(nicID tcpip.NICID, payload buffer.VectorisedView) *tcpip.Error {
|
||||
s.mu.Lock()
|
||||
nic, ok := s.nics[nicid]
|
||||
nic, ok := s.nics[nicID]
|
||||
s.mu.Unlock()
|
||||
if !ok {
|
||||
return tcpip.ErrUnknownDevice
|
||||
|
|
|
@ -278,13 +278,13 @@ func (e *endpoint) write(p tcpip.Payloader, opts tcpip.WriteOptions) (int64, <-c
|
|||
} else {
|
||||
// Reject destination address if it goes through a different
|
||||
// NIC than the endpoint was bound to.
|
||||
nicid := to.NIC
|
||||
nicID := to.NIC
|
||||
if e.BindNICID != 0 {
|
||||
if nicid != 0 && nicid != e.BindNICID {
|
||||
if nicID != 0 && nicID != e.BindNICID {
|
||||
return 0, nil, tcpip.ErrNoRoute
|
||||
}
|
||||
|
||||
nicid = e.BindNICID
|
||||
nicID = e.BindNICID
|
||||
}
|
||||
|
||||
toCopy := *to
|
||||
|
@ -295,7 +295,7 @@ func (e *endpoint) write(p tcpip.Payloader, opts tcpip.WriteOptions) (int64, <-c
|
|||
}
|
||||
|
||||
// Find the enpoint.
|
||||
r, err := e.stack.FindRoute(nicid, e.BindAddr, to.Addr, netProto, false /* multicastLoop */)
|
||||
r, err := e.stack.FindRoute(nicID, e.BindAddr, to.Addr, netProto, false /* multicastLoop */)
|
||||
if err != nil {
|
||||
return 0, nil, err
|
||||
}
|
||||
|
@ -483,7 +483,7 @@ func (e *endpoint) Connect(addr tcpip.FullAddress) *tcpip.Error {
|
|||
e.mu.Lock()
|
||||
defer e.mu.Unlock()
|
||||
|
||||
nicid := addr.NIC
|
||||
nicID := addr.NIC
|
||||
localPort := uint16(0)
|
||||
switch e.state {
|
||||
case stateBound, stateConnected:
|
||||
|
@ -492,11 +492,11 @@ func (e *endpoint) Connect(addr tcpip.FullAddress) *tcpip.Error {
|
|||
break
|
||||
}
|
||||
|
||||
if nicid != 0 && nicid != e.BindNICID {
|
||||
if nicID != 0 && nicID != e.BindNICID {
|
||||
return tcpip.ErrInvalidEndpointState
|
||||
}
|
||||
|
||||
nicid = e.BindNICID
|
||||
nicID = e.BindNICID
|
||||
default:
|
||||
return tcpip.ErrInvalidEndpointState
|
||||
}
|
||||
|
@ -507,7 +507,7 @@ func (e *endpoint) Connect(addr tcpip.FullAddress) *tcpip.Error {
|
|||
}
|
||||
|
||||
// Find a route to the desired destination.
|
||||
r, err := e.stack.FindRoute(nicid, e.BindAddr, addr.Addr, netProto, false /* multicastLoop */)
|
||||
r, err := e.stack.FindRoute(nicID, e.BindAddr, addr.Addr, netProto, false /* multicastLoop */)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -524,14 +524,14 @@ func (e *endpoint) Connect(addr tcpip.FullAddress) *tcpip.Error {
|
|||
// v6only is set to false and this is an ipv6 endpoint.
|
||||
netProtos := []tcpip.NetworkProtocolNumber{netProto}
|
||||
|
||||
id, err = e.registerWithStack(nicid, netProtos, id)
|
||||
id, err = e.registerWithStack(nicID, netProtos, id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
e.ID = id
|
||||
e.route = r.Clone()
|
||||
e.RegisterNICID = nicid
|
||||
e.RegisterNICID = nicID
|
||||
|
||||
e.state = stateConnected
|
||||
|
||||
|
@ -582,18 +582,18 @@ func (*endpoint) Accept() (tcpip.Endpoint, *waiter.Queue, *tcpip.Error) {
|
|||
return nil, nil, tcpip.ErrNotSupported
|
||||
}
|
||||
|
||||
func (e *endpoint) registerWithStack(nicid tcpip.NICID, netProtos []tcpip.NetworkProtocolNumber, id stack.TransportEndpointID) (stack.TransportEndpointID, *tcpip.Error) {
|
||||
func (e *endpoint) registerWithStack(nicID tcpip.NICID, netProtos []tcpip.NetworkProtocolNumber, id stack.TransportEndpointID) (stack.TransportEndpointID, *tcpip.Error) {
|
||||
if id.LocalPort != 0 {
|
||||
// The endpoint already has a local port, just attempt to
|
||||
// register it.
|
||||
err := e.stack.RegisterTransportEndpoint(nicid, netProtos, e.TransProto, id, e, false /* reuse */, 0 /* bindToDevice */)
|
||||
err := e.stack.RegisterTransportEndpoint(nicID, netProtos, e.TransProto, id, e, false /* reuse */, 0 /* bindToDevice */)
|
||||
return id, err
|
||||
}
|
||||
|
||||
// We need to find a port for the endpoint.
|
||||
_, err := e.stack.PickEphemeralPort(func(p uint16) (bool, *tcpip.Error) {
|
||||
id.LocalPort = p
|
||||
err := e.stack.RegisterTransportEndpoint(nicid, netProtos, e.TransProto, id, e, false /* reuse */, 0 /* bindtodevice */)
|
||||
err := e.stack.RegisterTransportEndpoint(nicID, netProtos, e.TransProto, id, e, false /* reuse */, 0 /* bindtodevice */)
|
||||
switch err {
|
||||
case nil:
|
||||
return true, nil
|
||||
|
|
|
@ -266,7 +266,7 @@ func (ep *endpoint) GetSockOpt(opt interface{}) *tcpip.Error {
|
|||
}
|
||||
|
||||
// HandlePacket implements stack.PacketEndpoint.HandlePacket.
|
||||
func (ep *endpoint) HandlePacket(nicid tcpip.NICID, localAddr tcpip.LinkAddress, netProto tcpip.NetworkProtocolNumber, pkt tcpip.PacketBuffer) {
|
||||
func (ep *endpoint) HandlePacket(nicID tcpip.NICID, localAddr tcpip.LinkAddress, netProto tcpip.NetworkProtocolNumber, pkt tcpip.PacketBuffer) {
|
||||
ep.rcvMu.Lock()
|
||||
|
||||
// Drop the packet if our buffer is currently full.
|
||||
|
@ -293,13 +293,13 @@ func (ep *endpoint) HandlePacket(nicid tcpip.NICID, localAddr tcpip.LinkAddress,
|
|||
// Get info directly from the ethernet header.
|
||||
hdr := header.Ethernet(pkt.LinkHeader)
|
||||
packet.senderAddr = tcpip.FullAddress{
|
||||
NIC: nicid,
|
||||
NIC: nicID,
|
||||
Addr: tcpip.Address(hdr.SourceAddress()),
|
||||
}
|
||||
} else {
|
||||
// Guess the would-be ethernet header.
|
||||
packet.senderAddr = tcpip.FullAddress{
|
||||
NIC: nicid,
|
||||
NIC: nicID,
|
||||
Addr: tcpip.Address(localAddr),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1214,9 +1214,9 @@ func (e *endpoint) SetSockOpt(opt interface{}) *tcpip.Error {
|
|||
e.bindToDevice = 0
|
||||
return nil
|
||||
}
|
||||
for nicid, nic := range e.stack.NICInfo() {
|
||||
for nicID, nic := range e.stack.NICInfo() {
|
||||
if nic.Name == string(v) {
|
||||
e.bindToDevice = nicid
|
||||
e.bindToDevice = nicID
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
@ -1634,7 +1634,7 @@ func (e *endpoint) connect(addr tcpip.FullAddress, handshake bool, run bool) *tc
|
|||
return tcpip.ErrAlreadyConnected
|
||||
}
|
||||
|
||||
nicid := addr.NIC
|
||||
nicID := addr.NIC
|
||||
switch e.state {
|
||||
case StateBound:
|
||||
// If we're already bound to a NIC but the caller is requesting
|
||||
|
@ -1643,11 +1643,11 @@ func (e *endpoint) connect(addr tcpip.FullAddress, handshake bool, run bool) *tc
|
|||
break
|
||||
}
|
||||
|
||||
if nicid != 0 && nicid != e.boundNICID {
|
||||
if nicID != 0 && nicID != e.boundNICID {
|
||||
return tcpip.ErrNoRoute
|
||||
}
|
||||
|
||||
nicid = e.boundNICID
|
||||
nicID = e.boundNICID
|
||||
|
||||
case StateInitial:
|
||||
// Nothing to do. We'll eventually fill-in the gaps in the ID (if any)
|
||||
|
@ -1666,7 +1666,7 @@ func (e *endpoint) connect(addr tcpip.FullAddress, handshake bool, run bool) *tc
|
|||
}
|
||||
|
||||
// Find a route to the desired destination.
|
||||
r, err := e.stack.FindRoute(nicid, e.ID.LocalAddress, addr.Addr, netProto, false /* multicastLoop */)
|
||||
r, err := e.stack.FindRoute(nicID, e.ID.LocalAddress, addr.Addr, netProto, false /* multicastLoop */)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -1681,7 +1681,7 @@ func (e *endpoint) connect(addr tcpip.FullAddress, handshake bool, run bool) *tc
|
|||
|
||||
if e.ID.LocalPort != 0 {
|
||||
// The endpoint is bound to a port, attempt to register it.
|
||||
err := e.stack.RegisterTransportEndpoint(nicid, netProtos, ProtocolNumber, e.ID, e, e.reusePort, e.bindToDevice)
|
||||
err := e.stack.RegisterTransportEndpoint(nicID, netProtos, ProtocolNumber, e.ID, e, e.reusePort, e.bindToDevice)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -1716,7 +1716,7 @@ func (e *endpoint) connect(addr tcpip.FullAddress, handshake bool, run bool) *tc
|
|||
|
||||
id := e.ID
|
||||
id.LocalPort = p
|
||||
switch e.stack.RegisterTransportEndpoint(nicid, netProtos, ProtocolNumber, id, e, e.reusePort, e.bindToDevice) {
|
||||
switch e.stack.RegisterTransportEndpoint(nicID, netProtos, ProtocolNumber, id, e, e.reusePort, e.bindToDevice) {
|
||||
case nil:
|
||||
e.ID = id
|
||||
return true, nil
|
||||
|
@ -1741,7 +1741,7 @@ func (e *endpoint) connect(addr tcpip.FullAddress, handshake bool, run bool) *tc
|
|||
e.isRegistered = true
|
||||
e.state = StateConnecting
|
||||
e.route = r.Clone()
|
||||
e.boundNICID = nicid
|
||||
e.boundNICID = nicID
|
||||
e.effectiveNetProtos = netProtos
|
||||
e.connectingAddress = connectingAddr
|
||||
|
||||
|
|
|
@ -282,7 +282,7 @@ func (e *endpoint) prepareForWrite(to *tcpip.FullAddress) (retry bool, err *tcpi
|
|||
// connectRoute establishes a route to the specified interface or the
|
||||
// configured multicast interface if no interface is specified and the
|
||||
// specified address is a multicast address.
|
||||
func (e *endpoint) connectRoute(nicid tcpip.NICID, addr tcpip.FullAddress, netProto tcpip.NetworkProtocolNumber) (stack.Route, tcpip.NICID, *tcpip.Error) {
|
||||
func (e *endpoint) connectRoute(nicID tcpip.NICID, addr tcpip.FullAddress, netProto tcpip.NetworkProtocolNumber) (stack.Route, tcpip.NICID, *tcpip.Error) {
|
||||
localAddr := e.ID.LocalAddress
|
||||
if isBroadcastOrMulticast(localAddr) {
|
||||
// A packet can only originate from a unicast address (i.e., an interface).
|
||||
|
@ -290,20 +290,20 @@ func (e *endpoint) connectRoute(nicid tcpip.NICID, addr tcpip.FullAddress, netPr
|
|||
}
|
||||
|
||||
if header.IsV4MulticastAddress(addr.Addr) || header.IsV6MulticastAddress(addr.Addr) {
|
||||
if nicid == 0 {
|
||||
nicid = e.multicastNICID
|
||||
if nicID == 0 {
|
||||
nicID = e.multicastNICID
|
||||
}
|
||||
if localAddr == "" && nicid == 0 {
|
||||
if localAddr == "" && nicID == 0 {
|
||||
localAddr = e.multicastAddr
|
||||
}
|
||||
}
|
||||
|
||||
// Find a route to the desired destination.
|
||||
r, err := e.stack.FindRoute(nicid, localAddr, addr.Addr, netProto, e.multicastLoop)
|
||||
r, err := e.stack.FindRoute(nicID, localAddr, addr.Addr, netProto, e.multicastLoop)
|
||||
if err != nil {
|
||||
return stack.Route{}, 0, err
|
||||
}
|
||||
return r, nicid, nil
|
||||
return r, nicID, nil
|
||||
}
|
||||
|
||||
// Write writes data to the endpoint's peer. This method does not block
|
||||
|
@ -382,13 +382,13 @@ func (e *endpoint) write(p tcpip.Payloader, opts tcpip.WriteOptions) (int64, <-c
|
|||
} else {
|
||||
// Reject destination address if it goes through a different
|
||||
// NIC than the endpoint was bound to.
|
||||
nicid := to.NIC
|
||||
nicID := to.NIC
|
||||
if e.BindNICID != 0 {
|
||||
if nicid != 0 && nicid != e.BindNICID {
|
||||
if nicID != 0 && nicID != e.BindNICID {
|
||||
return 0, nil, tcpip.ErrNoRoute
|
||||
}
|
||||
|
||||
nicid = e.BindNICID
|
||||
nicID = e.BindNICID
|
||||
}
|
||||
|
||||
if to.Addr == header.IPv4Broadcast && !e.broadcast {
|
||||
|
@ -400,7 +400,7 @@ func (e *endpoint) write(p tcpip.Payloader, opts tcpip.WriteOptions) (int64, <-c
|
|||
return 0, nil, err
|
||||
}
|
||||
|
||||
r, _, err := e.connectRoute(nicid, *to, netProto)
|
||||
r, _, err := e.connectRoute(nicID, *to, netProto)
|
||||
if err != nil {
|
||||
return 0, nil, err
|
||||
}
|
||||
|
@ -622,9 +622,9 @@ func (e *endpoint) SetSockOpt(opt interface{}) *tcpip.Error {
|
|||
e.bindToDevice = 0
|
||||
return nil
|
||||
}
|
||||
for nicid, nic := range e.stack.NICInfo() {
|
||||
for nicID, nic := range e.stack.NICInfo() {
|
||||
if nic.Name == string(v) {
|
||||
e.bindToDevice = nicid
|
||||
e.bindToDevice = nicID
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
@ -907,7 +907,7 @@ func (e *endpoint) Connect(addr tcpip.FullAddress) *tcpip.Error {
|
|||
e.mu.Lock()
|
||||
defer e.mu.Unlock()
|
||||
|
||||
nicid := addr.NIC
|
||||
nicID := addr.NIC
|
||||
var localPort uint16
|
||||
switch e.state {
|
||||
case StateInitial:
|
||||
|
@ -917,16 +917,16 @@ func (e *endpoint) Connect(addr tcpip.FullAddress) *tcpip.Error {
|
|||
break
|
||||
}
|
||||
|
||||
if nicid != 0 && nicid != e.BindNICID {
|
||||
if nicID != 0 && nicID != e.BindNICID {
|
||||
return tcpip.ErrInvalidEndpointState
|
||||
}
|
||||
|
||||
nicid = e.BindNICID
|
||||
nicID = e.BindNICID
|
||||
default:
|
||||
return tcpip.ErrInvalidEndpointState
|
||||
}
|
||||
|
||||
r, nicid, err := e.connectRoute(nicid, addr, netProto)
|
||||
r, nicID, err := e.connectRoute(nicID, addr, netProto)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -954,7 +954,7 @@ func (e *endpoint) Connect(addr tcpip.FullAddress) *tcpip.Error {
|
|||
}
|
||||
}
|
||||
|
||||
id, err = e.registerWithStack(nicid, netProtos, id)
|
||||
id, err = e.registerWithStack(nicID, netProtos, id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -967,7 +967,7 @@ func (e *endpoint) Connect(addr tcpip.FullAddress) *tcpip.Error {
|
|||
e.ID = id
|
||||
e.route = r.Clone()
|
||||
e.dstPort = addr.Port
|
||||
e.RegisterNICID = nicid
|
||||
e.RegisterNICID = nicID
|
||||
e.effectiveNetProtos = netProtos
|
||||
|
||||
e.state = StateConnected
|
||||
|
@ -1022,7 +1022,7 @@ func (*endpoint) Accept() (tcpip.Endpoint, *waiter.Queue, *tcpip.Error) {
|
|||
return nil, nil, tcpip.ErrNotSupported
|
||||
}
|
||||
|
||||
func (e *endpoint) registerWithStack(nicid tcpip.NICID, netProtos []tcpip.NetworkProtocolNumber, id stack.TransportEndpointID) (stack.TransportEndpointID, *tcpip.Error) {
|
||||
func (e *endpoint) registerWithStack(nicID tcpip.NICID, netProtos []tcpip.NetworkProtocolNumber, id stack.TransportEndpointID) (stack.TransportEndpointID, *tcpip.Error) {
|
||||
if e.ID.LocalPort == 0 {
|
||||
port, err := e.stack.ReservePort(netProtos, ProtocolNumber, id.LocalAddress, id.LocalPort, e.reusePort, e.bindToDevice)
|
||||
if err != nil {
|
||||
|
@ -1031,7 +1031,7 @@ func (e *endpoint) registerWithStack(nicid tcpip.NICID, netProtos []tcpip.Networ
|
|||
id.LocalPort = port
|
||||
}
|
||||
|
||||
err := e.stack.RegisterTransportEndpoint(nicid, netProtos, ProtocolNumber, id, e, e.reusePort, e.bindToDevice)
|
||||
err := e.stack.RegisterTransportEndpoint(nicID, netProtos, ProtocolNumber, id, e, e.reusePort, e.bindToDevice)
|
||||
if err != nil {
|
||||
e.stack.ReleasePort(netProtos, ProtocolNumber, id.LocalAddress, id.LocalPort, e.bindToDevice)
|
||||
}
|
||||
|
@ -1061,11 +1061,11 @@ func (e *endpoint) bindLocked(addr tcpip.FullAddress) *tcpip.Error {
|
|||
}
|
||||
}
|
||||
|
||||
nicid := addr.NIC
|
||||
nicID := addr.NIC
|
||||
if len(addr.Addr) != 0 && !isBroadcastOrMulticast(addr.Addr) {
|
||||
// A local unicast address was specified, verify that it's valid.
|
||||
nicid = e.stack.CheckLocalAddress(addr.NIC, netProto, addr.Addr)
|
||||
if nicid == 0 {
|
||||
nicID = e.stack.CheckLocalAddress(addr.NIC, netProto, addr.Addr)
|
||||
if nicID == 0 {
|
||||
return tcpip.ErrBadLocalAddress
|
||||
}
|
||||
}
|
||||
|
@ -1074,13 +1074,13 @@ func (e *endpoint) bindLocked(addr tcpip.FullAddress) *tcpip.Error {
|
|||
LocalPort: addr.Port,
|
||||
LocalAddress: addr.Addr,
|
||||
}
|
||||
id, err = e.registerWithStack(nicid, netProtos, id)
|
||||
id, err = e.registerWithStack(nicID, netProtos, id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
e.ID = id
|
||||
e.RegisterNICID = nicid
|
||||
e.RegisterNICID = nicID
|
||||
e.effectiveNetProtos = netProtos
|
||||
|
||||
// Mark endpoint as bound.
|
||||
|
|
Loading…
Reference in New Issue