summaryrefslogtreecommitdiff
path: root/node/Node.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-07-07 08:54:48 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-07-07 08:54:48 -0700
commitc863ff3f02e9d68eb9bea32160d252eaddb7f1f5 (patch)
treefee1fd7b40123e7f9b015f803cc3b523b8e0aa9a /node/Node.cpp
parentf398952a6c03574e5947f6dfe5ea0f7b0f0b5224 (diff)
downloadinfinitytier-c863ff3f02e9d68eb9bea32160d252eaddb7f1f5.tar.gz
infinitytier-c863ff3f02e9d68eb9bea32160d252eaddb7f1f5.zip
A bunch of comments and cleanup, including some to yesterday's direct path pushing changes. Move path viability check to one place, and stop trying to use link-local addresses since they are not reliable.
Diffstat (limited to 'node/Node.cpp')
-rw-r--r--node/Node.cpp24
1 files changed, 15 insertions, 9 deletions
diff --git a/node/Node.cpp b/node/Node.cpp
index 057dc285..d8bd8910 100644
--- a/node/Node.cpp
+++ b/node/Node.cpp
@@ -426,12 +426,16 @@ void Node::freeQueryResult(void *qr)
::free(qr);
}
-void Node::addLocalInterfaceAddress(const struct sockaddr_storage *addr,int metric,ZT1_LocalInterfaceAddressTrust trust,int reliable)
-{
- Mutex::Lock _l(_directPaths_m);
- _directPaths.push_back(Path(*(reinterpret_cast<const InetAddress *>(addr)),metric,(Path::Trust)trust,reliable != 0));
- std::sort(_directPaths.begin(),_directPaths.end());
- _directPaths.erase(std::unique(_directPaths.begin(),_directPaths.end()),_directPaths.end());
+int Node::addLocalInterfaceAddress(const struct sockaddr_storage *addr,int metric,ZT1_LocalInterfaceAddressTrust trust,int reliable)
+{
+ if (Path::isAddressValidForPath(*(reinterpret_cast<const InetAddress *>(addr)))) {
+ Mutex::Lock _l(_directPaths_m);
+ _directPaths.push_back(Path(*(reinterpret_cast<const InetAddress *>(addr)),metric,(Path::Trust)trust,reliable != 0));
+ std::sort(_directPaths.begin(),_directPaths.end());
+ _directPaths.erase(std::unique(_directPaths.begin(),_directPaths.end()),_directPaths.end());
+ return 1;
+ }
+ return 0;
}
void Node::clearLocalInterfaceAddresses()
@@ -693,11 +697,13 @@ void ZT1_Node_setNetconfMaster(ZT1_Node *node,void *networkControllerInstance)
} catch ( ... ) {}
}
-void ZT1_Node_addLocalInterfaceAddress(ZT1_Node *node,const struct sockaddr_storage *addr,int metric,ZT1_LocalInterfaceAddressTrust trust,int reliable)
+int ZT1_Node_addLocalInterfaceAddress(ZT1_Node *node,const struct sockaddr_storage *addr,int metric,ZT1_LocalInterfaceAddressTrust trust,int reliable)
{
try {
- reinterpret_cast<ZeroTier::Node *>(node)->addLocalInterfaceAddress(addr,metric,trust,reliable);
- } catch ( ... ) {}
+ return reinterpret_cast<ZeroTier::Node *>(node)->addLocalInterfaceAddress(addr,metric,trust,reliable);
+ } catch ( ... ) {
+ return 0;
+ }
}
void ZT1_Node_clearLocalInterfaceAddresses(ZT1_Node *node)