diff options
-rw-r--r-- | controller/SqliteNetworkController.cpp | 12 | ||||
-rw-r--r-- | make-linux.mk | 2 | ||||
-rw-r--r-- | node/NetworkConfig.cpp | 8 | ||||
-rw-r--r-- | osdep/LinuxEthernetTap.cpp | 13 | ||||
-rw-r--r-- | osdep/ManagedRoute.hpp | 4 | ||||
-rw-r--r-- | osdep/Phy.hpp | 2 |
6 files changed, 22 insertions, 19 deletions
diff --git a/controller/SqliteNetworkController.cpp b/controller/SqliteNetworkController.cpp index eee9b7c7..62808de0 100644 --- a/controller/SqliteNetworkController.cpp +++ b/controller/SqliteNetworkController.cpp @@ -1769,13 +1769,15 @@ NetworkController::ResultCode SqliteNetworkController::_doNetworkConfigRequest(c std::sort(allowedEtherTypes.begin(),allowedEtherTypes.end()); allowedEtherTypes.erase(std::unique(allowedEtherTypes.begin(),allowedEtherTypes.end()),allowedEtherTypes.end()); - for(long i=0,k=0;((i<(long)allowedEtherTypes.size())&&(k<ZT_MAX_NETWORK_RULES));++i) { + for(long i=0;i<(long)allowedEtherTypes.size();++i) { + if ((nc.ruleCount + 2) > ZT_MAX_NETWORK_RULES) + break; if (allowedEtherTypes[i] > 0) { - nc.rules[k].t = ZT_NETWORK_RULE_MATCH_ETHERTYPE; - nc.rules[k].v.etherType = (uint16_t)allowedEtherTypes[i]; - ++k; + nc.rules[nc.ruleCount].t = ZT_NETWORK_RULE_MATCH_ETHERTYPE; + nc.rules[nc.ruleCount].v.etherType = (uint16_t)allowedEtherTypes[i]; + ++nc.ruleCount; } - nc.rules[k++].t = ZT_NETWORK_RULE_ACTION_ACCEPT; + nc.rules[nc.ruleCount++].t = ZT_NETWORK_RULE_ACTION_ACCEPT; } /* diff --git a/make-linux.mk b/make-linux.mk index 7cacb4fa..52f7f625 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -107,7 +107,7 @@ else CFLAGS?=-O3 -fstack-protector-strong CFLAGS+=-Wall -fPIE -fvisibility=hidden -pthread $(INCLUDES) -DNDEBUG $(DEFS) CXXFLAGS?=-O3 -fstack-protector-strong - CXXFLAGS+=-Wall -Wreorder -fPIE -fvisibility=hidden -fno-rtti -pthread $(INCLUDES) -DNDEBUG $(DEFS) + CXXFLAGS+=-Wall -Wno-unused-result -Wreorder -fPIE -fvisibility=hidden -fno-rtti -pthread $(INCLUDES) -DNDEBUG $(DEFS) LDFLAGS=-pie -Wl,-z,relro,-z,now STRIP?=strip STRIP+=--strip-all diff --git a/node/NetworkConfig.cpp b/node/NetworkConfig.cpp index a289eafa..fe4a5a0d 100644 --- a/node/NetworkConfig.cpp +++ b/node/NetworkConfig.cpp @@ -476,11 +476,9 @@ bool NetworkConfig::fromDictionary(const Dictionary &d) } } - /* - printf("~~~\n%s\n~~~\n",d.data()); - dump(); - printf("~~~\n"); - */ + //printf("~~~\n%s\n~~~\n",d.data()); + //dump(); + //printf("~~~\n"); return true; } catch ( ... ) { diff --git a/osdep/LinuxEthernetTap.cpp b/osdep/LinuxEthernetTap.cpp index 6a34f48d..c43c7bb7 100644 --- a/osdep/LinuxEthernetTap.cpp +++ b/osdep/LinuxEthernetTap.cpp @@ -97,10 +97,10 @@ LinuxEthernetTap::LinuxEthernetTap( std::string devmapbuf; Dictionary devmap; if (OSUtils::readFile((_homePath + ZT_PATH_SEPARATOR_S + "devicemap").c_str(),devmapbuf)) { - devmap.fromString(devmapbuf); - std::string desiredDevice(devmap.get(nwids,"")); - if (desiredDevice.length() > 2) { - Utils::scopy(ifr.ifr_name,sizeof(ifr.ifr_name),desiredDevice.c_str()); + devmap.load(devmapbuf.c_str()); + char desiredDevice[128]; + if (devmap.get(nwids,desiredDevice,sizeof(desiredDevice)) > 0) { + Utils::scopy(ifr.ifr_name,sizeof(ifr.ifr_name),desiredDevice); Utils::snprintf(procpath,sizeof(procpath),"/proc/sys/net/ipv4/conf/%s",ifr.ifr_name); recalledDevice = (stat(procpath,&sbuf) != 0); } @@ -174,8 +174,9 @@ LinuxEthernetTap::LinuxEthernetTap( (void)::pipe(_shutdownSignalPipe); - devmap[nwids] = _dev; - OSUtils::writeFile((_homePath + ZT_PATH_SEPARATOR_S + "devicemap").c_str(),devmap.toString()); + devmap.erase(nwids); + devmap.add(nwids,_dev.c_str()); + OSUtils::writeFile((_homePath + ZT_PATH_SEPARATOR_S + "devicemap").c_str(),(const void *)devmap.data(),devmap.sizeBytes()); _thread = Thread::start(this); } diff --git a/osdep/ManagedRoute.hpp b/osdep/ManagedRoute.hpp index 86468a45..ca71b18b 100644 --- a/osdep/ManagedRoute.hpp +++ b/osdep/ManagedRoute.hpp @@ -32,6 +32,7 @@ public: ManagedRoute(const ManagedRoute &r) { + _applied = false; *this = r; } @@ -40,7 +41,8 @@ public: if ((!_applied)&&(!r._applied)) { memcpy(this,&r,sizeof(ManagedRoute)); // InetAddress is memcpy'able } else { - throw std::runtime_error("Applied ManagedRoute is non-copyable!"); + fprintf(stderr,"Applied ManagedRoute isn't copyable!\n"); + abort(); } return *this; } diff --git a/osdep/Phy.hpp b/osdep/Phy.hpp index 1b08f30a..eab8a317 100644 --- a/osdep/Phy.hpp +++ b/osdep/Phy.hpp @@ -871,7 +871,7 @@ public: #if defined(_WIN32) || defined(_WIN64) ::recv(_whackReceiveSocket,tmp,16,0); #else - (void)(::read(_whackReceiveSocket,tmp,16)); + ::read(_whackReceiveSocket,tmp,16); #endif } |