From 51ffdf87d412d5802c23ef85127803d3df33f96f Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Fri, 26 Aug 2016 18:45:28 +0200 Subject: [PATCH] nat: do not shortcircuit permanent mappings If we use same NAT agent and call for the same permanent mapping again we get the same mapping, no harm done. If router dies, we will remap again. Just pros, no cons. --- p2p/nat/nat.go | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/p2p/nat/nat.go b/p2p/nat/nat.go index 6324715..a7fc75b 100644 --- a/p2p/nat/nat.go +++ b/p2p/nat/nat.go @@ -163,6 +163,8 @@ type mapping struct { intaddr ma.Multiaddr proc goprocess.Process + comment string + cached ma.Multiaddr cacheTime time.Time cacheLk sync.Mutex @@ -198,18 +200,6 @@ func (m *mapping) setExternalPort(p int) { m.extport = p } -func (m *mapping) setPermanent(p bool) { - m.Lock() - defer m.Unlock() - m.permanent = p -} - -func (m *mapping) isPermanent() bool { - m.Lock() - defer m.Unlock() - return m.permanent -} - func (m *mapping) InternalAddr() ma.Multiaddr { m.Lock() defer m.Unlock() @@ -346,20 +336,17 @@ func (nat *NAT) NewMapping(maddr ma.Multiaddr) (Mapping, error) { func (nat *NAT) establishMapping(m *mapping) { oldport := m.ExternalPort() - if oldport != 0 && m.isPermanent() { - // mapping was already established and it is permanent - return - } log.Debugf("Attempting port map: %s/%d", m.Protocol(), m.InternalPort()) - permanent := false - - newport, err := nat.nat.AddPortMapping(m.Protocol(), m.InternalPort(), "libp2p", MappingDuration) + comment := "libp2p" + if m.comment != "" { + comment = "libp2p-" + m.comment + } + newport, err := nat.nat.AddPortMapping(m.Protocol(), m.InternalPort(), comment, MappingDuration) if err != nil { // Some hardware does not support mappings with timeout, so try that - newport, err = nat.nat.AddPortMapping(m.Protocol(), m.InternalPort(), "libp2p", 0) - permanent = (err == nil) + newport, err = nat.nat.AddPortMapping(m.Protocol(), m.InternalPort(), comment, 0) } failure := func() { @@ -379,7 +366,6 @@ func (nat *NAT) establishMapping(m *mapping) { return } - m.setPermanent(permanent) m.setExternalPort(newport) ext, err := m.ExternalAddr() if err != nil { -- GitLab