mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Remove addPermanentAddressLocked
It was possible to use this function incorrectly, and its separation wasn't buying us anything. PiperOrigin-RevId: 290311100
This commit is contained in:
committed by
gVisor bot
parent
80d0f93044
commit
23fa847910
+10
-11
@@ -432,13 +432,12 @@ func (ndp *ndpState) startDuplicateAddressDetection(addr tcpip.Address, ref *ref
|
||||
// Should not attempt to perform DAD on an address that is currently in
|
||||
// the DAD process.
|
||||
if _, ok := ndp.dad[addr]; ok {
|
||||
// Should never happen because we should only ever call this
|
||||
// function for newly created addresses. If we attemped to
|
||||
// "add" an address that already existed, we would returned an
|
||||
// error since we attempted to add a duplicate address, or its
|
||||
// reference count would have been increased without doing the
|
||||
// work that would have been done for an address that was brand
|
||||
// new. See NIC.addPermanentAddressLocked.
|
||||
// Should never happen because we should only ever call this function for
|
||||
// newly created addresses. If we attemped to "add" an address that already
|
||||
// existed, we would get an error since we attempted to add a duplicate
|
||||
// address, or its reference count would have been increased without doing
|
||||
// the work that would have been done for an address that was brand new.
|
||||
// See NIC.addAddressLocked.
|
||||
panic(fmt.Sprintf("ndpdad: already performing DAD for addr %s on NIC(%d)", addr, ndp.nic.ID()))
|
||||
}
|
||||
|
||||
@@ -994,7 +993,7 @@ func (ndp *ndpState) newAutoGenAddress(prefix tcpip.Subnet, pl, vl time.Duration
|
||||
// If the preferred lifetime is zero, then the address should be considered
|
||||
// deprecated.
|
||||
deprecated := pl == 0
|
||||
ref, err := ndp.nic.addPermanentAddressLocked(protocolAddr, FirstPrimaryEndpoint, slaac, deprecated)
|
||||
ref, err := ndp.nic.addAddressLocked(protocolAddr, FirstPrimaryEndpoint, permanent, slaac, deprecated)
|
||||
if err != nil {
|
||||
log.Fatalf("ndp: error when adding address %s: %s", protocolAddr, err)
|
||||
}
|
||||
@@ -1164,7 +1163,7 @@ func (ndp *ndpState) cleanupAutoGenAddrResourcesAndNotify(addr tcpip.Address) bo
|
||||
//
|
||||
// The NIC that ndp belongs to MUST be locked.
|
||||
func (ndp *ndpState) cleanupHostOnlyState() {
|
||||
for addr, _ := range ndp.autoGenAddresses {
|
||||
for addr := range ndp.autoGenAddresses {
|
||||
ndp.invalidateAutoGenAddress(addr)
|
||||
}
|
||||
|
||||
@@ -1172,7 +1171,7 @@ func (ndp *ndpState) cleanupHostOnlyState() {
|
||||
log.Fatalf("ndp: still have auto-generated addresses after cleaning up, found = %d", got)
|
||||
}
|
||||
|
||||
for prefix, _ := range ndp.onLinkPrefixes {
|
||||
for prefix := range ndp.onLinkPrefixes {
|
||||
ndp.invalidateOnLinkPrefix(prefix)
|
||||
}
|
||||
|
||||
@@ -1180,7 +1179,7 @@ func (ndp *ndpState) cleanupHostOnlyState() {
|
||||
log.Fatalf("ndp: still have discovered on-link prefixes after cleaning up, found = %d", got)
|
||||
}
|
||||
|
||||
for router, _ := range ndp.defaultRouters {
|
||||
for router := range ndp.defaultRouters {
|
||||
ndp.invalidateDefaultRouter(router)
|
||||
}
|
||||
|
||||
|
||||
+18
-28
@@ -196,13 +196,13 @@ func (n *NIC) enable() *tcpip.Error {
|
||||
addr = header.LinkLocalAddr(l2addr)
|
||||
}
|
||||
|
||||
if _, err := n.addPermanentAddressLocked(tcpip.ProtocolAddress{
|
||||
if _, err := n.addAddressLocked(tcpip.ProtocolAddress{
|
||||
Protocol: header.IPv6ProtocolNumber,
|
||||
AddressWithPrefix: tcpip.AddressWithPrefix{
|
||||
Address: addr,
|
||||
PrefixLen: header.IPv6LinkLocalPrefix.PrefixLen,
|
||||
},
|
||||
}, CanBePrimaryEndpoint, static, false /* deprecated */); err != nil {
|
||||
}, CanBePrimaryEndpoint, permanent, static, false /* deprecated */); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -533,14 +533,21 @@ func (n *NIC) getRefOrCreateTemp(protocol tcpip.NetworkProtocolNumber, address t
|
||||
return ref
|
||||
}
|
||||
|
||||
// addPermanentAddressLocked adds a permanent address to n.
|
||||
// addAddressLocked adds a new protocolAddress to n.
|
||||
//
|
||||
// If n already has the address in a non-permanent state,
|
||||
// addPermanentAddressLocked will promote it to permanent and update the
|
||||
// endpoint with the properties provided.
|
||||
func (n *NIC) addPermanentAddressLocked(protocolAddress tcpip.ProtocolAddress, peb PrimaryEndpointBehavior, configType networkEndpointConfigType, deprecated bool) (*referencedNetworkEndpoint, *tcpip.Error) {
|
||||
id := NetworkEndpointID{protocolAddress.AddressWithPrefix.Address}
|
||||
// If n already has the address in a non-permanent state, and the kind given is
|
||||
// permanent, that address will be promoted in place and its properties set to
|
||||
// the properties provided. Otherwise, it returns tcpip.ErrDuplicateAddress.
|
||||
func (n *NIC) addAddressLocked(protocolAddress tcpip.ProtocolAddress, peb PrimaryEndpointBehavior, kind networkEndpointKind, configType networkEndpointConfigType, deprecated bool) (*referencedNetworkEndpoint, *tcpip.Error) {
|
||||
// TODO(b/141022673): Validate IP addresses before adding them.
|
||||
|
||||
// Sanity check.
|
||||
id := NetworkEndpointID{LocalAddress: protocolAddress.AddressWithPrefix.Address}
|
||||
if ref, ok := n.endpoints[id]; ok {
|
||||
// Endpoint already exists.
|
||||
if kind != permanent {
|
||||
return nil, tcpip.ErrDuplicateAddress
|
||||
}
|
||||
switch ref.getKind() {
|
||||
case permanentTentative, permanent:
|
||||
// The NIC already have a permanent endpoint with that address.
|
||||
@@ -585,23 +592,6 @@ func (n *NIC) addPermanentAddressLocked(protocolAddress tcpip.ProtocolAddress, p
|
||||
}
|
||||
}
|
||||
|
||||
return n.addAddressLocked(protocolAddress, peb, permanent, configType, deprecated)
|
||||
}
|
||||
|
||||
// addAddressLocked adds a new protocolAddress to n.
|
||||
//
|
||||
// If the address is already known by n (irrespective of the state it is in),
|
||||
// addAddressLocked does nothing and returns tcpip.ErrDuplicateAddress.
|
||||
func (n *NIC) addAddressLocked(protocolAddress tcpip.ProtocolAddress, peb PrimaryEndpointBehavior, kind networkEndpointKind, configType networkEndpointConfigType, deprecated bool) (*referencedNetworkEndpoint, *tcpip.Error) {
|
||||
// TODO(b/141022673): Validate IP address before adding them.
|
||||
|
||||
// Sanity check.
|
||||
id := NetworkEndpointID{protocolAddress.AddressWithPrefix.Address}
|
||||
if _, ok := n.endpoints[id]; ok {
|
||||
// Endpoint already exists.
|
||||
return nil, tcpip.ErrDuplicateAddress
|
||||
}
|
||||
|
||||
netProto, ok := n.stack.networkProtocols[protocolAddress.Protocol]
|
||||
if !ok {
|
||||
return nil, tcpip.ErrUnknownProtocol
|
||||
@@ -666,7 +656,7 @@ func (n *NIC) addAddressLocked(protocolAddress tcpip.ProtocolAddress, peb Primar
|
||||
func (n *NIC) AddAddress(protocolAddress tcpip.ProtocolAddress, peb PrimaryEndpointBehavior) *tcpip.Error {
|
||||
// Add the endpoint.
|
||||
n.mu.Lock()
|
||||
_, err := n.addPermanentAddressLocked(protocolAddress, peb, static, false /* deprecated */)
|
||||
_, err := n.addAddressLocked(protocolAddress, peb, permanent, static, false /* deprecated */)
|
||||
n.mu.Unlock()
|
||||
|
||||
return err
|
||||
@@ -942,13 +932,13 @@ func (n *NIC) joinGroupLocked(protocol tcpip.NetworkProtocolNumber, addr tcpip.A
|
||||
if !ok {
|
||||
return tcpip.ErrUnknownProtocol
|
||||
}
|
||||
if _, err := n.addPermanentAddressLocked(tcpip.ProtocolAddress{
|
||||
if _, err := n.addAddressLocked(tcpip.ProtocolAddress{
|
||||
Protocol: protocol,
|
||||
AddressWithPrefix: tcpip.AddressWithPrefix{
|
||||
Address: addr,
|
||||
PrefixLen: netProto.DefaultPrefixLen(),
|
||||
},
|
||||
}, NeverPrimaryEndpoint, static, false /* deprecated */); err != nil {
|
||||
}, NeverPrimaryEndpoint, permanent, static, false /* deprecated */); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user