diff options
author | gVisor bot <gvisor-bot@google.com> | 2020-04-30 17:26:20 +0000 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2020-04-30 17:26:20 +0000 |
commit | 15ebc307fb0bd1379cbdcbf8e008aed21f3d32ad (patch) | |
tree | 28b4681c56b92c92d928be9b94bc4a3124a0014d | |
parent | fcb8e5d481e5eaafa9796fbb2d22bd996dbbb38b (diff) | |
parent | 043b7d83bd76c616fa32b815528eec77f2aad5ff (diff) |
Merge release-20200413.0-28-g043b7d8 (automated)
-rw-r--r-- | pkg/tcpip/stack/nic.go | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/pkg/tcpip/stack/nic.go b/pkg/tcpip/stack/nic.go index 25188b4fb..440970a21 100644 --- a/pkg/tcpip/stack/nic.go +++ b/pkg/tcpip/stack/nic.go @@ -452,7 +452,7 @@ type ipv6AddrCandidate struct { // primaryIPv6Endpoint returns an IPv6 endpoint following Source Address // Selection (RFC 6724 section 5). // -// Note, only rules 1-3 are followed. +// Note, only rules 1-3 and 7 are followed. // // remoteAddr must be a valid IPv6 address. func (n *NIC) primaryIPv6Endpoint(remoteAddr tcpip.Address) *referencedNetworkEndpoint { @@ -523,6 +523,11 @@ func (n *NIC) primaryIPv6Endpoint(remoteAddr tcpip.Address) *referencedNetworkEn return sbDep } + // Prefer temporary addresses as per RFC 6724 section 5 rule 7. + if saTemp, sbTemp := sa.ref.configType == slaacTemp, sb.ref.configType == slaacTemp; saTemp != sbTemp { + return saTemp + } + // sa and sb are equal, return the endpoint that is closest to the front of // the primary endpoint list. return i < j |