summaryrefslogtreecommitdiff
path: root/node/NetworkConfig.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2014-10-04 13:15:02 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2014-10-04 13:15:02 -0700
commit2c8321be1f6b0001912d336843a855dde3043adb (patch)
tree0501ce3e76ca481cfe305a05c028850f2880d1f2 /node/NetworkConfig.cpp
parent62da7e67b64712fc5cfce771ff944057abff705b (diff)
downloadinfinitytier-2c8321be1f6b0001912d336843a855dde3043adb.tar.gz
infinitytier-2c8321be1f6b0001912d336843a855dde3043adb.zip
Pull logic to always send new multicasts to supernode since we need to do that differently, re-add support for active bridges, and remove some gratuitous use of std::set where not needed.
Diffstat (limited to 'node/NetworkConfig.cpp')
-rw-r--r--node/NetworkConfig.cpp34
1 files changed, 21 insertions, 13 deletions
diff --git a/node/NetworkConfig.cpp b/node/NetworkConfig.cpp
index e45407a5..f200ffc2 100644
--- a/node/NetworkConfig.cpp
+++ b/node/NetworkConfig.cpp
@@ -54,18 +54,22 @@ SharedPtr<NetworkConfig> NetworkConfig::createTestNetworkConfig(const Address &s
return nc;
}
-std::set<unsigned int> NetworkConfig::allowedEtherTypes() const
+std::vector<unsigned int> NetworkConfig::allowedEtherTypes() const
{
- std::set<unsigned int> ets;
- for(unsigned int i=0;i<sizeof(_etWhitelist);++i) {
- if (_etWhitelist[i]) {
- unsigned char b = _etWhitelist[i];
- unsigned int et = i * 8;
- while (b) {
- if ((b & 1))
- ets.insert(et);
- b >>= 1;
- ++et;
+ std::vector<unsigned int> ets;
+ if ((_etWhitelist[0] & 1) != 0) {
+ ets.push_back(0);
+ } else {
+ for(unsigned int i=0;i<sizeof(_etWhitelist);++i) {
+ if (_etWhitelist[i]) {
+ unsigned char b = _etWhitelist[i];
+ unsigned int et = i * 8;
+ while (b) {
+ if ((b & 1))
+ ets.push_back(et);
+ b >>= 1;
+ ++et;
+ }
}
}
}
@@ -139,17 +143,21 @@ void NetworkConfig::_fromDictionary(const Dictionary &d)
default: // ignore unrecognized address types or junk/empty fields
continue;
}
- _staticIps.insert(addr);
+ _staticIps.push_back(addr);
}
+ std::sort(_staticIps.begin(),_staticIps.end());
+ std::unique(_staticIps.begin(),_staticIps.end());
std::vector<std::string> activeBridgesSplit(Utils::split(d.get(ZT_NETWORKCONFIG_DICT_KEY_ACTIVE_BRIDGES,"").c_str(),",","",""));
for(std::vector<std::string>::const_iterator a(activeBridgesSplit.begin());a!=activeBridgesSplit.end();++a) {
if (a->length() == ZT_ADDRESS_LENGTH_HEX) { // ignore empty or garbage fields
Address tmp(*a);
if (!tmp.isReserved())
- _activeBridges.insert(tmp);
+ _activeBridges.push_back(tmp);
}
}
+ std::sort(_activeBridges.begin(),_activeBridges.end());
+ std::unique(_activeBridges.begin(),_activeBridges.end());
Dictionary multicastRateEntries(d.get(ZT_NETWORKCONFIG_DICT_KEY_MULTICAST_RATES,std::string()));
for(Dictionary::const_iterator i(multicastRateEntries.begin());i!=multicastRateEntries.end();++i) {