diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2017-01-19 15:05:26 -0800 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2017-01-19 15:05:26 -0800 |
commit | d79f792e6fab5503bc70ad31cdf77ac935061bb7 (patch) | |
tree | 787dbaebbe93b9d137ae2f12d15c57add7d6329e | |
parent | 7b231b38b02d74afff7ea9cde6ea5c4a8cee5103 (diff) | |
download | infinitytier-d79f792e6fab5503bc70ad31cdf77ac935061bb7.tar.gz infinitytier-d79f792e6fab5503bc70ad31cdf77ac935061bb7.zip |
OpenBSD fixes, workaround for apparent libstdc++ bug.
-rw-r--r-- | Makefile | 6 | ||||
-rw-r--r-- | make-bsd.mk (renamed from make-freebsd.mk) | 2 | ||||
-rw-r--r-- | one.cpp | 60 | ||||
-rw-r--r-- | osdep/BSDEthernetTap.cpp | 2 |
4 files changed, 40 insertions, 30 deletions
@@ -13,10 +13,12 @@ endif ifeq ($(OSTYPE),FreeBSD) CC=gcc CXX=g++ - include make-freebsd.mk + ZT_BUILD_PLATFORM=7 + include make-bsd.mk endif ifeq ($(OSTYPE),OpenBSD) CC=egcc CXX=eg++ - include make-freebsd.mk + ZT_BUILD_PLATFORM=9 + include make-bsd.mk endif diff --git a/make-freebsd.mk b/make-bsd.mk index a90dfc77..7a239908 100644 --- a/make-freebsd.mk +++ b/make-bsd.mk @@ -50,7 +50,7 @@ endif ifeq ($(CC_MACH),aarch64) ZT_ARCHITECTURE=4 endif -DEFS+=-DZT_BUILD_PLATFORM=7 -DZT_BUILD_ARCHITECTURE=$(ZT_ARCHITECTURE) -DZT_SOFTWARE_UPDATE_DEFAULT="\"disable\"" +DEFS+=-DZT_BUILD_PLATFORM=$(ZT_BUILD_PLATFORM) -DZT_BUILD_ARCHITECTURE=$(ZT_ARCHITECTURE) -DZT_SOFTWARE_UPDATE_DEFAULT="\"disable\"" CXXFLAGS+=$(CFLAGS) -fno-rtti -std=c++11 @@ -289,7 +289,7 @@ static int cli(int argc,char **argv) nlohmann::json j; try { - j = nlohmann::json::parse(responseBody); + j = OSUtils::jsonParse(responseBody); } catch (std::exception &exc) { printf("%u %s invalid JSON response (%s)" ZT_EOL_S,scode,command.c_str(),exc.what()); return 1; @@ -299,14 +299,16 @@ static int cli(int argc,char **argv) } if (scode == 200) { - std::ostringstream out; if (json) { - out << j.dump(2) << ZT_EOL_S; + printf("%s" ZT_EOL_S,OSUtils::jsonDump(j).c_str()); } else { - if (j.is_object()) - out << "200 info " << j["address"].get<std::string>() << " " << j["version"].get<std::string>() << " " << ((j["tcpFallbackActive"]) ? "TUNNELED" : ((j["online"]) ? "ONLINE" : "OFFLINE")) << ZT_EOL_S; + if (j.is_object()) { + printf("200 info %s %s %s" ZT_EOL_S, + OSUtils::jsonString(j["address"],"-").c_str(), + OSUtils::jsonString(j["version"],"-").c_str(), + ((j["tcpFallbackActive"]) ? "TUNNELED" : ((j["online"]) ? "ONLINE" : "OFFLINE"))); + } } - printf("%s",out.str().c_str()); return 0; } else { printf("%u %s %s" ZT_EOL_S,scode,command.c_str(),responseBody.c_str()); @@ -317,7 +319,7 @@ static int cli(int argc,char **argv) nlohmann::json j; try { - j = nlohmann::json::parse(responseBody); + j = OSUtils::jsonParse(responseBody); } catch (std::exception &exc) { printf("%u %s invalid JSON response (%s)" ZT_EOL_S,scode,command.c_str(),exc.what()); return 1; @@ -327,19 +329,18 @@ static int cli(int argc,char **argv) } if (scode == 200) { - std::ostringstream out; if (json) { - out << j.dump(2) << ZT_EOL_S; + printf("%s" ZT_EOL_S,OSUtils::jsonDump(j).c_str()); } else { - out << "200 listpeers <ztaddr> <path> <latency> <version> <role>" << ZT_EOL_S; + printf("200 listpeers <ztaddr> <path> <latency> <version> <role>" ZT_EOL_S); if (j.is_array()) { for(unsigned long k=0;k<j.size();++k) { - auto &p = j[k]; + nlohmann::json &p = j[k]; std::string bestPath; - auto paths = p["paths"]; + nlohmann::json &paths = p["paths"]; if (paths.is_array()) { for(unsigned long i=0;i<paths.size();++i) { - auto &path = paths[i]; + nlohmann::json &path = paths[i]; if (path["preferred"]) { char tmp[256]; std::string addr = path["address"]; @@ -361,11 +362,15 @@ static int cli(int argc,char **argv) ver[0] = '-'; ver[1] = (char)0; } - out << "200 listpeers " << p["address"].get<std::string>() << " " << bestPath << " " << p["latency"] << " " << ver << " " << p["role"].get<std::string>() << ZT_EOL_S; + printf("200 listpeers %s %s %d %s %s" ZT_EOL_S, + OSUtils::jsonString(p["address"],"-").c_str(), + bestPath.c_str(), + (int)OSUtils::jsonInt(p["latency"],0), + ver, + OSUtils::jsonString(p["role"],"-").c_str()); } } } - printf("%s",out.str().c_str()); return 0; } else { printf("%u %s %s" ZT_EOL_S,scode,command.c_str(),responseBody.c_str()); @@ -376,7 +381,7 @@ static int cli(int argc,char **argv) nlohmann::json j; try { - j = nlohmann::json::parse(responseBody); + j = OSUtils::jsonParse(responseBody); } catch (std::exception &exc) { printf("%u %s invalid JSON response (%s)" ZT_EOL_S,scode,command.c_str(),exc.what()); return 1; @@ -386,20 +391,19 @@ static int cli(int argc,char **argv) } if (scode == 200) { - std::ostringstream out; if (json) { - out << j.dump(2) << ZT_EOL_S; + printf("%s" ZT_EOL_S,OSUtils::jsonDump(j).c_str()); } else { - out << "200 listnetworks <nwid> <name> <mac> <status> <type> <dev> <ZT assigned ips>" << ZT_EOL_S; + printf("200 listnetworks <nwid> <name> <mac> <status> <type> <dev> <ZT assigned ips>" ZT_EOL_S); if (j.is_array()) { for(unsigned long i=0;i<j.size();++i) { - auto &n = j[i]; + nlohmann::json &n = j[i]; if (n.is_object()) { std::string aa; - auto &assignedAddresses = n["assignedAddresses"]; + nlohmann::json &assignedAddresses = n["assignedAddresses"]; if (assignedAddresses.is_array()) { for(unsigned long j=0;j<assignedAddresses.size();++j) { - auto &addr = assignedAddresses[j]; + nlohmann::json &addr = assignedAddresses[j]; if (addr.is_string()) { if (aa.length() > 0) aa.push_back(','); aa.append(addr.get<std::string>()); @@ -407,14 +411,18 @@ static int cli(int argc,char **argv) } } if (aa.length() == 0) aa = "-"; - std::string name = n["name"]; - if (name.length() == 0) name = "-"; - out << "200 listnetworks " << n["nwid"].get<std::string>() << " " << name << " " << n["mac"].get<std::string>() << " " << n["status"].get<std::string>() << " " << n["type"].get<std::string>() << " " << n["portDeviceName"].get<std::string>() << " " << aa << ZT_EOL_S; + printf("200 listnetworks %s %s %s %s %s %s %s" ZT_EOL_S, + OSUtils::jsonString(n["nwid"],"-").c_str(), + OSUtils::jsonString(n["name"],"-").c_str(), + OSUtils::jsonString(n["mac"],"-").c_str(), + OSUtils::jsonString(n["status"],"-").c_str(), + OSUtils::jsonString(n["type"],"-").c_str(), + OSUtils::jsonString(n["portDeviceName"],"-").c_str(), + aa.c_str()); } } } } - printf("%s",out.str().c_str()); return 0; } else { printf("%u %s %s" ZT_EOL_S,scode,command.c_str(),responseBody.c_str()); diff --git a/osdep/BSDEthernetTap.cpp b/osdep/BSDEthernetTap.cpp index 463206f6..0e1ada6b 100644 --- a/osdep/BSDEthernetTap.cpp +++ b/osdep/BSDEthernetTap.cpp @@ -83,7 +83,6 @@ BSDEthernetTap::BSDEthernetTap( { static Mutex globalTapCreateLock; char devpath[64],ethaddr[64],mtustr[32],metstr[32],tmpdevname[32]; - struct stat stattmp; Mutex::Lock _gl(globalTapCreateLock); @@ -122,6 +121,7 @@ BSDEthernetTap::BSDEthernetTap( ::waitpid(cpid,&exitcode,0); } else throw std::runtime_error("fork() failed"); + struct stat stattmp; if (!stat(devpath,&stattmp)) { cpid = (long)vfork(); if (cpid == 0) { |