net/netcheck: don't send flood of PCP unmap requests to router

Updates #810
This commit is contained in:
Brad Fitzpatrick 2020-12-06 19:46:11 -08:00
parent 9503be083d
commit 05e5233e07

View File

@ -710,6 +710,7 @@ func (rs *reportState) probePortMapServices() {
uc.WriteTo(pcpPacket(myIP, tempPort, false), port5351) uc.WriteTo(pcpPacket(myIP, tempPort, false), port5351)
res := make([]byte, 1500) res := make([]byte, 1500)
sentPCPDelete := false
for { for {
n, addr, err := uc.ReadFrom(res) n, addr, err := uc.ReadFrom(res)
if err != nil { if err != nil {
@ -727,11 +728,14 @@ func (rs *reportState) probePortMapServices() {
if n == 60 && res[0] == 0x02 { // right length and version 2 if n == 60 && res[0] == 0x02 { // right length and version 2
rs.setOptBool(&rs.report.PCP, true) rs.setOptBool(&rs.report.PCP, true)
// And now delete the mapping. if !sentPCPDelete {
// (PCP is the only protocol of the three that requires sentPCPDelete = true
// we cause a side effect to detect whether it's present, // And now delete the mapping.
// so we need to redo that side effect now.) // (PCP is the only protocol of the three that requires
uc.WriteTo(pcpPacket(myIP, tempPort, true), port5351) // we cause a side effect to detect whether it's present,
// so we need to redo that side effect now.)
uc.WriteTo(pcpPacket(myIP, tempPort, true), port5351)
}
} }
} }
} }