Unverified Commit 51ffdf87 authored by Jakub Sztandera's avatar Jakub Sztandera
Browse files

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.
parent a3bf1687
......@@ -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 {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment