From 05212ee13413504f0384c6d8169cff1749994079 Mon Sep 17 00:00:00 2001 From: Mateusz Jablonski Date: Thu, 14 Dec 2017 17:04:12 +0100 Subject: [PATCH] General changes for Windows Mixed changes related to schema, xmpp, vnsw/agent/{kstate, vgw, test-xml}: 1. boost::array to IpYAddress::bytes_type where applicable. IpYAddress::bytes_type is std::array if c++11 and boost::array otherwise and on Windows we compile with c++11. 2. add linking with advapi32 and gdi32 on Windows (needed by OpenSSL) 3. do not link with librt on Windows 4. use multiplatform boost::filesystem instead of open/stat/read 5. add missing 'return' to some functions 6. add missing include 7. and more various bugs Initial changes: https://github.com/sagarkchitnis/windows/commits/master/controller/src Further work and cleanup: https://github.com/codilime/contrail-controller/commits/windows3.1/src Change-Id: Ifa9a6182300a16c4210d3dc866a333048317b944 Partial-Bug: #1737177 --- src/schema/test/SConscript | 2 +- src/vnsw/agent/kstate/kstate.cc | 4 +-- src/vnsw/agent/kstate/nh_kstate.cc | 1 + src/vnsw/agent/test-xml/test_xml.cc | 34 ++++++++++++------------ src/vnsw/agent/test-xml/test_xml.h | 2 +- src/vnsw/agent/test-xml/test_xml_oper.cc | 3 +++ src/vnsw/agent/vgw/SConscript | 2 +- src/xmpp/SConscript | 4 +-- src/xmpp/test/SConscript | 5 +++- 9 files changed, 32 insertions(+), 25 deletions(-) diff --git a/src/schema/test/SConscript b/src/schema/test/SConscript index e19d065aedb..30048f4eae8 100644 --- a/src/schema/test/SConscript +++ b/src/schema/test/SConscript @@ -36,7 +36,7 @@ env.Prepend(LIBS = ['sandesh', 'http', 'http_parser', 'curl', 'db', 'process_info', 'sandeshvns', 'io', 'base', 'ssl', 'crypto', 'gunit', 'pugixml']) -if sys.platform != 'darwin': +if sys.platform not in ['win32', 'darwin']: env.Append(LIBS = ['rt']) env.Append(CPPPATH = [env['TOP']]) diff --git a/src/vnsw/agent/kstate/kstate.cc b/src/vnsw/agent/kstate/kstate.cc index 2645fd4d1f4..a0920d0a3fe 100644 --- a/src/vnsw/agent/kstate/kstate.cc +++ b/src/vnsw/agent/kstate/kstate.cc @@ -233,14 +233,14 @@ const std::string KState::PrefixToString(const std::vector &prefix) { int size = prefix.size(); string str = "unknown"; if (size <= 4) { - boost::array bytes = { {0, 0, 0, 0} }; + Ip4Address::bytes_type bytes = { {0, 0, 0, 0} }; for (int i = 0; i < size; i++) { bytes[i] = prefix.at(i); } Ip4Address addr4(bytes); str = addr4.to_string(); } else { - boost::array bytes = + Ip6Address::bytes_type bytes = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }; for (int i = 0; i < size; i++) { bytes[i] = prefix.at(i); diff --git a/src/vnsw/agent/kstate/nh_kstate.cc b/src/vnsw/agent/kstate/nh_kstate.cc index fd76bab8002..a7ea7ccd10d 100644 --- a/src/vnsw/agent/kstate/nh_kstate.cc +++ b/src/vnsw/agent/kstate/nh_kstate.cc @@ -6,6 +6,7 @@ #include "nh_kstate.h" #include "vr_nexthop.h" #include +#include #include #include diff --git a/src/vnsw/agent/test-xml/test_xml.cc b/src/vnsw/agent/test-xml/test_xml.cc index fa2cb39d25a..a6cb4d61bcf 100644 --- a/src/vnsw/agent/test-xml/test_xml.cc +++ b/src/vnsw/agent/test-xml/test_xml.cc @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -118,6 +119,7 @@ xml_node AddXmlNodeWithValue(xml_node *parent, const char *name, const string &value) { xml_node n = parent->append_child(name); n.append_child(pugi::node_pcdata).set_value(value.c_str()); + return n; } xml_node AddXmlNodeWithIntValue(xml_node *parent, const char *name, @@ -126,6 +128,7 @@ xml_node AddXmlNodeWithIntValue(xml_node *parent, const char *name, s << val; xml_node n = parent->append_child(name); n.append_child(pugi::node_pcdata).set_value(s.str().c_str()); + return n; } } @@ -203,36 +206,33 @@ bool AgentUtXmlTest::ReadXml() { } bool AgentUtXmlTest::Load() { - struct stat s; - if (stat(file_name_.c_str(), &s)) { - cout << "Error <" << strerror(errno) << "> opening file " - << file_name_ << endl; + boost::system::error_code ec; + boost::filesystem::path file_path(file_name_); + uintmax_t file_size = boost::filesystem::file_size(file_path, ec); + if (ec) { + cout << "Error <" << ec << "> opening file" << file_name_ << endl; return false; } - int fd = open(file_name_.c_str(), O_RDONLY); - if (fd < 0) { - cout << "Error <" << strerror(errno) << "> opening file " - << file_name_ << endl; + std::fstream file(file_name_.c_str(), std::ios::binary | std::ios_base::in); + if (!file) { + cout << "Error opening file" << file_name_ << endl; return false; } - char data[s.st_size + 1]; - if (read(fd, data, s.st_size) < s.st_size) { - cout << "Error <" << strerror(errno) << "> reading file " - << file_name_ << endl; - close(fd); + std::vector data(file_size + 1, 0); + file.read(data.data(), file_size); + if (!file || file.gcount() < file_size) { + cout << "Error reading file" << file_name_ << endl; return false; } - close(fd); - data[s.st_size] = '\0'; - xml_parse_result result = doc_.load(data); + xml_parse_result result = doc_.load(data.data()); if (result) { cout << "Loaded data file successfully" << endl; } else { cout << "Error in XML string at offset <: " << result.offset - << "> (error at [..." << (data + result.offset) << "])" << endl; + << "> (error at [..." << (data.data() + result.offset) << "])" << endl; return false; } diff --git a/src/vnsw/agent/test-xml/test_xml.h b/src/vnsw/agent/test-xml/test_xml.h index 630293a390a..2872a4d2d8f 100644 --- a/src/vnsw/agent/test-xml/test_xml.h +++ b/src/vnsw/agent/test-xml/test_xml.h @@ -121,7 +121,7 @@ class AgentUtXmlNode { virtual bool ToXml(pugi::xml_node *parent) = 0; virtual std::string NodeType() = 0; virtual void ToString(std::string *str); - virtual bool Run() { assert(0); } + virtual bool Run() { assert(0); return false; } void set_gen_xml(bool val) { gen_xml_ = val; } bool gen_xml() const { return gen_xml_; } diff --git a/src/vnsw/agent/test-xml/test_xml_oper.cc b/src/vnsw/agent/test-xml/test_xml_oper.cc index 6dca7974b70..8a16df59161 100644 --- a/src/vnsw/agent/test-xml/test_xml_oper.cc +++ b/src/vnsw/agent/test-xml/test_xml_oper.cc @@ -880,6 +880,7 @@ bool AgentUtXmlNova::ReadXml() { bool AgentUtXmlNova::ToXml(xml_node *parent) { assert(0); + return false; } void AgentUtXmlNova::ToString(string *str) { @@ -1514,6 +1515,7 @@ bool AgentUtXmlL2Route::Run() { Ip4Address::from_string(ip_), vxlan_id_, data); } + return true; } ///////////////////////////////////////////////////////////////////////////// @@ -1671,6 +1673,7 @@ bool AgentUtXmlL3Route::Run() { Ip4Address::from_string(src_ip_), plen_, data); } + return true; } AgentUtXmlL3RouteValidate::AgentUtXmlL3RouteValidate(const string &name, diff --git a/src/vnsw/agent/vgw/SConscript b/src/vnsw/agent/vgw/SConscript index a5e5c47933a..ff14ad79015 100644 --- a/src/vnsw/agent/vgw/SConscript +++ b/src/vnsw/agent/vgw/SConscript @@ -11,7 +11,7 @@ env = AgentEnv.Clone() except_files = [ 'cfg_vgw.cc' ] except_objs = AgentEnv.BuildExceptionCcObj(env, except_files) -libvgw = env.Library('libvgw', +libvgw = env.Library('vgw', except_objs + [ 'vgw.cc' ]) diff --git a/src/xmpp/SConscript b/src/xmpp/SConscript index cccac7f3f41..583a951e071 100644 --- a/src/xmpp/SConscript +++ b/src/xmpp/SConscript @@ -26,8 +26,8 @@ for src in sandesh_files: obj = env.Object(objname, 'sandesh/' + src) sandesh_files_.append(obj) -xmpp_session = except_env.Object('xmpp_session.o', 'xmpp_session.cc') -xmpp_init = except_env.Object('xmpp_init.o', 'xmpp_init.cc') +xmpp_session = except_env.Object('xmpp_session.cc') +xmpp_init = except_env.Object('xmpp_init.cc') libxmpp = env.Library('xmpp', [ diff --git a/src/xmpp/test/SConscript b/src/xmpp/test/SConscript index dc00097cf99..87cc2187f57 100644 --- a/src/xmpp/test/SConscript +++ b/src/xmpp/test/SConscript @@ -31,7 +31,10 @@ env.Prepend(LIBS = ['task_test', 'gunit', 'xmpp', 'xml', 'pugixml', 'sandesh', 'cassandra', 'gendb', 'SimpleAmqpClient', 'rabbitmq', 'base', 'boost_regex', 'xmpptest', 'db', 'sandesh']) -if sys.platform != 'darwin': +if sys.platform == 'win32': + env.Append(LIBS = ['advapi32', 'gdi32']) + +if sys.platform not in ['win32', 'darwin']: env.Append(LIBS = ['rt']) xmpp_server_test = env.UnitTest('xmpp_server_test', ['xmpp_server_test.cc'])