From 729bc160cdf559e153d53617b7ad142fd46748e4 Mon Sep 17 00:00:00 2001 From: "william.cai" Date: Tue, 26 Jun 2018 23:03:16 +0800 Subject: [PATCH 01/74] pull from upstream. --- BUILD.md | 2 +- CMakeLists.txt | 4 +- LICENSE.md | 2 +- USAGE.md | 59 +++++++++++++++++++---------- include/versioninfo.h | 2 +- src/pcaphandler.cpp | 81 +++++++++++++++++++++------------------ src/pktminerg.cpp | 88 +++++++++++++++++++++++++------------------ src/socketgre.cpp | 44 +++++++++++++--------- src/statislog.cpp | 12 +++++- src/statislog.h | 31 +++++++++++---- 10 files changed, 201 insertions(+), 124 deletions(-) diff --git a/BUILD.md b/BUILD.md index e8dd23b90..519a2eb36 100644 --- a/BUILD.md +++ b/BUILD.md @@ -39,7 +39,7 @@ gredemo* gredump* pcapcompare* pktminerg* # Build on Mac OS X ## Build steps -1. Perpair the environment. You should install [Xcode](https://developer.apple.com/xcode/) first. +1. Prepair the environment. You should install [Xcode](https://developer.apple.com/xcode/) first. 2. Download the latest release for libpcap form [tcpdump stie](http://www.tcpdump.org). Extract the zip. ```shell cd /path/to/libpcap diff --git a/CMakeLists.txt b/CMakeLists.txt index a976890d8..5516f5142 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.3) +cmake_minimum_required(VERSION 2.8) project(pktminerg) option(PROJECT_WITH_PROF "Enable profiling and coverage report analysis" OFF) @@ -15,7 +15,7 @@ endif () # set PKTMINERG_MAJOR_VERSION, PKTMINERG_MINOR_VERSION, etc. set(PKTMINERG_MAJOR_VERSION "0") set(PKTMINERG_MINOR_VERSION "3") -set(PKTMINERG_PATCH_VERSION "0") +set(PKTMINERG_PATCH_VERSION "1") set(PKTMINERG_VERSION_STRING "${PKTMINERG_MAJOR_VERSION}.${PKTMINERG_MINOR_VERSION}.${PKTMINERG_PATCH_VERSION}") # Get the current working branch diff --git a/LICENSE.md b/LICENSE.md index 7233bcdf4..d0b53b773 100755 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright (c) 2018, Shanghai Netis Technologies Co., Ltd. All rights reserved. +Copyright (c) 2018, Netis Technologies Co., Ltd. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/USAGE.md b/USAGE.md index 82325b919..470c918b8 100644 --- a/USAGE.md +++ b/USAGE.md @@ -1,26 +1,32 @@ # Usage ``` Generic options: - -v [ --version ] show version. - -h [ --help ] show help. + -v [ --version ] show version. + -h [ --help ] show help. + Allowed options: - -i [ --interface ] arg interface to capture packets. - -f [ --pcapfile ] arg specify pcap file for offline mode, mostly for - test. - -s [ --snaplen ] arg (=2048) set snoop packet snaplen. Default=2048B. - -t [ --timeout ] arg (=3) set snoop packet timeout. Default=3s. - -b [ --buffsize ] arg (=256) set snoop buffer size. Default=256MB. - -r [ --remoteip ] arg set gre remote ip. - -k [ --keybit ] arg (=1) set gre key bit. - -c [ --count ] arg (=0) Exit after receiving count packets. Default=0, - No limit if count<=0. - --cpu arg set cpu affinity. - -p [ --priority ] set high priority mode. - --dump specify dump file, mostly for integrated test. - --nofilter force no filter, only use when you confirm that - the snoop interface is different from the gre - interface. - --expression arg filter packets like tcpdump expression syntax. + -i [ --interface ] NIC interface to capture packets + -f [ --pcapfile ] PATH specify pcap file for offline mode, mostly + for test + -r [ --remoteip ] IP set gre remote ip + -k [ --keybit ] BIT (=1) set gre key bit; BIT defaults 1 + -s [ --snaplen ] LENGTH (=2048) set snoop packet snaplen; LENGTH defaults + 2048 and units byte + -t [ --timeout ] TIME (=3) set snoop packet timeout; TIME defaults 3 and + units second + -b [ --buffsize ] SIZE (=256) set snoop buffer size; SIZE defaults 256 and + units MB + -c [ --count ] COUNT (=0) exit after receiving count packets; COUNT + defaults; count<=0 means unlimited + -p [ --priority ] set high priority mode + --cpu ID set cpu affinity ID + --expression FILTER filter packets with FILTER; FILTER as same as + tcpdump BPF expression syntax + --dump specify dump file, mostly for integrated test + --nofilter force no filter; only use when you confirm + that the snoop interface is different from + the gre interface + ```
@@ -52,4 +58,17 @@ This parameter will be invalid if "nofilter" parameter is set. ## Example -pktminerg -i eth0 -r 172.16.1.201 --cpu 0 -p --nofilter +* Network interface example
+pktminerg -i eth0 -r 172.16.1.201 + +* Pcap file example
+pktminerg -f sample.pcap -r 172.16.1.201 + +* Filter example
+pktminerg -i eth0 -r 172.16.1.201 --expression '172.16.1.12' + +* CPU affinity and high priority example
+pktminerg -i eth0 -r 172.16.1.201 --cpu 1 -p + +* nofilter example, the packet capture network interface must different from the GRE output interface
+pktminerg -i eth0 -r 172.16.1.201 --nofilter \ No newline at end of file diff --git a/include/versioninfo.h b/include/versioninfo.h index 672e255e2..7087c9c06 100644 --- a/include/versioninfo.h +++ b/include/versioninfo.h @@ -5,7 +5,7 @@ #include "version.h" void showVersion() { - std::cout << "~ Pktminerg version " << std::string(PKTMINERG_VERSION) << " (rev: " << + std::cout << "~ pktminerg version " << std::string(PKTMINERG_VERSION) << " (rev: " << std::string(PKTMINERG_GIT_COMMIT_HASH) << " build: " << std::string(PKTMINERG_BUILD_TIME) << ")" << std::endl; std::cout << "~ " << pcap_lib_version() << std::endl; } diff --git a/src/pcaphandler.cpp b/src/pcaphandler.cpp index cf985b682..898f56672 100644 --- a/src/pcaphandler.cpp +++ b/src/pcaphandler.cpp @@ -17,15 +17,16 @@ PcapHandler::~PcapHandler() { closePcap(); } -int PcapHandler::openPcapDumper(pcap_t *pcap_handle) { +int PcapHandler::openPcapDumper(pcap_t* pcap_handle) { closePcapDumper(); std::string filepath = "pktminer_dump.pcap"; if (boost::filesystem::exists(filepath)) { boost::filesystem::remove(filepath); } _pcap_dumpter = pcap_dump_open(pcap_handle, filepath.c_str()); - if (_pcap_dumpter==NULL) { - std::cerr << "pcap_dump_open failed! error text: " << pcap_geterr(pcap_handle) << std::endl; + if (_pcap_dumpter == NULL) { + std::cerr << StatisLogContext::getTimeString() << "Call pcap_dump_open failed, error is " + << pcap_geterr(pcap_handle) << "." << std::endl; return -1; } return 0; @@ -45,20 +46,21 @@ void PcapHandler::closePcap() { } } -void PcapHandler::packetHandler(const struct pcap_pkthdr *header, const uint8_t *pkt_data) { - std::for_each(_exports.begin(), _exports.end(), [header, pkt_data, this](std::shared_ptr pcapExport) { +void PcapHandler::packetHandler(const struct pcap_pkthdr* header, const uint8_t* pkt_data) { + std::for_each(_exports.begin(), _exports.end(), + [header, pkt_data, this](std::shared_ptr pcapExport) { // if (header->caplen > 1472) { // std::cout << "pkt " << _gre_count << ", len: " << header->len << ", caplen: " << header->caplen << std::endl; // } - int ret = pcapExport->exportPacket(header, pkt_data); - if (pcapExport->getExportType() == exporttype::gre) { - if (ret == 0) { - this->_gre_count++; - } else { - this->_gre_drop_count++; - } - } - }); + int ret = pcapExport->exportPacket(header, pkt_data); + if (pcapExport->getExportType() == exporttype::gre) { + if (ret == 0) { + this->_gre_count++; + } else { + this->_gre_drop_count++; + } + } + }); if (_pcap_dumpter) { pcap_dump(reinterpret_cast(_pcap_dumpter), header, pkt_data); } @@ -66,7 +68,7 @@ void PcapHandler::packetHandler(const struct pcap_pkthdr *header, const uint8_t _statislog = std::make_shared(false); _statislog->initSendLog("pktminerg"); } - _statislog->logSendStatis((uint64_t)(header->ts.tv_sec), header->caplen, _gre_count, _gre_drop_count, 0, + _statislog->logSendStatis((uint64_t) (header->ts.tv_sec), header->caplen, _gre_count, _gre_drop_count, 0, _pcap_handle); } @@ -76,35 +78,36 @@ void PcapHandler::addExport(std::shared_ptr pcapExport) { int PcapHandler::startPcapLoop(int count) { if (_pcap_handle == NULL) { - std::cerr << "pcap has not created!" << std::endl; + std::cerr << StatisLogContext::getTimeString() << "The pcap has not created." << std::endl; return -1; } - int ret = pcap_loop(_pcap_handle, count, [](uint8_t *user, const struct pcap_pkthdr *h, const uint8_t *data) { - PcapHandler *p = static_cast(static_cast(user)); + int ret = pcap_loop(_pcap_handle, count, [](uint8_t* user, const struct pcap_pkthdr* h, const uint8_t* data) { + PcapHandler* p = static_cast(static_cast(user)); p->packetHandler(h, data); }, reinterpret_cast(this)); if (_statislog == nullptr) { _statislog = std::make_shared(false); _statislog->initSendLog("pktminerg"); } - _statislog->logSendStatisGre(std::time(NULL), (uint64_t)std::time(NULL), _gre_count, _gre_drop_count, 0, + _statislog->logSendStatisGre(std::time(NULL), (uint64_t) std::time(NULL), _gre_count, _gre_drop_count, 0, _pcap_handle); return ret; } void PcapHandler::stopPcapLoop() { if (_pcap_handle == NULL) { - std::cerr << "pcap has not created!" << std::endl; + std::cerr << StatisLogContext::getTimeString() << "The pcap has not created." << std::endl; return; } pcap_breakloop(_pcap_handle); } -int PcapOfflineHandler::openPcap(const std::string &dev, const pcap_init_t ¶m, const std::string &expression, +int PcapOfflineHandler::openPcap(const std::string& dev, const pcap_init_t& param, const std::string& expression, bool dumpfile) { - pcap_t * pcap_handle = pcap_open_offline(dev.c_str(), _errbuf); + pcap_t* pcap_handle = pcap_open_offline(dev.c_str(), _errbuf); if (!pcap_handle) { - std::cerr << "pcap_open_offline failed, err: " << _errbuf << std::endl; + std::cerr << StatisLogContext::getTimeString() << "Call pcap_open_offline failed, error is " << _errbuf << "." + << std::endl; return -1; } auto pcapGuard = MakeGuard([pcap_handle]() { @@ -113,7 +116,7 @@ int PcapOfflineHandler::openPcap(const std::string &dev, const pcap_init_t ¶ if (dumpfile) { if (openPcapDumper(pcap_handle) != 0) { - std::cerr << "openPcapDumper failed!!" << std::endl; + std::cerr << StatisLogContext::getTimeString() << "Call openPcapDumper failed." << std::endl; return -1; } } @@ -122,16 +125,17 @@ int PcapOfflineHandler::openPcap(const std::string &dev, const pcap_init_t ¶ return 0; } -int PcapLiveHandler::openPcap(const std::string &dev, const pcap_init_t ¶m, const std::string &expression, +int PcapLiveHandler::openPcap(const std::string& dev, const pcap_init_t& param, const std::string& expression, bool dumpfile) { int ret; struct bpf_program filter; - bpf_u_int32 mask=0; - bpf_u_int32 net=0; + bpf_u_int32 mask = 0; + bpf_u_int32 net = 0; pcap_t* pcap_handle = pcap_create(dev.c_str(), _errbuf); if (!pcap_handle) { - std::cerr << "pcap_create failed, err: " << _errbuf << std::endl; + std::cerr << StatisLogContext::getTimeString() << "Call pcap_create failed, error is " << _errbuf << "." + << std::endl; return -1; } auto pcapGuard = MakeGuard([pcap_handle]() { @@ -143,38 +147,43 @@ int PcapLiveHandler::openPcap(const std::string &dev, const pcap_init_t ¶m, pcap_set_promisc(pcap_handle, param.promisc); ret = pcap_set_buffer_size(pcap_handle, param.buffer_size); if (ret != 0) { - std::cerr << "set pcap buffer size to " << param.buffer_size << " failed." << std::endl; + std::cerr << StatisLogContext::getTimeString() << "Call pcap_set_buffer_size to " << param.buffer_size + << " failed." << std::endl; return -1; } ret = pcap_activate(pcap_handle); if (ret != 0) { - std::cerr << "Capture error: " << pcap_statustostr(ret) << std::endl; + std::cerr << StatisLogContext::getTimeString() << "Call pcap_activate failed error is " + << pcap_statustostr(ret) << "." << std::endl; return -1; } if (expression.length() > 0) { - std::cout << "set pcap filter!!" << std::endl; - if (pcap_lookupnet(dev.c_str(), &net, &mask, _errbuf) ==-1 ) { - std::cerr << "pcap_lookupnet failed, err: " << _errbuf << std::endl; + std::cout << StatisLogContext::getTimeString() << "Set pcap filter as \"" << expression << "\"." << std::endl; + if (pcap_lookupnet(dev.c_str(), &net, &mask, _errbuf) == -1) { + std::cerr << StatisLogContext::getTimeString() << " Call pcap_lookupnet failed, error is " << _errbuf << "." + << std::endl; return -1; } ret = pcap_compile(pcap_handle, &filter, expression.c_str(), 0, net); if (ret != 0) { - std::cerr << "pcap_compile error: " << pcap_statustostr(ret) << std::endl; + std::cerr << StatisLogContext::getTimeString() << "Call pcap_compile failed, error is " + << pcap_statustostr(ret) << "." << std::endl; return -1; } ret = pcap_setfilter(pcap_handle, &filter); if (ret != 0) { - std::cerr << "pcap_setfilter error: " << pcap_statustostr(ret) << std::endl; + std::cerr << StatisLogContext::getTimeString() << "Call pcap_setfilter failed, error is " + << pcap_statustostr(ret) << "." << std::endl; return -1; } } if (dumpfile) { if (openPcapDumper(pcap_handle) != 0) { - std::cerr << "openPcapDumper failed!!" << std::endl; + std::cerr << StatisLogContext::getTimeString() << "Call openPcapDumper failed." << std::endl; return -1; } } diff --git a/src/pktminerg.cpp b/src/pktminerg.cpp index 81baec0af..3cae62af9 100644 --- a/src/pktminerg.cpp +++ b/src/pktminerg.cpp @@ -11,24 +11,33 @@ std::shared_ptr handler = nullptr; int main(int argc, const char* argv[]) { boost::program_options::options_description generic("Generic options"); generic.add_options() - ("version,v", "show version.") - ("help,h", "show help."); + ("version,v", "show version.") + ("help,h", "show help."); boost::program_options::options_description desc("Allowed options"); desc.add_options() - ("interface,i", boost::program_options::value(), "interface to capture packets.") - ("pcapfile,f", boost::program_options::value(), "specify pcap file for offline mode, mostly for test.") - ("snaplen,s", boost::program_options::value()->default_value(2048), "set snoop packet snaplen. Default=2048B.") - ("timeout,t", boost::program_options::value()->default_value(3), "set snoop packet timeout. Default=3s.") - ("buffsize,b", boost::program_options::value()->default_value(256), "set snoop buffer size. Default=256MB.") - ("remoteip,r", boost::program_options::value(), "set gre remote ip.") - ("keybit,k", boost::program_options::value()->default_value(1), "set gre key bit.") - ("count,c", boost::program_options::value()->default_value(0), "Exit after receiving count packets. Default=0, No limit if count<=0.") - ("cpu", boost::program_options::value(), "set cpu affinity.") - ("priority,p", "set high priority mode.") - ("dump", "specify dump file, mostly for integrated test.") - ("nofilter", "force no filter, only use when you confirm that the snoop interface is different from the gre interface.") - ("expression", boost::program_options::value>(), "filter packets like tcpdump expression syntax."); + ("interface,i", boost::program_options::value()->value_name("NIC"), + "interface to capture packets") + ("pcapfile,f", boost::program_options::value()->value_name("PATH"), + "specify pcap file for offline mode, mostly for test") + ("remoteip,r", boost::program_options::value()->value_name("IP"), "set gre remote ip") + ("keybit,k", boost::program_options::value()->default_value(1)->value_name("BIT"), + "set gre key bit; BIT defaults 1") + ("snaplen,s", boost::program_options::value()->default_value(2048)->value_name("LENGTH"), + "set snoop packet snaplen; LENGTH defaults 2048 and units byte") + ("timeout,t", boost::program_options::value()->default_value(3)->value_name("TIME"), + "set snoop packet timeout; TIME defaults 3 and units second") + ("buffsize,b", boost::program_options::value()->default_value(256)->value_name("SIZE"), + "set snoop buffer size; SIZE defaults 256 and units MB") + ("count,c", boost::program_options::value()->default_value(0)->value_name("COUNT"), + "exit after receiving count packets; COUNT defaults; count<=0 means unlimited") + ("priority,p", "set high priority mode") + ("cpu", boost::program_options::value()->value_name("ID"), "set cpu affinity ID") + ("expression", boost::program_options::value>()->value_name("FILTER"), + R"(filter packets with FILTER; FILTER as same as tcpdump BPF expression syntax)") + ("dump", "specify dump file, mostly for integrated test") + ("nofilter", + "force no filter; only use when you confirm that the snoop interface is different from the gre interface"); boost::program_options::positional_options_description position; position.add("expression", -1); @@ -38,12 +47,13 @@ int main(int argc, const char* argv[]) { boost::program_options::variables_map vm; try { - boost::program_options::parsed_options parsed = boost::program_options::command_line_parser(argc,argv) - .options(all).positional(position).run(); + boost::program_options::parsed_options parsed = boost::program_options::command_line_parser(argc, argv) + .options(all).positional(position).run(); boost::program_options::store(parsed, vm); boost::program_options::notify(vm); } catch (boost::program_options::error& e) { - std::cerr << "error: " << e.what() << std::endl; + std::cerr << StatisLogContext::getTimeString() << "Parse command line failed, error is " << e.what() << "." + << std::endl; return 1; } @@ -61,33 +71,35 @@ int main(int argc, const char* argv[]) { // check options if (vm.count("interface") && vm.count("pcapfile")) { - std::cerr << "please choice only one snoop mode: from interface or from pcap file!" << std::endl; + std::cerr << StatisLogContext::getTimeString() + << "Please choice only one snoop mode, from interface use -i or from pcap file use -f." << std::endl; return 1; } if (!vm.count("remoteip")) { - std::cerr << "must set gre remote ip!!" << std::endl; + std::cerr << StatisLogContext::getTimeString() << "Please set gre remote ip with --remoteip or -r." + << std::endl; return 1; } std::string remoteip = vm["remoteip"].as(); int keybit = vm["keybit"].as(); - std::string filter=""; + std::string filter = ""; if (vm.count("expression")) { auto expressions = vm["expression"].as>(); std::for_each(expressions.begin(), expressions.end(), - [&filter](const std::string &express){ filter = filter + express + " "; }); + [&filter](const std::string& express) { filter = filter + express + " "; }); } // no filter option bool nofilter = false; - if(vm.count("nofilter")) { + if (vm.count("nofilter")) { nofilter = true; } if (!nofilter) { - if (filter.length()> 0) { + if (filter.length() > 0) { filter = filter + "and not host " + remoteip; } else { filter = "not host " + remoteip; @@ -121,10 +133,12 @@ int main(int argc, const char* argv[]) { // cpu option if (vm.count("cpu")) { int cpuid = vm["cpu"].as(); - if(set_cpu_affinity(cpuid) == 0) { - std::cout << "set_cpu_affinity(" << cpuid <<") success." << std::endl; + if (set_cpu_affinity(cpuid) == 0) { + std::cout << StatisLogContext::getTimeString() << "Call set_cpu_affinity(" << cpuid << ") success." + << std::endl; } else { - std::cerr << "set_cpu_affinity(" << cpuid <<") error." << std::endl; + std::cerr << StatisLogContext::getTimeString() << "Call set_cpu_affinity(" << cpuid << ") failed." + << std::endl; return 1; } } @@ -134,7 +148,7 @@ int main(int argc, const char* argv[]) { std::string path = vm["pcapfile"].as(); handler = std::make_shared(); if (handler->openPcap(path, param, "", dumpfile) != 0) { - std::cerr << "PcapOfflineHandler openPcap failed!" << std::endl; + std::cerr << StatisLogContext::getTimeString() << "Call PcapOfflineHandler openPcap failed." << std::endl; return 1; } } else if (vm.count("interface")) { @@ -142,23 +156,24 @@ int main(int argc, const char* argv[]) { std::string dev = vm["interface"].as(); handler = std::make_shared(); if (handler->openPcap(dev, param, filter, dumpfile) != 0) { - std::cerr << "PcapLiveHandler openPcap failed!" << std::endl; + std::cerr << StatisLogContext::getTimeString() << "Call PcapLiveHandler openPcap failed." << std::endl; return 1; } } else { - std::cerr << "Please choice snoop mode: from interface or from pcap file!" << std::endl; + std::cerr << StatisLogContext::getTimeString() + << "Please choice snoop mode: from interface use -i or from pcap file use -f." << std::endl; return 1; } // signal - std::signal(SIGINT, [](int){ - if(handler!= nullptr) { + std::signal(SIGINT, [](int) { + if (handler != nullptr) { handler->stopPcapLoop(); } }); - std::signal(SIGTERM, [](int){ - if(handler!= nullptr) { + std::signal(SIGTERM, [](int) { + if (handler != nullptr) { handler->stopPcapLoop(); } }); @@ -169,9 +184,10 @@ int main(int argc, const char* argv[]) { handler->addExport(greExport); // begin pcap snoop - std::cout << "begin pcap snoop!!" << std::endl; + + std::cout << StatisLogContext::getTimeString() << "Start pcap snoop." << std::endl; handler->startPcapLoop(nCount); - std::cout << "end pcap snoop!!" << std::endl; + std::cout << StatisLogContext::getTimeString() << "End pcap snoop." << std::endl; // end greExport->closeExport(); diff --git a/src/socketgre.cpp b/src/socketgre.cpp index 633143368..b6667e24e 100644 --- a/src/socketgre.cpp +++ b/src/socketgre.cpp @@ -6,12 +6,14 @@ #include #include #include +#include "statislog.h" const int INVALIDE_SOCKET_FD = -1; -PcapExportGre::PcapExportGre(const std::string &remoteip, uint32_t keybit) : - _remoteip(remoteip), - _keybit(keybit), - _socketfd(INVALIDE_SOCKET_FD) { + +PcapExportGre::PcapExportGre(const std::string& remoteip, uint32_t keybit) : + _remoteip(remoteip), + _keybit(keybit), + _socketfd(INVALIDE_SOCKET_FD) { _type = exporttype::gre; std::memset(_grebuffer, 0, sizeof(_grebuffer)); } @@ -22,7 +24,7 @@ PcapExportGre::~PcapExportGre() { int PcapExportGre::initExport() { grehdr_t grehdr; - if (_socketfd==INVALIDE_SOCKET_FD) { + if (_socketfd == INVALIDE_SOCKET_FD) { grehdr.flags = htons(0x2000); grehdr.protocol = htons(0x6558); grehdr.keybit = htonl(_keybit); @@ -31,8 +33,10 @@ int PcapExportGre::initExport() { _remote_addr.sin_family = AF_INET; _remote_addr.sin_addr.s_addr = inet_addr(_remoteip.c_str()); - if ((_socketfd = socket(AF_INET, SOCK_RAW, IPPROTO_GRE))==INVALIDE_SOCKET_FD) { - std::cerr << "create socket failed! errcode: " << errno << ", strerr: " << strerror(errno) << std::endl; + if ((_socketfd = socket(AF_INET, SOCK_RAW, IPPROTO_GRE)) == INVALIDE_SOCKET_FD) { + std::cerr << StatisLogContext::getTimeString() << "Create socket failed, error code is " << errno + << ", error is" << strerror(errno) << "." + << std::endl; return -1; } } @@ -47,24 +51,28 @@ int PcapExportGre::closeExport() { return 0; } -int PcapExportGre::exportPacket(const struct pcap_pkthdr *header, const uint8_t *pkt_data) { - size_t length = (size_t)(header->caplen<=65535 ? header->caplen:65535); - std::memcpy(reinterpret_cast(_grebuffer+sizeof(grehdr_t)), +int PcapExportGre::exportPacket(const struct pcap_pkthdr* header, const uint8_t* pkt_data) { + size_t length = (size_t) (header->caplen <= 65535 ? header->caplen : 65535); + std::memcpy(reinterpret_cast(_grebuffer + sizeof(grehdr_t)), reinterpret_cast(pkt_data), length); - ssize_t nSend = sendto(_socketfd, _grebuffer, length+sizeof(grehdr_t), 0, (struct sockaddr *)&_remote_addr, - sizeof(struct sockaddr)); + ssize_t nSend = sendto(_socketfd, _grebuffer, length + sizeof(grehdr_t), 0, (struct sockaddr*) &_remote_addr, + sizeof(struct sockaddr)); while (nSend == -1 && errno == ENOBUFS) { usleep(1000); - nSend = static_cast(sendto(_socketfd, _grebuffer, length+sizeof(grehdr_t), 0, (struct sockaddr *)&_remote_addr, - sizeof(struct sockaddr))); + nSend = static_cast(sendto(_socketfd, _grebuffer, length + sizeof(grehdr_t), 0, + (struct sockaddr*) &_remote_addr, + sizeof(struct sockaddr))); } if (nSend == -1) { - std::cerr << "socket sendto failed! errcode: " << errno << ", strerr: " << strerror(errno) << std::endl; + std::cerr << StatisLogContext::getTimeString() << "Send to socket failed, error code is " << errno + << ", error is" << strerror(errno) << "." + << std::endl; return -1; } - if (nSend < (ssize_t)(length+sizeof(grehdr_t))) { - std::cerr << "socket will send " << length+sizeof(grehdr_t) << " bytes, but only " << nSend << - " bytes are sent successfully!" << std::endl; + if (nSend < (ssize_t) (length + sizeof(grehdr_t))) { + std::cerr << StatisLogContext::getTimeString() << "Send socket " << length + sizeof(grehdr_t) + << " bytes, but only " << nSend << + " bytes are sent success." << std::endl; return 1; } return 0; diff --git a/src/statislog.cpp b/src/statislog.cpp index 13aac8b60..75a82961b 100644 --- a/src/statislog.cpp +++ b/src/statislog.cpp @@ -2,6 +2,14 @@ #include #include +std::string StatisLogContext::getTimeString() { + char time_buffer[LOG_TIME_BUF_LEN]; + const auto now = time(NULL); + const auto* ts = localtime(&now); + strftime(time_buffer, LOG_TIME_BUF_LEN, "%Y-%m-%d %H:%M:%S", ts); + return std::string("[") + time_buffer + std::string("] "); +} + StatisLogContext::StatisLogContext(bool bQuiet) : bQuiet_(bQuiet) { log_count_ = 0; @@ -110,7 +118,7 @@ void GreSendStatisLog::logSendStatis(uint64_t pkt_time, uint32_t caplen, uint64_ void GreSendStatisLog::init(const char* name) { initStatisLogFmt(name, "# [now] first_time,pkt_time,ps_recv,ps_drop,ps_ifdrop,filter_drop,," - "live_time,bps,pps,,send_num,send_drop"); + "live_time,bps,pps,,send_num,total_send_drop:send_drop"); } void GreSendStatisLog::logSendStatisGre(uint64_t pkt_time, uint32_t caplen, uint64_t count, uint64_t drop_count, @@ -150,6 +158,6 @@ void GreSendStatisLog::logSendStatisGre(std::time_t current, uint64_t pkt_time, void GreSendStatisLog::__process_send_gre_buffer(uint64_t num, uint64_t drop_count) { // send_num,send_pos,occupy - std::snprintf(gre_buffer_, sizeof(gre_buffer_), "%ld,%ld:%ld,", num, drop_count, + std::snprintf(gre_buffer_, sizeof(gre_buffer_), "%ld,%ld:%ld.", num, drop_count, drop_count - last_drop_count_); } \ No newline at end of file diff --git a/src/statislog.h b/src/statislog.h index c9a8f32bd..f0c677b56 100644 --- a/src/statislog.h +++ b/src/statislog.h @@ -5,6 +5,8 @@ #include #include +#include + #define LOG_PROMPT_COUNT 20 #define LOG_TIME_BUF_LEN 20 #define LOG_BUFFER_LEN 256 @@ -27,16 +29,24 @@ class StatisLogContext { char bps_pps_buffer_[LOG_BUFFER_LEN]; public: + static std::string getTimeString(); + explicit StatisLogContext(bool bQuiet = false); // void setQuiet(bool bQuiet); // bool getQuiet() const; protected: void initStatisLogFmt(const char* name, const char* title); - void __process_first_packet(uint64_t pkt_time, pcap_t *handle=NULL); + + void __process_first_packet(uint64_t pkt_time, pcap_t* handle = NULL); + void __process_title(); + void __process_time_buffer(std::time_t now); + void __process_bps_pps_buffer(std::time_t timep); - void __process_send_statis_buffer(uint64_t pkt_time, uint64_t filter_drop=0, pcap_t *handle=NULL); + + void __process_send_statis_buffer(uint64_t pkt_time, uint64_t filter_drop = 0, pcap_t* handle = NULL); + // void __process_recv_statis_buffer(uint64_t pkt_time); void __inline_update_statis(std::time_t timep); }; @@ -52,21 +62,28 @@ class GreStatisLogContext : public StatisLogContext { class StatisSendLog { public: virtual void initSendLog(const char* name) = 0; + virtual void logSendStatis(uint64_t pkt_time, uint32_t caplen, uint64_t count, uint64_t drop_count, - uint64_t filter_drop ,pcap_t *handle) = 0; + uint64_t filter_drop, pcap_t* handle) = 0; }; class GreSendStatisLog : public StatisSendLog, GreStatisLogContext { public: explicit GreSendStatisLog(bool bQuiet = false); + void initSendLog(const char* name); - void logSendStatis(uint64_t pkt_time, uint32_t caplen, uint64_t count=0, uint64_t drop_count=0, - uint64_t filter_drop=0 ,pcap_t *handle=NULL); + + void logSendStatis(uint64_t pkt_time, uint32_t caplen, uint64_t count = 0, uint64_t drop_count = 0, + uint64_t filter_drop = 0, pcap_t* handle = NULL); + void init(const char* name); + void logSendStatisGre(uint64_t pkt_time, uint32_t caplen, uint64_t count, uint64_t drop_count, - uint64_t filter_drop = 0, pcap_t *handle = NULL); + uint64_t filter_drop = 0, pcap_t* handle = NULL); + void logSendStatisGre(std::time_t current, uint64_t pkt_time, uint64_t count, - uint64_t drop_count, uint64_t filter_drop = 0, pcap_t *handle = NULL); + uint64_t drop_count, uint64_t filter_drop = 0, pcap_t* handle = NULL); + protected: void __process_send_gre_buffer(uint64_t num, uint64_t drop_count); }; From 8e92294c6f792a7f5c28f6b9badf4532c91a274d Mon Sep 17 00:00:00 2001 From: "vincent.ye" Date: Fri, 30 Aug 2019 10:12:09 +0800 Subject: [PATCH 02/74] fix windows compile error --- src/pktminerg.cpp | 5 ++++- src/socketgre.cpp | 18 ++++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/pktminerg.cpp b/src/pktminerg.cpp index e84a07867..971424f40 100644 --- a/src/pktminerg.cpp +++ b/src/pktminerg.cpp @@ -88,6 +88,9 @@ int main(int argc, const char* argv[]) { } int pmtudisc = -1; +#ifdef WIN32 + //TODO: support pmtudisc_option on WIN32 +#else if (vm.count("pmtudisc_option")) { const auto pmtudisc_option = vm["pmtudisc_option"].as(); if (pmtudisc_option == "do") { @@ -102,7 +105,7 @@ int main(int argc, const char* argv[]) { return 1; } } - +#endif // WIN32 if (!vm.count("remoteip")) { std::cerr << StatisLogContext::getTimeString() << "Please set gre remote ip with --remoteip or -r." << std::endl; diff --git a/src/socketgre.cpp b/src/socketgre.cpp index 6d3c83789..bc2a6f475 100644 --- a/src/socketgre.cpp +++ b/src/socketgre.cpp @@ -69,17 +69,19 @@ int PcapExportGre::initSockets(size_t index, uint32_t keybit) { << std::endl; return -1; } -#endif // WIN32 - } - if (_pmtudisc >= 0) { - if (setsockopt(socketfd, SOL_IP, IP_MTU_DISCOVER, &_pmtudisc, sizeof(_pmtudisc)) == -1) { - std::cerr << StatisLogContext::getTimeString() << "IP_MTU_DISCOVER failed, error code is " << errno - << ", error is " << strerror(errno) << "." - << std::endl; - return -1; + if (_pmtudisc >= 0) { + if (setsockopt(socketfd, SOL_IP, IP_MTU_DISCOVER, &_pmtudisc, sizeof(_pmtudisc)) == -1) { + std::cerr << StatisLogContext::getTimeString() << "IP_MTU_DISCOVER failed, error code is " << errno + << ", error is " << strerror(errno) << "." + << std::endl; + return -1; + } } +#endif // WIN32 } + + } return 0; } From ad7f779dea68c09bed72da5eea8f866db5b8407a Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Tue, 3 Sep 2019 15:33:48 +0800 Subject: [PATCH 03/74] Add some description about libpcap TPACKET_V3 performance issue on CentOS. --- INSTALL.md | 1 + 1 file changed, 1 insertion(+) diff --git a/INSTALL.md b/INSTALL.md index fa40e98bf..270f36996 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -7,6 +7,7 @@ ```shell yum install libpcap wget ``` +Note: The default libpcap with TPACKET_V3 enabled has some performance issue. If performance is critical, you can remove libpcap and reinstall libpcap-1.8.1-6.fc27.x86_64.rpm or newer version which drops the TPACKET_V3 patch: http://rpm.pbone.net/index.php3/stat/22/idpl/50238989/com/changelog.html 2. Download and install the RPM package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). From bfbe80e2f5a328af361ee866d3ceef23aad1724d Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Tue, 10 Sep 2019 16:39:00 +0800 Subject: [PATCH 04/74] Kubernetes network traffic mirror with Packet-Agent. --- docker/K8S_traffic_mirror.md | 322 +++++++++++++++++++++++++++++++++++ 1 file changed, 322 insertions(+) create mode 100644 docker/K8S_traffic_mirror.md diff --git a/docker/K8S_traffic_mirror.md b/docker/K8S_traffic_mirror.md new file mode 100644 index 000000000..c04b68d66 --- /dev/null +++ b/docker/K8S_traffic_mirror.md @@ -0,0 +1,322 @@ +# 摘要 +  随着应用开发和部署流程进一步跟上需求迭代速度,调度资源更灵活、方便集群化部署的容器架构逐渐推广开来。相比虚拟机为单位的云架构,封闭程度更高的容器化应用更难以实现流量采集。本文介绍了Kubernetes环境流量采集的三种方案。
+ +# 需要解决的问题 +  Kubernetes架构中,应用连同其依赖组件被打包为高度独立的单元,称为「容器」。容器化的业务应用尽可能降低了对外部环境的依赖程度,因此可以由控制器快速创建、配置和调整,灵活性非常高。但容器是一个相对完整而封闭的结构单元,无法直接在其镜像内部署流量采集组件。
+ +# 技术背景 +  应用虽然被打包为一个个容器,但系统对其管理是通过名为Pod的结构实现的:一个Pod中可以放置单个或多个应用容器,这些同Pod的容器共享Pod内的网络、存储等资源,彼此之间可见。
+  通过补丁,可以避免定义整个对象,只需要定义希望更改的部分。只需要定义新增的元素就可以更新一个列表。列表中已有的元素仍然保留,新增的元素和已有的元素会被合并。
+  准入控制器是一段代码,会拦截 Kubernetes API Server 收到的请求,拦截发生在认证和鉴权完成之后,对象进行持久化之前。可以定义两种类型的 Admission webhook:Validating 和 Mutating。Validating 类型的 Webhook 可以根据自定义的准入策略决定是否拒绝请求;Mutating 类型的 Webhook 可以根据自定义配置来对请求进行编辑。
+ +# 方案一:修改 yaml 配置文件 +* 直接修改YAML文件,直接将流量采集的镜像部署到被监控应用的同一个POD中去: +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment +spec: + selector: + matchLabels: + app: nginx + replicas: 2 + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.7.9 + ports: + - containerPort: 80 + - name: monitor + image: docker.io/s1240zsw/centos-packet-agent:v1 + stdin: true + tty: true +``` + +# 方案二:补丁命令 +* Patch deployment,应用部署后通过修改补丁将流量采集的镜像部署到被监控应用的同一个POD中去 +```console +kubectl patch deployment nginx-deployment -p '{"spec":{"template":{"spec":{"containers":[{"name":"monitor","image":"docker.io/s1240zsw/centos-packet-agent:v1","stdin":true,"tty":true}]}}}}' +``` + +# 方案三:WebHook +* WebHook,通过监控pod的启动停止行为,在需要监控的pod启动的时候自动将将流量采集的镜像部署到被监控应用的同一个POD中去 + 1. 生成密钥 + ```console + ./webhook-create-signed-cert.sh \ + --service sidecar-injector-webhook-svc \ + --secret sidecar-injector-webhook-certs \ + --namespace default + ``` + + * webhook-create-signed-cert.sh + ```bash + #!/bin/bash + set -e + usage() { + cat <> ${tmpdir}/csr.conf + [req] + req_extensions = v3_req + distinguished_name = req_distinguished_name + [req_distinguished_name] + [ v3_req ] + basicConstraints = CA:FALSE + keyUsage = nonRepudiation, digitalSignature, keyEncipherment + extendedKeyUsage = serverAuth + subjectAltName = @alt_names + [alt_names] + DNS.1 = ${service} + DNS.2 = ${service}.${namespace} + DNS.3 = ${service}.${namespace}.svc + EOF + + openssl genrsa -out ${tmpdir}/server-key.pem 2048 + openssl req -new -key ${tmpdir}/server-key.pem -subj "/CN=${service}.${namespace}.svc" -out ${tmpdir}/server.csr -config ${tmpdir}/csr.conf + + # clean-up any previously created CSR for our service. Ignore errors if not present. + kubectl delete csr ${csrName} 2>/dev/null || true + + # create server cert/key CSR and send to k8s API + cat <&2 + exit 1 + fi + + echo ${serverCert} | openssl base64 -d -A -out ${tmpdir}/server-cert.pem + # create the secret with CA cert and server cert/key + kubectl create secret generic ${secret} \ + --from-file=key.pem=${tmpdir}/server-key.pem \ + --from-file=cert.pem=${tmpdir}/server-cert.pem \ + --dry-run -o yaml | + kubectl -n ${namespace} apply -f - + ``` + + 2. 部署密钥 + ```console +cat mutatingwebhook.yaml | \ + webhook-patch-ca-bundle.sh > \ + mutatingwebhook-ca-bundle.yaml + ``` + + * webhook-patch-ca-bundle.sh + ```bash +#!/bin/bash + ROOT=$(cd $(dirname $0)/../../; pwd) + set -o errexit + set -o nounset + set -o pipefail + export CA_BUNDLE=$(kubectl config view --raw --minify --flatten -o jsonpath='{.clusters[].cluster.certificate-authority-data}') + + if command -v envsubst >/dev/null 2>&1; then + envsubst + else + sed -e "s|\${CA_BUNDLE}|${CA_BUNDLE}|g" + fi + ``` + + * mutatingwebhook.yaml + ```yaml + apiVersion: admissionregistration.k8s.io/v1beta1 + kind: MutatingWebhookConfiguration + metadata: + name: sidecar-injector-webhook-cfg + labels: + app: sidecar-injector + webhooks: + - name: sidecar-injector.morven.me + clientConfig: + service: + name: sidecar-injector-webhook-svc + namespace: default + path: "/mutate" + caBundle: ${CA_BUNDLE} + rules: + - operations: [ "CREATE" ] + apiGroups: [""] + apiVersions: ["v1"] + resources: ["pods"] + namespaceSelector: + matchLabels: + sidecar-injector: enabled + ``` + + 3. 部署流量监控镜像 + ```bash +kubectl create -f configmap.yaml +kubectl create -f deployment.yaml +kubectl create -f service.yaml +kubectl create -f mutatingwebhook-ca-bundle.yaml + ``` + + * configmap.yaml + ```yaml + apiVersion: v1 + kind: ConfigMap + metadata: + name: sidecar-injector-webhook-configmap + data: + sidecarconfig.yaml: | + containers: + - name: sidecar-monitor + image: docker.io/s1240zsw/centos-packet-agent:v1 + stdin: true + tty: true + ``` + + * deployment.yaml + ```yaml + apiVersion: extensions/v1beta1 + kind: Deployment + metadata: + name: sidecar-injector-webhook-deployment + labels: + app: sidecar-injector + spec: + replicas: 1 + template: + metadata: + labels: + app: sidecar-injector + spec: + containers: + - name: sidecar-injector + image: morvencao/sidecar-injector:v1 + imagePullPolicy: IfNotPresent + args: + - -sidecarCfgFile=/etc/webhook/config/sidecarconfig.yaml + - -tlsCertFile=/etc/webhook/certs/cert.pem + - -tlsKeyFile=/etc/webhook/certs/key.pem + - -alsologtostderr + - -v=4 + - 2>&1 + volumeMounts: + - name: webhook-certs + mountPath: /etc/webhook/certs + readOnly: true + - name: webhook-config + mountPath: /etc/webhook/config + volumes: + - name: webhook-certs + secret: + secretName: sidecar-injector-webhook-certs + - name: webhook-config + configMap: + name: sidecar-injector-webhook-configmap +``` + + * service.yaml + ```yaml + apiVersion: v1 + kind: Service + metadata: + name: sidecar-injector-webhook-svc + labels: + app: sidecar-injector + spec: + ports: + - port: 443 + targetPort: 443 + selector: + app: sidecar-injector + ``` + + 4. 给需要监控的应用打上标签 + ```console + kubectl patch deployment nginx-deployment -p '{"spec":{"template":{"metadata":{"annotations":{"sidecar-injector-webhook.morven.me/inject": "true"}}}}}' + ``` + +# 结论 +  优先采用修改yaml文件的方法,如果没有修改yaml文件的权限,那么可以采用Patch deployment方法。如果以上方法都不能用最后再采用WebHook方法。
+ +# 参考 +1. [Istio Sidecar 注入过程解密](https://istio.io/zh/blog/2019/data-plane-setup/) +2. [Diving into Kubernetes MutatingAdmissionWebhook](https://github.com/morvencao/kube-mutating-webhook-tutorial/blob/master/medium-article.md) From 3f55176f39e63ec506cdfe804c06a02b6f2effed Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Tue, 10 Sep 2019 16:50:36 +0800 Subject: [PATCH 05/74] Kubernetes network traffic mirror with Packet-Agent. fix style 1 --- docker/K8S_traffic_mirror.md | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/docker/K8S_traffic_mirror.md b/docker/K8S_traffic_mirror.md index c04b68d66..7ac2be7a9 100644 --- a/docker/K8S_traffic_mirror.md +++ b/docker/K8S_traffic_mirror.md @@ -52,7 +52,6 @@ kubectl patch deployment nginx-deployment -p '{"spec":{"template":{"spec":{"cont --secret sidecar-injector-webhook-certs \ --namespace default ``` - * webhook-create-signed-cert.sh ```bash #!/bin/bash @@ -178,18 +177,16 @@ kubectl patch deployment nginx-deployment -p '{"spec":{"template":{"spec":{"cont --from-file=cert.pem=${tmpdir}/server-cert.pem \ --dry-run -o yaml | kubectl -n ${namespace} apply -f - - ``` - + ``` 2. 部署密钥 ```console -cat mutatingwebhook.yaml | \ - webhook-patch-ca-bundle.sh > \ - mutatingwebhook-ca-bundle.yaml + cat mutatingwebhook.yaml | \ + webhook-patch-ca-bundle.sh > \ + mutatingwebhook-ca-bundle.yaml ``` - * webhook-patch-ca-bundle.sh ```bash -#!/bin/bash + #!/bin/bash ROOT=$(cd $(dirname $0)/../../; pwd) set -o errexit set -o nounset @@ -201,8 +198,7 @@ cat mutatingwebhook.yaml | \ else sed -e "s|\${CA_BUNDLE}|${CA_BUNDLE}|g" fi - ``` - + ``` * mutatingwebhook.yaml ```yaml apiVersion: admissionregistration.k8s.io/v1beta1 @@ -227,16 +223,14 @@ cat mutatingwebhook.yaml | \ namespaceSelector: matchLabels: sidecar-injector: enabled - ``` - + ``` 3. 部署流量监控镜像 ```bash -kubectl create -f configmap.yaml -kubectl create -f deployment.yaml -kubectl create -f service.yaml -kubectl create -f mutatingwebhook-ca-bundle.yaml + kubectl create -f configmap.yaml + kubectl create -f deployment.yaml + kubectl create -f service.yaml + kubectl create -f mutatingwebhook-ca-bundle.yaml ``` - * configmap.yaml ```yaml apiVersion: v1 @@ -251,7 +245,7 @@ kubectl create -f mutatingwebhook-ca-bundle.yaml stdin: true tty: true ``` - + * deployment.yaml ```yaml apiVersion: extensions/v1beta1 @@ -291,8 +285,7 @@ kubectl create -f mutatingwebhook-ca-bundle.yaml - name: webhook-config configMap: name: sidecar-injector-webhook-configmap -``` - + ``` * service.yaml ```yaml apiVersion: v1 @@ -308,7 +301,6 @@ kubectl create -f mutatingwebhook-ca-bundle.yaml selector: app: sidecar-injector ``` - 4. 给需要监控的应用打上标签 ```console kubectl patch deployment nginx-deployment -p '{"spec":{"template":{"metadata":{"annotations":{"sidecar-injector-webhook.morven.me/inject": "true"}}}}}' @@ -320,3 +312,4 @@ kubectl create -f mutatingwebhook-ca-bundle.yaml # 参考 1. [Istio Sidecar 注入过程解密](https://istio.io/zh/blog/2019/data-plane-setup/) 2. [Diving into Kubernetes MutatingAdmissionWebhook](https://github.com/morvencao/kube-mutating-webhook-tutorial/blob/master/medium-article.md) + From dfc51c6f6bebc54360ea45be171e05696679f2af Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Tue, 10 Sep 2019 16:52:56 +0800 Subject: [PATCH 06/74] Kubernetes network traffic mirror with Packet-Agent. fix style 2 --- docker/K8S_traffic_mirror.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docker/K8S_traffic_mirror.md b/docker/K8S_traffic_mirror.md index 7ac2be7a9..7ea005f92 100644 --- a/docker/K8S_traffic_mirror.md +++ b/docker/K8S_traffic_mirror.md @@ -52,7 +52,7 @@ kubectl patch deployment nginx-deployment -p '{"spec":{"template":{"spec":{"cont --secret sidecar-injector-webhook-certs \ --namespace default ``` - * webhook-create-signed-cert.sh + * webhook-create-signed-cert.sh ```bash #!/bin/bash set -e @@ -184,7 +184,7 @@ kubectl patch deployment nginx-deployment -p '{"spec":{"template":{"spec":{"cont webhook-patch-ca-bundle.sh > \ mutatingwebhook-ca-bundle.yaml ``` - * webhook-patch-ca-bundle.sh + * webhook-patch-ca-bundle.sh ```bash #!/bin/bash ROOT=$(cd $(dirname $0)/../../; pwd) @@ -199,7 +199,7 @@ kubectl patch deployment nginx-deployment -p '{"spec":{"template":{"spec":{"cont sed -e "s|\${CA_BUNDLE}|${CA_BUNDLE}|g" fi ``` - * mutatingwebhook.yaml + * mutatingwebhook.yaml ```yaml apiVersion: admissionregistration.k8s.io/v1beta1 kind: MutatingWebhookConfiguration @@ -231,7 +231,7 @@ kubectl patch deployment nginx-deployment -p '{"spec":{"template":{"spec":{"cont kubectl create -f service.yaml kubectl create -f mutatingwebhook-ca-bundle.yaml ``` - * configmap.yaml + * configmap.yaml ```yaml apiVersion: v1 kind: ConfigMap @@ -246,7 +246,7 @@ kubectl patch deployment nginx-deployment -p '{"spec":{"template":{"spec":{"cont tty: true ``` - * deployment.yaml + * deployment.yaml ```yaml apiVersion: extensions/v1beta1 kind: Deployment @@ -286,7 +286,7 @@ kubectl patch deployment nginx-deployment -p '{"spec":{"template":{"spec":{"cont configMap: name: sidecar-injector-webhook-configmap ``` - * service.yaml + * service.yaml ```yaml apiVersion: v1 kind: Service From e5cbdfb8b62ac15501ba1e4b5c77499d82b47c7c Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Sun, 29 Sep 2019 11:41:43 +0800 Subject: [PATCH 07/74] update install.md: add ubuntu / windows. fix: change 0.3.3 to 0.3.4 in docs. --- INSTALL.md | 59 ++++++++++++++++++++++++++++++++-- README-zh-Hans.md | 8 ++--- README.md | 8 ++--- scripts/ansible_pktg.yaml | 2 +- scripts/puppet_packet_agent.pp | 12 +++---- 5 files changed, 71 insertions(+), 18 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 270f36996..5e3072c26 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -12,15 +12,68 @@ Note: The default libpcap with TPACKET_V3 enabled has some performance issue. If 2. Download and install the RPM package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```shell -wget https://github.com/Netis/packet-agent/releases/download/v0.3.3/netis-packet-agent-0.3.4.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4.el6.x86_64.rpm rpm -ivh netis-packet-agent-0.3.4.el6.x86_64.rpm ``` + +## Ubuntu 18.04LTS + +1. Install libpcap and wget +```bash +sudo apt-get install libpcap-dev wget +``` + +2. Download and install the DEB package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). +```bash +wget https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4_amd64.deb +sudo dpkg -i netis-packet-agent-0.3.4_amd64.deb +``` + +3. If libpcap.so.1 not found when running pktminerg, create softlink for libpcap.so.1 in suitable directory. +```bash +whereis libpcap.so +cd /path/to/libpcap.so +ln -s libpcap.so.x.y.z libpcap.so.1 +``` + + ## SUSE 12 -1. Download and install the RPM package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). +1. Install libpcap and wget + +```shell +yum install libpcap wget +``` + +2. Download and install the RPM package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```shell -wget https://github.com/Netis/packet-agent/releases/download/v0.3.3/netis-packet-agent-0.3.4.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4.el6.x86_64.rpm rpm -ivh netis-packet-agent-0.3.4.el6.x86_64.rpm ``` + + +## Windows 7/8/10 x64 + +1. Download and Install [Winpcap](https://www.winpcap.org/install/bin/WinPcap_4_1_3.exe) of latest version. +2. Download and Install [Microsoft Visual C++ Redistributable for Visual Studio 2017 x64](https://aka.ms/vs/15/release/vc_redist.x64.exe). +3. Download and ZIP package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). +4. Extract pktminerg and other utilities from zip, and run it in cmd in Administrator Mode. + +Note: On Windows platform, you must use NIC's NT Device Name with format "\Device\NPF_{UUID}" as interface param. You can get it with following command: +``` + C:\> getmac /fo csv /v + "Connection Name","Network Adapter","Physical Address","Transport Name" + "Ethernet","Intel(R) Ethernet Connection (4) I219-V","8C-16-45-6B-53-B5","\Device\Tcpip_{4C25EA92-09DF-4FD3-A8B3-1B68E57443E2}" +``` +Take last field(Transport Name) and replace "Tcpip_" with "NPF_" as follow, then you can get interface param of Windows. +``` + \Device\NPF_{4C25EA92-09DF-4FD3-A8B3-1B68E57443E2} +``` +Use example: +``` + C:\> pktminerg -i \Device\NPF_{4C25EA92-09DF-4FD3-A8B3-1B68E57443E2} -r 172.24.103.201 + C:\> gredump -i \Device\NPF_{4C25EA92-09DF-4FD3-A8B3-1B68E57443E2} -o capture.pcap +``` + diff --git a/README-zh-Hans.md b/README-zh-Hans.md index 78c46f628..1487b5075 100644 --- a/README-zh-Hans.md +++ b/README-zh-Hans.md @@ -35,13 +35,13 @@ yum install libpcap wget 2. 下载并安装RPM包。您可以从[这个地址](https://github.com/Netis/packet-agent/releases)获取最新版本的软件包。 ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.3/netis-packet-agent-0.3.4.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4.el6.x86_64.rpm rpm -ivh netis-packet-agent-0.3.4.el6.x86_64.rpm ``` #### SUSE12 1. 下载并安装RPM包。您可以从[这个地址](https://github.com/Netis/packet-agent/releases)获取最新版本的软件包。 ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.3/netis-packet-agent-0.3.4.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4.el6.x86_64.rpm rpm -ivh netis-packet-agent-0.3.4.el6.x86_64.rpm ``` @@ -53,8 +53,8 @@ sudo apt-get install libpcap-dev wget 2. 下载并安装DEB包。您可以从[这个地址](https://github.com/Netis/packet-agent/releases)获取最新版本的软件包。 ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.3/netis-packet-agent-0.3.3_amd64.deb -sudo dpkg -i netis-packet-agent-0.3.3_amd64.deb +wget https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4_amd64.deb +sudo dpkg -i netis-packet-agent-0.3.4_amd64.deb ``` 3. 如果提示libpcap.so找不到,到libpcap.so所在目录下创建libpcap.so.1软链接。 diff --git a/README.md b/README.md index 5d2b31168..b18b7c609 100644 --- a/README.md +++ b/README.md @@ -35,14 +35,14 @@ yum install libpcap wget 2. Download and install the RPM package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.3/netis-packet-agent-0.3.4.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4.el6.x86_64.rpm rpm -ivh netis-packet-agent-0.3.4.el6.x86_64.rpm ``` #### SUSE 12 1. Download and install the RPM package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.3/netis-packet-agent-0.3.4.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4.el6.x86_64.rpm rpm -ivh netis-packet-agent-0.3.4.el6.x86_64.rpm ``` @@ -55,8 +55,8 @@ sudo apt-get install libpcap-dev wget 2. Download and install the DEB package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.3/netis-packet-agent-0.3.3_amd64.deb -sudo dpkg -i netis-packet-agent-0.3.3_amd64.deb +wget https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4_amd64.deb +sudo dpkg -i netis-packet-agent-0.3.4_amd64.deb ``` 3. If libpcap.so.1 not found when running pktminerg, create softlink for libpcap.so.1 in suitable directory. diff --git a/scripts/ansible_pktg.yaml b/scripts/ansible_pktg.yaml index 46ea587b4..71479d636 100644 --- a/scripts/ansible_pktg.yaml +++ b/scripts/ansible_pktg.yaml @@ -3,7 +3,7 @@ hosts: servers_to_install_pktg vars: rpm_file: netis-packet-agent-0.3.4.el6.x86_64.rpm - deb_file: netis-packet-agent-0.3.3_amd64.deb + deb_file: netis-packet-agent-0.3.4_amd64.deb remote_user: root gather_facts: True diff --git a/scripts/puppet_packet_agent.pp b/scripts/puppet_packet_agent.pp index 114796903..3ab35df13 100644 --- a/scripts/puppet_packet_agent.pp +++ b/scripts/puppet_packet_agent.pp @@ -3,28 +3,28 @@ 'Suse': { $lib_pcap = 'libpcap'; $cur_dir = '/tmp/'; - $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.3/netis-packet-agent-0.3.4.el6.x86_64.rpm'; + $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4.el6.x86_64.rpm'; $package_provider = 'rpm'; $install_file = '/tmp/netis-packet-agent-0.3.4.el6.x86_64.rpm' } 'RedHat': { $lib_pcap = 'libpcap'; $cur_dir = '/tmp/'; - $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.3/netis-packet-agent-0.3.4.el6.x86_64.rpm'; + $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4.el6.x86_64.rpm'; $package_provider = 'rpm'; $install_file = '/tmp/netis-packet-agent-0.3.4.el6.x86_64.rpm' } 'Debian': { $lib_pcap = 'libpcap-dev'; $cur_dir = '/tmp/'; - $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.3/netis-packet-agent-0.3.3_amd64.deb'; + $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4_amd64.deb'; $package_provider = 'dpkg'; - $install_file = '/tmp/netis-packet-agent-0.3.3_amd64.deb' + $install_file = '/tmp/netis-packet-agent-0.3.4_amd64.deb' } default: { $lib_pcap = 'libpcap'; $cur_dir = '/tmp/'; - $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.3/netis-packet-agent-0.3.4.el6.x86_64.rpm'; + $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4.el6.x86_64.rpm'; $package_provider = 'rpm'; $install_file = '/tmp/netis-packet-agent-0.3.4.el6.x86_64.rpm' } @@ -47,4 +47,4 @@ ensure => installed, provider => $package_provider, source => $install_file -} \ No newline at end of file +} From 32b7d8f986ec2af4490289e1a7c872f599484ac3 Mon Sep 17 00:00:00 2001 From: "Justin.Su" Date: Wed, 6 Nov 2019 16:39:12 +0800 Subject: [PATCH 08/74] add nofilter option check. --- CHANGES.md | 5 +++++ CMakeLists.txt | 2 +- INSTALL.md | 12 ++++++------ README-zh-Hans.md | 16 ++++++++-------- README.md | 16 ++++++++-------- USAGE.md | 6 +++--- scripts/ansible_pktg.md | 2 +- scripts/ansible_pktg.yaml | 4 ++-- scripts/puppet_packet_agent.pp | 16 ++++++++-------- src/pktminerg.cpp | 19 ++++++++++++++++++- src/socketgre.cpp | 25 +++++++++++++++---------- 11 files changed, 75 insertions(+), 48 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index a31c71cb0..2a50e85dc 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,11 @@ The list of the most significant changes made in Netis Packet Agent over time. +## Netis Packet Agent 0.3.5 + +### Features +* Support option check for --nofilter option invalid usage. + ## Netis Packet Agent 0.3.4 ### Features diff --git a/CMakeLists.txt b/CMakeLists.txt index f8d301975..0d3b22d7b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ endif () # set PKTMINERG_MAJOR_VERSION, PKTMINERG_MINOR_VERSION, etc. set(PKTMINERG_MAJOR_VERSION "0") set(PKTMINERG_MINOR_VERSION "3") -set(PKTMINERG_PATCH_VERSION "4") +set(PKTMINERG_PATCH_VERSION "5") set(PKTMINERG_VERSION_STRING "${PKTMINERG_MAJOR_VERSION}.${PKTMINERG_MINOR_VERSION}.${PKTMINERG_PATCH_VERSION}") if(WIN32) diff --git a/INSTALL.md b/INSTALL.md index 5e3072c26..e3d334ebd 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -12,8 +12,8 @@ Note: The default libpcap with TPACKET_V3 enabled has some performance issue. If 2. Download and install the RPM package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```shell -wget https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4.el6.x86_64.rpm -rpm -ivh netis-packet-agent-0.3.4.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5.el6.x86_64.rpm +rpm -ivh netis-packet-agent-0.3.5.el6.x86_64.rpm ``` @@ -26,8 +26,8 @@ sudo apt-get install libpcap-dev wget 2. Download and install the DEB package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4_amd64.deb -sudo dpkg -i netis-packet-agent-0.3.4_amd64.deb +wget https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5_amd64.deb +sudo dpkg -i netis-packet-agent-0.3.5_amd64.deb ``` 3. If libpcap.so.1 not found when running pktminerg, create softlink for libpcap.so.1 in suitable directory. @@ -49,8 +49,8 @@ yum install libpcap wget 2. Download and install the RPM package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```shell -wget https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4.el6.x86_64.rpm -rpm -ivh netis-packet-agent-0.3.4.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5.el6.x86_64.rpm +rpm -ivh netis-packet-agent-0.3.5.el6.x86_64.rpm ``` diff --git a/README-zh-Hans.md b/README-zh-Hans.md index 1487b5075..b9d0d6436 100644 --- a/README-zh-Hans.md +++ b/README-zh-Hans.md @@ -2,9 +2,9 @@ [English](README.md) ∙ 简体中文 ![packet agent's title](./img/title.jpg) -# Netis Packet Agent 0.3.4 +# Netis Packet Agent 0.3.5 -[![Stable release](https://img.shields.io/badge/version-0.3.4-green.svg)](https://github.com/Netis/packet-agent/releases/tag/0.3.4) +[![Stable release](https://img.shields.io/badge/version-0.3.5-green.svg)](https://github.com/Netis/packet-agent/releases/tag/0.3.5) [![Software License](https://img.shields.io/badge/license-BSD3-green.svg)](./LICENSE.md) @@ -35,14 +35,14 @@ yum install libpcap wget 2. 下载并安装RPM包。您可以从[这个地址](https://github.com/Netis/packet-agent/releases)获取最新版本的软件包。 ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4.el6.x86_64.rpm -rpm -ivh netis-packet-agent-0.3.4.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5.el6.x86_64.rpm +rpm -ivh netis-packet-agent-0.3.5.el6.x86_64.rpm ``` #### SUSE12 1. 下载并安装RPM包。您可以从[这个地址](https://github.com/Netis/packet-agent/releases)获取最新版本的软件包。 ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4.el6.x86_64.rpm -rpm -ivh netis-packet-agent-0.3.4.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5.el6.x86_64.rpm +rpm -ivh netis-packet-agent-0.3.5.el6.x86_64.rpm ``` #### Ubuntu 18.04LTS @@ -53,8 +53,8 @@ sudo apt-get install libpcap-dev wget 2. 下载并安装DEB包。您可以从[这个地址](https://github.com/Netis/packet-agent/releases)获取最新版本的软件包。 ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4_amd64.deb -sudo dpkg -i netis-packet-agent-0.3.4_amd64.deb +wget https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5_amd64.deb +sudo dpkg -i netis-packet-agent-0.3.5_amd64.deb ``` 3. 如果提示libpcap.so找不到,到libpcap.so所在目录下创建libpcap.so.1软链接。 diff --git a/README.md b/README.md index b18b7c609..22f1ef5a3 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ English ∙ [简体中文](README-zh-Hans.md) ![packet agent's title](./img/title.jpg) -# Netis Packet Agent 0.3.4 +# Netis Packet Agent 0.3.5 -[![Stable release](https://img.shields.io/badge/version-0.3.4-green.svg)](https://github.com/Netis/packet-agent/releases/tag/0.3.4) +[![Stable release](https://img.shields.io/badge/version-0.3.5-green.svg)](https://github.com/Netis/packet-agent/releases/tag/0.3.5) [![Software License](https://img.shields.io/badge/license-BSD3-green.svg)](./LICENSE.md) ## What is Netis Packet Agent? @@ -35,15 +35,15 @@ yum install libpcap wget 2. Download and install the RPM package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4.el6.x86_64.rpm -rpm -ivh netis-packet-agent-0.3.4.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5.el6.x86_64.rpm +rpm -ivh netis-packet-agent-0.3.5.el6.x86_64.rpm ``` #### SUSE 12 1. Download and install the RPM package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4.el6.x86_64.rpm -rpm -ivh netis-packet-agent-0.3.4.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5.el6.x86_64.rpm +rpm -ivh netis-packet-agent-0.3.5.el6.x86_64.rpm ``` @@ -55,8 +55,8 @@ sudo apt-get install libpcap-dev wget 2. Download and install the DEB package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4_amd64.deb -sudo dpkg -i netis-packet-agent-0.3.4_amd64.deb +wget https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5_amd64.deb +sudo dpkg -i netis-packet-agent-0.3.5_amd64.deb ``` 3. If libpcap.so.1 not found when running pktminerg, create softlink for libpcap.so.1 in suitable directory. diff --git a/USAGE.md b/USAGE.md index 1f88a157f..40c9647eb 100644 --- a/USAGE.md +++ b/USAGE.md @@ -33,9 +33,9 @@ Allowed options: --expression FILTER filter packets with FILTER; FILTER as same as tcpdump BPF expression syntax --dump specify dump file, mostly for integrated test - --nofilter force no filter; only use when you confirm - that the snoop interface is different from - the gre interface + --nofilter force no filter; In online mode, only use when GRE interface + is set via CLI, AND you confirm that the snoop interface is + different from the gre interface. ``` diff --git a/scripts/ansible_pktg.md b/scripts/ansible_pktg.md index 9f9cfca5a..beb88b873 100644 --- a/scripts/ansible_pktg.md +++ b/scripts/ansible_pktg.md @@ -1,6 +1,6 @@ # 说明 1. 在主控的中心服务器上需要安装有 ansible 程序。如果没有,可以使用类似 yum install ansible 的命令安装。
2. 将需要安装 packet-agent 的机器加入 ansible 的 hosts 文件:比如添加组 [servers_to_install_pktg] 到 /etc/ansible/hosts,并在该组下加入若干机器IP。
-3. 拷贝待安装的 packet-agent rpm/deb 到 ansible_pktg.yaml 同一目录下。如果待安装的 rpm/deb 不是 yaml 中指定的 netis-packet-agent-0.3.4.el6.x86_64.rpm / netis-packet-agent-0.3.3_amd64.deb,则将 ansible_pktg.yaml 中 rpm_file/deb_file 修改为你需要的文件名。
+3. 拷贝待安装的 packet-agent rpm/deb 到 ansible_pktg.yaml 同一目录下。如果待安装的 rpm/deb 不是 yaml 中指定的 netis-packet-agent-0.3.5.el6.x86_64.rpm / netis-packet-agent-0.3.5_amd64.deb,则将 ansible_pktg.yaml 中 rpm_file/deb_file 修改为你需要的文件名。
4. 执行 ansible-playbook ansible_pktg.yaml 命令,将 packet-agent 程序安装到各个目标机器上。
diff --git a/scripts/ansible_pktg.yaml b/scripts/ansible_pktg.yaml index 71479d636..d96b73b83 100644 --- a/scripts/ansible_pktg.yaml +++ b/scripts/ansible_pktg.yaml @@ -2,8 +2,8 @@ - name: install packet-agent and its depends hosts: servers_to_install_pktg vars: - rpm_file: netis-packet-agent-0.3.4.el6.x86_64.rpm - deb_file: netis-packet-agent-0.3.4_amd64.deb + rpm_file: netis-packet-agent-0.3.5.el6.x86_64.rpm + deb_file: netis-packet-agent-0.3.5_amd64.deb remote_user: root gather_facts: True diff --git a/scripts/puppet_packet_agent.pp b/scripts/puppet_packet_agent.pp index 3ab35df13..8230483dc 100644 --- a/scripts/puppet_packet_agent.pp +++ b/scripts/puppet_packet_agent.pp @@ -3,30 +3,30 @@ 'Suse': { $lib_pcap = 'libpcap'; $cur_dir = '/tmp/'; - $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4.el6.x86_64.rpm'; + $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5.el6.x86_64.rpm'; $package_provider = 'rpm'; - $install_file = '/tmp/netis-packet-agent-0.3.4.el6.x86_64.rpm' + $install_file = '/tmp/netis-packet-agent-0.3.5.el6.x86_64.rpm' } 'RedHat': { $lib_pcap = 'libpcap'; $cur_dir = '/tmp/'; - $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4.el6.x86_64.rpm'; + $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5.el6.x86_64.rpm'; $package_provider = 'rpm'; - $install_file = '/tmp/netis-packet-agent-0.3.4.el6.x86_64.rpm' + $install_file = '/tmp/netis-packet-agent-0.3.5.el6.x86_64.rpm' } 'Debian': { $lib_pcap = 'libpcap-dev'; $cur_dir = '/tmp/'; - $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4_amd64.deb'; + $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5_amd64.deb'; $package_provider = 'dpkg'; - $install_file = '/tmp/netis-packet-agent-0.3.4_amd64.deb' + $install_file = '/tmp/netis-packet-agent-0.3.5_amd64.deb' } default: { $lib_pcap = 'libpcap'; $cur_dir = '/tmp/'; - $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.4/netis-packet-agent-0.3.4.el6.x86_64.rpm'; + $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5.el6.x86_64.rpm'; $package_provider = 'rpm'; - $install_file = '/tmp/netis-packet-agent-0.3.4.el6.x86_64.rpm' + $install_file = '/tmp/netis-packet-agent-0.3.5.el6.x86_64.rpm' } } diff --git a/src/pktminerg.cpp b/src/pktminerg.cpp index 971424f40..57d53b6c8 100644 --- a/src/pktminerg.cpp +++ b/src/pktminerg.cpp @@ -43,7 +43,9 @@ int main(int argc, const char* argv[]) { R"(filter packets with FILTER; FILTER as same as tcpdump BPF expression syntax)") ("dump", "specify dump file, mostly for integrated test") ("nofilter", - "force no filter; only use when you confirm that the snoop interface is different from the gre interface"); + "force no filter; In online mode, only use when GRE interface " + "is set via CLI, AND you confirm that the snoop interface is " + "different from the gre interface."); boost::program_options::positional_options_description position; position.add("expression", -1); @@ -129,6 +131,21 @@ int main(int argc, const char* argv[]) { bool nofilter = false; if (vm.count("nofilter")) { nofilter = true; + if (vm.count("interface")) { + if (bind_device == "") { + std::cerr << StatisLogContext::getTimeString() << "Can't enable --nofilter option " + << "because GRE bind devices(-B) is not set, GRE packet might be sent via packet captured interface(-i)" + << std::endl; + return 1; + } else if (bind_device == vm["interface"].as()) { + std::cerr << StatisLogContext::getTimeString() << "Can't enable --nofilter option " + << "because packet captured interface(-i) is equal to GRE bind devices(-B)" + << std::endl; + return 1; + } else { + // valid + } + } } if (nofilter) { diff --git a/src/socketgre.cpp b/src/socketgre.cpp index bc2a6f475..baadd6d03 100644 --- a/src/socketgre.cpp +++ b/src/socketgre.cpp @@ -65,21 +65,26 @@ int PcapExportGre::initSockets(size_t index, uint32_t keybit) { #else if (setsockopt(socketfd, SOL_SOCKET, SO_BINDTODEVICE, _bind_device.c_str(), _bind_device.length()) < 0) { std::cerr << StatisLogContext::getTimeString() << "SO_BINDTODEVICE failed, error code is " << errno - << ", error is " << strerror(errno) << "." - << std::endl; + << ", error is " << strerror(errno) << "." + << std::endl; return -1; } +#endif // WIN32 + } - if (_pmtudisc >= 0) { - if (setsockopt(socketfd, SOL_IP, IP_MTU_DISCOVER, &_pmtudisc, sizeof(_pmtudisc)) == -1) { - std::cerr << StatisLogContext::getTimeString() << "IP_MTU_DISCOVER failed, error code is " << errno - << ", error is " << strerror(errno) << "." - << std::endl; - return -1; - } +#ifdef WIN32 + //TODO: bind device on WIN32 +#else + if (_pmtudisc >= 0) { + if (setsockopt(socketfd, SOL_IP, IP_MTU_DISCOVER, &_pmtudisc, sizeof(_pmtudisc)) == -1) { + std::cerr << StatisLogContext::getTimeString() << "IP_MTU_DISCOVER failed, error code is " << errno + << ", error is " << strerror(errno) << "." + << std::endl; + return -1; } -#endif // WIN32 } +#endif // WIN32 + } From 1bf66ee3fd975c8b080e6227b9483139a766e265 Mon Sep 17 00:00:00 2001 From: Justin Su Date: Thu, 7 Nov 2019 11:33:36 +0800 Subject: [PATCH 09/74] Update CHANGES.md --- CHANGES.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 2a50e85dc..956dc526e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,7 +5,9 @@ The list of the most significant changes made in Netis Packet Agent over time. ## Netis Packet Agent 0.3.5 ### Features -* Support option check for --nofilter option invalid usage. +* Support option check for '--nofilter' option invalid usage. Above the version 0.3.5, pktminerg will exit directly in the following cases: + - if you enable '--nofilter' option without specifying gre bind device(-B) in online mode. + - if you enable '--nofilter' option and gre bind device(-B) is same as packet captured interface(-i) in online mode. ## Netis Packet Agent 0.3.4 From e8a5c99245c737d0d1d4bde0274a59d96cc740be Mon Sep 17 00:00:00 2001 From: Justin Su Date: Thu, 7 Nov 2019 11:38:11 +0800 Subject: [PATCH 10/74] Update CHANGES.md --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 956dc526e..5ef103014 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,7 +5,7 @@ The list of the most significant changes made in Netis Packet Agent over time. ## Netis Packet Agent 0.3.5 ### Features -* Support option check for '--nofilter' option invalid usage. Above the version 0.3.5, pktminerg will exit directly in the following cases: +* Support option check for '--nofilter' option invalid usage. In version 0.3.5 or later, pktminerg will exit directly in the following cases: - if you enable '--nofilter' option without specifying gre bind device(-B) in online mode. - if you enable '--nofilter' option and gre bind device(-B) is same as packet captured interface(-i) in online mode. From 8d9603e42b91e13b0f6fbd1f0f80f78b0e47a101 Mon Sep 17 00:00:00 2001 From: Sam Zhu Date: Tue, 10 Dec 2019 14:54:18 +0800 Subject: [PATCH 11/74] update benmark report --- ...\247\350\203\275\350\257\204\346\265\213.md" | 16 ++++++++-------- img/ali-1-1.png | Bin 0 -> 17342 bytes img/ali-1-2.png | Bin 0 -> 16144 bytes img/ali-1-3.png | Bin 0 -> 17732 bytes img/ali-2-1.png | Bin 0 -> 17420 bytes img/ali-2-2.png | Bin 0 -> 13887 bytes img/ali-2-3.png | Bin 0 -> 13803 bytes img/ali-3-1.png | Bin 0 -> 18091 bytes img/ali-3-2.png | Bin 0 -> 19252 bytes img/ali-3-3.png | Bin 0 -> 14802 bytes img/ali-4-1.png | Bin 0 -> 18161 bytes img/ali-4-2.png | Bin 0 -> 14359 bytes img/ali-4-3.png | Bin 0 -> 18514 bytes img/aws-1-1.png | Bin 0 -> 14060 bytes img/aws-1-2.png | Bin 0 -> 18493 bytes img/aws-1-3.png | Bin 0 -> 13302 bytes img/aws-2-1.png | Bin 0 -> 17392 bytes img/aws-2-2.png | Bin 0 -> 14037 bytes img/aws-2-3.png | Bin 0 -> 14033 bytes img/aws-3-1.png | Bin 0 -> 14842 bytes img/aws-3-2.png | Bin 0 -> 18390 bytes img/aws-3-3.png | Bin 0 -> 14452 bytes img/aws-4-1.png | Bin 0 -> 14924 bytes img/aws-4-2.png | Bin 0 -> 16568 bytes img/aws-4-3.png | Bin 0 -> 14615 bytes 25 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 img/ali-1-1.png create mode 100644 img/ali-1-2.png create mode 100644 img/ali-1-3.png create mode 100644 img/ali-2-1.png create mode 100644 img/ali-2-2.png create mode 100644 img/ali-2-3.png create mode 100644 img/ali-3-1.png create mode 100644 img/ali-3-2.png create mode 100644 img/ali-3-3.png create mode 100644 img/ali-4-1.png create mode 100644 img/ali-4-2.png create mode 100644 img/ali-4-3.png create mode 100644 img/aws-1-1.png create mode 100644 img/aws-1-2.png create mode 100644 img/aws-1-3.png create mode 100644 img/aws-2-1.png create mode 100644 img/aws-2-2.png create mode 100644 img/aws-2-3.png create mode 100644 img/aws-3-1.png create mode 100644 img/aws-3-2.png create mode 100644 img/aws-3-3.png create mode 100644 img/aws-4-1.png create mode 100644 img/aws-4-2.png create mode 100644 img/aws-4-3.png diff --git "a/docs/Packet-Agent\346\200\247\350\203\275\350\257\204\346\265\213.md" "b/docs/Packet-Agent\346\200\247\350\203\275\350\257\204\346\265\213.md" index de7e1a1ef..a0483f91e 100644 --- "a/docs/Packet-Agent\346\200\247\350\203\275\350\257\204\346\265\213.md" +++ "b/docs/Packet-Agent\346\200\247\350\203\275\350\257\204\346\265\213.md" @@ -13,10 +13,10 @@ libpcap version 1.5.3 | | 2 cpu | 8 cpu | 12 cpu | |-----|-------|-------|--------| -|通用型 centos7.6|内存占用 508.8 M
![image](../img/image2019-7-26_12-19-28.png)|内存占用 508.8 M
![image](../img/image2019-7-26_12-20-15.png)|内存占用 508.8 M
![image](../img/image2019-7-26_12-20-33.png)| -|高主频 centos7.6|内存占用 508.8 M
![image](../img/image2019-7-26_12-21-22.png)|内存占用 508.8 M
![image](../img/image2019-7-26_12-21-51.png)|内存占用 508.8 M
![image](../img/image2019-7-26_12-22-37.png)| -|通用型 suse12.2|内存占用:280.2 M。CPU顶峰:90.3%,1175.5 Mbps
![image](../img/image2019-7-29_11-22-40.png)|内存占用:280.2 M
![image](../img/image2019-7-26_16-52-16.png)|内存占用:280.2 M
![image](../img/image2019-7-26_16-51-39.png)| -|高主频 suse12.2|内存占用:280.2 M。CPU顶峰:97.47%,1175.5 Mbps
![image](../img/image2019-7-29_11-23-48.png)|内存占用:280.2 M
![image](../img/image2019-7-26_16-53-32.png)|内存占用:280.2 M
![image](../img/image2019-7-26_16-55-46.png)| +|通用型 centos7.6|内存占用 508.8 M
![image](../img/ali-1-1.png)|内存占用 508.8 M
![image](../img/ali-1-2.png)|内存占用 508.8 M
![image](../img/ali-1-3.png)| +|高主频 centos7.6|内存占用 508.8 M
![image](../img/ali-2-1.png)|内存占用 508.8 M
![image](../img/ali-2-2.png)|内存占用 508.8 M
![image](../img/ali-2-3.png)| +|通用型 suse12.2|内存占用:280.2 M。CPU顶峰:90.3%,1175.5 Mbps
![image](../img/ali-3-1.png)|内存占用:280.2 M
![image](../img/ali-3-2.png)|内存占用:280.2 M
![image](../img/ali-3-3.png)| +|高主频 suse12.2|内存占用:280.2 M。CPU顶峰:97.47%,1175.5 Mbps
![image](../img/ali-4-1.png)|内存占用:280.2 M
![image](../img/ali-4-2.png)|内存占用:280.2 M
![image](../img/ali-4-3.png)| # 阿里云机器配置 @@ -34,10 +34,10 @@ libpcap version 1.5.3 | | 2 cpu | 8 cpu | 12 cpu | |-----|-------|-------|--------| -|通用型 centos7.6|内存占用 508.8 M
![image](../img/image2019-8-2_10-28-14.png)|内存占用 508.8 M
![image](../img/image2019-8-2_10-29-16.png)|内存占用 508.8 M
![image](../img/image2019-8-2_10-30-17.png)| -|高主频 centos7.6|内存占用 508.8 M
![image](../img/image2019-8-2_10-31-39.png)|内存占用 508.8 M
![image](../img/image2019-8-2_10-32-38.png)|内存占用 508.8 M
![image](../img/image2019-8-2_10-33-32.png)| -|通用型 suse12.2|内存占用:280.2 M
![image](../img/image2019-8-1_10-22-54.png)|内存占用:280.2 M
![image](../img/image2019-8-1_10-23-45.png)|内存占用:280.2 M
![image](../img/image2019-8-1_10-24-32.png)| -|高主频 suse12.2|内存占用:280.2 M
![image](../img/image2019-8-1_10-25-31.png)|内存占用:280.2 M
![image](../img/image2019-8-1_10-26-12.png)|内存占用:280.2 M
![image](../img/image2019-8-1_10-26-49.png)| +|通用型 centos7.6|内存占用 508.8 M
![image](../img/aws-1-1.png)|内存占用 508.8 M
![image](../img/aws-1-2.png)|内存占用 508.8 M
![image](../img/aws-1-3.png)| +|高主频 centos7.6|内存占用 508.8 M
![image](../img/aws-2-1.png)|内存占用 508.8 M
![image](../img/aws-2-2.png)|内存占用 508.8 M
![image](../img/aws-2-3.png)| +|通用型 suse12.2|内存占用:280.2 M
![image](../img/aws-3-1.png)|内存占用:280.2 M
![image](../img/aws-3-2.png)|内存占用:280.2 M
![image](../img/aws-3-3.png)| +|高主频 suse12.2|内存占用:280.2 M
![image](../img/aws-4-1.png)|内存占用:280.2 M
![image](../img/aws-4-2.png)|内存占用:280.2 M
![image](../img/aws-4-3.png)| # aws机器配置 diff --git a/img/ali-1-1.png b/img/ali-1-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7869a664a0daf7de15e13d7c3a453de3f657a99a GIT binary patch literal 17342 zcmZ|1cQjnz7dEbih!#W;o!}F_MH@k)1wkUwdnbCy=z}04dMA39=tl1)LG;mkFQd0X z^xqxi{l4p6>$ld;AJ?3F&bjC8{p@Ey``iS+Rg}Sd@Z z-2nFos`f;%Y*}H6O7t(9qO_R_|DVYw%H15XEGpc}?Dj$vB*q_Gi1mk!el}xhp)pfX zJm&s2gqF#5_57i`os|(LZ^Mzrdby3*(dN$BZpCon)hx^UW%Wsl`_9^|dtY7ET-bE3 z=+TeCr7$s@2lTXPw-<%Xd`z)NcCs&eN__lywX#a&{jc7)7nQJ6XJw%8zx(FZhvCGt zlshac7?R@1i;q~9<{>H}^784WPfOS{jZmw(?e&F{xMKBMoj1yDUsjJ%g%*10iyfqH z9&}6bPO|HFMn%1SdYlc-p*2xTcjep7zz7kbamp?l+U*oeG%%L^1cK_jNN$FLy8?}0 z%-zGd=}A%_dcPCf_OWXW>&^QN90HBq8*%R6zCyDpAuwgO0~WQLDW|PrcVeG-kUm8D zH)&etdW~h3qMKI~?HAJs@$LexMTU%e}LhqL2 z;9&@JCf%yu{Rq5Ti2-sEa4Q}V`H-Lq&imLqH~7Y;vTFYLpn1tUIc+?PxulP$s0kZ- zyvC*{D`>=Uo;%wAb!i!1fB&nv46tuIUrob_UP$O$bRDZvmS{k1W^)40eK$^~_QuP5 z<5sQNM5wazwvGv=5L8i?`0fiOR3V9YYCIM)7?NpGz!EzvTfUBCSJGdHFI23oT_hkoI9V8PH?Ft*(PG=) zIQ}yB^4>S`Fk->nj?LnYAaQ3xb+Rg->A!BtSj^j@Uz{BZ`*V1KRZo-`=UwPsDIRqH z*6h7qAfjws=|X>5*yHQ#nz&4ud&=FdZ(oUV8>kk*$GaFb_sr7#Z!F6 zQEyjo9y|Q$Ajysw-&x=66qY^D495({QaA~GE}mshXpWBB>oLN7%d+PpV=p*h^s zQc-1CnA~g1>EZNj=X4=Evl0xgwAtvwtk3!?&I7Ex)=-G$ z6~?42;D^ahj9M5UiQrYGr;#LUOzdKCsEU%Hx$miLBI_(+eWk<7iH;KNqB6nZ8-MCq zg-)+!Ry44dBNz@e=i?o6#KgoSW}lwk;RXGGDp~+O6%Viu-_%=g{aKP0>Chq+zweMk zTnq5CDw1Nqpj$T-M|!ji|2M)ru&5*oC$?eL#Rd%L20UDVW!krT#Beu+H6tzav}!#O z$KCxtU=~Xg|4HA$&ZHdhPK7Rv+IRPhz+fHFcfof!RUQM(MQdNK`tJT0;MJjKnPfLZ zp%R+20&}TcjIq1B|H@3uOxZ8Z4ZJY&0^ZJ{)%rK3E1_EzH6GFL zTBKzjTbHSqDgQ9eUd)>K3(?wdJ6gg>5#E=uRlM9}8?4LO87qui6QJ65(dREDB zC~`CySCOSg^kq%#Jh%aFCdPWGHRY9)?eOBga)TZMy4EG^awR>L+5ne2ZtK=F$%U+w z#AJDTdV+@(1XMyRhIG*qKnsie_n^rYF-4@Lt6#z15&`%VzkW%^OP$>XiKEKvpzUYF)=jf2Ml=44V)3Nt|;eKG8X{ zrHPVfQNqE{qgJW55$0>y)x4JneF)i#!b{p1;+;8YKV}EPomr5(NoMG6`P08p_xnMWHD&_g0;8|r>M4T zexrqRP_F-aI>l|T<-p=hwE?_euVKyUdZ<-K#3;o6(7X%V(HYU%^AnMf)H|N0@OaI- zz^i9S$@dTl%dUg zY!CL^Cf&&s-nDo_XFejd@Sj~-bd%9o(ZSU*6)8W9&CsI#$BPPvECVuOt>Xnv&aLsI zNjKQHO;j`mp@o>bOe1q#C9NNPI-oLL?QKe7Rx~P!`H29fSgIYRMyR=xh@F>7U`@(r z4bX_2$;da$T*sd(v#KJ@U$jb9KvjxBAAKr%-vhBTNY^py=Me!uN%a!I6o&6F z<%|`)L8=;xkhAoFtppkoVvx+suf|mS|%m7LV0Wbi{WzUku!N}+X z|K8_6>0#p45t@0N#u@|!GE-zAlX&)$;^q9QSxTwQ4$FAhPJ_U{(JO~q3fLS#PLX(JSP03&_Mci3afknjzOk3IzeyqPI{IN)Jyrtqh} zS|r^XexaBDOs%hy>2dNSR6;lrfLJ<%ZyRz}!*O#H!CY zEC%tns(!qvcXX53$az)khthN+dX{Z;+*$gnch23lYs@oM_JCPX;nV7ZwQ<|Im~~f~K#yLE$u2zA|xEZ*;3qA5XSEbEP@V zbf)5sP094(?A5MxuNFDnUM9enJQ^)U!v0e_pwAP%hHk5iuOvAEYE=8)+mzZROH$Bm z;vmz?D!DkHWM7pIdn_mvT3KJO9oVi5BBHguU0!vg5Ey$Z$RHnfFLQYu|nMcd?g|i{?2pFqC9t z1FKsgt`ujrE&t^nMK4upz9+Wu=OP!67Av#mEc_}ypZ6z_Uh1ZE))fLqN!G5&!{4?p zMiZy}=MB?&xKzk^D=t9%dfTt9i&R?1ib>3Dr5I;-!pwIG%X%YrA%>zfHfL+TCvBUx z-39(O{J8GBchktXIro}%mM4E*M4-Ah)sx4q+c5LnuKFLoUi0gA773gBywugNVNvUm zTCQ;&-`h`BH7(xPuC{dOnC~p-?q*%}$j8mLVlgIywCM^DygmiqY`d@Zb3}z4Fkn86 zK_LT5YYVoPv{ls`SJ z!WBiV%4z-$MZRx(#baaEeXA!*Np)r6WcEO-(8i;x^rGM{5K{s^xGH#L%;H>M5BoW) z(>KLgKfvL+X;Wu)Vskk=74#6(H%9u4^Rl&^U5irymm)CZpZE4aH<`4ULA&Z_AMxj88Ps=snuj z=+@N=y-iu<()Oro^enLZGl~ENO=)qZUx}z9_DIF_4xdMUT~vweanZY?C}y=K{-)+| z!&!VVFa|*ejdUVq$EX1T{b02K}W_+tGJ49%Xcp@t_>*Numg(OFsjNyaWq*hMG zFs7jV;!L)t_Jbu=vcyV*e3GiUoa3J2dih$FkeFf%v@0f7YSzKHpzrNDem9nAfT1kB zAnf)ybo|Ygcg%%59+GN^*s(bao{VH(C)N4O( za}e%_^!7V1%or3!dzM@>F$im`)OSr}-6{7)U*hMfb>5bjW8a|KMiHD33=DjnZGCAK zHmy>!(scHww=U^acbC=H1*+q;{Yi_)@8f?+ilie=n@r3RJlVY9smc~Yp5ND&{eu5F zpMIu)EL)}4q>JFoEL9ciwZ;-o>KD-aR zIA0#N2lcypac*UIk)|-iQ}4hqIv7orL|*PGbsgcNW14IpiK2Mo?sfI!lOE?H$6Dh_ zeeuPUKh~VnvsrwM#5WunNRii*_5gUH`ZFPJQ=j2=O2`O#RLPx~3bLu`+Wl>MS~F6Y z$NHlp$`6He+y(A+=@0CTrOHJ0#Kt%0i^>Kd62zq*7JeJ{xuM149Yla&ehUfylR30`e=lkGK+kiMx@L2{RwjgF>V=i(u4{2@^4Pnf8~1~Ip#4a;TT?5o zdw$W;e@Sx=gbGW+MXo*7{QRr!-F5EFhu?04O*b-aH21Y18acVT@S21&E2&!i9keVe z&4-+vAPD_gScGrb|ISl@?i*~k?>7Ek7t=biF%zZv%i44u;FjtbP!TtbOd0?TS@s(m z=;q?=?iH&)gn|!nQj5=K;y@{<;NASWBM^Bk(>tWy(xN4c18#(_xiH+I$13LV=rSwK zrgp=-J>o|37?4J?d%vmIi1*CYY}Y#!o*leR=VgeC!Te&2r?2*JyU=+9APn)7-JW&k z?&1WGW%cx*PP0x&z?`ta`pLDTq8)`*)C+%TYZ5rvFI=CKFh&p7&SzFmLcUpF|c z9lEM%8x&vm(^QOI<%T^8qj`3liXo_doD{3SjYTR@C6!*x9t36fJ^;dkm;TBUUe+cJ z6#eub$fNwkw9U*5(%yI;7^WurywkSnda>z3%~QAJ=QaFRun7|fH(`^C+AQ%~{8pi< zcQSrQj*s=i$9a!&jfyLzW_37x8(n9~FMdmdFP zfh|8}Ro(yE{FrHAY|IR1TWhWtl{^YX@CZKOmN$jYVijavx?gsaUckzOe56vaecUeUSKG?1|kfvgK^w&t%fj2iNI}s zg(B_`DhS{DhV!gp8!!6d$e3E$9mI}Ml&QuaBjX`2)|kyN&F^KtyuOvTN?uChVY6Q= z4$wly;DNRIk+<91OZd8pQU_e*3VQoZaO~>V*?f{hiZ>!tSqo?KMv@>p2|q_e)SHeM zuJxyMs~cE18M2XsiepSl&^8daPsAEVvx>FyQ4!aCQX&;|O+3y2&y^4h-{m|Mr^?1( zh4&WFWA7W6QO+p;(c&W(Fx*#VBdGtPyz32qGI=YA`2of+@#NXbCk9nH@2;Dy_=PkO zkuovILe$B9qHj`LI2~ZxP5`9YeQ7Y@G0caIuaL8H3kUdfm$cV% z(Px`qa(~`V+^moqz%X;oU1QVZt~Yo|u-zC`@A-p)*1+|h7Vu4stm>y>lpxhpo`7XESlcyzS)+XyE*Avz}rKtEEr%Q&{w`OIIqF`)T_o&EuJw%=4 z$>eSNZ~jI6BXcl1b*T_*j9k9gQ2uT>$DLvKlQQ?VpARLaTZgSUwKxAC{OqK9wYT7A8>5v2&pPDD@GR`};#33#CG&&oS_<>HE0yvHPGvDtq z)93xV-OGosPj=wh#Fc{8=0QTHZTWO!X4&foTEeB~rtX(kt{@;u-Vof;2ZKjrtNt3yRorqQ`kUN6S$rpCFB%b(g!gUQ>M>klgpfQPjw82Y7rM8%2X4Lk%VdUE|^6 z!py;c{dK@;d`*=Y$rPoq2FAK<1K2)x1{DgH2sbxjs)4W3)sFA=Y>E#1;q#_*_v7NZ z{V9q9pKo_4{{TaoLq>)WcWTxHF+FL&|F?DWW!%o?-$vVU06t?Y)~e>a!Mi(y-(Oqb zT23z$5MoYtOFeyg!M|(+IJ~r62Eh37NB=YNkf|!>gP8@OVadf_&3usFHRk2xr0~?p zTWzL*@O2I4jIELLo5=z3K8JjsL&xlq#L{*v$WHYNrUQQ?hmC@d&7{%e3xvcRXMT_K zXFXs)oukeMZ&l#5w)}sJ*$Vh@T(HNFy-#u9|E;jBOmy=LDq$W{eiltVm>IaB-b&wn zv3sO*0|vlgv?KuM!~B~8)fd&syMtb4B>4f%YOLjCkF@D+ zU<15%^9^+V0si(at{MYTMi6r`VMuB6hx_i2U%EhY&QOac0lKxegom%!{o<@X{%7X# zvE)EtgENvJ+6tdM)$aR}Q@f_sDt0k#w!M|WYtq@{UBjyR66tEdRrVC%YsGo3=NaRXgWE^7c!H@C`Q?;O@lVFZbN@N#-LYoOOL6v13&a98Pt%e?Us zJ!TtEoKIqSt(x{;QC!;6*os1xZ_)0nI2xMhf_!+k;^0C()gCy(M-~x z=A+9<$eFI4S^2l}8}d*nORL4)v)f$RU9=;xi4<(i@QY@?R`8i%nPFPbrCfzF{s|IF zdEr`CFju)fwY?}%pKkOi#_)EZW|RPW$}w*K*JbeQgtooEo90?Qpf>FFIE6{vv%BBC^9|Ix=?T#&yinG(9~>XQkCq^`ko|*h$xX?r8&!L_TbCdkja(OEI`m$k+Y9${N!w+cjp-NC4?Ad_JDv;dA%o^*b~5V zmz^*Iu|SnY@q5Uwo_m~Ayc6-UE899Coji;4*!fMmS(>F_j!yCnIok$BT6E@mv*bLd*`OWpCk4>o$>+=Yv1J6fSZ@lVJJ6(Cao+!Hc`zw z2lSpK`m@6B5)sD#ClUG1Xx;cMNo9OLYN+xseK+oR@=Rr~=w;!xSwAO)nRP$%W^r`n z(~67xGv=IjC%c?{7T1%wx(Al(w#1)J^%F~jQ1D$04e5E4=1!x+Cc@OR8{GP*w!h3> zxAhpyhyO2n&Nw*jSF?`?hZM|uJm)du=Z%C`QD?v7Qy64jh z-(Uvs>qxw>JYZOlRKUBp=9td81Z~Jv$#1CSGm(HfvJZ;_d5hOiyQB7e7pD}qIL!D_TUKVANJjN%T^xGsbVOmBxwpdA~&ALFCuMB z-{}5c?ffG1b&q<2mGk_19FWWOBb}x?@DG09vUL$(z3LW_#l#V03g8h;&DKw}5X+ms zJg5ks*fQDh3&@opsf{)38k#Ww?(+zk9javDjh9Db@OPnRGKDq@dQN>KUS%F`N#-92 zzG`&SGG0};Vv>=!7-W~J`mnreGH4`=EJNLd8{%q&HO09@)&bi%j%~?GW6ptm4raUc z*tEx#nk{cKwm{xgjx_XQAF*L13&?_cH7t`KLO$Ho4G>H|YE7HY!A*Ds=pbvm1s7Lc zij(gD#1a+9v?03X2VG9u?T=Z9czGA#W08GA*B6f?o+aMGs~Qn}&gdM|%<8E}6OXe{ zK*w{|_T4rd{;U0pDuYL&qBc0E4I^SLqdi*J#!5YYfG1umrm5cm03O;UKffLy#gh{4 zKFgjEO(WBM0+!PWI2b7WL>V-;$g&nq!$=gq!>gH-N~q=KhMA)Q#Y7yVk_(m6{*PVV zh{1}-QO(|e9D4Cgr&qChp`%8!e?a~Yw=v5K*N1)A&&y*@08x<@vM$debrW`I>5zYJ z>xk5KZPOxJe0M7{0EH47pJ7E8i;w0j2|o|cGXq9--v{>j!)Q4?2+Yn|9?6LU(zpBK z)j4Z!qzJ3(pRC)c3_M5d6RlXSPa{^}|E=B&`k`zw>t2=JKNVtkflX$o7(8hGGdjp~ zi&gJfXR36wqJ6Xb(JjzProBfJiZ=ciVy0JHJbJQErfbe#m9!$IKy~-2*Z-UxcH&q` zAa$gSNSsm&e|pOOd-D|@iHujS`bweQ4) zhL)~wk>ue6ZotW()-NaIZdU-@3Mz8_nRJ|L?(di6hF#mJuWvPPwnPXGs6#xy%yI93 zIo|vr7ul&zk*tl0`NU)?!tlM3_4C*Ct<)Do&)l~_tQxwPwzD5? z$uGqtvr^foApiPZ9*cMCWW>hn;BqR`o|aMY^PXUKT!LB)e5@yKYbfX4c7WlRby34moKC! z$9O}yOKOnno#h@!FQDDUi$paxANCc$RF`>(kFA04#*{i)f7&ZGmG>3?WBO1WhQh6ga>X>E%?iROc3@RyAzISj!nQ$tv#`fG4tiD z-iQkkyLU$k;l^lM?breGua9uK$IK5AVWFPUBER3=+j<_ zLVwsq7c=>pb${c$dy7X8otOT$4(zVlwEtoz3m*5EdhXU+0fmrwZr0r7OY5`x8Zi6{iGpf>?HwDBV ztB5G@9J~n%&F6N%Zu3Icl?-)+labhsqvz0sh>DJAhfLKp%u6GFv8wKNEL9r4CuCJRj)#^4AF~Tq zh6p_8{xU?T;sLhxUhV_<&Pc}9kv?Kyo?Yq^5|CT?;d^M95+QNl=Tr4Ip|#Z1SKrI- zIBIh{@oNF%Sr<=MM$u1(D|i}71IkYKg6^{B+OOhc!V7WN?VDZk$ZDMx!1Ta`4nJ6K zT#6Qr6$1!Yw)DSmLd^dxR25AJM7*OqKX^l{0gFoVPAZ8SP`z0gaSZ-=q}qh8W`Adz z^MEXn?Dx-5OImIs>a=aJS~5VN@@HMMx#G#R9hbKU;+@3j-qf%}!D?gim4E3mV`trfq&v)@&r?Pi4jk45M*4n)}Yd{0iUSXo(- zOI&sk0y)9ouBhM9#O?o+Qn>rcZwRANZ1@FrkoJI!h74u`|Cyb9F7ZDn?Zud^q?~Co zOU3J>)UG4Uzt~=QIaQV0l;|q!e7Cio!GP?b-3StngGP`829mVmAi)|MXN%XrUAB+f zx56gCWmC7hI%YH6Rq%l5A8yUa(jGY=x@KV9F*L~3R+vdS_aB~CVP~aapYV&0=-zFR zCUBHsS{Sqf6yjSVO?-$;i-p#-~84zDKx1!(QHCG1CCMo(WCH(8}6F~n9q3;#% zn!lC;QcMz2lYdJ;3Z%PLeTqVN&2RG94}YUI{?Fh8x_}g;<7&cKT-dW>WiB^IWYh5D zZZ!RTLi0={G9d*-c~uqwoRat`=9-RQ1{6vwAN@O+;fFD~254nSfpFXRM)F6VF8Iiw zR1y+>d)z`li0JhtYJece9d}0jKVcOb4FC$s9U98df5zb`A%N`pZnH}cj@|dzGNNIv zV0grgB_ErbPt;q}^2czb#uPsi9{-fxq>9%QWWqeskX&2-zH&pu-S6vZyCdP@WY4F{ zPiTlA$Luo2r>9-I`+r~kFP#|J#F$+5J3rZiwj}sk3K+8A7U_YlA4|x;x-*ZrOaqm3 zeue*6v?~ErjtYtjBEIHs-Q%*H_sp_E1K=Fn+^wwIs`qi=F4Y&7&Ys+JE*yrsi8XyW z4B(clfQ$Ha()kY^q3 zN|mP^`e0H2cX?KP?Y5pPc4@H=lc8bX9xu)OWDt?m*|;1jFX#V?jwtHtp-yrALDyj7 zEF$Lse6lmM?vF`yyfdS9mMM0YIr#UlO9J+}#yuBpugfEi!2C$ZwPfemgtp&3a(dTi zWBH3vLGen*^bqKMgxKWXYN9R2jN4{m_DSPOgT~jw$d_|D{T|BkLUj|r?Mrx z@6;r8OBDxDyX6(|Zp+d5d8*PGr^NKU#rIr(UhJw+Q`~k{H+N}6mi+O0r*4;HioKm^ zrCCfKC{K9#7R9lxxeGc|UHKbl(;Wo_PW);Sb=hLZW6DuD$RTA4gnjOs~o2 zW(j9B>4yyw$x_Ys{)$vfJ|0~?^z-I6O_#@I|Ea$vphPEqY=N$b+2=>#^|#I19vA+t zZ`g;wU44J-W1V!ej~=dR3&Zjsf09dXOPM!K65vq>SaK=(v15{^Dr)lSp*ZL*>8=>0 zF^2up2S;I-c-R+`sv^ESus#c(vNn-P^2gi5@fbTAO1*MAT@2V?KH3+w2F0OVRk6lq z&LMIHV&XE?M-5I_rXBk$>UL_o8;=TYCo0BtEekmqbR7OLf-jH8rVt1x*Jt0I%^AY7 z87eK}4E}f>_6o#}(Sx_f4R!&u9@tjAD|b0Wo;sz_emQ2r(*Zy8OZsz$+IZfX);|7qUbq7(N3l*_MVVc%!uPaOQr8x_}w>DYFnOK&P zaa!$4c4R}PPu2L4-`&|m?FkOK5`~)nZb1*$)L@Y^JMf31bm@;up0|Vum$y!T!l~MO z>4gR*R6h+Cd^2V~caByzPJr$JO**2ZU}{Xl;f>|G6lAMQ@I)L|elFhZSASsk>(_qV zQ!e66y#esnknLX!)S7ZSlZOFUvL>0#m%q&F8ov{AG|^8@2?Wk&nc%ixMvK$z4|M%S z)LUs3W?V%FH0*=@RI1M&ugaDYm>IWDPdy$jD8Z?zjGm6V3cd`-582P>Kf|aub zL-j0?9vT$}uMu$&({;oRi4X`^OB^_cRFW~^-b43od2=;@l3vB>TpGfQQPK5MM!<;- zgiCv5`X}gMAg);`{wdzFOelfr!Fx;-|Mstp6??BT5*((nBMI69`=Wg#GG2%@Ge2|e z*RquN%tH?);uwaVj>*xySnK)I<{!d~KlCnjua!R7vYbGEgMx>dfM;FcS4;457PTx| zPXzG+-l4l#OZbqP=No^E#p87XE|Xwo=}!Mj6Uv8qr27y`W=;{M1_OnrwuEXc1kO2~ z>+2{RL%x>gx~W$|WAzLJg@SxEmMvLnzcF<#y7gxU z`N{tEvDtnLPBTg1hz99H*@xq>4H#)XRH>@f6iQtaq>&%jI^dv-BYb|aF++f z#(7Nt%YCfYm1P~(DJ_QhjPog{$z?C-v2iN~#K7G}*cuci-XUy&8>RPSD7{Ub8Qdll zphWb#e_lVFu=>eLyiZ?&U-NugX4POsCjPgVJ|1yWr_m(OYgax~Tu9^&B+w3hIxZlS z#~Z<^keO~s4+@QUN44F zuG*G|`JQk~Le7{-@dZ&rp9M6w2^GI*NT61t!8xRz>ZZrr#!gf{7pi6O1!uA?XBHRx z(N!hjkd2L1Ayx*cVVDSoN@_SLIup3{wgDmAoT4ZZJ_MVy0PlWvwa zu#gcdh$k%!rMMrAVPY5R^L0Pdic`!&h>Q-G0^J{Vjg(k4kNo0-f4GbGr74+RbNbLL zCUowNr>!DK$FO7#94+Ua5+9X(o(7TNuh*EnYXf7+!u1m9s}>v92J+O!0^4g}e(E;z z*$<+Nv8Wk-mvbzlQfZ=r0PmXfh9pvA|+Zzt^`DYHa%84zyg+L zX(9r&DNXrwpe8U#r=(i3*is54)M{~&1HKW{GLD_h${!>eraeY-Dtj(uqU^Ox8Z2cz zIA=gp_9HiSQ8-FmMtI>r7U3e0;W4?01-dWi#v`t$3$!1zaWNnGMzr`W9ietKx7(SJ zbGgCah*$QrXtAS9psvAH_>ZuQSG6LP>RK4wxPRLtw0RFA0?-N2-3;R|KBFENcH)~z zpV)sNZo@O=6Yb^ZnIU|ySPm)d%+ZtNd_pE>F-5H7!5_$QJa04-1|3(%vX!ZvUDJvQ znHA*bP;6~34IA6@fS&JAE`(U`j}V@jsD?&z%QfvCXQmFUk<`YCs|gzHoz1tSoQ+uW zj+5KqiWn?Hy*3Wa7cpr0*aR(%Ohu-G^h7Zl0FE{nzFrK55l@I5m^cKh;bKsY$A4KOmRT zC}%dQ7OBKYG9F&?!BDIOOPeSU#vz5 z8l=`RasL$c4UCc(;pH(s#NA_~!gpIVw!?s@{1R;O7p`kD;P-}fN<3~4{Iz@phYtH&Ls6M}vvPF|Vw@_lPLI&0$r3wF#h#tJl?5IK z^A7+MbGb%Ip8~C5*kL^BOZxil~Ek|e-6Xf^ z5(g8V!sTep+lA~~Vt?r~5K~`_bgzB#Q-PwomNR>n>ekUG3iB^Tx0cyY_QKnw#FeqO zmZ&M3@7XmpO1ldT@fU%>_iKP>u*CF|_v=F{m(vOO%Ra$zqfF0LG95^oTrv22v4;Z5 z{G1F^sid%;*!SWN{wFHTgYFj^jC)K$KAIO?Z4}Ju#_ynSf0`&123u(Lc6cJRXu9nB zB>1VckFb99eB`iQZGom1hcVYES%fL2Jv+Jm+5qT+DwyYEp>~=?qz20+dV5L$_~=ql zCo)Aw&3Q6f=KKpOp6rU$(2$bd=MYMJKE2GP60hc8aivLxG{57?^JZz~OfaZ@1Y~+aTc?|*cwzD`)otZJ8>9PH--+AD z{X>KCyGaB>C(yqM}m+_n^xGzCe?HmqddVZ=!?vS$p# zB)P%+{#sDf)Y-;8Zj4H$nPO5xzyEwok*Ngn(kQ_ieYWg+ zq)jBlbOg>gFI!ij#`5Q-zuO<`FYdn+vhOH=7mqb#F2Ol=Xx|uf?BrVVQt1ru7-MI) zF?zwXvwNtr4jb5B%tVTh!U>$8VC!UT8d#A|F$iTQmfrZ^(Rq`sG{gpeh{! zBF$FcT;hcRwR6NfdFRPc;Y`vgO;Uv{ADMAZ%RfIqg+g>U>4}nIGv@(%+KkT&xWahE z30&Th+Tx76YE&SCQx3T$wca^9KQIt>c}LLYtp}wu4o&II^^)-g84f;Ocr{0_G)za& zK*@=Sdg_)*b0nqblushksH&amh~PACi{bajF37`K8$S`RefmZuwK7>rUm}T%Dn?O? zx%Kt$-s-Q+MWZN%0YttMqPQQX_0uJWU`v$BNgkM$diy|k`r&@)e)T<{?Z3kg?Hz=| zUfN{_`p`CEEmxx-JIYpuP;!;&`$U;~4@vi8;!@N`&@gr8t(4@UA9c5)*4e;iLA+XN z*5+YPeZU6^5qkO~T}n@s)L2D#DA}g>-g}*uf%wQ;Lc|6c4R%&wCu9=uWO{^lH&=@n$;ES&nd>lO%4B?es~5g%&prT+KTnr#KfC`Z$c@H z3C@&rDCSH}jL2SfeB*U$qv`@!T*Fh;Mlw+Wr*hWzRIy`hxWb%8Me%?xhI4C4I{pq@ zpplrYd+fbfIg^x5Mo#HR4fcZYO&_;%`os&n)z2Zdbqq#x=Mixc#yFM;gg2Y9j7jUW zt&@~SSZpKFG3j6?uP3K*=+;wh?OiScQb7o8%MC`IbaJ({Mqv%Zqe|vfjO6}Bvpw%q zE7gstu4cDt!=c)uTZ#eO;RjQNM$lLX3DyYDd1CPY!mfLHj{p;cA&BnRYk#Uz6%SmF z-7KeZun;dMqi@2QWO2CG$cvs1S^_L*vav2v-vpmt8uTYd{vJisLzn^{f=(`NR1%T* z+>O&2gxeBD+eAa@w&V+kTaG@h!KLw!%YTgJlT0l82zgTEhVC=DBoxA_g`XM2#-90l zdr+b+b)I_(W%zr++!%N@!8nH98hKvqm5ASL?Ou7Lq#%thM5Ph#>6?*cN9A1V4f35K zPWT$a-guDt@)h@++{;2)z;;VAjnal%T33W|Er(HD&Qz;*z9s~6<0$c{XS4?!8UJM) zG%>h8)5!#jy0CA@^Rzd7NA*1>tVLX!jEhpRgG>KmlrRRONJTIB-illEsUK8SEY(S# z!tifvBkY@%y0lqMQl@CRK^`bnOvFaoY=h>B=NZ4p`kKM~__?A>P$<9-B=d{-dm#y#FDZrESx zj?SFjmg#e9&(DqqX`%*oe)jg~_C|f1OQ(5S<<~Arm0DrVUjX7PiYYhv^0kajJDkhh zE(z8`JVNId?2{kEEbPstEQ?EniEgCexw$TNT9Kslp&!mIY;?gb4*5;3(8hg4t1~!X zwz)1%#a*7hub`>efZ$Rp+X@g}ZqXloKql;53lH9rMI#ju{A(`GyiUg_g9#*O*DSv0d^DmiY8661r`0gdco6S!JB&0b(I}F9- zv4z@J(%pmhClAN@n0r*Xs6=<V(z5rfY}_zc3x;Q2Rd>;I;%4(^kwAt+usCzkg~9u7^Y^4qoen}X-KIej@?G^Q z=+aCD+{?pw=<9uSY*n+OYz=q@N_ybj`GT7HkEQwyuv1+-(ptopWQoWrt z#08&fAlZ!xdpODiPSO$GC{cHiI{?Dq|BcQ2I^#>W#xkxU?)^~OK0;peNPMC$84gUp z3*5$m_-Y8QN3eRN2A(UqdU}gNrKY72&Kh~np~I&2k9-QRL4!9JC;X`~^u*|opB%dJ zWZJ`lTA7&i15bN#!7|N0A(q@2qj7_3O#?+;M5e;Jqo7o9dUwW)A6kV$vC_4z}K>FEOv8Q=bkry=o(HZt|9=XXaq9{h~mE(M#As9}@q3UwN zFUe^-E6ueo&-U`C>zdqMdreXhDl`-31zX{cw^I_M-u(@J)z zh>pH5gI8K^%`X?DhcE>hm|1Yl zM!T$jq=+K6HCdUD4)}-zq7dFuZ9=(t2m-w?CqcwX@h2yI2jp`Q)P<#pW86(x!G$KN zoZTv?)2}~LvRx=B=+?;p7Xb2dsz7_Ng(sS@mqOUEy7^7I0Jc*Dan1zUJnk9T$vE{$ z3d?kIXHhX8HI&e7z?3RHaBJXM?lWIqbJ&_tY?%sk(`PPEMEhsw)VG9J_jQXS9G zRnfC@5Qv1&;ZN-C&8;qV6@Q{m&f_%7irt>4#E)#sBKhZbTMU`r;j{X5B24r@w7H2a16Wql-U_fi6f;DY!97_|H<^Sc~Yyfgir>J{!It4L{a*di~hJm3;E zEFgW#`p@?zvCWw%88eK4f_w^n^8sH|@Ahm%9s3bv4K$aqzE#UECkM|V9C+h0G?1^4 ztlHCh6Whe0=RhnVdOH}RgXs-GMQW;BZSY?OG8U+3vOSTyJzexw+#OkaNLzmL9=ryWbpAKli*XwkNjAARdKM*jQgyA&AA2=?F2v320p zCV@||svA5Qb?(ZYhQMGQ8Sies{{bdY9w)v-ocdQXaMzOMZa&`ktte4-6V9$tQ_h;} W9+5aR0RJxsima5PWYH`A&;K9MMbc*g literal 0 HcmV?d00001 diff --git a/img/ali-1-2.png b/img/ali-1-2.png new file mode 100644 index 0000000000000000000000000000000000000000..e151a0fb29d8b087849a881a7dacf884481bec6b GIT binary patch literal 16144 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 WtDvnv@a-r!#NJ80&3&Ws?f(EWj=uZ= literal 0 HcmV?d00001 diff --git a/img/ali-2-1.png b/img/ali-2-1.png new file mode 100644 index 0000000000000000000000000000000000000000..9d87b65401c3ca1e9d9ed3e4c809fe457b30401f GIT binary patch literal 17420 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 XBYR)_Ebv!8UPy|{i4?up_5QyAnx?Px literal 0 HcmV?d00001 diff --git a/img/ali-2-2.png b/img/ali-2-2.png new file mode 100644 index 0000000000000000000000000000000000000000..e2f024508e379eb60e6ec76c5be37b9db21f6809 GIT binary patch literal 13887 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

cb-a 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 DfDx{?>T_?e(xRQ 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 G@&5rc|IxGn literal 0 HcmV?d00001 diff --git a/img/ali-3-1.png b/img/ali-3-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f64ac6c6480807bd171538ae4ff0986ec630d533 GIT binary patch literal 18091 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 wW#6ef(_cr`c7#A22;4FVdQ&MBb@0CBzEd;kCd literal 0 HcmV?d00001 diff --git a/img/ali-3-3.png b/img/ali-3-3.png new file mode 100644 index 0000000000000000000000000000000000000000..e96ad8aca9bb4749923b0cc213b68d35c352917b GIT binary patch literal 14802 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 AM*si- literal 0 HcmV?d00001 diff --git a/img/ali-4-1.png b/img/ali-4-1.png new file mode 100644 index 0000000000000000000000000000000000000000..5c266f136643c1877c26bee1374f7e1a5238cf1d GIT binary patch literal 18161 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 UJFf=#DH}XB6)ok`#}=Xg7x6|9@Bjb+ literal 0 HcmV?d00001 diff --git a/img/ali-4-2.png b/img/ali-4-2.png new file mode 100644 index 0000000000000000000000000000000000000000..e0d4c5fe3ed5a73b2b138de5722c65e6341c4e0f GIT binary patch literal 14359 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 literal 0 HcmV?d00001 diff --git a/img/ali-4-3.png b/img/ali-4-3.png new file mode 100644 index 0000000000000000000000000000000000000000..4278cc8c1303f125ef0582499138a9ffb131e389 GIT binary patch literal 18514 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 literal 0 HcmV?d00001 diff --git a/img/aws-1-1.png b/img/aws-1-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ccf0511a1f2a61fcb0a369778066394869c675c8 GIT binary patch literal 14060 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 literal 0 HcmV?d00001 diff --git a/img/aws-1-2.png b/img/aws-1-2.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c9bf928884f111f58a6e0e026c7ca54087b0e1 GIT binary patch literal 18493 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 literal 0 HcmV?d00001 diff --git a/img/aws-1-3.png b/img/aws-1-3.png new file mode 100644 index 0000000000000000000000000000000000000000..617a38e4b1523fa15f6127dd51791b99a85fead1 GIT binary patch literal 13302 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 Tg~0#wASueK$^3k7>id5HAWq_J literal 0 HcmV?d00001 diff --git a/img/aws-2-1.png b/img/aws-2-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ef01da67965020a34c1794ded113b79586559f77 GIT binary patch literal 17392 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 h!pMa3{C~hj8Zr&s$%; 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 z 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 literal 0 HcmV?d00001 diff --git a/img/aws-3-2.png b/img/aws-3-2.png new file mode 100644 index 0000000000000000000000000000000000000000..390c0d868d80969a47caf49db9c4e828c87f8a28 GIT binary patch literal 18390 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 literal 0 HcmV?d00001 diff --git a/img/aws-3-3.png b/img/aws-3-3.png new file mode 100644 index 0000000000000000000000000000000000000000..3d8071f77876cb2e01561d9a75665f3a4aabac02 GIT binary patch literal 14452 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 U_$dKjiNYz!s7jYfn!fq}07uJN@c;k- literal 0 HcmV?d00001 diff --git a/img/aws-4-2.png b/img/aws-4-2.png new file mode 100644 index 0000000000000000000000000000000000000000..050d5fea78a7e58b51e38aa4f858ebfd021ea607 GIT binary patch literal 16568 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 Yc{tsW5}kN`V8~bE!qP$|pTGM2KNfAt+W-In literal 0 HcmV?d00001 diff --git a/img/aws-4-3.png b/img/aws-4-3.png new file mode 100644 index 0000000000000000000000000000000000000000..d516cdf2b6451eb6d9da6d229f5096bf831d9050 GIT binary patch literal 14615 zcmdseWmJ@H)GiDNLkdGT3?Nd{U890Df^>IDNQbl_U4nE93QFhDAzhLpAYIZeApJcf z_^$K)IDgL1v(~U!%Khx;j=isa?Q7o?rmQ55gGr8wgoK16DZc_+g!lHM|9t%Xkn<_~+Y!i2hxx{cwI`W96(R>YssnqYfw_56*Q zG6UT8afK#pK$HeO{FC@~s1BKi5Hzhp!bCosB35TAF;vHFy17^O9oU+t_Z?Yna&VR6 zlXeE%ClCmKz@^FN@AvwvPOj=TJFg9=&Hdyz9o3uEUp4LJ`+BeW%&+-SFHg^3!_U5} zJ`cdch(-GQY263wIrTCMvVj^K8$}xn59JtOpxck2@1-E_JCy%MT7i{=q}wwz8Id8h zhz~sI4Evvz&)_mfQI^BTN4G}56J&#*U(v&mZY||PVffTUo(4&%GXAJCMw=MQLHXDC zv`ByL1gPL=gJZ%)OXdH*m-86)VVmj=81HU=pAm1B%AB};Yw~Ll;o=uRR4`x%VM+}c zoC_V=iu*fSK@2&3|GNYT^>zuIEWluucWbV)e@EwKB1w5{(jbHW&K^Qa1PuP%b5wsj zN7d*4P|@QUB;?3QSY^108}(5za{F0Yw>LcWW#tsJMrC+W{I2*9e=dm_+j7i_k>aC* zDWy#9ESIg%4+^wJT0990GvuA3fH?^Qb8254D2#=X1XwsyKNEfHT^FpQDTh<-ME&It zBphDB&#$~I+*Peo_#yo{oxPb#b&NZsZs9T29<`-czJ2MBGP}}4V6Tj<083Awe#3eP zi|_|Kh`y441xk@a$+L#vkbfrRmO=e0M>t#-W2YADh|5M_tu`|a#qA5Z09M=e23RVa zJqi{VA8M);n-B=wj79e$qiM-zckDnynYlgP+T4zCn|2hVim=K$*v*bA?Qya38bb+i zo{8qEnJ~NY;O<`Qt_$~MjruSsGY`)z&l&L8LDiy5&wO8{5Zp@_9FDWu zvz~bhV&K#P*bN|cJLqb?=8<`E(vXYA(s!wQxb4~hYs7Xrf1pIwJss6$^h1MQu+ib?!fX|V-Fou=3kt7u!AmgA;LVh46 zXve|u0#;1&;?)dxJUTbG)hmBx))Vsj)z*bYm-9!}fA_b1#4t>Q9PZ%P=)sE-L?6rc zVQJj~=j@MYh5q$}G%JnD6V@6L$uVm?&xEYL6YateZ6T!Z zfrCcj>hV35(K1QH01>}S-jHKzlAAd@GB==gH^zs9W zhwU3)bKu7?AVbz47|pm%+xP#dMI3(7*qk;_u?MHmx@AkVtZmeBtaq9fdBm?}VH zAAg5wzwv?5@r(o(%ymght|+Smm`>$xFW5p76mYiE6pdP{nuHwh-{GzTRY0bsV5ppP zelruZcv{)XP7-{LVfPlpXakrT96Ttu8sYHZ*;)O3tC0INU0bCsySC16ZvoN+)xyHU z;pm&d{k=D;E{vcdsqs` zDM#Xs&|+tbH3&6ssp?TRy@vo@-~&Sr$kb^wp~_&XDb?Uteg=BmMeI~g31^w+TtYkC zSyAY;rFglMl$X6S@aFFW{-{u;Y$kkrZE5uHyxMQ96E6u)<&Pu+y>6jd#^@y&cx@)R zT+ze3bz9NG@c%~P?ViCn0M~0$UgEk%YliFq!240uEM)JJRTEw|`1DCw_gzBrM*|TW z<0z*v-dX$o#2-3?#Yhc6$KTvQ4j>pG%slbV+AvnYK2+~p8)xLnym$B8PkK$P-&(y{ zhaEUp|9d0n0cu;ALuKe0p)!|Z@}XwRQ}Ilx@iq-9es$>&BT6>FLBFVxc`j<85qr1f zHyA;X#b3XKU#3Vg>|Dl2^khe89P#!F*x{^T&T`i0IV(g;|sk@sr5@P)1h){Op zi2WJnfS?5dpRIuZFD0M*vwv(&hQ$9nbZf?8RiqG@U@wG)428KJx12%xfpRFyB!=i# zYfyDH-}dgVaCdKVWe4G}C$~w}8^puIv)|=OfyBYV(QtneK>5G>E}04YyleGpr*Mj}Z-;AX@(Fp^;mdBkLhX*1LIJ?0 zKJnsN=KtrZf&mUtwjU#dzZp=N)r=BhM7a3BBYbCPIM~-(p2~1E{z>fdzt}{^ z00#P$=*+@|Dn}29sQQf=Rol<=3O_XtZ74wR5LT86??q7jL%vb1nCZvl@N$zxS~|*9 zkz=v#rOGg|i`u|DXUa=})gs|S;b~i+=>p|Ui3<-zUrco>F?>S)Qc_%O?Cw4xq}!Fo zn8!(S%c>R$l2cLw1O_km<+)Ncv6h)ujGdSb~3_exVi~;q>d?u&dK~YHuA81{#y4O$W=9xby~TWBMnt zeZ^M577S_l2Lp28hr7|4ke5Xd?#|*N00SCG@3ikiq?Hyp*+AuGp}UjK_6J}9S<>S1 z-N^<5FmV4#)Y?B700A&?4=?53zmo-EKorcE`40v#0T>{HnGyeUD=^?zwBJ2&|9d%} z5`gM5LAkpvYz1y#MK_M5x*+h8{aYgI4*){hYT{@RK*(6gXe+Hc3D639@-`px{7}95;M__}$SP#9m~_w90d|M5}(YbUZI#bErRKyWU?a^m_Dw zeTJgclceOPN96RQW48kUO(Fehn)HZ(UPb+w;8k!&N&V9kEhf|RtAL;Nv4Mbl7-RFc z#fcPeTn6FdJEJuzguByHB2Tw&HfLQA)>PZ9`Ciw(>X`Sv6w@fw{81N40yv__?EOSw zzDAfBqJR45b)Tue5?kXe@tqfOaNP!>VpwpXY3w!cvujYtP4Jat<;7aL6e!?F4>p;| z0_GpYww~@@5H;Vxx)n!NKO!iv4V+^c{BLc=}tM$`8e?9klD5F^ku3@hy zp%Jni;+o;g1OjZ?(@={A;PMzuw2A%h8q{xHm@e442U-2>15T)=QCKX`LxDRm8*_mcJz4vLM&0`y%PA9|nLb+6!|E z7#dOKcPC@*Z*A)gS|#i?PSis>C)SsU3NL_}mKIGN+G_uSNad=}Qo?HdI%1+_p1Ue; zLyG&GOdds;RX^!L6iw5>ITkrbCdivWvvU|~i^0jlsrc%5@LyDpf*1B#;2#|@5|Y5z z>z$UU=`})8WwJ>?(8ijQtD^o?ZOK#TiEl0$kD#n=1D=igS`VC-m1}j>%T)%mUmRj` z`fsB3r6fczbUA7DelKgD!giOjGcrMAsYBnv+0P1GMFG5HV}DSM9r88CJ5B9rZUWyA|ETY4`t^l~te)#3B1_Q%C#h zp5mE8(-^_~njTbp0`B`p$2SXKH~&mnSy-UW3GOW$Zd$$P1W=R8##xK2=BF`sVGlX8 z8Hpk#mWtorH)3Q10|VT5^w0lp;38fumto4OP0ZTsQkJoh#4(ySqNKS6#ibKM2$-Wy ze>hHS0Et5XLYM*(_tR6q{^n501pm;Tv7sBXn460TkBx*0m3bfPp_V`4d!hyn(cGt} zTLON9!}uXSlz#aD@xYH}r_Jaw&DDAGBKU3bWE;lE802yf@~}&m@b0)`M`MxV$6M^Kv z^{HTdf!O(Ye*IW&UBDsMA?uxr9~<13UcdNtNxkAb>VrFxp9GV^N5ktk?jJZKP)IaN zWxV0t{kwWDMh9g|17>*Sj)C{ex5U7xn&u78Ul!3YR4tumJ(+Ax(4tiB1nYqy0+vZl zL6PkuT>_SGBA(%AE~NDr0E7TQpEq>1Vyb6U-vk?d)oPyuGC>(j+&~Bru@F>A4*+S} zQlBw&X*`bbC^n&-qZOVh4F{4Ck?b!-T?$A2Sg8F3HBr8)5%U>;uMV1fmhpVaLS z2h4}=i&q^*GPe5i+RFbbob&3au(F^ukdT|n|F4{5;B*0^XH$219lV@IoFV3xLmXQi9OGttFILkS!A}nm=q^oFOn+MO1BpWCvhi z`?wg5hSr)I;9FadUUX5 z$whYqX%Q167B+->>CG2$A;VRF_y|B!(HW0#4Wuy>Si#e#(zGAJHJkJ$ET_SQCD62j z++nMRa$9098p9`!#)Sl?9@`FOFd$@>pR`g>?{sS(9n*N`Gd4rp^kir;QQwD_y^<=V zcxb6%^b==Z3zs!TR6`)Gr<`v)B2olEFaN+Ux2DLC{byY<1{PP2MHBKN)5}V*FmRG8 z+P0EqgZj+O7Zk1S0>A&A5vMq@WfY7b0k4ghU0}mqtg9qh=&juA$oeL5p>e3##p)4% zz%pmj7}Wj;Yc80?VG{Ut*q62Mfm1ss#`Y@>#T{49=r-m8e{~+!BlsJslkS7`eViYp z4#W`_7zevszpMXIC7;!=fxu+D()?WnF2Ry^Xt%j&ygvmZ%lG!wB}oV3Ry+s)zyy_C}G z3g8Nn!wvSj^zd8o0?l)2<(FxkU+^!^6htFib4 zlb>dao4FmY6uja0tFQ=bcI`rdkc@)26{~&&BmfaxJE3Gr? zoRoFnkxa<_?46kBRq2wwyegQ`_iSHzQB(s5mwXXU2;DEHxoorUl(SL4 zWS3`vYEz3HftpV;LW+qGNJ{-$#^rFG(jSjd<)-!JMB)HeMEQ@69s`7%7q50JBnHTR zZa;2Z#?&>ojx%X)h=HA}U4HnqK5cdA)rVzl36>dY5Iey1#4#8+jZu~OvN~t0=do>J z=F4T+<-UJvo5DC|@oG@D+%9LC=1e_vA#}u#Pjs#HR;Axw$YiG>N!6yI*T~S0qIUe* zpx8Ok#UB}Kd5t^zdPhJqYlVKf^#ppIB;_$1;UXWwIq&h!{Lf$$PUxSp+CIh5Ed~cp zAXk5l^gzXs3~tRxkZ!>KY&LLGxEivbFyvddR_0@Z%>GOh{@en?n|2MIJ?{EAO@i|M z0D^8^;H|&PnHMMH3Io!76)J;oN!7Ea2)o(K9WM%f(2m&PT%tyCXbqc*!tu~X3p}!X z+vOVINT2Cj6U&4X2f|RFJ%i<8`|LFv3QZ)HEZYF7z1nK0^@Q84!TDEA^XwS(J9Odx zj_8=V(edh#Z!8@WRe>HIGD2b9OyQPBXm9vNy0+$*nt52VtS8X}-RyLU2gcenvtv%_ zk`Ez^)w<2QZz5u8RwCPdL?-}WKWBpB?`Dw=(FT-5Y1y?l!r@7NGWr{}?+KrN8E5o56-S4EtJwJf6C7?y`A%GYXljJ_s+ ztAI1D@aUDs(vXl9KFPb?U2FWQLQ|53 z&C{lK$gXcb*FF8eO6hB+Y*|ti(y5P&niZppWke8B>=c+4zCCeLS*CbEG3ml?nEmc| zWHvW-Ch@fOpSVA@bamTz?bnu}`adD60076rLR#rd{lKldMO3dOe$#lAol6{KUodV{ z_VGc$QgOJhf9^^`2nGZjGbu+~hu->oNOf5tfc zUa8C0C)`X+%!Nk8T;|JuhHk+?s!~9?B>-1>O2(W!698y69J~%WmEGDlwiEu^mhr5B z7mDG<+OJ*ZL42-NHGl6UR)q8;6xskfJh0`p)ms)`8JTtFuC|ob}6#a7IoS#^f?pTHOwiV&A^&{(!soT z6(@mRRn|S;n3!Fuyg8pmRZXoA0-uiSbq2Fdu*&pAwc8RI^$aA4W!WtJ$1@(( zzg4sgO9(IfnZqRjN!A0w1I9PHGut-A;y7f-@EOKsNV3@SB0F7v+>2Ju=&5=?+16@I4ZvrAF zfA}3W9yb_HqzR7vnT~1cKA%5-j4N=?jvm7l;7Gq;w`D==_tbEyQsz6n*v&3B%)wG& zQny~XD03s5pef|ERuO*}pYT3?Kp^-xeSI7WP7yA&&jq5aKnwSGfySu0;al{dVp;@1>`y(|A$s@)i@PC~s}b zNU=KshFw>T#z_-mJZVn&l$|T;gxq3kqj=uzOTe3pMoHwTL@CYF03UmmpbONl_WZQg z$I(2EE(}&}GXwZ~SJ&?Tri})|GY5~7u)u6uY(gyg) z$QJZAnAN}mAV%gCUMOKt+MTS0-lrZw890%UryaY10;=adbg#`(p93GE>;};RLQY|= zk62W2-M#XkaMY=C>cTr_R6r<^hNwsMpj3G)qDiQPkg|sKn~CR{{-k=IB*KIHkVQa6 z^Tz}jgJ4)(zpz3M1Ea;X#oRc~dmdJY97;qbvQl0@B^izTQGG__*9ZUB$NGcZy@rh% zBcJ7vZ4vrMSqMOi?Q48@cGnf|S?C(2iMS#~=#xYaJ*bBV^8fhpqpYD}i-95-IgEM0 zyaFuhd;%4{C)p_Q>MMT6^f_{hl3CKj_(c#4bIPOYA@Eja2IhQ z$t-trVipS$IV*)ukZB#emTJ+@*^#bGTyi(TaAd6AJ2?sESJznAJAW-Q%NF(aLO-F1 zHAiYl)-^>jwaZL2FZJc>-odENwi9*t+8c9dfHggyPS9+tNga{dVd13hud)Rtt5SJ) zJ_{d6t<5Ibduc{pp8ay#SigfrAK)%YEk@ z>Tcp3jRrnIP!O1PSon}y9&Q45m-+}+G07zN1VPfTrH}JZzAv}jERf)}^ac);?o4Wx!>H(N{J;A3Rg-v&fT!3dQL`V_$9Wh4QEUWh^^ zAsH##XI~Kay&haW4rlw8%c=WI)e}QY0C_0-@_00-$#o|`5$~c}dFPAd>D6!dW-gCe zzU)&L0UU%}A4!iOO3~^jDP0Nv;O&;Vn_AVzv|pA*yOvW20Lh5FIiDT-Ay^LHDYlVl zZ<#q%VO`w@_u>d?$*wI!`z) zxu9{^DIM)2!iSTjgj_rq&^LFL?iaUa_cOi1*AwvKT5syh>o5e8g)9(DnN=df9p|CC z($?jDS|y?7F8K1N6_H1;N$|(xB|O`vuI_(fJq4ctY7W@2o-X>;{B&8g$hbH0;hH{R zM?Pp8*liU+$c^62pm3~{^5{&R68k3e>pJ{lL~?jfeYZ=C`@HF3IkyID_aAn@)3DQp z4TTDu?iftRzRcmh zi5dF258fbk@rj~i%wr!~Y)mGRm{<)K%7@&mG(nU-Re++C>vQw$#cTZe2H#1pvijBF z+Eufs_3xwv&GGRQcF^HjT{H&Xoy_^6heS!u-==VN&H%9je75{o<&0NY7-rCncHPSG zuhP?O_Og$`Q$s=`9Yx#)AfNZkUap+pv)%B$&g)O9h`jOrWty~DyhaI^bUxlI-A!F) zeZ&4^utKX#D=eBT(eN7Jw!p@WNdn5HqPs|T2|OSHTwWV<`O}^HBMc@#O1s?)nrixB7Qs zrB(6+g~|ZXp_Wq+JlwV*`pMH#g=B>A`6hmb8D-*`OskC%BZws;a>I8Ey``)^(_Eh| z>l2YJhshU8vqf7P`azzLUayz8CQOB{=)45{5L5L>{fYX7+=5Z%ryRU8+?Xz-wLVJY zmXQUQl~ZbPdluRAzq9G4gx_D?vjYDi(~|91@A9^rh=W)?uK&UzerVA>5-cear}0k+ zcR+m-UUsnrG^!^!Yerwp{!*f9&ACA8uq4o*eoSFwV>3CsLkgC4uK{$KoM?Yk_>Eub z4WGY&b_%u7Z;;Z>-rf?gKb9l7^m5$Xso8O7kNW}f+w3?gYxfKqeB_8xo zZV%G*v>I1^(DrQ!a_CHy?A9(QNz{0&!3s%6i;l~~>QfD^pEE%US4Ft71aD?;W?Yj8 zc8EeK?U579=QzC2&r6nTZ}n_W(tudgw&Do>h@;Tb{E>${rL9prKaD=EXv<;zerd!w z7IWP#;oIi;l-ab^-fu__t8)O@K!jo#WRHQ++CI0sbOq}Yn*Kw;Hgb^te-&hY>RjUJda z*2mr+9}Yq24Q z8|`d&h0F>aMk4JKwl~`~dX5{@4$FLd6{uRM>9_ZMV7%b{2(hILh9kF5q<#Yi@lvYm zp*g0u^G_5@0732F&+wv1tgft0ZM5Ho*krL!o*evDW04`DXh3lb-Wvn7WOdDn!@sq9 zDh^9rD0`FUy^%$rxCh2i2RKkyZl7yZCUzGUt+MpbVPrQM=Fs-eiw0uonl^Cfu@Vmf zut&hW$wSkCoz-C9buXsyc0c2lXkFwdPpI^J-MEx;i-=}@ ze5coVAhHtodu7uFi`Q(!CGI{vD-uhdo zan1)n1bR>E2CuDtq<(tvx0g693rhoc6OYQQXsU=Nx?opo^kaOaIH4^ceEFqcm(pzJ zX!zA43Etx_=T6yR!LfyZ9l0wAu#t(bE_FUr6#?9khrAsi;gI4!{>a(@ZxJC?YhAfh z-9CIuj*-X?uHc>CzDI9d*dyX2(;z(2nyeyGEw?AhFnk}_JzH(*B+#Q2K>P`WpbU~7 z*yHO@vnDh=z6+&5#A^c$JZ1*tX)%4TQ#!>~)+Ai-b)=x(b}*44 z%CbfUQd&Wp^%>74PACyvF+)ZQq*b56=<%k?cj{36tcQ!^w!fCv`aNv_@mwM50HRrh zncVtC^2D?aU?zy2p+e1j64Y672K1C1=AZl3l%BGrnEd`kVd9lTx`8w#dYgA-jB=#3 z{wlX-njfKi>`6V6_R{2YE`PlZ@DKk-AOfbgrG~SBbJf}gc!TBZcd(DAEc!8!quaY_ z>q)JWp=JN1z*ADKDcHJJ`-88yvj}jc!;{5#Lv+Nl1XwA`JSrij8VEV`Z_<-7N(ZkK z0oP2P^||HWW5C3*eG4{yI2N{BBwAm(j;WV2?X@h;QF(2a@$cqdBt3EzRPXlkft&gi zn~8XH(9)aQDoX6m(_OCtO@H%r_ua!I$8oP1quoP#+hg3|B+FYr$4>DV$1kzZPS*~w z#RXkO;{Xz$a0XTk|H&y$v+MyBQNkW(|!y|5XQM^^-~ul7F}UrT%}*QfZk z>cM_{oDfnQ&`(K0cvZ2MvU+1M6~@tU?Zs5S0 zU5-lmhbvDTtD>up=rTKBCVA9vxenKh8k!%>yezl-IDt>2=FyZ?k#{ZIJj(vvz8XhQ zsdwfZZCEFEtak5Lr$T~X5_S5k8pm^RZuOgidNQO?;MSv0_olIYB1^LFJofl>UUMVA zp8j6a{=)^W3lzNm4A_U}5pv8bj&FvHs8DE|9(SH~+$!ktezDPg5!c3=`b=$2 z?N1ipsARyYKSsZG&rMI4mK^@n)I9c`Iy-QmL`)FqxP2^tr2mmQ`$bK9%`1;IiTlJ7-N}pCk zX0#L8OVXvWh8<}$3o+M1iRS3vVQ#Nr&IDU166p1P6#KM6v-(QacF3YbpE;8$ehYzh zKVwMTWXlL&b-xWAB!i6i60Cnw|08Gd9QAYa%khWF7_C9aNt_w2DisncoEI_lt4*&v z2aqgsl)11lG_U8{(I(+JhID3`Z9`uq6l%BFu)RN=zLnKcD|>Oq}K5=`J_O$2hc&#})jj6n<(Gis!)`;lIuyW+Am9p=}cTE{}`B4l>c)y@R_d}TCtWPzbU zujkivMJAnAJv@pwxikFP-$)wSu64O7Ds((pyuC9d%MY=R@U+^{1#vi!Y$k~ZbW}^ z;^<4FH8~%2j(N+t6y*}>b_G}a&vn;7FQTc|>J-+P zuJ+lGmJYC`1LR#N;}$6tbQO$8hAnn;xHBj+EHVIRjUs{^DM z=XSe3_Yvs4$0(1^9B$xw|FW+BWaYK#teq$!aA6HY(!Z6nv0MtNJ&2GCaD%T^?b;}4 zYa&$4ubWU6(c2F`e=0epl{F{`b3@F7!$RoGq*B49e3k@V2zUZ@a<9T@|RM6c;*&%-^juH zmE-IOLo?ZWpE$#_v>VbPo_=j>Tv@w1XQbP!wDrkeW0 z9dD94coGmTTHR{oRMb&LHKdGV9T;rP_Q#w1i41zV%j|OZHT4togfq4Gu!{OB6G~c- zgeP$WZPvv26$zq#3ooIZ8f_RAZZ(Z3l%CeDx{(C*Xi1A0ICWIMW1ZW{rcVC(%!M6G ztF(qe{m0vad6e<|!PhRPWB?1=*@QC-h0j-Yzu5GSY@0 zSx4Ia%3X3kcmO?e?Q3#NIDUMgNp{J0&yRcb+XbZGxo|zS!U;TmJBo61z3%J0Q-m)N zd}gXoAP*C4d! zT(7U@kcleq&j3hgDPMc2PJA=jSh-YlGnGJ&p7ZD{V8dNmnb-IxTb?=R$j z#*sZ2ryCh3`~h2iDACHtPOVeI%~Acq_Rhs8zH8?Q(9O;RJbZjNF&E_v?ivS~>w-5O zHOQ=4n+q1%hbXoZcr0Y=sV4+qV@gNYU`gg>xcy$9B|!5?G17qQN7oAt{Ypl?Qw8fw z(~Bl`MubsD;(C3J>vIGp-111da#)|te@Py;Wu9mf?b<<4rK*~9a&Rmz&ytDagDhZD zM<7$m@j*~aBCn=mXD6}DPE9wBdr(gf9$x@lu^={ng=U6V+rVeh6pDk8{qQ~XBrxJE zZC-u|P@8fqp%(*DXt}icoW$o+Zq-{NXaSu&G|JU+CZ2`9(j)|bhskiF2KJ?_;f8*R zCFWAPBF=GVq2L8bB_)SpOop3ix@`JbWc@p+f27XlWt<2nTp?h;DS4~@abaL0(?f|< z-*HtQ7cMJwiQzRPgB@P-$3@=434?2`R|*bIK6`p&#Q6bXN9rKKT-O$Q4rbP*2G%ejl-NDJq4NDP%S9h^D5G~2|1H6 zwCBBA>*YD2$9u=McvX;1uV}D|H)fT7|2d(A6^qAf@o*M#QU0+qlgj+pkNUknjft&1 zDUh&gQSMMM2b)whvPS!niYH@af&Cb;%Pd#e7Vn*{o@m{jit z+vlHdx|H1xE+x@a-5~wUciJ5n&F@QICC!w&+WuUn*dinKc}g)&kf#;IHyHJudqN4Y zGU5DXxqX?vFq~N;E`O^%7gz_YVO?b0eI4vNb^_LEN75aSwv$()5+QP-*1T97!WvCS z@lT#BhW#L9e6MO(!u)>@cgf8D-ya);@Nc zO@gWAJ=`c4pCCw((Nv>e9jp2cb9GV|-jQB=Ph;PJ`g2eXuK`lkT50zwT>U-I<9q+VA!09;*)o-nuce#OM+&1JNc)I z&CfShhabT)!6Kz{AQZg+M$~oI_ldMFJ1;N;W&;w!29OCCduCXO-=iXljYQ`paFDHg z5xA6(Yc8#?*@lMw2EK^%+op~D?$RQ+}s76olbXEu8Ek>8f@l0iU= z11b>SdAm5^&xDJ;4f#d*e~V3+Bygvh-YHj0;qS@=dJ&zO|M!QDW*obze)V&-h Date: Wed, 18 Dec 2019 14:40:48 +0800 Subject: [PATCH 12/74] doc:docs: packet-agent max traffic with specific low buffsize --- ...01\351\207\217\350\257\204\346\265\213.md" | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 "docs/Packet-Agent libpcap \347\274\223\345\255\230\344\270\216\346\234\200\345\244\247\346\224\257\346\214\201\346\265\201\351\207\217\350\257\204\346\265\213.md" diff --git "a/docs/Packet-Agent libpcap \347\274\223\345\255\230\344\270\216\346\234\200\345\244\247\346\224\257\346\214\201\346\265\201\351\207\217\350\257\204\346\265\213.md" "b/docs/Packet-Agent libpcap \347\274\223\345\255\230\344\270\216\346\234\200\345\244\247\346\224\257\346\214\201\346\265\201\351\207\217\350\257\204\346\265\213.md" new file mode 100644 index 000000000..1817110d0 --- /dev/null +++ "b/docs/Packet-Agent libpcap \347\274\223\345\255\230\344\270\216\346\234\200\345\244\247\346\224\257\346\214\201\346\265\201\351\207\217\350\257\204\346\265\213.md" @@ -0,0 +1,22 @@ +# Packet-Agent libpcap 缓存与最大支持流量评测 + +# 测试环境与方法 + +pktminerg version 0.3.2 (rev: 7d844a7 build: 2019-01-21 10:27:50) +libpcap version 1.5.3 + +8 核 vSphere 虚拟机:Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz +内存 16GB + +使用 --buffsize 参数控制 pktminerg libpcap 缓存大小,使用tcpreplay往网卡发包,逐次增加发包速率,记录 pktminerg 出现丢包时的发包速率。 + +# 测试结果 + + +|libpcap buffsize| 进程内存占用 | 最大支持流量 | +|----------------|--------------|--------------| +|18 MB | 32 MB | 549 Mbps| +|36 MB | 50 MB | 705 Mbps| +|64 MB | 79 MB | 862 Mbps| +|128 MB | 145 MB | 900 Mbps| + From 37acfe0aa712687ba141ab823bf1ff9daf5c5107 Mon Sep 17 00:00:00 2001 From: jacknetis Date: Wed, 18 Dec 2019 14:48:05 +0800 Subject: [PATCH 13/74] add some docs link --- README-zh-Hans.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README-zh-Hans.md b/README-zh-Hans.md index b9d0d6436..57d93ab4f 100644 --- a/README-zh-Hans.md +++ b/README-zh-Hans.md @@ -121,7 +121,8 @@ pktminerg -i eth0 -r 172.16.1.201 -M dont ## 文档/ 链接 * [安装](./INSTALL.md)和[使用](./USAGE.md)(仅英文版)。 * [构建条件及步骤](./BUILD.md)(仅英文版)。 -* [发布日志 / 路线图](./CHANGES.md)(仅英文版)。 +* [Packet-Agent 云平台性能评测](./docs/Packet-Agent性能评测.md)(仅中文版)。 +* [Packet-Agent libpcap 缓存与最大支持流量评测.md](./docs/Packet-Agent libpcap 缓存与最大支持流量评测.md)(仅中文版)。 ## 贡献 您可以fork本项目并提交Pull Request。我们欢迎所有开源社区的同学提交自己的贡献。 From e1ecf30b9e14f50661f4db6f1000b963a678d6c8 Mon Sep 17 00:00:00 2001 From: jacknetis Date: Wed, 18 Dec 2019 14:56:15 +0800 Subject: [PATCH 14/74] minor fix --- README-zh-Hans.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-zh-Hans.md b/README-zh-Hans.md index 57d93ab4f..b2d6ed889 100644 --- a/README-zh-Hans.md +++ b/README-zh-Hans.md @@ -122,7 +122,7 @@ pktminerg -i eth0 -r 172.16.1.201 -M dont * [安装](./INSTALL.md)和[使用](./USAGE.md)(仅英文版)。 * [构建条件及步骤](./BUILD.md)(仅英文版)。 * [Packet-Agent 云平台性能评测](./docs/Packet-Agent性能评测.md)(仅中文版)。 -* [Packet-Agent libpcap 缓存与最大支持流量评测.md](./docs/Packet-Agent libpcap 缓存与最大支持流量评测.md)(仅中文版)。 +* [Packet-Agent libpcap 缓存与最大支持流量评测](./docs/Packet-Agent libpcap 缓存与最大支持流量评测.md)(仅中文版)。 ## 贡献 您可以fork本项目并提交Pull Request。我们欢迎所有开源社区的同学提交自己的贡献。 From bd91d9334922d547c6e80f61250219e3d255b9c7 Mon Sep 17 00:00:00 2001 From: jacknetis Date: Wed, 18 Dec 2019 14:59:44 +0800 Subject: [PATCH 15/74] rename --- README-zh-Hans.md | 2 +- ...\214\201\346\265\201\351\207\217\350\257\204\346\265\213.md" | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename "docs/Packet-Agent libpcap \347\274\223\345\255\230\344\270\216\346\234\200\345\244\247\346\224\257\346\214\201\346\265\201\351\207\217\350\257\204\346\265\213.md" => "docs/Packet-Agent-libpcap\347\274\223\345\255\230\344\270\216\346\234\200\345\244\247\346\224\257\346\214\201\346\265\201\351\207\217\350\257\204\346\265\213.md" (100%) diff --git a/README-zh-Hans.md b/README-zh-Hans.md index b2d6ed889..e59628552 100644 --- a/README-zh-Hans.md +++ b/README-zh-Hans.md @@ -122,7 +122,7 @@ pktminerg -i eth0 -r 172.16.1.201 -M dont * [安装](./INSTALL.md)和[使用](./USAGE.md)(仅英文版)。 * [构建条件及步骤](./BUILD.md)(仅英文版)。 * [Packet-Agent 云平台性能评测](./docs/Packet-Agent性能评测.md)(仅中文版)。 -* [Packet-Agent libpcap 缓存与最大支持流量评测](./docs/Packet-Agent libpcap 缓存与最大支持流量评测.md)(仅中文版)。 +* [Packet-Agent libpcap 缓存与最大支持流量评测](./docs/Packet-Agent-libpcap缓存与最大支持流量评测.md)(仅中文版)。 ## 贡献 您可以fork本项目并提交Pull Request。我们欢迎所有开源社区的同学提交自己的贡献。 diff --git "a/docs/Packet-Agent libpcap \347\274\223\345\255\230\344\270\216\346\234\200\345\244\247\346\224\257\346\214\201\346\265\201\351\207\217\350\257\204\346\265\213.md" "b/docs/Packet-Agent-libpcap\347\274\223\345\255\230\344\270\216\346\234\200\345\244\247\346\224\257\346\214\201\346\265\201\351\207\217\350\257\204\346\265\213.md" similarity index 100% rename from "docs/Packet-Agent libpcap \347\274\223\345\255\230\344\270\216\346\234\200\345\244\247\346\224\257\346\214\201\346\265\201\351\207\217\350\257\204\346\265\213.md" rename to "docs/Packet-Agent-libpcap\347\274\223\345\255\230\344\270\216\346\234\200\345\244\247\346\224\257\346\214\201\346\265\201\351\207\217\350\257\204\346\265\213.md" From 25e3a75e85bd86adf279b30ce49be7a00836784a Mon Sep 17 00:00:00 2001 From: jacknetis Date: Mon, 23 Dec 2019 11:49:45 +0800 Subject: [PATCH 16/74] update performance test diagram --- img/ali-1-1.png | Bin 17342 -> 15994 bytes img/ali-1-2.png | Bin 16144 -> 13594 bytes img/ali-1-3.png | Bin 17732 -> 13579 bytes img/ali-2-1.png | Bin 17420 -> 16016 bytes img/ali-2-2.png | Bin 13887 -> 13272 bytes img/ali-2-3.png | Bin 13803 -> 13506 bytes img/ali-3-1.png | Bin 18091 -> 16495 bytes img/ali-3-2.png | Bin 19252 -> 15011 bytes img/ali-3-3.png | Bin 14802 -> 17535 bytes img/ali-4-1.png | Bin 18161 -> 16955 bytes img/ali-4-2.png | Bin 14359 -> 14348 bytes img/ali-4-3.png | Bin 18514 -> 13884 bytes img/aws-1-1.png | Bin 14060 -> 14628 bytes img/aws-1-2.png | Bin 18493 -> 14607 bytes img/aws-1-3.png | Bin 13302 -> 13654 bytes img/aws-2-1.png | Bin 17392 -> 15976 bytes img/aws-2-2.png | Bin 14037 -> 14483 bytes img/aws-2-3.png | Bin 14033 -> 13938 bytes img/aws-3-1.png | Bin 14842 -> 18533 bytes img/aws-3-2.png | Bin 18390 -> 17745 bytes img/aws-3-3.png | Bin 14452 -> 14070 bytes img/aws-4-1.png | Bin 14924 -> 14866 bytes img/aws-4-2.png | Bin 16568 -> 16249 bytes img/aws-4-3.png | Bin 14615 -> 14536 bytes img/image2019-7-26_12-19-28.png | Bin 21027 -> 0 bytes img/image2019-7-26_12-20-15.png | Bin 16257 -> 0 bytes img/image2019-7-26_12-20-33.png | Bin 16159 -> 0 bytes img/image2019-7-26_12-21-22.png | Bin 16512 -> 0 bytes img/image2019-7-26_12-21-51.png | Bin 16170 -> 0 bytes img/image2019-7-26_12-22-37.png | Bin 16726 -> 0 bytes img/image2019-7-26_16-51-39.png | Bin 20482 -> 0 bytes img/image2019-7-26_16-52-16.png | Bin 25557 -> 0 bytes img/image2019-7-26_16-53-32.png | Bin 21855 -> 0 bytes img/image2019-7-26_16-55-46.png | Bin 24643 -> 0 bytes img/image2019-7-29_11-22-40.png | Bin 23914 -> 0 bytes img/image2019-7-29_11-23-48.png | Bin 18643 -> 0 bytes img/image2019-8-1_10-22-54.png | Bin 14955 -> 0 bytes img/image2019-8-1_10-23-45.png | Bin 21009 -> 0 bytes img/image2019-8-1_10-24-32.png | Bin 17317 -> 0 bytes img/image2019-8-1_10-25-31.png | Bin 13879 -> 0 bytes img/image2019-8-1_10-26-12.png | Bin 19313 -> 0 bytes img/image2019-8-1_10-26-49.png | Bin 15867 -> 0 bytes img/image2019-8-2_10-28-14.png | Bin 12056 -> 0 bytes img/image2019-8-2_10-29-16.png | Bin 13124 -> 0 bytes img/image2019-8-2_10-30-17.png | Bin 12353 -> 0 bytes img/image2019-8-2_10-31-39.png | Bin 13323 -> 0 bytes img/image2019-8-2_10-32-38.png | Bin 13518 -> 0 bytes img/image2019-8-2_10-33-32.png | Bin 13336 -> 0 bytes 48 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 img/image2019-7-26_12-19-28.png delete mode 100644 img/image2019-7-26_12-20-15.png delete mode 100644 img/image2019-7-26_12-20-33.png delete mode 100644 img/image2019-7-26_12-21-22.png delete mode 100644 img/image2019-7-26_12-21-51.png delete mode 100644 img/image2019-7-26_12-22-37.png delete mode 100644 img/image2019-7-26_16-51-39.png delete mode 100644 img/image2019-7-26_16-52-16.png delete mode 100644 img/image2019-7-26_16-53-32.png delete mode 100644 img/image2019-7-26_16-55-46.png delete mode 100644 img/image2019-7-29_11-22-40.png delete mode 100644 img/image2019-7-29_11-23-48.png delete mode 100644 img/image2019-8-1_10-22-54.png delete mode 100644 img/image2019-8-1_10-23-45.png delete mode 100644 img/image2019-8-1_10-24-32.png delete mode 100644 img/image2019-8-1_10-25-31.png delete mode 100644 img/image2019-8-1_10-26-12.png delete mode 100644 img/image2019-8-1_10-26-49.png delete mode 100644 img/image2019-8-2_10-28-14.png delete mode 100644 img/image2019-8-2_10-29-16.png delete mode 100644 img/image2019-8-2_10-30-17.png delete mode 100644 img/image2019-8-2_10-31-39.png delete mode 100644 img/image2019-8-2_10-32-38.png delete mode 100644 img/image2019-8-2_10-33-32.png diff --git a/img/ali-1-1.png b/img/ali-1-1.png index 7869a664a0daf7de15e13d7c3a453de3f657a99a..721a27c952c473e621d1feecbc0e0a4aac8c6d9d 100644 GIT binary patch literal 15994 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≪bhOFcier!xt-L!tm{vzD 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 W9+5aR0RJxsima5PWYH`A&;K9MMbc*g diff --git a/img/ali-1-2.png b/img/ali-1-2.png index e151a0fb29d8b087849a881a7dacf884481bec6b..4ea6be51c9d48cc90732220cd99ce5d27524da07 100644 GIT binary patch literal 13594 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

A*B+!(vby;y$P&s$(ybH%>w_Dta4J zvp7uuBFQsjnt; ze>c>EK73A-)xi4u8wliSbh`}~30g-iy#&T|Ij#aKrifs+_8G&Yl*ur0P7JfBdHwVz zQ906J?Lg3kSp0;)YE{!&&ZAusIu#=cV^b+2BzfpZwYzb zL>WZc^Hw3`Q`(sGldIaXH%sVZnew_t^Gjweh0W&E6Pmud|1PVsdL>$vjC&K^4JsZ$ z133*MrzlC zCe)8;;^kMg;W`mO=bw@IH=X{?m(obNQ_ z;Vy8`B~{E@anc$5F*;V=w58ZkD`WmX$N17&Y~|VS41xS=qG$(|xTHG2Z9a`OBG$nV zZ<I9);H(*R8c0?aAiViXYlZnt+J}>DN{afbq>M=yV0ko=BrrNYZgsu~ z4ZiZcf}V643l)5zI9oZK8jbtRSfk-kM3Tn7ldJV5arQfhSmQ^;{bESoOr=j0nf4r! zs$PGKzB%+|d0#KpW67*tMKk6V;>Ni=Hqye*#+k09Q@JjBf<;b~INiJov-fq2SEmSh z!thyRp)}F5`5kNXI9nypJu|J#0J8BNtLd?9-nwH;w{7>r_ghjddLbGOv(iFm`D9v` z8O<`_0ZlgUd-G1j5$YaMG(?;(G1y}Zbt9Ofp|OSYq4cZwbBu^M9nA=Gt+7K_S-i(O zvI_$1w5?2O{2EeTW6ZwqP1a3eIpUkqqLMdJSUaZG%3x*>o|8y~Co%87v{ll<-tb7| zvt2!pW*;#AOugcXZ|96SjI(PxVEK*sebUt4p7=`K*pRxk>pgGjY^YmL4W5Owvu&$c zCK)dffjwj84;2;Ad;9|%PN|ZO=bNmkEr(wPSN(R}T%uj_RvqYKE9iX)t6gNT?=czk zI?+|IED_cnwkEwODA~h!OBTy!z}8|mY8Vh~>e-Vl^%CqcSqu&8fY=lbRMZr(HK!#`!|<8_bLFMs%{t0a(hu#n%RF?E{MtKRI64xm@$ zh?Tn}p_l{;OWU0#X{xjk*#L*@k7~qRZmW>?70v|2mF;|4ZI?C3F8T7u##0G_13%He zvM7RutD59T96(=l)HVNX`gCODsXMib7gv=02-4{E+A|)i%B5RZJaJG}QkHs|a7wsp zuO;M%k!a6_IGI?RPKZ|U73#0JmtkA>weE$%gNan^`;^&s!{)HIby z_2oAW3}in;r6cu1xAnU7mV2VR+vGR`m5mLMtL#9CyK*BUr=lvL>J$F0`|Hsh-r0)(3)?3n0mALHx%e~MVh8;Fm{8u`j*T->+O5HVb&1jZGnqAS^_G74 z+B}~4@m9~pXHcbmCbVHcuAx(J$)RsJ+;`5$$0yEXzH$#P&5v1P$h2CUqZJ&<&O+07 zIiWnm(f;g}?7#LXyCzA0R;VKdNJH=C#iZ)Hi6IvirqJ?u3Qw{-(`3=+GP^E4!nr8-RD!Rima`UF9+sNK1U!|04% zMPw%fOc9P^G4aRmH1$^|f%7 zq75GdXBQjG6IJK4q>DSEyNVG)GP4?*@OPJ!321#TIos}`s@+0`Y;v8c6V2Ye04kH! zDr_5y?^3`$VIZ5*s55`#Se-ib!6Xy&MT!hR^mNg-eipwLzac9N!9-@u6T@8qj{l*- zNoH9H#rxj(V8yme^M#O5Sd((loDcZ8RugsFrwH-e$Y9X&2JFG3lnbMcErY^kr zo~UF=F566$j8Ao{nCX<&;i|3T(%R+Q1fEnqq?|2M&0tG)3YhFXxojPtb^3%@tEK|1 zqd1-8mOfPcNgeW>r{MR*Yk#Px!h7q}_Z&Ti&*JxqU8$P`q#$XUyhK|+a6Ih3vBRTz<=)9YHpz0fn=Ua%ulFKL-ZF&LyE3i zCyQtztG#(|(F*V*4rhErI(YjO4`tDuu}4+SH(zEA{?)ls;!Qv3$oU@!1D?H0EibL% zw9dE#9c+Wxp>Tq{x9g)0fDWO))17P;p?Ol)Wsv_5DF2m`owpTtfCtl}2xI%=FhB-6lYomoLBy9zR z8m3;xyJ+gA0>5Ek;LKaflVGtuZmwMELJ15?9*#^k1+jV&O?;;QRZp!82@TAPR&$qC z@24Fwg#x(~#u^kBn`4+(Y@<`*@oQN;v1(D*)3-`SHuwBK+2bPCh_KQ8ABlS}lO;at zQF>p!o&D=7E>fPK&=VI^_(NmPecnK*r;=){xPREr)N@N#H=iOg1NpP$tXiwt`-0|W z#2$ea`Mp3o!sl#TJ8+JnWOcU(nYW)a@idnPtN!KTz!D&zMYBtA zqOLO0FcjzmKUb(w#$hNQlycN_TgsAfSYFcXyq8K%eJ5 z|MPx$*LuI4wT2Hf{Q9@|wXc2c`wmr8QNYF^!GMElw_qeUEy~=TgMoWyRA`ziOVGiuu9z+2Xp8$gm*CZsk91Sg3B63%urhnj-^j~^SN~F{QhUmNTgjPJv@-eqr`Tj%F3m+7s+X;T72T#e z+ruc={(1w+#QvylGnWP%wZe6U`H7A{#<%V?o#v7p_S}XpJ}2FYt?7Tpzgi?}UcWx? zmLL?yqk_Nx_|1ZA*0aKwmC^Rw+NAdie&V6Wz}&HDG?qm+}h>6 z{M*$~HQB@$N%8)3Dd#J;;2oQ%_b_HDqa>K(ibfLdq3aEeBzTv|ZHoSWN@5RSoKg-1 zq`$**0AK&F>FPzR#-zl~!!}x)+|khdE@fyrNAufQ_Dd$Et|NisNF^)xH{7*x#IIiM zv6yT^Oh2C2zj~RIFtVRZ|LS|{G6i~!q%E2n)T2E`OEJSwl3swVv?Jmz=2qG4d^!78 zV8H+#j-twkN>6PJ?BB$wTU+WqLy9zsv2psguJ!e#-8W_pOG~76_3Yh_Nji8`erezg zv@{!VUa7co&FE^e)t$){}_p-md2#9N;jdx1tMjNvs`r=6418b z2K4l!0&XD0%8;%rNRplrRTQ33iRd?7dKhVM^fL=_4$GmB1F3nDEDbZRPY+RFZTdHQ zD@Gxm1U07C$RN;hDk42;3rHZ1=8(OUpN^5TeEyP~fE#UA1%Yl@0%i=Q zc`K!~YO%Dzj>K>1gi?q_5R^HABcO#3v!lhOh?RsQ_1PB`wQ@U+J1-4d%YJ$5UBO4s z?{C%4%s~y0S0d|6V}(u^K<$@?-=dmix;gip@zri(N%pjuDk64VOESKo!@%f|<@gpm zu=bCqG>J1LYs+C|e@>qj6;>Z$0TcP4moWY@xUCS^Lc-(TxXDp`yX1PVniAhzQ83S_ zVtHf)vGXXf4+y3AlcH)#+oxJaSmI7*%v9b292a5(ExqykklU2p(BA62XnXd1HW7rXrGijpAMw6Bj0$}*voEGS{`My zi_Aa9KzEe)rTO!iL;pF#0$R?Y`mv*{URmh7UfuzL*RfBTXh%m!sgZ^0U5eKyT*g&~ zN;H^O-U`Q#tJLmi7uikr)hlJ_04HkGdmxUt9w*6cK&VP-qKCl~dTE4N3Z*l}D4V?% zv^Qj3JVGViev2&<`dG$yRPObXf}S7Qh7`gJybLr2r6fqaqz1zK6a$AGUENqmb&q^^ zhx2+g&(Zmn-Rvq%}?VDX69+t7PvL+|lrQeU2frwB{ z?xQ~|0yT2q13=k)XDX(Q!zhOWCq{O?F|=-{(@M$l8}lE)fdieB8GnQxmO3r|%N zF_cnRy6M?ly=N4XT;lE{3NP*cDob%sYVo!9tm_56kk?^C!)+V7+ttbMl{LoO^m=P& z+##t?Ol?w*SrT)JXiHn`Dbj4*fys~Pm{?Z$QlfwKzd13n}UD5i74 z*BoF5GfcyE^oFBf@7#7S)>e+c#UFM(ZOYl3d1b(6_Nh{4=S*Z;Ykqd{$`X`e=D?XZ8P;K-%Vt=^@cCVz3dzh+qL3V__5^2HCpI5NtT z9(f;;yj;SJ*LLI~g_m-_jbB3E7Hc{fdsaVMI2iQE{e&bR1sCLF;I;brjNDQp*vDmi zihfPkxi-V)vgl0z$(pWr%JxKUKlx=Rh?5-s34B;d+;xj%N~)iX5??sm&FBPY)}maCn9=4Fn!rg^*idHHdO>duG%PjOkvv3p3l!v18PR zx~QesuafjvXVg#fF<1h}+S@);fPhE^$Ne1O4vwlohrwBPhEL`zR9{8%W*O^?8i!`8 z>Jq)_hHU}2_g;hBiElx}8;;Hxw)DCQBwDUqYbM&PE+_;+Y9=1(H91(zg?k48cq(cx z)OH@z5(D1HWM|0Y^eHnI5h7;imm{K-7>R8u0YDGea)@h|ZWtAzkx-ZJAc9=v?b=wv zcHODFOMfr@Wy}HZbLLO^@64?o(V%z>eX%lSY5D~ioXI(+ z^lZ=U8))K~DHEmLUyu>}Id5RiEiZG-p*hlA7-5o9?rp&ve(B`xomKY{hY)>uVVN^F zcRnby+e0ZMR`Llr%7BkPPK@=7=XZt<^c3Zy{?anV6~SNMKUtR~CM)xkp^_IA74@yI z=B|;4cOqG0jK;#D^WwSw=J2N8yX;K0-zBx}Nx3`Zu)mdPWN1D7SNwq7?Jqw zk|t<&9e2H*G{?602^{Yud?tF4#PcKJ_m6Lbr^lO2v9Hnz+*T)XWL8(&r45aYq^~XO zai9GOW=hMH)mC?7$~ET3A9ccsJwjRdrvB!rU2bl5Ef)7ZWe`DwmzOZzWCH| z^|?aPQ~y_3H(g?gQq^iY`>&>iUt6{GKxeqpn_JrG8kSSp+GBEY=%UfKjIJ876P~#g z)h9F=^UoLa^BQjNH;uxQbB?}$!B}1?WIRo zT?pp^9ViS4sgJ~GMZY8MXA*Rr<*7=H$H=lW*li4YEQjgX#*>S<@SPvrM{8jqwC^Sm z7gN4NI4@-HI8&HA-(uTnIB%zn4fS$COB$N?4`Ku&c^w_l4v);1lno)-&*F#$w-+}` zoMG>i_)JXAS;HMl%7jaOJ)T+sDlRPSQ_%suP|>%+s|0=ib5YnP0F?B_Vs{Nh3)SAv zeL9}{c|pgba(@DssGGDU)1qMECkvplQU1*B5uYT>3H%Mmx^fL90RB`7 zCXuUr>NeGo>sq)=vm-2e3}YfJ$kimoPAGd3d|7__`j=zlyq0&PBDuArELFk&$FA=P zZ-{K~R6PeQ2facLCW-VbR?ccx`F3`%D3Khg5gUB~)Y+|zw@AiCNketH->ftOwOkEd zN(%OCrr)bj=e0O*$)`tdN=iJz%nySC7qp*g184 zY4}o``YXr|iyr2>F)bw^G^RGTxYzf*K(NkS-BX`%^!00D^;owZrs|r{`XgY;;$ue3 zImbW&^IhWsq(GOfz0bFXuP7Nd)XH)f*BDjMkhErgG?i!8@4DS7YwqU^yNBEp{VXKu zFuSLRD@)uvg$W6XSpoVb0G5zUPNGek?x6xtFUl0v!nK7aEE_+3e#Zo5`b14^oH9F)QHo*5!QBPD}VA zt7XbvezJl!4tTmxmy9nFA)zpqNdrfB4t}xtQAGU!#i|(2=7A9!k=Sgw`0+xKd&AQ6 zly5Lb>SqVQiX9VesEmWU^D1)o5R+N)axQ)xlaRejyz7VP!f<8&gZXd6NF`N;Om(&m z$Lfa3%ni+lse5Zb>=2kn0`AR^5u^gG?kHv*eqD1uE2LzaMCao2{gPUXp7B{=&cKHg z`h&z&w=5Zi^RF0f9*2`=Bn+A6gjj*qj|tLfVT-uMLt||F*6;|on-1LX{>{!O3!2o% z&0*PTjCV9k6rK}aS^TvzzjhQIURf4$>g>euHG^}1T6f^IVryzkaEuHobPeX>8PPC| z3<5Ax@WS^|&fy}GJIbH-Q5`fx>I@i5G=;Lx#f;luXf)(Dy`ZgIuW z30(4(`!Mp5I-tRv8ZTpTn!07~Hel|o$-f9=-zN`l8ahw{^DIMOU_GdGJS8=)4nB^> zk|7KG;9pm_TaCH|=8}iOBlp?I6QE6Y#uOwOG;e#?>I434froItb#~pW31S>Qt z{^0=dVbQ%0O-sNZ+~>>zmzUMZ=OoYj6?@IDJ2%aJW<&fQ z7BN19`@!AcZU{zcHeS0h$;8IJHRXT%MfZrMIOHuZnp2H_7FEmnW4zofO_!6r)s;5f zTT-!QfPlf)4+Zdl0fm#GmyLi<0W2t~50JAADqoFGF8Lpz1*7EL0lvh!IDB06JIDBT` z+0WtL>$)Pg_u&MeBP2qNq_N{YkTw`TL048*?zz3W3g+HzfAmg-CPIJT{Y_Y##8W%uE!?6#~ihZUyam-R0lCQn{Xq*T>+z_FT$a{qI6>;aS>8zO*AN75&k> zqRPkMXmU}B15)c??GK+=3F5e`1;oW2y_h=pkASe~u(yr;+khjqUVP(U{$kjG2Hiui zU;LOT*UeZ2uGb>RkE$Px)L5RX z0Zqp0Gn~b)YVsj`+LDty5Vbroxeev$F!o(nBs8AEY&W>YKdx*+SaSDJ4YMgZ!A0)<(Y$oL>sE-$dZ<^m zf>mtmUu(kz0$_)b$*Dg_qZ{rkxv*q`fP1Wh00LPQXSKIo#WLG~ul_zk^(oSBPgD+B0EHGu3?iD~ydN$%2XNF;^K+^6c zek?u8{buMm3t$5*lQFEi0%W8iW(0FJhl~Q}uVIVyX`?$O#O$vE{Sz0lNUKtZ=_l*ug;w zA!z#%k2>Ffnlfmrijh&`<{>RpFZ#>@bBr+}M{~kdu%MZDL|~{8;8d4jMS}Qy_@DzJ z`^C`c#Dy7i*Gye>%cQ zZEW*uLhPiy*pnfd0=f;$Mt~z zP=eyNFGC^a;2!L9kr)^lI-09IMls#E9|7oqHM*rywq7tEoMFrpm*TX%3mQ3mFm!6! zkde8tO8@k`dPY5&0O1=NHpHa$Ax2mVZa$l>|GbPBCS~Fa^V^ z;6d}a%Y=u8E6?HqdQ5w5iQuB;x8GtCdZCJ*d!OhqpPk^AT6jBn zEWy8cJUe<$GW98W=`h;M(-prx`N6V|BP4qk)@ueRbz?VVm5nN&e^6c(x6UG(c1>9xQ5Jp?IVBw=cx3sh@o>Q&Q)fd5&mU2<~3sD?9q zZ1n?fp~=;>OZ$cj4ZytOPgkgr@Y|mL2g`>IOP&a&6g|~$?;vY-pSC6sYWe#=#f+x_ zd6rU=OB*(Yh!m$-03EU?~rOC=`K`v|%ACB|5R9lL@xc0G!(}%*^=bv&JR4k3% z9!`m{Dw&$fX!TVdtq{a+`(66uWMOL z<_g{<8x7xZ5^{Vi=+Q1A>OS_2p($jw-VpbJQ^E*0$QvFN%rwxEqZSV5-noti;D1Pu zl}rU*d~eWFM!;Xyr-5s%v7up`{LFpLKfbt+uW}B#xzafJI(;oI-i5zubjy4g(5m6k zk0V+-I-uKg&CO<~UE^ws;HduVkF>KSPhC+(<6~bla)g3pZyr)OG_X;P&fV=<+2PR} zP`&Le?cJ%wZJr(cq0L`ess*a5#RSW4N$o`qJ8C_xX1>?zBLxX%4NjI8)qH5i+(mYo zx{qM*sSIC14=A*Am%rEi*TNr?H5*&cuQg5AuMEx>J%G$aP$W^|pNl}yp^p~g-VUTQ z4u(AX+)y*8(7k3-C`dmkyR-Hzv_P5Q_a>!9V5A%Ft^)2kklw7kHsY9&X(fMHA10D? z6TXVl?0Y)ON3k$V9~M|I@)O!K;Bf68(nG`-kcU2m=W}%EHaf0^Z^olf;!b6mL<1k< z{1p#GVaF9CSq<16{IdSFg;&%%EW;@xB5MiFd$7kkpz2}MhSNAtN#-?hRJ)x`d35?8 zd#eIqHZ?|;3%|9K58FXI1dUn`A>;_@KO)B$l-tc#qc?lrS@H`g+fXk*o<}EaNsN7XUt^H zshTh8^}0nR>BsL&$+@b%ecu-6cF8u?Yg9Yz<8uCz$7Vu-q(ixfV($C zf|kK4B)bn@6XWXyr0z9wB2>YvIKMip2s>edX6$oihU!nGP<-7YJCMEK`+I|#1wApb zz{Ff|+Hh3)uGb#6oEr&vwd`4xHt?ueGG=*iM@s8O7yhO$ zy{#TAfR?>CaXQ4evbN&?CWFIZpXD$Q*Soa}J?K7i$;iR9jMKe23C;I5jAfwt$4p^M zHCs2K3EV{!MT4*QREWrX>-9mi(6>cDmz<^du0H~_QJi5*Jtjpv)20>_ANiq-tRVg1 zv=63QG`6>p|4mmAigB0x&RTr#JYI8z=p^l}eQc$`zK^`VUI@kBTaTH17JT|riyMq2 z>+k(B#WT9z+`D zoWxw<<+>uMt{gtkWMnPQe$eO;$I3b`(P59Do>1H9>@f%tO5XG5;zCVg!FrZ(20MC5 zON2%|!wv*#gCPm+NRV(;uaZ(ll>T_N!bbuXs17|HP#@}K>SeGn-oE#$ss<4o0@*Qd z-6BqlHmrMDxC*akd3E;ovSSC?Hd20+CopB!LaS!M+yGDAEwA+V?rFkNQ$EUCOg{mR ziasX;0Cr0<^RH}gtXmC!=ozWUZFT3c(nuMXow&5!PFRPCaFaV`-yQNtXK$fbKlbz1 z>srCMl1p=jnRbRM(xQh6`|Fs;4q8l}D^?T&ktDOY#m`RtF3(23pq7=TrCD#g@;6qW zDCLVS{K`e?PXcDu^5*1+K`cnjuV$e5gIq2?UiddY&#!^1**BD?-+Y`>`;tsL8#rod zRyK+BB8i+`c@t>{Rxm_Z=^O6r9r8hN(23Y7j<^WTmp@1uJ?o{;F4(vB?O21eYjq*P zU!Z?82w7>vZP|%t-Gz>(X##G!#KFW^6O%AjagIuWr2;8GzLc<02T-x82@{ zvR}BX6+r#vJ{Yn4mEr+mCApuVjPN1s9mls!gxHnqb0)EDn~h{!-@}C8FrY*}$J7$~ ze*66QS{TZ-de=TrQsAc8Ii=T9@yc;;d=aDp)0Cs;%uO=PK;?$PR<)Y{%8Y#*(`Jv@o?cM?P2O9fDo2gl~-smb411Oaa%0dhyZnjGdW(5)&=dqLD$b5 z4N4jn#h{`k?R8Pyv>Vv&(n^8xcbixszt~5RYX;)IfQ1Q6ij1FKUmt9X7euTC=AT10 zxL%0f4_^;rU4y@$vLypVEClBFX!Z5%ZLW7y)8?UgFe18PNyBB?iEZTOwHtvRw|bvK z>Q>PQ^r!NZqUKbm+1^7|-LCgi6Z}t?lE43#FbVa3O5={@**&;Q1w zxs#iQQZa;Ivam2Y`7KNE+bLFcU0?bEXg)A7kgYm{=-P2rqF;nBeeQb3Eye8)Tc>CV z{V%5=mPOD4I;JLeWC}4AS8B~4mO8~Mc@Ph{v?f2sH26=-3KJMFRJ3yvLX{RLvIJ-A z7c73l%6b2rndi5U^TXX-cc60+dxLi}|2jxZ3RA_9t^_$DUez4LVu;;M%lrP9QPD=!(nB| z1?_hIp@E_yF*pfdH`^z86jYJ~vS`yas4hH^+|@qX*D|2eJu@m+D6a3GtwohMQ|MXvS17iE9saD7n*U2)pK_)JFC=eP-N_9G&vws#h|o(umLK+T|m02H|rMp+nnl=pE;oY zgA06f0F+@jCT6a7<$1tEMR153^#6qpi>VW*5dT}uCrL*d-G|#NTK^jsf!h=L!7wXz zA4fUEkZAB1VBEF=NYdEW{#&U3Ai0iAmIYV+5C`>#UGo}XN!x$x^lLyt&T~^EJ?s~n z3{mY~)77UZx^DCviggnpM=mxM`!9d&iarO}EKTfqg=k3Zk`tvu&f`W-`Al_*PiQ~0 z)=wu%=#PlQCoJ>?W&a-@z2tfN_gM{iJW%X9(Bh~}OO&BhR=JFCY$HqKPA&ZWADbCK zmt|~&OYI9^T9%;|zq>xF$H<<(GAy7xiwYm)^z1di`p(H7aT%+UIJ47FS-c)0iDmo~ zc%OlSVzF@QoVxCOO4whh^F@efy1ZRHWml)iE_?ECAw%sBa57ytRDk+-ZMarvTn;A9-UcJHP&mXrFB7s{ zze?@Fi)mP;dtbi0nEKtcD!!3z2JY10Omi%5Jbg1+ZWf(NCc3l8bT{j<7g@lFNLu3Z zThFBzScvHPe1J`{1V)-^axgAsq80zv>BrsLHHzQj?nK0wVSUsb#kH#>0u=91#I8LMa|iw6VKR+dq*w`{NLuZKB;Sr+=DN zjpFf!u{7FK_T#}?bbMFgbYW0%+IqaI_y)>oK82urTaSb_QB3rFxTE|ye@0Uaj#V4V zZ30J?W4i*}B})KnTP|^m>xlV`T|4$HlcxL8#L>EuLZFm&J0VgVSrt^x@VsAZDYOe| z!8o~Wa+t^Jn+#&U%%OWxDw`}E4N|>%3spo(KoC-7I0pA=rQcRp)ExzHT*SxOWhp+l8u|3cb zO-4LRT7@R0MdvjIt-?9`ux~#Kv1!cvUE65oeVnPD5n6uShc-o$U;qtw5Y(C##2tE5 zRE6mv;!`5$C8dY_Y9-WJl6>eSYx}#H%?_B@94t>w2(FH~ijN43ei|tqDvi4^+%@iF z&Di}W`3BO8V)dG)w1*GcvOs?vlj2FDbL=bikIu5^bo||pj(ybi`*kG3i19Krx z^LcERbPF!QU>7G16nh~B@-7-#XEc+0!eW54z(jmJ%b%LUlr}7ELZ#ift8~1nY}_&? z(R4$qJ*>~RpZYnopd#ZT5%xz6`a?X{7=4K&o23kdf-_6iwgEFVP6{Ne-b zlp83hq`2xNx%_Q?gxw(dW^7Jm<5V2a7eOyf2YF?3>~I>ag`wfR=2QD1#H$`vF;tHb z%s#O8gq>n|&=*``681i>DcVm8LWj{<>rS6-UYs5K5wD=QeaHPyLijU6ILEDct(F`I z0gvwEpDl&VE#?9Lt<-$pJC4MItkQX8N6E`x@xBjFYKZ? z4ciCICZy|bR_b*;8j8=5P~JcX8O1gEA2|~kou}OLk7P<``pMJ(MtKyO5|%I+7U|j^ z6vp~9_$hL!fJeUIubK(v{Ktgb-(>>A9H**6Q5lwLNo+KZhbJaHOGX?GEisDRD2(1l z@h5xF>;_~e;wGr_{<;ljoK_B4#AteB8cQA8^VuCTBX!mQvg)K}B* z0-lQwQ%gV;jvga~Tux&KpTh6plWogDt(~RaV^OBe>EOT=6TQODyMH#k9HLYYDSfWr zyR^YyTcM?|DDb5qdH?iFkD1StN?wM;kzgC?C9qOuh9^}OzsR}biCate(SQ0Su0EP~ z3yB&~X1h8AjNBB=1lyob3_TAziFB$%Ia>+vagr}YxVRufd?)iQ?}6-!jc4^ojGg{b zg}2k02O1_8UwVxAGAV;TysBW1$L}INtsRt3VhIx|&jDUkJE8eJ`is7>xDJL z7lLC_V~;257J^81@#iDGQr#@N$oV0-C-_wr1MM68{*%VWTyx|r)X7|s3!2+*Cbd8BXAoWv4MkIkf ziOemEMBA14&CbN;Lei6+-Ylp^{IbOF+G8w5R?yt`DE(~-y0yGrQS0<(5FJDdvTP=w zD7bPe2n%>iFS%Ez4wf0|xqrd4SC26K36^Y5+Q?&Gc3qiuPxXwrlj<>S5{22DKK z|N8ZE7cEjQp90yPgWt-ceR3BOsis1MshY*TBz!jg6i!Dkx@Hn&$a^^-#zw+Sifx?l z+K#&+yHueU(5NT)`J7hI)m*AQ#2&M2kU}^ndR3%D#p=A6uOEDVYLSDat22(zlQy*^ z@WZJb*M`|~dWB{4Yh+n?u)z%+W|j5W&CbuF4Xd?Qxn_b%cI8W4T)(DpP7=mK(TOaC zb4*$iq3cPzTsT@$a*UJU$UZX}BtBgq4unW1SzH|_^Og^RY2~Gzqr&cxK`8Nux*6&& z=f$kHoZm)hlwzu*nXy%D1Hj^BA}jbUOJb9%NHr5QG#q2o&1(i7dQ@}fck=3Xg^WEKEC?qH2eSZ1_60Or+9DrbPJ6Y4ikXZ#jR`|AxNFR` zRRJ-wq7CO1f{z{XPQl}4Rd{TZOQ3ZJyx5Zo{{Tb3S~k=s^MyO*EDwgB24f?K;GN zh8|*~*gcW)UUj!kE<7Cd>_o(df}I}W^1q2{pBVOlw9ic|-0=2eX)k@ksGKD=#Y{X8 zAkXRM=m;U|D;f-5;XGJrbVfhcgT8ow;`NxBfcY^AC+{EAh3eGpuHlbf4Myd0-}tOE zUX1Wsn|Hj7IsT+SH%NFO?>S7c@s_X!q{*J|*lIDx_*WVM0j6b2M%uXc%71D4g@QBX)oam6Q zChU3()#@i4moZ;))!id3vr4{ImCAjrw30z;?M$CrJ%OBotC%_jgJ!;tKIWfoX!bx5 zBZ6pJg%pa9XU1fj0T1zHe?ul~v*JgXVJw~6x0JIW#91`D+8~51`XONFOoj(jSDEJP|5q2UN(Zw_t2+ z)NP2)R#cVFCUDRVAof0$a(nb9=8g%J&O*}Z2D5#%V@>GDc{T!II%-IKWKW>CeH19< z7-d?^8FnB>ovfS#1$QumJErTf`6^YSl=ol}u5cbg1PU?%DR$yU0z3)6pw(d4SVL93 z*M!W{rlKl1vg&G#W99H%%4GJfyWCZIrT4Rw;Fe>!0c^Dm|W-njjKF06Rt6c zJPEXp7{e5qO_$^yc-Jq2DtFI|H~=Pn_GRP zpBCaK#&hztMyv3yneWHW1NeSMd5$~OP`sC#r5%KjTTzK(Q~F29kL{^NRg@lGIk{um zfE?l}-DM5G9}EYP{l4&s`8+kc1&(?h)l!!t6Hru4`ticWeW-vDggvH!miXE6*m}ULUB?~KwU5IA_4t6qsvbi#qyLm;7%5tIbavnCkysLSJvQ3Z9gj_Maj>aP^ zEb_M86cw^|hCVhR@y-WXx?5Yvs(8h;h$B%r$7&tpWZUdcx~D;~@dRA+8UI zK}XD>1AGx^H!ih*V2D`SEq)Cm;+=A>DPI7kt&+EC6e*@&>_Y`7wqt3;Rs-;?s0-~t z)S_1FrIC&{L?~A8+#v>M)%C^rJ~>2Aoj+1}>6bZHG$E=W{uUMV6ZN0P=iIs+ab zd*32CFihL2iXK1>^~b5szHoT;enurZD#}%7VmaDuquBo5E?SoSn{YZ?A-e8J%@_wV zz?bhJwN*J|10KqgxOrE*lBn}>C=NA4nL;Sqv5x4wnm=hreN$!q@icXZ_A`Gcf{B91({(3* zHYAL-tZRJ)ek!;psyzxFh|=g+RekxrxB~-r5Y?k!4MV5mKZB~^H)JP~UnS^Sy?nG_ zRxXC1Qy$<~hFN7!tCqW=2#0jZ-1frEkADIL()3J?G*$a^BmD<6H3XC7xl;)68r+7P zjt(y?NQ#%PB!JPoytLG$8w(Y?l3#a1VJXy;oIco7rf#4@nt0e;VFe^E4>lZqM73NT zrlDEIr#n$CWS_P0Q73@_Ekj&%GeGbs@i-!@71bW6y&o!^mv*3_!iAwpZt7KlDjdz9 zB;0cMgE!=q-~}0yR7!|7@FaTHs=?LN@2dLFux9VEgB1>+$(xwYU#Pr;G{Lwfju3|% zwERgY{vR`rqtE@Lb@!!k#V;=h%*20KyvPA zSv}89yb}oMQvsb$1BXJC_zU`3Hiu_IC@xwnA*FQdtzU{TPSWrQPZV`3#D?Y z?NWBJDZiVIBD!R#!gyw05To94n8(JjNJqR&FXNMNivj4EK0ye+R+JqL|I9X6H{dHx%sqM8S5zmFhEbrt}`EHKIJC`$~-b z*vMCp+s3E3J5WZ>pY0!GoL7k^IQ__mh(M!-r3ugI-pE`h1)esY8y*GT$ORtyXsN-^K#TT3H@tk% z<1b;as|p8T_Ip6XOZg*q62xa-gC?m12URo%>%8h={5rh)TPLj|ag_yJ{OZ6n zHS;)IYydJ~0#{FUmm*qU%a6_XS=QFTl_Mt{aM>F09G|15%)=mjsX)@nYX^8zFgeCg zXX`8tCro(wAQ?OYG7%p9B?#Ehc)tI})j$?86Iz6T@bdYj93j~hB_h-Ca%vzR_#^4X zJArtF>T-DGQsmw_Z}Bc?GNBKy{vq@K%_}U#tDer_fB066uzF-;%*H?M73(6aP|cAcGiQI!ZkLv$Bfv&`G%oq?`n!IL zoK9P}d1Ix@ROiawGUtWqoW#w3YV2$|<{81+vD{sQ&_ix#E~i5$nuYQMM`Lws@&#>? zy#<<|y)z=I0c#!ud1g*Qq`q`q^-bY#xl_4kPN=)L4}cA31SaIdQIrwfng2Lif1KMp zJn^YX*68y&xwjBd4LrLnXoL)pJ&7H`w!eKIq4yvhX z#T^}>7CFJl(HKe_Ik4hMr(kkG2tNVv~!)sM0&! zW*qdH2KUX*dVG>5+DfczposzKU(cN<!%5&aUl8`dcCmuKYR|gTf?B8hGYqoIlYTFkH;K;3D4{$Y!rQQE{gqcCnNr#oM zIoWTaO1+IZ#tT9$PC6=zxUTHn$9i-vJP+GTcfW<*$<==hwG^gZ1+{(M5|e$BUGX#N z6unVwgf!Ct)GxA!Xp))P$t^J!V*z|2<2jkIw_Nng@F*YhQHWo&P zH8Iq-?GNur?|jsUC<5+m+0IqINyM03@!m5N#B zu(fNpgcNs|i~W{cR+0#0Y7fMOUMb43x}xL;CVV+>GSbisPG-VG{Gao1Hf(bST83TA z!M6O#g4gu!dbyvcxAR6}=3d^pR468x4q>s}!Ir1qnlmFO_fvBJTxTy~9b~n}IxD11IRFz3)mOIb6m-KPx z^3(IB?woGFxxFfliKDp!$Az<|iIW_k!(-_@Q}3nL=`;ATwiyqqG4~;wV!7^fVa8l3 z0eRPVc~g+gw@4YTit_GSzgN!_IeDGR!zt4u1E$KPaBUF~Fj{AmNmu9k)c4Zc?&MRq z^{w7Eyrnp3H9M{Md6o7YsUUXbyT3DmR1~7EjX3QjH-@IUL0@Hv3I6zUr{MhHoQhcz zgNnj4@=ZPOC3T>N)E=dARjWU@U{e=%hY$LKqWz_ zGM9@S1Hza-afn$DU0f7QpA^meUK;unjHZ0@`3}K7Ss4Oh+@#p6$u*TeR=sdo-NBl$ zhNn#3r+jgHfmvZVn(I4e&MsMQX?vI2-vI2V97H~)-J9tQq7MlqE>L&`e`x@||4ULm zK&xE@2#X|gQ6MA;5k)HTv>uCEsU|}Hb0N|Nkm$O@lJYmbZoxQGsl&W9V_K5iEO>~! zK;FZN&aeX|G2{EflyDLr1*+hj_EOLDqTkQ@+YXX#>&C^WbrP1N8BUmB*?=aitQm}W zlo6`Rt$8GtLDmw!#pr`;^j1)MSeV>_Lv_kKGXjJ@Y(e5wTu&l|=Z@oUjPpnwZsEX6@wEWC3mIVJ?^+=CRx@b?YNeP7cl{*LOIQU9=T2N~bN z2bQc#c$e}aPyy+~iXOL37T@j|j>rtq7{K=5LP!w2huw#`nGxets{1l2F*@`}VzNnz z?W2%5wK9_k@2=LcNz+j6-i|PqK#-YLd2f~|;qG=FaVAeI3Gt6$4aP4ABVPW-O0c~? zq)?R~(l_HN)^MapQYX5J6acOt!TZfQ93MA56H`$i$SVhy5IE1HQ%6Ya%CLC*3lr=u zVcUDyrhzh!T?PM6Z-NrTJS^t>2~%NIU>zya%WN-weF!P;v#Es6R_URAu#)23)u>rT zmAB@UUeoW13c(}fiEMBq&u6o%$h#k|#$82y5v=M_Gp+PaiNq>$-UKYggoKaZ#@B+= zGU1sYO($?mdWvracm{b)R&?ly%kHClC9VB0NU#~iMLpGc_$GN%`BP9l{bSw~VOoXY zma6TlzJ)r-aaU%&VdMu7m%(|4TIVmN_kjfXA)*O9YV3^qT%a1DH8!!zVZZTRM%XpM z)_WDVxvAMIa$H?q?KsFCVcoKjpzn9E6ku?=6(X&BdZrC|v2iqMi>%*4KvZex99T{w zNd1b&=Oux>`)GmjHA$-5@sQvl8ML;`vc>R}r#9jEtD5+!(e_H>G%OUk<#}m2v zn!E?DGnU#}$;SD2z}gO4o{`<&6()g^#UpT}cmzg&M^w>|ef+2m?wDKrME%`@ph`9O zxKw+6VY_aXS4Haq9%7CB5f6GVYiRvi3+cRkM{z}mIl7Z@uVqnf82}znJRaC@zSc3-J864;t>;-RTXgp*IWJ&! z5fuV!Igz8s*1S4Xnua&{Y1#^ydG|wG9{k$V;1H5)Q5c8IYnlizHj=gFF>g2`& zDkJmv)H5n;X!7KPkw<;uN7MaLnO_9?F;BIOWxHVf#Q-|UMEDUN^7?6$cFi|_@^@@Z z6+MTfdUx2iQC~y?O6FT2NKfZ(N4iy-x%>qE`@-or?E{ij_wV25ps@|`^72}%YBJg0 zHuIaUJF3l;(yl$d7TG%ZmMY-5KOlGf{BwYZjxkSVx4lt$eIo(&!tAwPWTkYOduD)& zf7#HwGg6Uq=5*2PKODP+Sx7=pPGbFe5Av*QTabfc2Tv|)#fC#leI9hxte?A?q`iSe z_PUE_^eYiov~h&ValI;@C#xcTWP3>p5jIo?W>5-ZLO$9L+xJ62JxAdYU0}Ii?JZ4HdbZt>(!D zR-PM?@yK7;uR;c3_Fw9I8+hlx*y@{3C*C-*1JM`QzzQhGt-YN2wXy>9CAU(ArvFO% zr$FSwb`9F*ccRB$z0--h@7L@0r}&ZDJLkPjqM{SH`8fW#gNDVu3tK?R0pGa#vQ(`R z{Sb@~N-UfrV1xBkHvoCVXvCX|V>BlpIr`t+k_CYVkE&Vf4^o5Nw1I5JI_ofCjel1> z^^60D`0A{{a(UTwP}E(E(ELOr5y8~L>7T}5{Jp)i%wEPIjsOq!al})x(iqna9t1CBW842#k;ggYM7+#xK1Zhr8)-= ztLo&1T62PPiT~NfiwP~9C%oh*z%g-8zkLLCXN$Tg=DpuMmO6FdZ153ODtNT@FAh2$ z1cGce`xHf-2y-Ldc_FYH5|=R>*nkhv5}uNnEVF3;>Tg3+l__k*7S{nA5{JnZ5|;{z5hz6>H6X?(egRJBh(aDi)DySE^c#J!jA00*BZlL==SSBe{;j; zSpr@-*X4D10XW^4f1z`cn*sKC{pRp;Av{9m%lZ8s&pg?Wnp|r5EN&HF><+Bd4B(mh z9K1<l?DySb?^SpaXU1;;}wGA-Y~y9hGGFaYsFg>qrx zfzB?Ii1Aw+Uyl>7k?W2|sq~VPlJ3#Gx!pf8HfBPGIuMNAIB2+MM1Gb=3g2GbD;O4P zb3VCwfwfIUh7=Q^$l7D#r-`THam|{{Gd68#RxmxbS&=C(YKdgRc|j>p5G_!H#Zpl zPY4@rwo?l|af`r1`xhM-5(eBtGeHKQT*!58otUWmrF_Ao>-IExqCY{v9P2nG-7D`l zSOLo6?dGu~a9=w(p3mN2x`_4i9I9-AAjRA`K6V0GvdiUknSlYj`2U9i@zRdCS@Xi1 zmw-b8>c;TWM%9g1|B6Ki0RNNl2|N`2C-*{J0vnbA-jW1n7>*5QT|op42={%Ez(e_z zC;#pX9Atz10I*k3T+xpv*N$__{;w)k5S-Zo_vhkW%!!E zm*FE<51=&cqaA;N)7XFL^ooGUMwQl$y!W#IXwFTr@}Up_gP04H<0){E_OeGn9d&`# z3jhX)j=U27UuY&167?U=)W14ZWIVF+g&Z(29!zt1aFu;tqhk!bM!$*gXC8Ltcwf&W zy;Z%5Yjt_|S7=CFNEFc8@*=3rtnhr;|6-LiiboK%ju)edAjNp^oSluTSWdxnnoBRp z5w?XD(h=)z1?jtr@Y_79Xnqz)^Yz{PuUD;9N6JS`XxhW|ob?o#JA0L&gpYjd`n~cc zN<9pjg^g+gDAnl_357Qi1mKzvCPZ&zsDW`Y8CAl|<>})a20ri#JY*Q|%ObhFH3`T# z4f$SICliI=L)2)E&1g-tAZ0Tb}kGJE%Va#(_(yPucWe)xYcndaUTJk4go#hlA`7 zfB(xO5wepxat9Y&mCUDvd;34HD}BoX4N?lNdg^T2w=I@LYyad^#sB*_VMID>b zR3v$MIT>?ugc~@wl?G^C9veZ>V;_~vqS=xf5Hw$@4~glXUIOqY;my#^ughoiKdS>&8O%2_?%HPb+mtTH1x@VqXHrK;YeQaFO9fx&0x&U20hjR+#IfDKAOj?X&#UiV z48_z?3aii&&DZg>{#efc`;Kbnl^{h@)8QI4Els8ZIvIm0hUl^7wEg&-(t{WpLsV784uS0ASEUX%ymL;U%;| zJ`5&d+50(8>(0MMra**ITS!~>?wB3@Vqvm+b9FlUu!g2fWVOG|BDyr*JVk{*`F`vV zfMoK03xOQ{VsoX*m-70tsT2EWvCGmt@&!w>QFkt3=T2;#3p&pHA;|HcObpQ?!l*3H z5fNTervo2IUpaNI6<)0@Hwl&>3gA3SOFib1yn3B%hy?)#8*B6zVs$!a?{wCnp^j=!H1rax^be<9AGwqpx@$d$8nwE|9#NN6shxukm$>smP}$-AXCP zU@u0QH2+hNJB~D2^+2-1997*^g45s6OLui9*=I89{zLe<*H}YH_;Mqm) zwFRFzvR}k5KQC*#sNACDC0(@@(0;5)qWgcZ$U%vqUB1ExC`^Y|lnmFe4<*pm{+M;9 zF^W)XX9sua6+isWLV4*fr(i%(q|{ZK<>Csg7%~~Nu3vh#jlAL?@_9~!xuiE=F1#u; zDMHAj5PYbNaixD}cscTo9uY=nQTIis>%k-9%a+)%MAr2xJd_TVZBpPSha-a z!ZA$VpPqvjz2cYP;Hy+G2}DIU)v}DbJ3cSoJLdNbU<|=1G^NO9bgsLbpwpFx#Q`=T z3G3f|n+I~FqVF8ibmMqh_vLOe8{s8z7v#Scf`pkZ`o{YG(1>TGg+4%bYL#?4Ha1qa z^5M9rue)^P#tMVQTW&~u1Ra+-;^M1WL)DdDOswt}{Dx4EiR6m?`~ak-PRwSlABf4X zbl;s>Q#IJ}7j)x}@IP8$<7KzUX02kvdW}FQ4xqC40Msmq9sM@S^B?(>agwxPZU@hN z-duBsl*gv+MLqrxl9d;jC@Wmg8S6S9(~VRBUrL72cE2?jdf%#4;rD+z?ZPvFgc!32 zih#cia}ZZyovQ$R?6|{y{gOQK2;TvE-st!2-%oV^dmesE0&Ucj!#AOei`c)yI1L*? zg?HQkX2`}A01G&kJhG?xuxaU0U7c+>#w`-o%j!V@y}S@&g$1b8?u-F_St|M*w+snw zg+?H~i~d-05uTo7)B2u%=J>b#@E9A2)MqZM)4gH!bLEqlv4W90>5;kaj$; z!~LxmQag+~Kd(Eyr=+VpZdSL;wkM>Ka_$8ct?OW4vFX;RJ1eVFk4`>{&e^GE^v^*Z zcAK3znWT=yADwQqN!#~zHnVnUdHi<8G}rl4Y-rV|g>Ck?|8>1aL);<p!l<#V8QPMCD*y9)my?+PsYn;US9G%K?$4cIc1GP{)! z40T%ATr#?wX~~$5ky_M}Vv{+LsVB9gGF#S@3l^*zTRTbh1&jH}v-_w!x{31`1Vapx zhCUyASq&L8($RfBROvcjnTy4K?K{va+g@TR-C*ff*YuzuL@L&0te3<>w!eFitDaBy_j9pI6`IJG74zm(5K>o zC4vqMCVY_aLRnk8ttW9XHs_SLgza74tXA$_qqeW^C0;mvhzn@+q&u!^6{Sq}J;E8C zFXBFg@k~GNC1$yZlnPCP_k}A%tZ$GiJrwpPU)FscFgi^fR|5L&45U*O>5HXl31g5JebO@+#PRct+6 z7n9hSU`0dfk)QGKsG2W+3jof|)Z82LUsss`trORL;<#WrV|GLsg$3n!b^+)?h2HYs zV>*D28x%lEwIGeVrelo*fAk?GJNfepHKYO;)NL$^D7kAfHp4)><-fytc6ub0zx`hU z>h!tc2uu%0xph5$N5J;<6tegEcJLtOONL8^N2!}zUw#r<7w^3e)ck`nyE$a&YL9!3 zQkOScWG>9VqEKEBj>eFX5T9MnYkNQ!*`++Cq5wVB_PaQ~KQ(6jE#}@-J`d(ngaIVN2+1snf^;tJ zAK1VL(05C^n#pAvfQPR*c_LR)+u~;=nezZT1dneQ{Pf>UUE-v8kTlR)+ka^k5Wa#s z=K6^i#tnSU`_h~rN@&ceF*?0mT*j7?^xo8DqR(7-v+DM_w7`Y;lY8E6(63C^ZbY$1 z7>0RE#yGnT7HF*HjHw6E%pFvX1kLb>J?IfGb#Lz%ve78-2&j^vD9c!L!VV?f&L*X` zanF}a#|}ls4wKr%?vPFhwhuB#wBO3j;pnqn5ldz$BZY{N=aoY$Nc9>2xCHsf&73

3RSMX65`qm7}oY-e1>ur+5RZ6pIqdg+R(Au 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 cJHJ+TeY4IHJqrc?lM|kjyt-VztofV&3pdJi8vp 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 WtDvnv@a-r!#NJ80&3&Ws?f(EWj=uZ= diff --git a/img/ali-2-1.png b/img/ali-2-1.png index 9d87b65401c3ca1e9d9ed3e4c809fe457b30401f..547a69a194fbad1ce92d1d5f3a96d9eb231eed47 100644 GIT binary patch literal 16016 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 literal 17420 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 XBYR)_Ebv!8UPy|{i4?up_5QyAnx?Px diff --git a/img/ali-2-2.png b/img/ali-2-2.png index e2f024508e379eb60e6ec76c5be37b9db21f6809..0ecea94af4ff090338ac83e9a120f9b65d2e9c53 100644 GIT binary patch literal 13272 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

cb-a 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 literal 13803 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 G@&5rc|IxGn diff --git a/img/ali-3-1.png b/img/ali-3-1.png index f64ac6c6480807bd171538ae4ff0986ec630d533..204b7878a886c740d06bca27608863f41f96ba6d 100644 GIT binary patch literal 16495 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

GP=!3Xv#6y`7 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 literal 18091 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 wW#6ef(_cr`c7#A22;4FVdQ&MBb@0CBzEd;kCd diff --git a/img/ali-3-3.png b/img/ali-3-3.png index e96ad8aca9bb4749923b0cc213b68d35c352917b..b2305cb57d7a3fa4773c737a7aa5aec71976ec7e 100644 GIT binary patch literal 17535 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

#*UMb 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 literal 14802 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 AM*si- diff --git a/img/ali-4-1.png b/img/ali-4-1.png index 5c266f136643c1877c26bee1374f7e1a5238cf1d..f523039e559ecea20fe0d970bf250f85aca808f6 100644 GIT binary patch literal 16955 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 literal 18161 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 UJFf=#DH}XB6)ok`#}=Xg7x6|9@Bjb+ diff --git a/img/ali-4-2.png b/img/ali-4-2.png index e0d4c5fe3ed5a73b2b138de5722c65e6341c4e0f..81533e257ca969514b725d2d19d80ba857e6d541 100644 GIT binary patch literal 14348 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 literal 14359 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 diff --git a/img/ali-4-3.png b/img/ali-4-3.png index 4278cc8c1303f125ef0582499138a9ffb131e389..cf39f13129c99fbfc901c75b88a894d924d49277 100644 GIT binary patch literal 13884 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 literal 18514 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 diff --git a/img/aws-1-1.png b/img/aws-1-1.png index ccf0511a1f2a61fcb0a369778066394869c675c8..e23b2cd9bbe03604c8f383a4dec195fb4062b7f4 100644 GIT binary patch literal 14628 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

M1t~ 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 NNnTa1@UijR{{ze5TXFyZ literal 13302 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 Tg~0#wASueK$^3k7>id5HAWq_J diff --git a/img/aws-2-1.png b/img/aws-2-1.png index ef01da67965020a34c1794ded113b79586559f77..4cfd433f3a0f1630c1570d2f5e60ecc011adbc65 100644 GIT binary patch literal 15976 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 literal 14037 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 h!rilB4}2na(DL$?UhAss3L(miwy(k0RiDIs0b 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 Xj(IBdCnfN=WEcuEs?tTzjQ#%?w7Sc$ literal 14033 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 z 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 literal 14842 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 diff --git a/img/aws-3-2.png b/img/aws-3-2.png index 390c0d868d80969a47caf49db9c4e828c87f8a28..046146e439673928e50349b59e2aecfff75c66a8 100644 GIT binary patch literal 17745 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 diff --git a/img/aws-3-3.png b/img/aws-3-3.png index 3d8071f77876cb2e01561d9a75665f3a4aabac02..e96da3ead6363c02f39abb6548022f7eaad2aa5e 100644 GIT binary patch literal 14070 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 literal 14452 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�JZ-$J>g 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 literal 14924 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 U_$dKjiNYz!s7jYfn!fq}07uJN@c;k- diff --git a/img/aws-4-2.png b/img/aws-4-2.png index 050d5fea78a7e58b51e38aa4f858ebfd021ea607..c588b1d369d4de3894d5b14e5fcf5fcd2d85bf5e 100644 GIT binary patch literal 16249 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 Yc{tsW5}kN`V8~bE!qP$|pTGM2KNfAt+W-In diff --git a/img/aws-4-3.png b/img/aws-4-3.png index d516cdf2b6451eb6d9da6d229f5096bf831d9050..7e869936555fba14619ac3e182260bcffd37bd60 100644 GIT binary patch literal 14536 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 diff --git a/img/image2019-7-26_12-20-15.png b/img/image2019-7-26_12-20-15.png deleted file mode 100644 index dde1be3a9df794f2f7392db7fce45c7709dc439f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16257 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 a219RybMm<~?0}!vV<^d~%T_+J4EsNPmj^5W diff --git a/img/image2019-7-26_12-20-33.png b/img/image2019-7-26_12-20-33.png deleted file mode 100644 index d72a23d45b7ec44ea399b4bacc7b364fe2815e03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16159 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 diff --git a/img/image2019-7-26_12-21-22.png b/img/image2019-7-26_12-21-22.png deleted file mode 100644 index a382ac796da36c604ab660b27845107ef7ddc6f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16512 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 diff --git a/img/image2019-7-26_16-52-16.png b/img/image2019-7-26_16-52-16.png deleted file mode 100644 index e9f372ff6363a7ffb9c27552688cfe016299c213..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25557 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 B_R9bO diff --git a/img/image2019-7-26_16-53-32.png b/img/image2019-7-26_16-53-32.png deleted file mode 100644 index efffdbc9db8eb84518b06000497dc9ed68b45aa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21855 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 J)h92d{2TSE-rfKJ diff --git a/img/image2019-7-26_16-55-46.png b/img/image2019-7-26_16-55-46.png deleted file mode 100644 index d62f2d8bb53fee1e3b451e298d78d89533a27a76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24643 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 diff --git a/img/image2019-8-1_10-22-54.png b/img/image2019-8-1_10-22-54.png deleted file mode 100644 index cb4593b5ca19197e444e429b1f96b14e0a22b59a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14955 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 Moq^djoW79qU)#7@~ diff --git a/img/image2019-8-1_10-24-32.png b/img/image2019-8-1_10-24-32.png deleted file mode 100644 index 31286c8cbb3fd3f3ab4ce1f95d0c80d0eb7066bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17317 zcmdVCRd7_%8Z{UrLfqZm1>z3GjktFb;zEckktRmm-JQ6*yFuLDow)0q0Qde=w`yMI zVXCI8q3U#>-o541wbn`CM|lb4*95O2ARv&XBtIxYKtQem|H$ECfp;Xc@ERc?$RMOX zh^n|i{!T@;Ve0YN@j^r;gySKD6(%b0NnbK$LWGAUEq|Tjv27QJ)n}Kgh|U`;Vb^1A zOK&ZPvHn9^N)_XkuB?GtPwrQ(cverxiec)n#*v%98|_AnX~`g8jdYV8fSqnBk+{&l zpU%yWoamRfRxMNsX3tIils`T?JaR6~`JH%lds!wd*wnUnq~}cAdeg(I#oBt4bwUP- z@%Ob$1a5J^9wfnAotv8*-Wp7i^oIHSGBPj_4WoqncOMz}2rUEs2*r6@8j4Ef4m<7BRL}!6>jzq%R(7WHiy8MtsAOHqRP7SQ)3DyDFWXT3jY$V4|ZG zSRA9`#ypQ=ZRJ|Vv!hMOP|uRg(64|&1`b09b{)^chO}POCJ;sELf<)wowMnt?X}k~w z4|c@5UEAl;$rz#sr!3M^qKln40aH7AnHq`vwtx)`gPo0-5UhzL6tuklhVzwAc@gc*@PdmUu+>d4vlvG# zUfV(+VU#!yW$7{IW`m9fQ{+vl!s+ELdD%xB1V7evbVi8~!Ix7L1!!fUK))lSzh52H zA;bl(Fa`T^rY6u5b+6|6|1OZ3N4sDNnRq8$p^L_z1T!z<&Ai4Xk}HW}_Ceo@Lphw` z=Ztz!p&lpZcs>hflCTahoulbzKF35z1$rv9FkriQK(caBWAGu&Qezce2OQA^vBj1x z13@a%n)t-Tp=KF%{6YM&WqiU&2Ei1zp9slXpyVlCs@vC|+{1ZM^dS$T~sFtx_TviH- zYLzCU{&(#{@!Xu|wQ5=<;Jklc)v@iJo!`o-7uCA408{$o@1Y2z@Z2U{c>e-|86zaY zTJ3tS&3~?C0ViiC?EO1Hgork9dmT2bU-aKGMGOIJ44q^1{})~6rGeW^Tg{qJv4jj92+f9{c4`_FX(u)l^}A>@DK7PuAzxSbL7n)csyFR%fGRR&1^oj-89 z_Nfxjzw5U&B9w~>$cBI8kz_{6%YFsLcS`*Yb{XuzT6(SU-v3+bXKLVfwdVilrGr<+ z>tkX+P$=FL#`Xl|#WS*yXO~Jc6Z`y|t_TzgSYN!pk}i9LLTm^F(W?hNQOY>iD41T# z>FfKmEiD~hR*tHb&pD}wc>fK>A7P;I*9JSVHAiFz6B;e8lsGEMwat*@)p8>eqjf5A z5`PZpnCPmZ?8_NDQVRc@x;G3KSVWws;me1daxKf-_30R-{2AjaCZ)OgkCiDSlQ#1R zZ~h$L%gk04^uwQxN2V&M=}j;=(&)_4%?I*77|AqYQPej#Gc7DE3=_Lw9Yz}Vh4JpZ zM1hw;;L|=j8X>Eo(Dy!3Xo4aE9VfDaTBev<^)AW?v#3(RQM72NX5?(UvA=vLYiCkB z6A=-SgP;FEsz>=hDMk+p+?d_c!)n}@`;m}RUS3wJkxkFJyO3${D><_=CNfjCI^M{? z_2`Qrz`W@^33JM$r8d$D`oui7SRKWyS=EwjIT5e)hC@lGh~EO4P6H?TpW!%Bq80NK z_)iaV#&OnCskM|f+VcI!2q6%7V7}G(rf&XQ3$UC73K2@HAgZnZn5iUSXXIdZ-hYPj z|MABip*Hl42%jH!$9kj%i%e`URgnJcgJv*L1Zz=7ecV)fwcV9W6@#vki3_<#h-bkI zdMm0@Lm{I7P0f5@z?nR|!aka-zD{hoE0r2Z`Dr|Dyp=Jnv}}vX8Xgo3Ab8BTy3;NjgNA|jMbO1$+H2T_rqTs5|p zfjpO5d`!RiE;BAZ-q_uJp#gK_7hoF0ywFr=a8SZLPI(U}vkhSkUXjmP&F44jsrImv z`e^V-$jAd17Z+q$H5PP-YK;a;gc#zvXTx5eF#dFogJ5PB;>FpQOkA zZW}4pj1{*L%@dPWQB^PYGkvWw>Yw{%&SFfwGlwuo9)Bb=uzvw^oDg7L)B?3sJyX6p z7*ps5Y?3=emHwgz0|Q#N${52g6_R;oQ^YlQNO-|-cwkyjQ*oWJt_DaawR`v}T){6U z`VIr$#CPmfi&0?Bq{!WDlm;>-;bPYi6`CQG8Dutf$i`>)uxQLHBHA)yL6c|lqlYT_ zIaPNTRWHZi__wRCj$;l=OT!tD-6%1Eg&-k;ahkH>{8174GGL@pg^y#tKD^)Q@7a0G zvVT(Xo@Q$<*l9Z>UdXVL=iYh$agIx7HKEd_H>8XV4Tc;?nr-lw4EIyq68!_ z!6yTV@YCjOvQQLCZuQn8eJuP7CRyQ-T{oY;&Mq|SK21+JX|-T~9S?M@L&P(|TpEw? z!ESCY`J%Qg54HM8>vjIU$kfo30YnZI9zUMnIViww%R*IA=}t=>>=LzxXE}{F*F?K+VfE( zx|%rlj6tyhl5IP_Oz5jF$qfGc&g&GKxu)sgZ`savJJS-0P>jEmdL2oe%{6huTp#qE z)umM`Y<&8@rubBc>Zu?veEXY&!y!rM>++u6Fh1=b12?kp^_k^W@aw@~XjXz_-gBxx zLSidy!|pXdxG;Oq-kY+gC)<1$vLfx`Nf~G!oi~;0EPU4GWZ`^Eu$efGDrS4CI( zPe}S^n_1`b@h$l+h5@pmU1Z?ATND*0E8oMUd7jeB%OCSM3891p+YFBr*V_EbmCgeRLq%rJ1f*+?>He8@CJ9AaOG^k;NJ88Q?!>PYF9}Jf7H5! z`XgSQg$~(udnPS0Z$uz&xLOFU!@HsLD!nC}3*WCqbi!Je6Qn|Id%^`31WRo@?` zRs>m`7jMY#vBcGPyxAJJT6*#P73A2J?M@0bbT6OYIDeMwWb3SYOhP^U+)#t?IBNMV z{_W*>#=!(#@hoSM`V2Yg^4+hHayRzIJ81XcxHyiiLW<%y42RQ287p1on!rj;T$QxK zG22md`SkTKyB0Wl9}Mu6s%=Ksr@Ssy88wzrDShKYIM&ThAD?hZq6md+6==%b%A~jN z14*TfT_SdlpXUASeuB6S%lnlqaI&*6Ptm?7f?0-_5^};9J5I);V|zKyomB-rOY|j)2gh2Yr{Y z9RFg7;$Zw<2(NBF)}#KRazf@4ZhyOQ3}J~e-bW(Bg|c}ofs67_7q5}Wo%}%qRXvoP&b&-w|E)PV>n$8=f5?yQtYH~!12(@Rx4eqCs0aG z;;&UxPng@~_+*NffOD*2x*trO?b(H|L?*RQH-^aiY@}X*_d2(9aG@!E6 z<_3;2g$B{ScjzV5MxHOl&~CFISVXG(akQgsZ4lH|`m4yRu8vIfh4f}Ix!iuc;g z+*J@|Mj0ZqPZ1%SYMg@3C8$X?fKq`+8R`OT57&cS zBj%W!3LFlSqB!YH40$h}`7BO_&=s=B=?3ci@1zdZ#UvhgdZ{=><3}ykrwNpU5R?Td zF^VgjP$kcuGj&9+Y=^rj)5uZQk}ABywp09@X>e&Z$ge{DxKZ&~YMraG)6gehLv(l`o9$5{x%{r)V1TfNMmGkPt013KE}sJjsLY=?Nu$5nfyv@ z(RT)77m1A~6xtYC*^zFCJ0)Bfl**U4uK#^ZCZjH-r5EY!=|q{*i8zzfwW|jA$AUB7 zm(+0U#dfvWsfGqoh+Yy_I-b$j(|Q>Mix@W?4&%r|2TfZ3tV^{Fd&SUzX&l%N$EDHzJp%ksOJ;j}=+oyHVIJ=1?~3Zj zz;U$OVny%2xE5O8bO-m$KdFgSbT)n1y25QO-DE${Zcr zztj5!TJn+N(FqE-sZ~a0doABDxiMlDl_m-~$Pbq9ySg-GsS;^*xo|mjA){KB-~V)^ zWJp{Jy1ruKiA2JqMEeQfR9V!&{#BGCS{0KiSC!sqd%uZ>+MXj`Gd|YG3c0ELlg zDnH82UBtN6G?S$tcQP;f%_El^Gi5H}p7VBitgu1!4vHK7AfX>c zjI06^1AX^UYah%Yt9fF{C6?OT6NRqKWeWC7v|_`Tu}j+eGyI;)d-c3(PbxDH2B*uj z=2}Ni#OocJeoBI@OXgMwr+ZO;D|PJ=&$xhL)@31tlYSwA&6iqwdq?zzPFy?$@R(zl zP#$LWN*!em{MFjH`++$hu)bbCGVIPC(%u3$vv1EGwxc#%U&N3MYPg=ORN9dCF4(q5 z9EiWmHNRB$f>d;)YazpQ%`UxAqeYsv4mg6?+Hq}JcobcCTxwx|_YFfsLzOKpzq<{a@t2kaBr^zMKyK$qb8gvOW!E>P190+Y&wL{ar0!(` zUd4P|56glp@z+NM$BQtq;SUecXGxccTw&L#Cpjsu%}t0i;nAQlXOic_=4aotFryJ- z_c{UlVvEUT$A_WHW8ZzdCBKuJ`D?)QYJ)PuX?yk$s@DE3%XX z7hM*wd*?$wiMeLDG;{&RyUZDcb)mSgx_SBemsCiEWaZ`MAKkOQy?)Q=B1qYj1ZnM{ z?P{-^b1QQi_S%o5Ll2f<>*oR0C;_C)q4kv0JA$S=rP~XMCuPfT?-u>6MVaKm8`ale zMNGcjFz;AbtL5ReZlyfml0KN`yU#Z4Vu}=rF%wnp#5fNfGN;c+T0Aj^55B2si4uN1 zwcMPSDO-tz#U158;dd^bvlW(0VR*ib)Ba36svFEZ{ADW7KC|dNjIiu7cCF=m9QIjX zB+u`!i7mGiQ+BPIy0(Yc*3HA5Px~z^7Y)M)^~%F>bJ}@Uj}JE@U#1$HA1KqUW-r4| z=k8liB1#yv#-4vq6Y452$i_i}ep(#ewmtUK5~Z$6J!yQ#j0}Gs6lz$Tw{2_Dc=(<-OJ(PDnZ<1-cAEKvtht%vgU(Wco;cb_ni14BQy=6Y0CI2Qv&-5Alv z%**Dno|20$Jf;vW+5kugU9?`j#&Ni2Hta%l(yf}%dy=nNLMp4Vu4P=z@Q8kNx62MR z!tY@5tGr6*)pAbH?&oU_lXp?yBFaN8#kZSve-5M+ zV@nv(s3v#DBt=H9Yb_}^(#9+jrCFb?D~*?bad%U za_l-Jj#su5{XX~>@cwZ&%(q6<8Hi$hEA+wK#N zzDa75-;`+0)JTSw%ne!{VOnYQvhye9(Y}xv-x(o=B~s+~3i);RV3pHhv$Z%x9ml;A z9J|8q9UI&l#VaqTNsZ{C{Vr^x#&Mas*)@D+_PcuB(WaM56jSx(O@R!feucmj%4(!t-<@J0!n?(K8 zQHC#%46#w)`!-Z*7#GE6kD+?a;&?H--Y;bndU@bW2n*fGL<{*sHY}@^9~mFUmlasL zp+a#reKhQjIQ9T{RWmJ3=zO709uKhVM4#owLp$=!qXDN;dDC-iNGpB`%q05_%IQLs z`SQ8o=z|9z+Im+Q{XQ$ktbv5ELl^oc99{{N)w*|Vmi|`*jdCcp80Zr2ekE3d2<#k7 z0qL|~M^m`JM<;GiJI*shi1H!|sL5>8>#!FKDpZ<3{9xDj7(;13yorUhG~Wo95P%fo0exBhayQ%cd%2M6lHqi(pj`ROKxPN5fISv>0y$0Bxpyau(t zRs%B!!wI?-wwbZ4ucwiB%l&SaEFnag=2Kb3cQTNh`>c`-q(5&}1NPJ47OZQ&We&X( zk}2+lFf6emIi+ns+P#@U=X@&(;V-GTC50P$%7IrdPud9i&N*utW12X-b2m5sy8T@>y!(ALP7J>>&noR2- z)k}}^wR5mw(qLtDDm^;_<@UWH(gS*((~@NH7?M1-*Zu1C=0577qX4%L7Ku1EqJ;h+ zq81e3Zx1}5XbEMR8_qmT2jfvxQ{BAMf4@$5fypL+<+O2Ps zLjr_c0!7pt5TKEkMky?f=tlPsoQ5W-gfS~G_-21`ivT|s+IS$&s4)XxTc!jsTzAK5 zb%HKR)oW?LHI;L`WNfTGeXA*Og-UT^2+MYx$ErI^B17n1hzxi2I9&SgU3nGdVEwnN zpqMII$s3#^sG;!Zk| z5Qlt?_nUkuVAzGipi(1*}K{kG4DgR*kJQB9cs zOKC9D%*f-rf3V}F%%G)*G(_4@?Q3Dn_@fQd1|87-ExUUu6N`?`Tv?-&o1(p!9^YBi z`;BYQ1L0baHZ|HeurDk`1~SYyM+sV5BL>|F)h!fV&6wMFTK>uu1A+8XxZ4L|8a4F= z2%M6OuqE`Btnj-G&OO-k28BceU;o0R-5A=8_uu*I|UhM#ug+rRUKv27Ctwyi|Dd zlkA{(YEUyQUg6`0AuEsWh_q@8b@B1m>+IlAIGc>i;Mg));}X*z|8xMH^m$KqlW?-i zW+0_al|iU)b>ROCzkK-3)9PGtuie6SMPR!>;xIBHtE!(v67mK?f~?uYz;v;Z$KD4PhtJ;D8`T+meU z03E*|w=J2?t<>Zx)hY+Lu-e24q(6OLmH`_J5qgp_-MnV^#p-!9@}>jPa}33h*i@ER zDZp;jO;)Ce-?+fx1)3!Ti;}mquZb4yam8Vtdt9=ZguoSTWXGp$S;@h}l>pfC&OBlQ zvw>L9pQTCyGZ!s(>@x06YqwYn1@ON2C;2GVzEi{EcyC(omrYe-mZY!vjCmvfuqN#g zK$au%mbP|ACv|CV9X=P^No}R%UlNrO%c^+@NGDLt|2qjV71}7gI?zUu&svY(7X7BR zQf4$hn88HA*DXe(`YFm>-HPr*fI6+Yi=tJJ0*!QRE~~IE`og&R$dXN#k#T)4FP>i+ z*9g^?s@x!qVx1|CKc{$ef6&B$%&`PX$G`oszdRhDU+Dh0FDBu95lXsXs+R>hJpdre zRBXF2S^OrkFH9Mx%x|597p6>n8&!=;eaXap6#v@smXxLKFh*hJdq;x?qAchV)Io~+ zhdu%Gfj=^@b-J|hYh8+~*K+NTTVzh!xb<;@b`_w2WUH6@ZEr|{5BHzc!Az1&UxtUi zfm0?W6p0;HAT3tPQc4L~j5}Nd1d99p`!g+iZxSvJPKrIOn@@X}aNCCu%O;HXn`>SX zeiBa#U+CnSf#3~=iAO*XwYRs|zL&_x1CTeflr{j}$HA(NeahLn^~*8RU_>xY`HNpC z#K`clo6_mqVHnWYOH;d*RLj~Ro65VYkq2Bp?Vg6tAB2E^9m4zWhdEXE@sx-3x8_Lx zFT?TCr+Ziz=>i|zwWXedVK9d5#?R05hjs*u{N_w0R&*P?)7g~{-%KUz|Ph453m6b~Lb< z=6=iBaBi7=c4IGWcaab2^pWik-O2pIC*v>aFV?#~SJ|z8?3pV>%guu%328K?2TovK z0btA?L)^LGj&E4EAr-uCzBU}~+q>7ws{CQ3*FSiR^T^krQ|dOu-n?Ml+CsccJ1MqG zA=NnyFK#@#0JyPx)6;xb%M3)-eFJj>eay>Re8m$`!NCxM8M-_!?_PH4AD7%hnL;w! zqO3j%+?C-4?+Yr(3pD@GyDk#BKPnxB$%a4NAa-*(3Npm^yYUewOk*Jl$t1_ z2;`fFT`^dpJP~bl-1k@qULf(et*3u>1ls##lCN9>BH z4ARiB8OCQ*Se2Wj)c%q}Th{EFMEStuDicL(H8e(vIzTLOWLx@|!w&jKMHeZ15>NqX zSvx|IysQ!f}{#2iuJO8d?A#qLbrrvoS@k&rOe)BhBH^{|d$cpxCd9R*D>)Cpc$5;=g=B36fBL*y%@`ZIy#->S( zu368cQbI^9$n^makHKFfbM;K-U@Zrpw9C-(y>tfdYHiOV2pxKF@D-*R`YS4p#wV@1~(7%As5&99MCs!rM>GoSTVmji7yPtz;=O z0o~~C*q#DJh%EHo7)bxPo01Qnq5-?FHxLw?s2o0BN`xUuxX1CiIcIZbJYR6LZsGV6 zmmrvk19~gJ_Sr2{i3Y)omM}vw|2j>e}*jr@_~Yln0vm#7Te5ct|q=IFkc`%DSNMh`R6Nu@pRB!NkFsqZkkT+ha>{%ZQ8 zR_r?yd8QgmB@SBqMEpcyjYy(8rTI{=iJKQrHLmS4rrGn5nU=UwwHy&+=b2CPZw5kx z(f`go@Vh?S&7;qF=Uw)F3JmirC;|g?b!Ue>I<;TzYA^9+Jl6F^jBw4b`7g^dL`wDp z3MG4?esK2m!e-zMYXqq_Ek9mZykV4pfp!>)tK<=nUATSfAAOJ+H#jqsJTWcJ+L;TQ zUbq}xetWvRu!XOkj8?oZr@8iAmx500U$%v9XR%^OxYM&86xN(%!A^`UYF7}i@18~l}Q$Bkf? zojug_6=FD8JvrCNmjof%P6gHv(>(DUW{_Y)@A#jb9hbB!kO>c+{vtAzJ((6$sLeP2f)?`FoqYt$h*7^fC%Id z=E9VKUJOCmc)3yk1PDFOKZeb{`C*dg{zx!TUs!Pw<1q+l2#%^3(GwVu1@skjsU@u( zNjP*`P}&3m0S0*YrE$-D-E}09-s0Z1{87u;_S7|h2w)&>&R@OqeW_uo*j8TzTqh9v zk2}x-42zFHkge#WUM7AA$QH}j<}bpYKRudS34UjWcYXQsmr2Tdi)-YgvmbJ{@1#2h zecf(E=iLd3rjXwL{dZ3uCCTcY-*VYXQWXLnxzd>Vu5F-i2utIq%NP&BD*}BU{UzI% z?&Q9k^PsK-P<@H03}C^@NKfh zCMl_VCJ4j~gSwk6{G74qwMo6hAecdn^-th*_%6ebeJzMcM>9UMp>V3i>ht&h9LD6y za+4fg_RHvhT{25Xk-LFG2k)`dDl@M)v|mXho0}~{+E2=p)x~k0Hv%Fqp}jn z(i%LJd_d7fUj5x*e7tLGJLtmRMJ8`*A_1_wc3e8uf zh1D^BGS}*zQnLLgUc;^_!YEATD3+fy#1#y|9D0&NlfDF0%VIW2+39X;ecw(&L}pv- zsD1XVZQC5}3HL8>$SA~u!%g@fA0=Y~+^nkkGAa>?_Ze^@C{ka)dZW*`(rQK zpFC=>*UlFPQY!yWMY5e{^jaK`pUmU&TyxppoN=ey@#<9692Byp{S78>72q zj@$*o>UBU5$Eww6^_%Z+R|Z5DbZ|TKnm8ZOj{><5JN2csew6#CD8(H_xz}wW+ z)I$lj$rtCuLkkfv`14QQ=i|LoA|z7fzw$!|u*mAsE?Z+P_e>X6cnVGtXis-k75Xaz zvW-zC)}ItYH7XAk8EW&V*>trf%3}QMWgjY2-S{inaq))a3w>ZUB3J*QQxPJI2ryiL zth2ZNw~J^FTiA)&)CrA!r5aIWq6()_BtRs6G8M>fu?JVoPc2?rLH0dnW_$jP%c@Y| zKHs9{G34^lKhE>rYQ^|iN1us*K(%bXFFES3b^XMEU&P=_{_J4x2@C=O_qVnNIz?+s8U5TOhef6 z$U6|VRw5vo^^ZKU0{Xu5{XNs_cNw%H<<9idN1l_?s^=tst*{>bdkZ>{CLDylfYg$S zskTT$z5iEGj20(S99j<4?BrqPQ$rVjf8Uk{O`GxoXlxq*$c4!1Z9B^AKfoZ6!+b>! zLr#FmMC0uFS$P$q1cgBVMZ5QB+K(T|)WmO|C|L(g+Zxx-yz?NB^7}%K|LUSg5fU`n zi(+bKVtePuZwMWo>_@BS1)CpA@`<65PgOi zeZh|3iHH{A!f}172U?rW#-b5qTkdE8m3!F&kuT`qmx*=%Rebga|E>6RKg| zMEiG_saDC+TxB(0V!pLBMQlW3(uwR?RD_TwNsY^Yo_~2%AZtX2&HhtCNmk1XUaHJI z-ZhYjQ#|URx^Fb^{2J#9J}~BODRyt0Mi|<9LJ4pc@5-Uxxv~`(JYjoJ1_rMIs{1$N zbii{A{~Q(#@+W+d01XixEe!y2{N2M@Q8FR%S$pTr72nCL|Ij3t4?nTimhQsSe&v(o2nIzWm}Fx}Va z$RYlc#F+JiXv1xS*!Ogh4YASWGL}Bnlrxl3iuq=>iK-%4+-DuzY$e?=QJfM`H;=(; zT$HR#g+Z>h9T8cxaH;wm@OQ0+O^QhP^LP6D)IBjNse;%Z9eo-ew}Qnk2uP=gBEIw< zvV$Gx{1)rEvqL{#34zeBToLVLPtg^Y6q9HE=Ftn~ZGPDCSz&LPvHoyXz!@Bc$*~nwWIv0~K`jwa zv~^!PWH9>{oPf8Mvxy=*@LCIDgQ6!l#R>F-upJ^dz}6ng#rxt(YEcjB+8@h!@1Zay z52PeJSnxc1flB(EPyR5)u35>%OLnhqb?HA+!SAdx6o|WYHW`!yRd*tH%1+&f)siDC z`?Hp2g+wm8K2OZ-|&a9bL3x5lu?*yaT_Y4qjR39A-9 zI%6uU)~&<*>zcB_7ehig|H+4x^orudHZYW|4=X)M=qiuv?i%#G+~{EK`RPMg=CQlI z9R30Wlt zTA}zeMTVP^_(`H%rMj9XD~;?p$+NF!6(i0J1PWS|>))L!!qTt>08gB~&Fz}SiWYYZ z@?D1>(J)kg|Dd-nD~I`7mBlaxd5XVKMliUhz=v5b)_&l$)y&5$LEPKR!_RGxt4FgU z@ImnNLyNww0~9-Z=M$=R4K=!ng`y$Z6!&HZs6Z8U99l?QbPn_j+(N{;fiM+yZ)9XR z1adL5DxjlegwxjW%@G8Jt=)Y89$CP^M=FbK?kF7qI#$d}*tJ_+v-w(WCzeF;Y2SEM z7w3^lr{RJ>+h+RaL(*V&%i)J4X?WgO9YUbtrC#~nIob0O!V{rrtSM$O+>boI*tVhBnLcgj4x0z7am;&E~ z(}+kZ)4SCqjV*&j)F~)fT3u3Q)+I%rnSGYC>*}#L?FTe35hpkyQ7eZs@GLJaW-*D{ zKDl7NK27U{lDr@hoxXHx8|h%~*1x7e9gkGDq<<1T-xBLniScRhTOz%V)=@UWNV!i*D> zUi+tfR46U5&dhIC8B#4fXnbEGxr$6N4zpea`(o_(MNucxlTLqnj6k~s@4HZ zFkdav@weI^sRh;pI8|R3KGQVSEaXwWif-4(*eyERMQLuWZ=%y4DYvwnZ~i7fGdPvO z(7Eq(A>K%hyf+~df?cZNf5zQrIe_-%eL;^bv+BKL}-kR9e>bwbGVSH+(^0-kVsP6?yHY| z3>7r~-mR(KT4l_8CnFsbZ>^l72=**)VIAgYn78l1G7Z<5p+AG4Pq10)$LxCXAV))N zNB-Vb;`TerX-N zI}2NMko;8AKE_t=0+uP>Igj9oC##ReS|(d4LMm!k9s=+S$=aH)lP${P3KPm%j+8#r z^U;?`lVg4jiYmZv&Uo)=f9)HBTOJ&ChfzFe^gXt2KiSVR93n28(WDx&3GP?S&}Mie zLbmC?ao?o0In6DQpRJI-=u2xlrtV5<%ITj+oE@PKg<);;%%tz+91_k&FvpAu>G%6n z=gKF0HtN0B^4jw!!c38C=}ug?y2@=bS7obogi6V(PR8WjNXGnLp6Di5UQqC6YL9Sv zD)(Kn(`0i7bFcX3L>|4ds@i;zJh`-KP!$4i#99+slI2<&gx{NfUeL%J9K+KhQymbw;xnCCF&-;8a(E}y>N4NVg zOz+1~Dd%c>Rtep(8A|jGO7dpNRC+|kW|oCag>F0i)8)mvbEV(=-Fb(3%`9Dm=4?;c z7CunF#%QCsD?!IoJNW?fL4g-G+WgJ=(?!F&Ua5`pb-U6~o$(hVWjm)cb8}MtOJZcz zKB4a(tgeIm$-O&Smi(5J>PJ77Ef&4 zancXk79@FJX7c`iOZ?h|TlJVG{r$uWqAs_;9NKp&nb}85^nszVew8%5eZyiMn&wD3 zSKXv2!$C%DJ6YF(=}^_29nC$TFYZIi*Rrk)z$g3nTaO4G+t1;>8z zZ$?5fz6Tq|0sGz0UIF1nbjhyBQje2xy8L#_(Ofz#(+>YEiu3Ye@|rrVT=?^^bQnId zh4^}geqSQWubplpaA!q<+rO-HbVese?co(oT93i2?23|5m)7CYD}D zF<;gd`;6^e{65Y7$UL#C>}0-&?d#hw&yttMFRP*NLUWalD7fS3>5CAexy8G0z2_J9 zPhOusyfx5K0RY@qm`9RDwLGTXM(~>ClPV1h1X3*GTFou3O@`9bySb77qK*yzlt%6_IGW_-NYjJ>S zLdf4$##sbqlqevN#fES=_Kxh zWcS#(jXQqEki`s4#uQi>_xe^D`-fNDad4^jh%_K6AOy`^ceYJJp^De)0* zgpS6}r}J}3U5oKUE2p5M-hn@HVFX%a1@v~TTtUHHTin>1e5TFDAMM^oa>LL{V@xyv z7A@y(*!dL=2^0QJY`*5SZS;if44W;Jy1ka|#(R&X8C=6`;Q8h->4@w9JUtx@;N99V z+_QCwNoN?`ym=O}TNd&h)?a@poZo%2;(vM8I@)?=kc%^x*4j>16>n%N#c1*7WBT@G z&#cqSv(mInLUE}-i6aVPA1l8nKBI@#4+MV1nkiw5N9+rWu0PEb;xGJ;%lE;%iOv!J zZPmZ$tRYh&oE67k9@_ica1zr1a!M3vQ>TCZX9j@s{};?A1ETQn1BJuC`AOL)% z=ur4i{$&G5`~UY}26yiWUGpC7j%5=AD(!!d$+qib@|<>KZaqWqv}n Nl$iX7(s%mb{x9qUMo<6% diff --git a/img/image2019-8-1_10-25-31.png b/img/image2019-8-1_10-25-31.png deleted file mode 100644 index f56e2e30058f82f4b65c3026dc97b43ae5fa027c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13879 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 diff --git a/img/image2019-8-1_10-26-12.png b/img/image2019-8-1_10-26-12.png deleted file mode 100644 index bafb88d36aae29f94acca1b8552b0d0ad3c3fd7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19313 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 diff --git a/img/image2019-8-1_10-26-49.png b/img/image2019-8-1_10-26-49.png deleted file mode 100644 index de40fcead0cc1cc7c35c9c481e760d68cdc60c96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15867 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

*}HQc`feB-$4# zR8aFzG^=0FD`_mU+=xAyJM!HJ1Q^S}uTEnE_lNCsHkRY`rftPmaN(to{R&t$o2pA4 zTP?&+Rk@y|+qZE?S-WOB*wCWsu+f@9Z*0AFIxi$lfX~2%Va{DXsqO2;(XJ+>j4_Pf zN=mWaZfgk=;Tl2BsK??|gsYc-Dd1I>@z)V+n$r?Eg3P2b_P8OhklUelZD*KazJFea zK#2}$#(dSBB^)?GC$wK33I`q<%R8+gWiOD=Ua^3Z6Tr(Rg zt9*a+#3fC$w5@5^#sa7xhqasmG;FG8JpWs!KuJ}VnHITa8r5=5amn^bNeKZ!OG$%$ zyr)5@p`UbSy45MY#Q5$Xx;@mKQup*&8t=es^H#g3Ej4%;!J>`>yeXlL%u?Sm%aaqT z9B{DUqJX4lTYTTkyn-+aLn3Yl3A7Ee+!b=EP`O!#cAsHW6Agd5{yxnxYD)OlFD>v;0+UsmkPoZ(t;V-k5a+I4PkhTX z^IFv%iv~w8BaK3{C*+siJU#*!BIBy#%76gwB)ec#RjyK&`gTLJ1~NO^{Xk4Ht8UrO zc`B=t%ro8*8wPRQnh*T#S*b=1$hP)xTg_k6(MUj8Gg||rS)tICrYiru@&dVp0frvk z3Ac=usj=?ioc@=2mP2?Uc7W;KRbJp_Xa165qf9Uhg(FuK;@W`Q>j)}SVRo2c`oooU1-zgdZmQS+>%DVn8kfR6%GHw-(7#K?|m7= z%%M@<*pvn)>ivRC)%CXO7tclbn{<31T2x?BiPzlZJ_M-P(SE)`9KQ$_gCvaioR$N4 zXKg7VJ8lgT_w5GBc#daWg5PgW*PitsyJ=)j>&eUxsu5Sp9^n=b=7jq*N@Vs{RW$OY zCK}NN>*hNjKmV?jUgS5P3neFs z<)i|RVFGb|H`J_zT*Mv|QjH`>O9O->B!|?J$vdhZ#pjm4#UaMv;&+#FM;z(X9TT&zPl9SNX9CYIT2xGfcOG{(aKjrEM`4>xWq>uGb%W8W$p1UYe~vFL9#^|n qQc9BlKCZ*mB(6Rl5I()T*UHgUU*5&;34HO6A|t8zrtr1?*Z%`c`%%{b diff --git a/img/image2019-8-2_10-29-16.png b/img/image2019-8-2_10-29-16.png deleted file mode 100644 index 472982fa4a3d76f971940a16c831ea39d794a99f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13124 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 diff --git a/img/image2019-8-2_10-30-17.png b/img/image2019-8-2_10-30-17.png deleted file mode 100644 index 8834025f5e4c0e67667481b7d1cd8fd815ad5798..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12353 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 J@pFCu{{f2`jOqXY diff --git a/img/image2019-8-2_10-31-39.png b/img/image2019-8-2_10-31-39.png deleted file mode 100644 index 158af358395c256580ceb977de10fa32eb8f7b0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13323 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

(6Ynx2T@bN{4r>=H&@vdxo z3pqNhZM{x)e?hFDYPThNJ0=o0j|KrD$6Rs1^6$MhAdT4QO&XXQxtJMoz*kHteIJ8v zG&KFW!j?$+X);g7t(Z=qv&?5zYF)dja*MP4bjRaiT9!`0{Im>kJIl4{*bmb!26f{+yUhS~xy&63(O@Nz}p?_f2B z#~+vCDM2H6XzcY3AWIw5X?nDj^}})U(8wf*)#Omz2FylVxRgGSm-+mZu&QM*o%+v# zaZZR&`NpxCO^Z=@Ok5bxfCGRZ;0#<4^}nJDo9g6x0BM!=(t0Yb@S;vodF6t{C^-*@ z=w1+rciqaZdx6&5IHhsHIJZk9cT;mL{FmZGg)4m?G9VnFKh{W`19>UOS8iV8Ow+w>{JSdwY6Wo}~=*6dry&o6`-3=L7C^qhDa+z1i zu4K&t8tWgGj!cFqx&Bowwkvaf-+oWpEnNdjz@v%*0WG>O6S{Q8S2m zMh6DRjXK0oxJ?;cT+{(9;ykC%zXzI$-#C@;nfJJLBt6jm1NULujf<6b$&Mur_ASUA>S(rB4EI;1@ix)ZSbJ{=+#g)VeU0yl8(?+p+C0P&JJJmZo- zbwE3fOlJy%7Q9XXTC(p*JLaIlNU?Hy%ik23c5huY3nrDf0Pf!nKYf1#Ge$IU*@PNNU`S0SDz<=_=l9g0?Tk^&z;Qs)R C_X|M) diff --git a/img/image2019-8-2_10-32-38.png b/img/image2019-8-2_10-32-38.png deleted file mode 100644 index 0b75d9c8d594f83bd4b293a1a58fe50f09b82a68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13518 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 N#N Date: Mon, 16 Mar 2020 18:06:36 +0800 Subject: [PATCH 17/74] send batch packets via zmq PUSH, receive via PULL. encapsulate every packet as gre packet: eth_header + ip_header + gre_header + pkt_data, and then write to pcap file. --- CMakeLists.txt | 5 +- scripts/recvzmq.py | 167 ++++++++++++++++++++++++++++++++++++++++++++ src/pcapexport.h | 1 + src/pcaphandler.cpp | 6 ++ src/pktminerg.cpp | 35 +++++++--- src/socketzmq.cpp | 161 ++++++++++++++++++++++++++++++++++++++++++ src/socketzmq.h | 65 +++++++++++++++++ 7 files changed, 430 insertions(+), 10 deletions(-) create mode 100644 scripts/recvzmq.py create mode 100644 src/socketzmq.cpp create mode 100644 src/socketzmq.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 0d3b22d7b..e41f61030 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,6 +89,8 @@ if(UNIX) set(Boost_USE_STATIC_LIBS ON) find_package(Boost 1.41.0 REQUIRED COMPONENTS program_options system filesystem) + find_package(cppzmq) + message("Boost_INCLUDE_DIRS: " ${Boost_INCLUDE_DIRS}) message("Boost_LIBRARY_DIRS: " ${Boost_LIBRARY_DIRS}) # include dir @@ -209,6 +211,7 @@ set(SOURCE_FILES_PKTMINERG_BASE ${SOURCE_FILES_SYSHELP} ${SOURCE_FILES_PCAP} ${PROJECT_SOURCE_DIR}/src/socketgre.cpp + ${PROJECT_SOURCE_DIR}/src/socketzmq.cpp ${PROJECT_SOURCE_DIR}/src/pcaphandler.cpp ${PROJECT_SOURCE_DIR}/src/statislog.cpp ) @@ -257,7 +260,7 @@ add_executable(pktminerg ${SOURCE_FILES_PKTMINERG}) if(WIN32) set_target_properties(pktminerg PROPERTIES LINK_FLAGS "/MANIFESTUAC:\"level='requireAdministrator' uiAccess='false'\"") endif() -target_link_libraries(pktminerg ${BOOST_LIB} ${PCAP_LIB} ${SOCKET_LIB}) +target_link_libraries(pktminerg ${BOOST_LIB} ${PCAP_LIB} ${SOCKET_LIB} cppzmq) if(UNIX AND NOT APPLE) # test diff --git a/scripts/recvzmq.py b/scripts/recvzmq.py new file mode 100644 index 000000000..6b61a711d --- /dev/null +++ b/scripts/recvzmq.py @@ -0,0 +1,167 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +from __future__ import print_function +import zmq +import time +import struct +import sys +import os +import getopt + +grekey_file_dict = {} + +def eprint(*args, **kwargs): + print(*args, file=sys.stderr, **kwargs) + +#Global header for pcap 2.4 +def pcap_global_header(): + return struct.pack("HIHIBB", 0,0,0,0, 0x08, 0x00) + + +def gre_ip_header(length, checksum): + return struct.pack(">BBHHBBBBHII", 0x45, 0, length, 0, 0x40, 0, 0x40, 0x2f, checksum, 0x7F000001, 0x7F000001) + + +def gre_header(keybit): + return struct.pack(">HHI", 0x2000, 0x6558, keybit) + + +def writeByteStringToFile(filename): + bytelist = bytestring.split() + bytes = binascii.a2b_hex(''.join(bytelist)) + pcapfile = open(filename, 'a+b') + pcapfile.write(bytes) + + +def construct_pkt_bytes(ts_sec, ts_usec, caplen, length, keybit, pkt_data_len, pkt_data): + gre_eth_hdr_len = 14 + gre_ip_hdr_len = 20 + gre_hdr_len = 8 + gre_caplen = gre_eth_hdr_len + gre_ip_hdr_len + gre_hdr_len + pkt_data_len + gre_length = gre_caplen + if length > caplen: + gre_length = gre_eth_hdr_len + gre_ip_hdr_len + gre_hdr_len + length + pkt_bytes = b''.join([ + pcap_packet_header(ts_sec, ts_usec, gre_caplen, gre_length), + gre_eth_header(), + gre_ip_header(gre_ip_hdr_len + gre_hdr_len + pkt_data_len, 0xffff), # TODO: handle checksum + gre_header(keybit), + pkt_data + ]) + return pkt_bytes + + +def create_pcap(config, keybit, ts_sec, suffix_id): + cur_time = time.localtime(ts_sec) + file_path_str = time.strftime(config["file_template"], cur_time) + file_path = "%s_%d"%(file_path_str, suffix_id) + directory = os.path.dirname(file_path) + if not os.path.exists(directory): + os.makedirs(directory) + print("Open new file: %s"%file_path) + pcap_file = open(file_path, 'a+b') + pcap_file.write(pcap_global_header()) + return pcap_file + + +def get_pcapfile(config, keybit, ts_sec): + pcap_file = None + global grekey_file_dict + if keybit in grekey_file_dict: + suffix_id, pcap_ts, pcap_file = grekey_file_dict[keybit] + span_time = config["span_time"] + if (ts_sec // span_time) != (pcap_ts // span_time): + pcap_file.close() + file_path = os.path.abspath(pcap_file.name) + target_path = file_path + ".pcap" + print("Rename file to: %s"%target_path) + os.rename(file_path, target_path) + pcap_file = create_pcap(config, keybit, ts_sec, suffix_id) + grekey_file_dict[keybit] = (suffix_id, ts_sec, pcap_file) + else: + suffix_id = len(grekey_file_dict) + pcap_file = create_pcap(config, keybit, ts_sec, suffix_id) + grekey_file_dict[keybit] = (suffix_id, ts_sec, pcap_file) + return pcap_file + + +def parse_message(config, message): + header_size = 8 + version, pkt_num, keybit = struct.unpack(">HHI", message[:header_size]) + #print("%d %d %d %d"%(version, pkt_num, keybit, len(message))) + pkt_pos = header_size + for i in range(pkt_num): + pkt_data_len, ts_sec, ts_usec, caplen, length = struct.unpack(">HIIII", message[pkt_pos:pkt_pos+18]) + pkt_pos += 18 + pkt_data = message[pkt_pos : pkt_pos + pkt_data_len] + pkt_bytes = construct_pkt_bytes(ts_sec, ts_usec, caplen, length, keybit, pkt_data_len, pkt_data) + pcapfile = get_pcapfile(config, keybit, ts_sec) + pcapfile.write(pkt_bytes) + pkt_pos += pkt_data_len + + +def server_loop(config): + context = zmq.Context() + socket = context.socket(zmq.PULL) + socket.bind("tcp://*:%d"%(config["zmq_port"])) + while True: + message = socket.recv() + parse_message(config, message) + + +def usage(): + print( +"""Usage: +python recvzmq.py [--span_time seconds] -z port_num -t /path/file_template +-z or --zmq_port:\tzmq bind port +-t or --file_template:\tfile template. Examle: /opt/smartprobe/var/store/pcap/nic0/%Y%m%d/%Y%m%d%H/%Y%m%d%H%M%S +-s or --span_time:\tpcap span time interval. Default: 10, Unit: seconds. +-v or --version:\tversion info +-h or --help:\t\thelp message +""") + + +def parse_args(cfg_dict): + if len(sys.argv) == 1: + usage() + sys.exit() + try: + options, args = getopt.getopt(sys.argv[1:], "hvz:t:s:", + ["help", "version", "zmq_port=", "file_template=", "span_time="]) + except getopt.GetoptError as e: + eprint(e) + sys.exit(-1) + + for name, value in options: + if name in ("-h", "--help"): + usage() + sys.exit() + elif name in ("-v", "--version"): + print('recvzmq version 1.0.0') + sys.exit() + elif name in ("-z", "--zmq_port"): + cfg_dict["zmq_port"] = int(value) + elif name in ("-t", "--file_template"): + cfg_dict["file_template"] = value + elif name in ("-s", "--span_time"): + cfg_dict["span_time"] = int(value) + if "zmq_port" not in cfg_dict: + eprint("require param: -z zmq_port") + sys.exit(-1) + if "file_template" not in cfg_dict: + eprint("require param: -t /path/file_template/%Y%m%d/%Y%m%d%H/%Y%m%d%H%M%S") + sys.exit(-1) + +config = {"span_time": 10} +parse_args(config) +server_loop(config) + diff --git a/src/pcapexport.h b/src/pcapexport.h index 00c6a324b..b6ac008dd 100644 --- a/src/pcapexport.h +++ b/src/pcapexport.h @@ -6,6 +6,7 @@ enum class exporttype : uint8_t { gre = 0, file = 1, + zmq = 2 }; class PcapExportBase { diff --git a/src/pcaphandler.cpp b/src/pcaphandler.cpp index 898f56672..25fb4848c 100644 --- a/src/pcaphandler.cpp +++ b/src/pcaphandler.cpp @@ -59,6 +59,12 @@ void PcapHandler::packetHandler(const struct pcap_pkthdr* header, const uint8_t* } else { this->_gre_drop_count++; } + } else if (pcapExport->getExportType() == exporttype::zmq) { + if (ret == 0) { + this->_gre_count++; //TODO: support zmq batch packets + } else { + this->_gre_drop_count += ret; + } } }); if (_pcap_dumpter) { diff --git a/src/pktminerg.cpp b/src/pktminerg.cpp index 57d53b6c8..c3eae117d 100644 --- a/src/pktminerg.cpp +++ b/src/pktminerg.cpp @@ -4,6 +4,7 @@ #include #include "pcaphandler.h" #include "socketgre.h" +#include "socketzmq.h" #include "versioninfo.h" #include "syshelp.h" @@ -27,6 +28,8 @@ int main(int argc, const char* argv[]) { "specify pcap file for offline mode, mostly for test") ("remoteip,r", boost::program_options::value()->value_name("IPs"), "set gre remote IPs, seperate by ',' Example: -r 8.8.4.4,8.8.8.8") + ("zmq_port,z", boost::program_options::value()->default_value(0)->value_name("ZMQ_PORT"), + "set remote zeromq server port to receive packets reliably; ZMQ_PORT default value 0 means disable.") ("keybit,k", boost::program_options::value()->default_value(1)->value_name("BIT"), "set gre key bit; BIT defaults 1") ("snaplen,s", boost::program_options::value()->default_value(2048)->value_name("LENGTH"), @@ -118,6 +121,8 @@ int main(int argc, const char* argv[]) { std::vector remoteips; boost::algorithm::split(remoteips, remoteip, boost::algorithm::is_any_of(",")); + int zmq_port = vm["zmq_port"].as(); + int keybit = vm["keybit"].as(); std::string filter = ""; @@ -230,15 +235,27 @@ int main(int argc, const char* argv[]) { } }); - // export gre - std::shared_ptr greExport = std::make_shared(remoteips, keybit, bind_device, pmtudisc); - int err = greExport->initExport(); - if (err != 0) { - std::cerr << StatisLogContext::getTimeString() - << "greExport initExport failed." << std::endl; - return err; + std::shared_ptr exportPtr = nullptr; + if (zmq_port != 0) { + exportPtr = std::make_shared(remoteips, zmq_port, keybit, bind_device, param.buffer_size); + int err = exportPtr->initExport(); + if (err != 0) { + std::cerr << StatisLogContext::getTimeString() + << "zmqExport initExport failed." << std::endl; + return err; + } + } else { + // export gre + exportPtr = std::make_shared(remoteips, keybit, bind_device, pmtudisc); + int err = exportPtr->initExport(); + if (err != 0) { + std::cerr << StatisLogContext::getTimeString() + << "greExport initExport failed." << std::endl; + return err; + } } - handler->addExport(greExport); + handler->addExport(exportPtr); + // begin pcap snoop @@ -247,6 +264,6 @@ int main(int argc, const char* argv[]) { std::cout << StatisLogContext::getTimeString() << "End pcap snoop." << std::endl; // end - greExport->closeExport(); + exportPtr->closeExport(); return 0; } diff --git a/src/socketzmq.cpp b/src/socketzmq.cpp new file mode 100644 index 000000000..03de1187a --- /dev/null +++ b/src/socketzmq.cpp @@ -0,0 +1,161 @@ +#include "socketzmq.h" + +#include +#include +#ifdef WIN32 + #include + #include + #include + typedef SSIZE_T ssize_t; + #define usleep Sleep + #define IPPROTO_GRE 47 +#else +#include +#include +#endif +#include +#include "statislog.h" + + +PcapExportZMQ::PcapExportZMQ(const std::vector& remoteips, int zmq_port, uint32_t keybit, + const std::string& bind_device, const int send_buf_size) : + _remoteips(remoteips), + _zmq_port(zmq_port), + _keybit(keybit), + _bind_device(bind_device), + _send_buf_size(send_buf_size), + _pkts_bufs(remoteips.size()) { + _type = exporttype::zmq; + for (size_t i = 0; i < remoteips.size(); ++i) { + _pkts_bufs[i].buf.resize(MAX_BATCH_BUF_LENGTH, '\0'); + _pkts_bufs[i].batch_bufpos = sizeof(batch_pkts_hdr_t); + _pkts_bufs[i].batch_hdr = { htons(1), 0, htonl(keybit) }; + _pkts_bufs[i].first_pktsec = 0; + } +} + +PcapExportZMQ::~PcapExportZMQ() { + closeExport(); +} + +int PcapExportZMQ::initSockets(size_t index, uint32_t keybit) { + _zmq_contexts.emplace_back(1); + _zmq_sockets.emplace_back(_zmq_contexts[index], ZMQ_PUSH); + zmq::socket_t& socket = _zmq_sockets[index]; + std::string connect_addr = "tcp://" + _remoteips[index] + ":" + std::to_string(_zmq_port); + socket.connect(connect_addr); + + uint32_t linger_ms = 10 * 1000; + for (size_t i = 0; i < _remoteips.size(); ++i) { + _zmq_sockets[i].setsockopt(ZMQ_LINGER, linger_ms); + } + + return 0; +} + +int PcapExportZMQ::initExport() { + for (size_t i = 0; i < _remoteips.size(); ++i) { + int ret = initSockets(i, _keybit); + if (ret != 0) { + std::cerr << "Failed with index: " << i << std::endl; + return ret; + } + } + return 0; +} + +int PcapExportZMQ::closeExport() { + for (size_t i = 0; i < _zmq_sockets.size(); ++i) { + flushBatchBuf(i); + } + _zmq_sockets.clear(); + _zmq_contexts.clear(); + return 0; +} + +void PcapExportZMQ::adjustZmqHwm(uint32_t send_size) { + static uint32_t counter = 0; + static uint64_t send_total = 0; + constexpr uint32_t ROUND = 50; + if (((counter + 1) % ROUND) == 0) { + uint32_t avg_size = (uint32_t)(send_total / ROUND); + if (avg_size != 0) { + uint32_t queue_length = _send_buf_size / avg_size; + queue_length = queue_length < 100 ? 100 : queue_length; + queue_length = queue_length > 10000 ? 10000 : queue_length; + for (size_t i = 0; i < _remoteips.size(); ++i) { + _zmq_sockets[i].setsockopt(ZMQ_SNDHWM, queue_length); + } + } + counter = 0; + send_total = 0; + } else { + send_total += send_size; + counter++; + } +} + +int PcapExportZMQ::exportPacket(const struct pcap_pkthdr* header, const uint8_t* pkt_data) { + int ret = 0; + for (size_t i = 0; i < _remoteips.size(); ++i) { + ret += exportPacket(i, header, pkt_data); + } + return ret; +} + + +int PcapExportZMQ::flushBatchBuf(size_t index) { + auto& pkts_buf = _pkts_bufs[index]; + auto& socket = _zmq_sockets[index]; + auto& buf = pkts_buf.buf; + + int drop_pkts_num = pkts_buf.batch_hdr.pkts_num; + pkts_buf.batch_hdr.pkts_num = htons(pkts_buf.batch_hdr.pkts_num); + std::memcpy(reinterpret_cast(&(buf[0])), &pkts_buf.batch_hdr, sizeof(pkts_buf.batch_hdr)); + + auto ret = socket.send(zmq::buffer(&buf[0], pkts_buf.batch_bufpos), zmq::send_flags::dontwait); + if (ret.has_value()) { + drop_pkts_num = 0; + } else { + // std::cout<<"send failed."<ts.tv_sec; + } + + uint16_t length = (uint16_t) (header->caplen <= 65535 ? header->caplen : 65535); + + pmr_pkthdr_t small_pkthdr = { htonl((uint32_t)header->ts.tv_sec), + htonl((uint32_t)header->ts.tv_usec), + htonl((uint32_t)header->caplen), + htonl((uint32_t)header->len) }; + auto& buf = pkts_buf.buf; + if (pkts_buf.batch_hdr.pkts_num >= 65535 + || header->ts.tv_sec > pkts_buf.first_pktsec + MAX_PKTS_TIMEDIFF_S // 3 second timeout + || pkts_buf.batch_bufpos + sizeof(length) + sizeof(small_pkthdr) + length > MAX_BATCH_BUF_LENGTH) { + + drop_pkts_num = flushBatchBuf(index); + + adjustZmqHwm(pkts_buf.batch_bufpos); + + pkts_buf.first_pktsec = header->ts.tv_sec; + pkts_buf.batch_bufpos = sizeof(pkts_buf.batch_hdr); + pkts_buf.batch_hdr.pkts_num = 0; + } + + uint16_t hlen = htons(length); + std::memcpy(&(buf[pkts_buf.batch_bufpos]), &hlen, sizeof(hlen)); + std::memcpy(&(buf[pkts_buf.batch_bufpos + sizeof(length)]), &small_pkthdr, sizeof(small_pkthdr)); + std::memcpy(&(buf[pkts_buf.batch_bufpos + sizeof(length) + sizeof(small_pkthdr)]), pkt_data, length); + pkts_buf.batch_bufpos += sizeof(length) + sizeof(small_pkthdr) + length; + pkts_buf.batch_hdr.pkts_num++; + return drop_pkts_num; +} + diff --git a/src/socketzmq.h b/src/socketzmq.h new file mode 100644 index 000000000..506a54e5b --- /dev/null +++ b/src/socketzmq.h @@ -0,0 +1,65 @@ +#ifndef SRC_SOCKETZMQ_H_ +#define SRC_SOCKETZMQ_H_ + +#ifndef WIN32 + #include +#endif +#include +#include +#include +#include "pcapexport.h" + + + +typedef struct PmrPktHdr { + uint32_t tv_sec; // epoc seconds. caution: unix 2038 problem + uint32_t tv_usec; // and microseconds + uint32_t caplen; // actual capture length + uint32_t len; // wire packet length +} pmr_pkthdr_t, * pmr_pkthdr_ptr_t; + +typedef struct batch_pkts_header { + uint16_t version; + uint16_t pkts_num; + uint32_t keybit; +} batch_pkts_hdr_t; + +struct BatchPktsBuf { + batch_pkts_hdr_t batch_hdr; + // buf format as below: + // | batch_hdr | (pkt_data length + pkt_hdr + pkt_data) | (pkt_data_length + pkt_hdr + pkt_data) | ... + // | 8 bytes | (2 bytes + 16 bytes + n bytes ) | (2 bytes + 16 bytes + n bytes ) | ... + std::vector buf; + uint32_t batch_bufpos; + __time_t first_pktsec; +}; + +class PcapExportZMQ : public PcapExportBase { +protected: + std::vector _remoteips; + int _zmq_port; + uint32_t _keybit; + std::string _bind_device; + int _send_buf_size; + std::vector _zmq_contexts; + std::vector _zmq_sockets; + std::vector _pkts_bufs; + constexpr static uint32_t MAX_PKTS_TIMEDIFF_S = 3; + constexpr static uint32_t MAX_BATCH_BUF_LENGTH = 1 * 1024 * 1024; + +private: + int initSockets(size_t index, uint32_t keybit); + int exportPacket(size_t index, const struct pcap_pkthdr *header, const uint8_t *pkt_data); + int flushBatchBuf(size_t index); + void adjustZmqHwm(uint32_t send_size); + +public: + PcapExportZMQ(const std::vector& remoteips, int zmq_port, uint32_t keybit, + const std::string& bind_device, const int send_buf_size); + ~PcapExportZMQ(); + int initExport(); + int exportPacket(const struct pcap_pkthdr *header, const uint8_t *pkt_data); + int closeExport(); +}; + +#endif // SRC_SOCKETZMQ_H_ From 4708009089289b04fee3d22f4afa3ca557b27b97 Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Tue, 17 Mar 2020 11:35:28 +0800 Subject: [PATCH 18/74] remove dead code --- scripts/recvzmq.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/scripts/recvzmq.py b/scripts/recvzmq.py index 6b61a711d..4fd937482 100644 --- a/scripts/recvzmq.py +++ b/scripts/recvzmq.py @@ -35,13 +35,6 @@ def gre_header(keybit): return struct.pack(">HHI", 0x2000, 0x6558, keybit) -def writeByteStringToFile(filename): - bytelist = bytestring.split() - bytes = binascii.a2b_hex(''.join(bytelist)) - pcapfile = open(filename, 'a+b') - pcapfile.write(bytes) - - def construct_pkt_bytes(ts_sec, ts_usec, caplen, length, keybit, pkt_data_len, pkt_data): gre_eth_hdr_len = 14 gre_ip_hdr_len = 20 From fac61d818a08e517902a21da97396de7682de9ba Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Tue, 17 Mar 2020 17:05:37 +0800 Subject: [PATCH 19/74] static link to cppzmq --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e41f61030..710dd83d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -260,7 +260,7 @@ add_executable(pktminerg ${SOURCE_FILES_PKTMINERG}) if(WIN32) set_target_properties(pktminerg PROPERTIES LINK_FLAGS "/MANIFESTUAC:\"level='requireAdministrator' uiAccess='false'\"") endif() -target_link_libraries(pktminerg ${BOOST_LIB} ${PCAP_LIB} ${SOCKET_LIB} cppzmq) +target_link_libraries(pktminerg ${BOOST_LIB} ${PCAP_LIB} ${SOCKET_LIB} cppzmq-static) if(UNIX AND NOT APPLE) # test @@ -278,7 +278,7 @@ if(UNIX AND NOT APPLE) ${TEST_DIR}/src/gtest-test-part.cc ${TEST_DIR}/src/gtest-typed-test.cc) add_executable(unittest ${SOURCE_FILES_UNITTEST} ${SOURCE_FILES_PKTMINERG_BASE}) - target_link_libraries(unittest ${BOOST_LIB} pcap pthread) + target_link_libraries(unittest ${BOOST_LIB} pcap pthread cppzmq-static) set_target_properties(unittest PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/test/bin") endif() From 6c01550502354ad0d9bcea1dcc707eda980b7713 Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Wed, 18 Mar 2020 17:21:41 +0800 Subject: [PATCH 20/74] new version 0.3.6 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 710dd83d8..41559a98e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ endif () # set PKTMINERG_MAJOR_VERSION, PKTMINERG_MINOR_VERSION, etc. set(PKTMINERG_MAJOR_VERSION "0") set(PKTMINERG_MINOR_VERSION "3") -set(PKTMINERG_PATCH_VERSION "5") +set(PKTMINERG_PATCH_VERSION "6") set(PKTMINERG_VERSION_STRING "${PKTMINERG_MAJOR_VERSION}.${PKTMINERG_MINOR_VERSION}.${PKTMINERG_PATCH_VERSION}") if(WIN32) From dff61d6ab0df6a17081958d658c785c078a2281c Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Mon, 23 Mar 2020 12:10:50 +0800 Subject: [PATCH 21/74] add base_suffixid param to resolve multi-process name conflict. --- scripts/recvzmq.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/scripts/recvzmq.py b/scripts/recvzmq.py index 4fd937482..f45ff42ba 100644 --- a/scripts/recvzmq.py +++ b/scripts/recvzmq.py @@ -81,7 +81,7 @@ def get_pcapfile(config, keybit, ts_sec): pcap_file = create_pcap(config, keybit, ts_sec, suffix_id) grekey_file_dict[keybit] = (suffix_id, ts_sec, pcap_file) else: - suffix_id = len(grekey_file_dict) + suffix_id = len(grekey_file_dict) + config["base_suffixid"] pcap_file = create_pcap(config, keybit, ts_sec, suffix_id) grekey_file_dict[keybit] = (suffix_id, ts_sec, pcap_file) return pcap_file @@ -116,8 +116,9 @@ def usage(): """Usage: python recvzmq.py [--span_time seconds] -z port_num -t /path/file_template -z or --zmq_port:\tzmq bind port --t or --file_template:\tfile template. Examle: /opt/smartprobe/var/store/pcap/nic0/%Y%m%d/%Y%m%d%H/%Y%m%d%H%M%S +-t or --file_template:\tfile template. Examle: /opt/pcap_cache/nic0/%Y%m%d%H%M%S -s or --span_time:\tpcap span time interval. Default: 10, Unit: seconds. +-b or --base_suffixid:\tpcap file name suffix id will start from this base id. Default 0. Example: 100 -v or --version:\tversion info -h or --help:\t\thelp message """) @@ -128,8 +129,8 @@ def parse_args(cfg_dict): usage() sys.exit() try: - options, args = getopt.getopt(sys.argv[1:], "hvz:t:s:", - ["help", "version", "zmq_port=", "file_template=", "span_time="]) + options, args = getopt.getopt(sys.argv[1:], "hvz:t:s:b:", + ["help", "version", "zmq_port=", "file_template=", "span_time=", "base_suffixid="]) except getopt.GetoptError as e: eprint(e) sys.exit(-1) @@ -147,6 +148,8 @@ def parse_args(cfg_dict): cfg_dict["file_template"] = value elif name in ("-s", "--span_time"): cfg_dict["span_time"] = int(value) + elif name in ("-b", "--base_suffixid"): + cfg_dict["base_suffixid"] = int(value) if "zmq_port" not in cfg_dict: eprint("require param: -z zmq_port") sys.exit(-1) @@ -154,7 +157,7 @@ def parse_args(cfg_dict): eprint("require param: -t /path/file_template/%Y%m%d/%Y%m%d%H/%Y%m%d%H%M%S") sys.exit(-1) -config = {"span_time": 10} +config = {"span_time": 10, "base_suffixid": 0} parse_args(config) server_loop(config) From 4cffe48f0daaf6f86b09b25fe9682211ec7a2c01 Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Thu, 26 Mar 2020 11:12:51 +0800 Subject: [PATCH 22/74] add total_clients to fix pcap name protocol with dp. --- scripts/recvzmq.py | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/scripts/recvzmq.py b/scripts/recvzmq.py index f45ff42ba..3a7c4bbf1 100644 --- a/scripts/recvzmq.py +++ b/scripts/recvzmq.py @@ -56,7 +56,7 @@ def construct_pkt_bytes(ts_sec, ts_usec, caplen, length, keybit, pkt_data_len, p def create_pcap(config, keybit, ts_sec, suffix_id): cur_time = time.localtime(ts_sec) file_path_str = time.strftime(config["file_template"], cur_time) - file_path = "%s_%d"%(file_path_str, suffix_id) + file_path = "%s_%d_%d"%(file_path_str, config["total_clients"], suffix_id) directory = os.path.dirname(file_path) if not os.path.exists(directory): os.makedirs(directory) @@ -66,24 +66,28 @@ def create_pcap(config, keybit, ts_sec, suffix_id): return pcap_file +def get_base_ts(ts_sec, span_time): + return (ts_sec // span_time) * span_time + + def get_pcapfile(config, keybit, ts_sec): pcap_file = None + span_time = config["span_time"] global grekey_file_dict if keybit in grekey_file_dict: suffix_id, pcap_ts, pcap_file = grekey_file_dict[keybit] - span_time = config["span_time"] if (ts_sec // span_time) != (pcap_ts // span_time): pcap_file.close() file_path = os.path.abspath(pcap_file.name) target_path = file_path + ".pcap" print("Rename file to: %s"%target_path) os.rename(file_path, target_path) - pcap_file = create_pcap(config, keybit, ts_sec, suffix_id) - grekey_file_dict[keybit] = (suffix_id, ts_sec, pcap_file) + pcap_file = create_pcap(config, keybit, get_base_ts(ts_sec, span_time), suffix_id) + grekey_file_dict[keybit] = (suffix_id, get_base_ts(ts_sec, span_time), pcap_file) else: suffix_id = len(grekey_file_dict) + config["base_suffixid"] - pcap_file = create_pcap(config, keybit, ts_sec, suffix_id) - grekey_file_dict[keybit] = (suffix_id, ts_sec, pcap_file) + pcap_file = create_pcap(config, keybit, get_base_ts(ts_sec, span_time), suffix_id) + grekey_file_dict[keybit] = (suffix_id, get_base_ts(ts_sec, span_time), pcap_file) return pcap_file @@ -118,7 +122,10 @@ def usage(): -z or --zmq_port:\tzmq bind port -t or --file_template:\tfile template. Examle: /opt/pcap_cache/nic0/%Y%m%d%H%M%S -s or --span_time:\tpcap span time interval. Default: 10, Unit: seconds. --b or --base_suffixid:\tpcap file name suffix id will start from this base id. Default 0. Example: 100 +-a or --total_clients:\ttotal clients count of all recvzmq processes. Default 1. +-b or --base_suffixid:\tpcap file name suffix id will start from this base id. Default 0. Example: 0 +\t\t\twhen start multi-process of recvzmq. Their [total_clients, base_suffixid] params should be arranged properly. +\t\t\tFor example, total_clients: 8, with 4 recvzmq processes, each of the above process param should be [8, 0], [8, 2], [8, 4], [8, 6] -v or --version:\tversion info -h or --help:\t\thelp message """) @@ -129,8 +136,8 @@ def parse_args(cfg_dict): usage() sys.exit() try: - options, args = getopt.getopt(sys.argv[1:], "hvz:t:s:b:", - ["help", "version", "zmq_port=", "file_template=", "span_time=", "base_suffixid="]) + options, args = getopt.getopt(sys.argv[1:], "hvz:t:s:a:b:", + ["help", "version", "zmq_port=", "file_template=", "span_time=", "total_clients=", "base_suffixid="]) except getopt.GetoptError as e: eprint(e) sys.exit(-1) @@ -148,6 +155,8 @@ def parse_args(cfg_dict): cfg_dict["file_template"] = value elif name in ("-s", "--span_time"): cfg_dict["span_time"] = int(value) + elif name in ("-a", "--total_clients"): + cfg_dict["total_clients"] = int(value) elif name in ("-b", "--base_suffixid"): cfg_dict["base_suffixid"] = int(value) if "zmq_port" not in cfg_dict: @@ -157,7 +166,7 @@ def parse_args(cfg_dict): eprint("require param: -t /path/file_template/%Y%m%d/%Y%m%d%H/%Y%m%d%H%M%S") sys.exit(-1) -config = {"span_time": 10, "base_suffixid": 0} +config = {"span_time": 10, "total_clients": 1, "base_suffixid": 0} parse_args(config) server_loop(config) From ba159137ad2e18e31b26de2bb7fd48fd2f6013f8 Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Thu, 26 Mar 2020 11:25:25 +0800 Subject: [PATCH 23/74] update recvzmq version to 1.1.0 --- scripts/recvzmq.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/recvzmq.py b/scripts/recvzmq.py index 3a7c4bbf1..66af6e801 100644 --- a/scripts/recvzmq.py +++ b/scripts/recvzmq.py @@ -60,6 +60,8 @@ def create_pcap(config, keybit, ts_sec, suffix_id): directory = os.path.dirname(file_path) if not os.path.exists(directory): os.makedirs(directory) + if os.path.exists(file_path): + os.remove(file_path) print("Open new file: %s"%file_path) pcap_file = open(file_path, 'a+b') pcap_file.write(pcap_global_header()) @@ -147,7 +149,7 @@ def parse_args(cfg_dict): usage() sys.exit() elif name in ("-v", "--version"): - print('recvzmq version 1.0.0') + print('recvzmq version 1.1.0') sys.exit() elif name in ("-z", "--zmq_port"): cfg_dict["zmq_port"] = int(value) From a919823b6e569ba5fff3a776247c3f01fc3d5062 Mon Sep 17 00:00:00 2001 From: "Justin.Su" Date: Thu, 26 Mar 2020 11:57:29 +0800 Subject: [PATCH 24/74] add non-root script --- CMakeLists.txt | 4 +++- scripts/postinst | 4 ++++ scripts/postinst_rpm.sh | 4 ++++ 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 scripts/postinst create mode 100644 scripts/postinst_rpm.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index 41559a98e..b4fc48b3a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -320,10 +320,12 @@ else() set(CPACK_DEB_COMPONENT_INSTALL ON) set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}_amd64) set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64") + set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${PROJECT_SOURCE_DIR}/scripts/postinst") else () set(CPACK_GENERATOR "RPM") set(CPACK_RPM_COMPONENT_INSTALL ON) - set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.el6.${CMAKE_SYSTEM_PROCESSOR}) + set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.el6.${CMAKE_SYSTEM_PROCESSOR}) + set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${PROJECT_SOURCE_DIR}/scripts/postinst_rpm.sh") endif() #set(CPACK_COMPONENTS_ALL pktminerg) endif() diff --git a/scripts/postinst b/scripts/postinst new file mode 100644 index 000000000..e448a4d62 --- /dev/null +++ b/scripts/postinst @@ -0,0 +1,4 @@ +#!/bin/bash +chmod 4755 /usr/local/bin/pktminerg +chmod 4755 /usr/local/bin/pcapcompare +chmod 4755 /usr/local/bin/gredump diff --git a/scripts/postinst_rpm.sh b/scripts/postinst_rpm.sh new file mode 100644 index 000000000..e448a4d62 --- /dev/null +++ b/scripts/postinst_rpm.sh @@ -0,0 +1,4 @@ +#!/bin/bash +chmod 4755 /usr/local/bin/pktminerg +chmod 4755 /usr/local/bin/pcapcompare +chmod 4755 /usr/local/bin/gredump From 2cbaefc44911aeec7bab7e18bb133e6648b8865a Mon Sep 17 00:00:00 2001 From: "Justin.Su" Date: Thu, 26 Mar 2020 17:52:33 +0800 Subject: [PATCH 25/74] remove pcapcompare non root --- scripts/postinst | 1 - scripts/postinst_rpm.sh | 1 - 2 files changed, 2 deletions(-) diff --git a/scripts/postinst b/scripts/postinst index e448a4d62..a27b2249f 100644 --- a/scripts/postinst +++ b/scripts/postinst @@ -1,4 +1,3 @@ #!/bin/bash chmod 4755 /usr/local/bin/pktminerg -chmod 4755 /usr/local/bin/pcapcompare chmod 4755 /usr/local/bin/gredump diff --git a/scripts/postinst_rpm.sh b/scripts/postinst_rpm.sh index e448a4d62..a27b2249f 100644 --- a/scripts/postinst_rpm.sh +++ b/scripts/postinst_rpm.sh @@ -1,4 +1,3 @@ #!/bin/bash chmod 4755 /usr/local/bin/pktminerg -chmod 4755 /usr/local/bin/pcapcompare chmod 4755 /usr/local/bin/gredump From 27df0a6292eb5de3500ec86c57ee1e36e6bc5140 Mon Sep 17 00:00:00 2001 From: "vincent.ye" Date: Thu, 26 Mar 2020 17:58:55 +0800 Subject: [PATCH 26/74] Revert "Feature/reliable trans" --- CMakeLists.txt | 9 +-- scripts/recvzmq.py | 160 ------------------------------------------- src/pcapexport.h | 1 - src/pcaphandler.cpp | 6 -- src/pktminerg.cpp | 35 +++------- src/socketzmq.cpp | 161 -------------------------------------------- src/socketzmq.h | 65 ------------------ 7 files changed, 12 insertions(+), 425 deletions(-) delete mode 100644 scripts/recvzmq.py delete mode 100644 src/socketzmq.cpp delete mode 100644 src/socketzmq.h diff --git a/CMakeLists.txt b/CMakeLists.txt index b4fc48b3a..d04e127c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ endif () # set PKTMINERG_MAJOR_VERSION, PKTMINERG_MINOR_VERSION, etc. set(PKTMINERG_MAJOR_VERSION "0") set(PKTMINERG_MINOR_VERSION "3") -set(PKTMINERG_PATCH_VERSION "6") +set(PKTMINERG_PATCH_VERSION "5") set(PKTMINERG_VERSION_STRING "${PKTMINERG_MAJOR_VERSION}.${PKTMINERG_MINOR_VERSION}.${PKTMINERG_PATCH_VERSION}") if(WIN32) @@ -89,8 +89,6 @@ if(UNIX) set(Boost_USE_STATIC_LIBS ON) find_package(Boost 1.41.0 REQUIRED COMPONENTS program_options system filesystem) - find_package(cppzmq) - message("Boost_INCLUDE_DIRS: " ${Boost_INCLUDE_DIRS}) message("Boost_LIBRARY_DIRS: " ${Boost_LIBRARY_DIRS}) # include dir @@ -211,7 +209,6 @@ set(SOURCE_FILES_PKTMINERG_BASE ${SOURCE_FILES_SYSHELP} ${SOURCE_FILES_PCAP} ${PROJECT_SOURCE_DIR}/src/socketgre.cpp - ${PROJECT_SOURCE_DIR}/src/socketzmq.cpp ${PROJECT_SOURCE_DIR}/src/pcaphandler.cpp ${PROJECT_SOURCE_DIR}/src/statislog.cpp ) @@ -260,7 +257,7 @@ add_executable(pktminerg ${SOURCE_FILES_PKTMINERG}) if(WIN32) set_target_properties(pktminerg PROPERTIES LINK_FLAGS "/MANIFESTUAC:\"level='requireAdministrator' uiAccess='false'\"") endif() -target_link_libraries(pktminerg ${BOOST_LIB} ${PCAP_LIB} ${SOCKET_LIB} cppzmq-static) +target_link_libraries(pktminerg ${BOOST_LIB} ${PCAP_LIB} ${SOCKET_LIB}) if(UNIX AND NOT APPLE) # test @@ -278,7 +275,7 @@ if(UNIX AND NOT APPLE) ${TEST_DIR}/src/gtest-test-part.cc ${TEST_DIR}/src/gtest-typed-test.cc) add_executable(unittest ${SOURCE_FILES_UNITTEST} ${SOURCE_FILES_PKTMINERG_BASE}) - target_link_libraries(unittest ${BOOST_LIB} pcap pthread cppzmq-static) + target_link_libraries(unittest ${BOOST_LIB} pcap pthread) set_target_properties(unittest PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/test/bin") endif() diff --git a/scripts/recvzmq.py b/scripts/recvzmq.py deleted file mode 100644 index 4fd937482..000000000 --- a/scripts/recvzmq.py +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -from __future__ import print_function -import zmq -import time -import struct -import sys -import os -import getopt - -grekey_file_dict = {} - -def eprint(*args, **kwargs): - print(*args, file=sys.stderr, **kwargs) - -#Global header for pcap 2.4 -def pcap_global_header(): - return struct.pack("HIHIBB", 0,0,0,0, 0x08, 0x00) - - -def gre_ip_header(length, checksum): - return struct.pack(">BBHHBBBBHII", 0x45, 0, length, 0, 0x40, 0, 0x40, 0x2f, checksum, 0x7F000001, 0x7F000001) - - -def gre_header(keybit): - return struct.pack(">HHI", 0x2000, 0x6558, keybit) - - -def construct_pkt_bytes(ts_sec, ts_usec, caplen, length, keybit, pkt_data_len, pkt_data): - gre_eth_hdr_len = 14 - gre_ip_hdr_len = 20 - gre_hdr_len = 8 - gre_caplen = gre_eth_hdr_len + gre_ip_hdr_len + gre_hdr_len + pkt_data_len - gre_length = gre_caplen - if length > caplen: - gre_length = gre_eth_hdr_len + gre_ip_hdr_len + gre_hdr_len + length - pkt_bytes = b''.join([ - pcap_packet_header(ts_sec, ts_usec, gre_caplen, gre_length), - gre_eth_header(), - gre_ip_header(gre_ip_hdr_len + gre_hdr_len + pkt_data_len, 0xffff), # TODO: handle checksum - gre_header(keybit), - pkt_data - ]) - return pkt_bytes - - -def create_pcap(config, keybit, ts_sec, suffix_id): - cur_time = time.localtime(ts_sec) - file_path_str = time.strftime(config["file_template"], cur_time) - file_path = "%s_%d"%(file_path_str, suffix_id) - directory = os.path.dirname(file_path) - if not os.path.exists(directory): - os.makedirs(directory) - print("Open new file: %s"%file_path) - pcap_file = open(file_path, 'a+b') - pcap_file.write(pcap_global_header()) - return pcap_file - - -def get_pcapfile(config, keybit, ts_sec): - pcap_file = None - global grekey_file_dict - if keybit in grekey_file_dict: - suffix_id, pcap_ts, pcap_file = grekey_file_dict[keybit] - span_time = config["span_time"] - if (ts_sec // span_time) != (pcap_ts // span_time): - pcap_file.close() - file_path = os.path.abspath(pcap_file.name) - target_path = file_path + ".pcap" - print("Rename file to: %s"%target_path) - os.rename(file_path, target_path) - pcap_file = create_pcap(config, keybit, ts_sec, suffix_id) - grekey_file_dict[keybit] = (suffix_id, ts_sec, pcap_file) - else: - suffix_id = len(grekey_file_dict) - pcap_file = create_pcap(config, keybit, ts_sec, suffix_id) - grekey_file_dict[keybit] = (suffix_id, ts_sec, pcap_file) - return pcap_file - - -def parse_message(config, message): - header_size = 8 - version, pkt_num, keybit = struct.unpack(">HHI", message[:header_size]) - #print("%d %d %d %d"%(version, pkt_num, keybit, len(message))) - pkt_pos = header_size - for i in range(pkt_num): - pkt_data_len, ts_sec, ts_usec, caplen, length = struct.unpack(">HIIII", message[pkt_pos:pkt_pos+18]) - pkt_pos += 18 - pkt_data = message[pkt_pos : pkt_pos + pkt_data_len] - pkt_bytes = construct_pkt_bytes(ts_sec, ts_usec, caplen, length, keybit, pkt_data_len, pkt_data) - pcapfile = get_pcapfile(config, keybit, ts_sec) - pcapfile.write(pkt_bytes) - pkt_pos += pkt_data_len - - -def server_loop(config): - context = zmq.Context() - socket = context.socket(zmq.PULL) - socket.bind("tcp://*:%d"%(config["zmq_port"])) - while True: - message = socket.recv() - parse_message(config, message) - - -def usage(): - print( -"""Usage: -python recvzmq.py [--span_time seconds] -z port_num -t /path/file_template --z or --zmq_port:\tzmq bind port --t or --file_template:\tfile template. Examle: /opt/smartprobe/var/store/pcap/nic0/%Y%m%d/%Y%m%d%H/%Y%m%d%H%M%S --s or --span_time:\tpcap span time interval. Default: 10, Unit: seconds. --v or --version:\tversion info --h or --help:\t\thelp message -""") - - -def parse_args(cfg_dict): - if len(sys.argv) == 1: - usage() - sys.exit() - try: - options, args = getopt.getopt(sys.argv[1:], "hvz:t:s:", - ["help", "version", "zmq_port=", "file_template=", "span_time="]) - except getopt.GetoptError as e: - eprint(e) - sys.exit(-1) - - for name, value in options: - if name in ("-h", "--help"): - usage() - sys.exit() - elif name in ("-v", "--version"): - print('recvzmq version 1.0.0') - sys.exit() - elif name in ("-z", "--zmq_port"): - cfg_dict["zmq_port"] = int(value) - elif name in ("-t", "--file_template"): - cfg_dict["file_template"] = value - elif name in ("-s", "--span_time"): - cfg_dict["span_time"] = int(value) - if "zmq_port" not in cfg_dict: - eprint("require param: -z zmq_port") - sys.exit(-1) - if "file_template" not in cfg_dict: - eprint("require param: -t /path/file_template/%Y%m%d/%Y%m%d%H/%Y%m%d%H%M%S") - sys.exit(-1) - -config = {"span_time": 10} -parse_args(config) -server_loop(config) - diff --git a/src/pcapexport.h b/src/pcapexport.h index b6ac008dd..00c6a324b 100644 --- a/src/pcapexport.h +++ b/src/pcapexport.h @@ -6,7 +6,6 @@ enum class exporttype : uint8_t { gre = 0, file = 1, - zmq = 2 }; class PcapExportBase { diff --git a/src/pcaphandler.cpp b/src/pcaphandler.cpp index 25fb4848c..898f56672 100644 --- a/src/pcaphandler.cpp +++ b/src/pcaphandler.cpp @@ -59,12 +59,6 @@ void PcapHandler::packetHandler(const struct pcap_pkthdr* header, const uint8_t* } else { this->_gre_drop_count++; } - } else if (pcapExport->getExportType() == exporttype::zmq) { - if (ret == 0) { - this->_gre_count++; //TODO: support zmq batch packets - } else { - this->_gre_drop_count += ret; - } } }); if (_pcap_dumpter) { diff --git a/src/pktminerg.cpp b/src/pktminerg.cpp index c3eae117d..57d53b6c8 100644 --- a/src/pktminerg.cpp +++ b/src/pktminerg.cpp @@ -4,7 +4,6 @@ #include #include "pcaphandler.h" #include "socketgre.h" -#include "socketzmq.h" #include "versioninfo.h" #include "syshelp.h" @@ -28,8 +27,6 @@ int main(int argc, const char* argv[]) { "specify pcap file for offline mode, mostly for test") ("remoteip,r", boost::program_options::value()->value_name("IPs"), "set gre remote IPs, seperate by ',' Example: -r 8.8.4.4,8.8.8.8") - ("zmq_port,z", boost::program_options::value()->default_value(0)->value_name("ZMQ_PORT"), - "set remote zeromq server port to receive packets reliably; ZMQ_PORT default value 0 means disable.") ("keybit,k", boost::program_options::value()->default_value(1)->value_name("BIT"), "set gre key bit; BIT defaults 1") ("snaplen,s", boost::program_options::value()->default_value(2048)->value_name("LENGTH"), @@ -121,8 +118,6 @@ int main(int argc, const char* argv[]) { std::vector remoteips; boost::algorithm::split(remoteips, remoteip, boost::algorithm::is_any_of(",")); - int zmq_port = vm["zmq_port"].as(); - int keybit = vm["keybit"].as(); std::string filter = ""; @@ -235,27 +230,15 @@ int main(int argc, const char* argv[]) { } }); - std::shared_ptr exportPtr = nullptr; - if (zmq_port != 0) { - exportPtr = std::make_shared(remoteips, zmq_port, keybit, bind_device, param.buffer_size); - int err = exportPtr->initExport(); - if (err != 0) { - std::cerr << StatisLogContext::getTimeString() - << "zmqExport initExport failed." << std::endl; - return err; - } - } else { - // export gre - exportPtr = std::make_shared(remoteips, keybit, bind_device, pmtudisc); - int err = exportPtr->initExport(); - if (err != 0) { - std::cerr << StatisLogContext::getTimeString() - << "greExport initExport failed." << std::endl; - return err; - } + // export gre + std::shared_ptr greExport = std::make_shared(remoteips, keybit, bind_device, pmtudisc); + int err = greExport->initExport(); + if (err != 0) { + std::cerr << StatisLogContext::getTimeString() + << "greExport initExport failed." << std::endl; + return err; } - handler->addExport(exportPtr); - + handler->addExport(greExport); // begin pcap snoop @@ -264,6 +247,6 @@ int main(int argc, const char* argv[]) { std::cout << StatisLogContext::getTimeString() << "End pcap snoop." << std::endl; // end - exportPtr->closeExport(); + greExport->closeExport(); return 0; } diff --git a/src/socketzmq.cpp b/src/socketzmq.cpp deleted file mode 100644 index 03de1187a..000000000 --- a/src/socketzmq.cpp +++ /dev/null @@ -1,161 +0,0 @@ -#include "socketzmq.h" - -#include -#include -#ifdef WIN32 - #include - #include - #include - typedef SSIZE_T ssize_t; - #define usleep Sleep - #define IPPROTO_GRE 47 -#else -#include -#include -#endif -#include -#include "statislog.h" - - -PcapExportZMQ::PcapExportZMQ(const std::vector& remoteips, int zmq_port, uint32_t keybit, - const std::string& bind_device, const int send_buf_size) : - _remoteips(remoteips), - _zmq_port(zmq_port), - _keybit(keybit), - _bind_device(bind_device), - _send_buf_size(send_buf_size), - _pkts_bufs(remoteips.size()) { - _type = exporttype::zmq; - for (size_t i = 0; i < remoteips.size(); ++i) { - _pkts_bufs[i].buf.resize(MAX_BATCH_BUF_LENGTH, '\0'); - _pkts_bufs[i].batch_bufpos = sizeof(batch_pkts_hdr_t); - _pkts_bufs[i].batch_hdr = { htons(1), 0, htonl(keybit) }; - _pkts_bufs[i].first_pktsec = 0; - } -} - -PcapExportZMQ::~PcapExportZMQ() { - closeExport(); -} - -int PcapExportZMQ::initSockets(size_t index, uint32_t keybit) { - _zmq_contexts.emplace_back(1); - _zmq_sockets.emplace_back(_zmq_contexts[index], ZMQ_PUSH); - zmq::socket_t& socket = _zmq_sockets[index]; - std::string connect_addr = "tcp://" + _remoteips[index] + ":" + std::to_string(_zmq_port); - socket.connect(connect_addr); - - uint32_t linger_ms = 10 * 1000; - for (size_t i = 0; i < _remoteips.size(); ++i) { - _zmq_sockets[i].setsockopt(ZMQ_LINGER, linger_ms); - } - - return 0; -} - -int PcapExportZMQ::initExport() { - for (size_t i = 0; i < _remoteips.size(); ++i) { - int ret = initSockets(i, _keybit); - if (ret != 0) { - std::cerr << "Failed with index: " << i << std::endl; - return ret; - } - } - return 0; -} - -int PcapExportZMQ::closeExport() { - for (size_t i = 0; i < _zmq_sockets.size(); ++i) { - flushBatchBuf(i); - } - _zmq_sockets.clear(); - _zmq_contexts.clear(); - return 0; -} - -void PcapExportZMQ::adjustZmqHwm(uint32_t send_size) { - static uint32_t counter = 0; - static uint64_t send_total = 0; - constexpr uint32_t ROUND = 50; - if (((counter + 1) % ROUND) == 0) { - uint32_t avg_size = (uint32_t)(send_total / ROUND); - if (avg_size != 0) { - uint32_t queue_length = _send_buf_size / avg_size; - queue_length = queue_length < 100 ? 100 : queue_length; - queue_length = queue_length > 10000 ? 10000 : queue_length; - for (size_t i = 0; i < _remoteips.size(); ++i) { - _zmq_sockets[i].setsockopt(ZMQ_SNDHWM, queue_length); - } - } - counter = 0; - send_total = 0; - } else { - send_total += send_size; - counter++; - } -} - -int PcapExportZMQ::exportPacket(const struct pcap_pkthdr* header, const uint8_t* pkt_data) { - int ret = 0; - for (size_t i = 0; i < _remoteips.size(); ++i) { - ret += exportPacket(i, header, pkt_data); - } - return ret; -} - - -int PcapExportZMQ::flushBatchBuf(size_t index) { - auto& pkts_buf = _pkts_bufs[index]; - auto& socket = _zmq_sockets[index]; - auto& buf = pkts_buf.buf; - - int drop_pkts_num = pkts_buf.batch_hdr.pkts_num; - pkts_buf.batch_hdr.pkts_num = htons(pkts_buf.batch_hdr.pkts_num); - std::memcpy(reinterpret_cast(&(buf[0])), &pkts_buf.batch_hdr, sizeof(pkts_buf.batch_hdr)); - - auto ret = socket.send(zmq::buffer(&buf[0], pkts_buf.batch_bufpos), zmq::send_flags::dontwait); - if (ret.has_value()) { - drop_pkts_num = 0; - } else { - // std::cout<<"send failed."<ts.tv_sec; - } - - uint16_t length = (uint16_t) (header->caplen <= 65535 ? header->caplen : 65535); - - pmr_pkthdr_t small_pkthdr = { htonl((uint32_t)header->ts.tv_sec), - htonl((uint32_t)header->ts.tv_usec), - htonl((uint32_t)header->caplen), - htonl((uint32_t)header->len) }; - auto& buf = pkts_buf.buf; - if (pkts_buf.batch_hdr.pkts_num >= 65535 - || header->ts.tv_sec > pkts_buf.first_pktsec + MAX_PKTS_TIMEDIFF_S // 3 second timeout - || pkts_buf.batch_bufpos + sizeof(length) + sizeof(small_pkthdr) + length > MAX_BATCH_BUF_LENGTH) { - - drop_pkts_num = flushBatchBuf(index); - - adjustZmqHwm(pkts_buf.batch_bufpos); - - pkts_buf.first_pktsec = header->ts.tv_sec; - pkts_buf.batch_bufpos = sizeof(pkts_buf.batch_hdr); - pkts_buf.batch_hdr.pkts_num = 0; - } - - uint16_t hlen = htons(length); - std::memcpy(&(buf[pkts_buf.batch_bufpos]), &hlen, sizeof(hlen)); - std::memcpy(&(buf[pkts_buf.batch_bufpos + sizeof(length)]), &small_pkthdr, sizeof(small_pkthdr)); - std::memcpy(&(buf[pkts_buf.batch_bufpos + sizeof(length) + sizeof(small_pkthdr)]), pkt_data, length); - pkts_buf.batch_bufpos += sizeof(length) + sizeof(small_pkthdr) + length; - pkts_buf.batch_hdr.pkts_num++; - return drop_pkts_num; -} - diff --git a/src/socketzmq.h b/src/socketzmq.h deleted file mode 100644 index 506a54e5b..000000000 --- a/src/socketzmq.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef SRC_SOCKETZMQ_H_ -#define SRC_SOCKETZMQ_H_ - -#ifndef WIN32 - #include -#endif -#include -#include -#include -#include "pcapexport.h" - - - -typedef struct PmrPktHdr { - uint32_t tv_sec; // epoc seconds. caution: unix 2038 problem - uint32_t tv_usec; // and microseconds - uint32_t caplen; // actual capture length - uint32_t len; // wire packet length -} pmr_pkthdr_t, * pmr_pkthdr_ptr_t; - -typedef struct batch_pkts_header { - uint16_t version; - uint16_t pkts_num; - uint32_t keybit; -} batch_pkts_hdr_t; - -struct BatchPktsBuf { - batch_pkts_hdr_t batch_hdr; - // buf format as below: - // | batch_hdr | (pkt_data length + pkt_hdr + pkt_data) | (pkt_data_length + pkt_hdr + pkt_data) | ... - // | 8 bytes | (2 bytes + 16 bytes + n bytes ) | (2 bytes + 16 bytes + n bytes ) | ... - std::vector buf; - uint32_t batch_bufpos; - __time_t first_pktsec; -}; - -class PcapExportZMQ : public PcapExportBase { -protected: - std::vector _remoteips; - int _zmq_port; - uint32_t _keybit; - std::string _bind_device; - int _send_buf_size; - std::vector _zmq_contexts; - std::vector _zmq_sockets; - std::vector _pkts_bufs; - constexpr static uint32_t MAX_PKTS_TIMEDIFF_S = 3; - constexpr static uint32_t MAX_BATCH_BUF_LENGTH = 1 * 1024 * 1024; - -private: - int initSockets(size_t index, uint32_t keybit); - int exportPacket(size_t index, const struct pcap_pkthdr *header, const uint8_t *pkt_data); - int flushBatchBuf(size_t index); - void adjustZmqHwm(uint32_t send_size); - -public: - PcapExportZMQ(const std::vector& remoteips, int zmq_port, uint32_t keybit, - const std::string& bind_device, const int send_buf_size); - ~PcapExportZMQ(); - int initExport(); - int exportPacket(const struct pcap_pkthdr *header, const uint8_t *pkt_data); - int closeExport(); -}; - -#endif // SRC_SOCKETZMQ_H_ From 38eb326e59be70841d341c266045b342118a669c Mon Sep 17 00:00:00 2001 From: "Justin.Su" Date: Mon, 30 Mar 2020 16:20:56 +0800 Subject: [PATCH 27/74] add cpu subsystem control --- scripts/limit_cpu_mem.sh | 44 +++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/scripts/limit_cpu_mem.sh b/scripts/limit_cpu_mem.sh index 234eb4d49..c33feebef 100644 --- a/scripts/limit_cpu_mem.sh +++ b/scripts/limit_cpu_mem.sh @@ -5,8 +5,8 @@ if [ -e /etc/centos-release ]; then MAJOR_VERSION=`rpm -q --queryformat '%{VERSION}' centos-release` fi -cgroup_pktg_cpu() { - CPU_ID=$1 +cgroup_pktg_cpuset() { + CPU_SET_ID=$1 if [ $MAJOR_VERSION = "6" ]; then cd /cgroup/cpuset @@ -15,14 +15,31 @@ cgroup_pktg_cpu() { fi mkdir -p pktg cd pktg - - echo $CPU_ID > cpuset.cpus + echo $CPU_SET_ID > cpuset.cpus echo 0 > cpuset.mems for pid in `ps -ef | grep pktminerg | grep -v grep | awk '{print $2}'` ; do echo $pid > cgroup.procs; done } +cgroup_pktg_cpu() { + CFS_QUOTA_US=$1 + + if [ $MAJOR_VERSION = "6" ]; then + cd /cgroup/cpu + else + cd /sys/fs/cgroup/cpu + fi + mkdir -p pktg + cd pktg + + echo $CFS_QUOTA_US > cpu.cfs_quota_us + + for pid in `ps -ef | grep pktminerg | grep -v grep | awk '{print $2}'` ; do echo $pid > cgroup.procs; done +} + cgroup_pktg_mem() { + MEM_LIMIT=$1 + if [ $MAJOR_VERSION = "6" ]; then cd /cgroup/memory else @@ -31,25 +48,28 @@ cgroup_pktg_mem() { mkdir -p pktg cd pktg - echo 800M > memory.limit_in_bytes + echo $MEM_LIMIT > memory.limit_in_bytes for pid in `ps -ef | grep pktminerg | grep -v grep | awk '{print $2}'` ; do echo $pid > cgroup.procs; done } cgroup_pktg() { - cgroup_pktg_cpu $1 - cgroup_pktg_mem + cgroup_pktg_cpuset $1 + cgroup_pktg_cpu $2 + cgroup_pktg_mem $3 } -if [ "$1" == "" ] +if [ "$3" == "" ] then echo "Usage:" - echo " sh limit_cpu_mem.sh CPU_ID" - echo " CPU_ID: limit pktminerg to run on this cpu processor id." + echo " sh limit_cpu_mem.sh CPU_SET_ID CFS_QUOTA_US MEM_LIMIT" + echo " CPU_SET_ID: limit pktminerg to run on this cpu processor id." + echo " CFS_QUOTA_US: limit the run-time quota of pktminerg within a period(100ms), in microsecond." + echo " MEM_LIMIT: limit pktminerg memory usage in bytes, such as 800M, 64K, 1024000" echo "Example:" - echo " sh limit_cpu_mem.sh 2" + echo " sh limit_cpu_mem.sh 2 30000 800M # run on cpu2, 30% cpu usage limit, 800MByte memory limit" else - cgroup_pktg $1 + cgroup_pktg $1 $2 $3 fi From fc64db493e11722191b761843cb2443a7b9ad4b2 Mon Sep 17 00:00:00 2001 From: "Justin.Su" Date: Mon, 30 Mar 2020 16:28:39 +0800 Subject: [PATCH 28/74] update doc --- scripts/limit_cpu_mem.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/limit_cpu_mem.md b/scripts/limit_cpu_mem.md index 7a98a447c..f31c9a690 100644 --- a/scripts/limit_cpu_mem.md +++ b/scripts/limit_cpu_mem.md @@ -1,6 +1,6 @@ # 关于 在使用本项目实现网络数据镜像的过程中,常常需要将 pktminerg 安装到需要抓取流量的客户机中。
-为了减少对客户机上其他程序的干扰,就需要对 pktminerg 程序做一些资源使用限制(使用固定的 cpu 核,控制内存用量),可以参考以下两种方法:
+为了减少对客户机上其他程序的干扰,就需要对 pktminerg 程序做一些资源使用限制(使用固定的 cpu 核,控制CPU百分比和内存用量),可以参考以下两种方法:
# 方法1 @@ -11,7 +11,7 @@ # 方法2 使用 scripts 目录下的脚本 limit_cpu_mem.sh 对 pktminerg 的 cpu 和内存做限制。
该脚本使用了 Linux 的 cgroup 机制,对 pktminerg 进程运行的 cpu 和内存进行了控制。
-示例:```sh limit_cpu_mem.sh 2```
+示例:```sh limit_cpu_mem.sh 2 10000 800M # 运行在CPU core 2上,10%CPU用量,800M内存限制```
这种方法在 pktminerg 进程重启时,需要重新运行脚本设置。

虽然这种方法同时对 cpu 和内存进行了限制,比上面第一种方法多了对内存的控制,但 pktminerg 程序本身一般占用内存比较固定(大约500M),所以没有特殊需求的情况下,一般推荐第一种方法。
From 3fb44febc31448bf1ba0c30e89bfb672bb2462fd Mon Sep 17 00:00:00 2001 From: "Justin.Su" Date: Tue, 31 Mar 2020 16:26:35 +0800 Subject: [PATCH 29/74] add md --- scripts/limit_cpu_mem.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/scripts/limit_cpu_mem.md b/scripts/limit_cpu_mem.md index f31c9a690..19730bf6f 100644 --- a/scripts/limit_cpu_mem.md +++ b/scripts/limit_cpu_mem.md @@ -11,8 +11,17 @@ # 方法2 使用 scripts 目录下的脚本 limit_cpu_mem.sh 对 pktminerg 的 cpu 和内存做限制。
该脚本使用了 Linux 的 cgroup 机制,对 pktminerg 进程运行的 cpu 和内存进行了控制。
-示例:```sh limit_cpu_mem.sh 2 10000 800M # 运行在CPU core 2上,10%CPU用量,800M内存限制```
-这种方法在 pktminerg 进程重启时,需要重新运行脚本设置。

+示例: +``` +# sh limit_cpu_mem.sh $CPU_SET_ID $CFS_QUOTA_US $MEM_LIMIT +# CPU_SET_ID : 逗号分隔的cpu cores,指定pktminerg运行的核。 +# CFS_QUOTA_US : 每100ms的cpu时间中,分配给pktminerg的时长,单位微秒。 +# MEM_LIMIT: 限制内存用量,可采用M/K/G等单位。无单位则为字节。 +sh limit_cpu_mem.sh 2 10000 800M # 运行在CPU core 2上,10%CPU用量,800M内存限制 +``` +* MEM_LIMIT 对 pcap 缓存无效。pcap 缓存自定义需使用-b参数指定。 +* MEM_LIMIT 仅对第一次配置后新增部分的内存开销有效。 +* 这种方法在 pktminerg 进程重启时,需要重新运行脚本设置。 虽然这种方法同时对 cpu 和内存进行了限制,比上面第一种方法多了对内存的控制,但 pktminerg 程序本身一般占用内存比较固定(大约500M),所以没有特殊需求的情况下,一般推荐第一种方法。
From 562c214dddb32be33e39c0306ff347483620e9ef Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Thu, 2 Apr 2020 14:35:01 +0800 Subject: [PATCH 30/74] set zmq high watermark opt via command line param, disable dynamic high watermark adjust. --- src/pktminerg.cpp | 5 ++++- src/socketzmq.cpp | 8 +++++--- src/socketzmq.h | 3 ++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/pktminerg.cpp b/src/pktminerg.cpp index c3eae117d..04c795584 100644 --- a/src/pktminerg.cpp +++ b/src/pktminerg.cpp @@ -30,6 +30,8 @@ int main(int argc, const char* argv[]) { "set gre remote IPs, seperate by ',' Example: -r 8.8.4.4,8.8.8.8") ("zmq_port,z", boost::program_options::value()->default_value(0)->value_name("ZMQ_PORT"), "set remote zeromq server port to receive packets reliably; ZMQ_PORT default value 0 means disable.") + ("zmq_hwm,m", boost::program_options::value()->default_value(100)->value_name("ZMQ_HWM"), + "set zeromq queue high watermark; ZMQ_HWM default value 100.") ("keybit,k", boost::program_options::value()->default_value(1)->value_name("BIT"), "set gre key bit; BIT defaults 1") ("snaplen,s", boost::program_options::value()->default_value(2048)->value_name("LENGTH"), @@ -122,6 +124,7 @@ int main(int argc, const char* argv[]) { boost::algorithm::split(remoteips, remoteip, boost::algorithm::is_any_of(",")); int zmq_port = vm["zmq_port"].as(); + int zmq_hwm = vm["zmq_hwm"].as(); int keybit = vm["keybit"].as(); @@ -237,7 +240,7 @@ int main(int argc, const char* argv[]) { std::shared_ptr exportPtr = nullptr; if (zmq_port != 0) { - exportPtr = std::make_shared(remoteips, zmq_port, keybit, bind_device, param.buffer_size); + exportPtr = std::make_shared(remoteips, zmq_port, zmq_hwm, keybit, bind_device, param.buffer_size); int err = exportPtr->initExport(); if (err != 0) { std::cerr << StatisLogContext::getTimeString() diff --git a/src/socketzmq.cpp b/src/socketzmq.cpp index 03de1187a..c9b59a3b1 100644 --- a/src/socketzmq.cpp +++ b/src/socketzmq.cpp @@ -17,10 +17,11 @@ #include "statislog.h" -PcapExportZMQ::PcapExportZMQ(const std::vector& remoteips, int zmq_port, uint32_t keybit, +PcapExportZMQ::PcapExportZMQ(const std::vector& remoteips, int zmq_port, int zmq_hwm, uint32_t keybit, const std::string& bind_device, const int send_buf_size) : _remoteips(remoteips), _zmq_port(zmq_port), + _zmq_hwm(zmq_hwm), _keybit(keybit), _bind_device(bind_device), _send_buf_size(send_buf_size), @@ -43,13 +44,14 @@ int PcapExportZMQ::initSockets(size_t index, uint32_t keybit) { _zmq_sockets.emplace_back(_zmq_contexts[index], ZMQ_PUSH); zmq::socket_t& socket = _zmq_sockets[index]; std::string connect_addr = "tcp://" + _remoteips[index] + ":" + std::to_string(_zmq_port); - socket.connect(connect_addr); uint32_t linger_ms = 10 * 1000; for (size_t i = 0; i < _remoteips.size(); ++i) { _zmq_sockets[i].setsockopt(ZMQ_LINGER, linger_ms); + _zmq_sockets[i].setsockopt(ZMQ_SNDHWM, _zmq_hwm); } + socket.connect(connect_addr); return 0; } @@ -143,7 +145,7 @@ int PcapExportZMQ::exportPacket(size_t index, const struct pcap_pkthdr* header, drop_pkts_num = flushBatchBuf(index); - adjustZmqHwm(pkts_buf.batch_bufpos); + //adjustZmqHwm(pkts_buf.batch_bufpos); pkts_buf.first_pktsec = header->ts.tv_sec; pkts_buf.batch_bufpos = sizeof(pkts_buf.batch_hdr); diff --git a/src/socketzmq.h b/src/socketzmq.h index 506a54e5b..884afb0ca 100644 --- a/src/socketzmq.h +++ b/src/socketzmq.h @@ -38,6 +38,7 @@ class PcapExportZMQ : public PcapExportBase { protected: std::vector _remoteips; int _zmq_port; + int _zmq_hwm; uint32_t _keybit; std::string _bind_device; int _send_buf_size; @@ -54,7 +55,7 @@ class PcapExportZMQ : public PcapExportBase { void adjustZmqHwm(uint32_t send_size); public: - PcapExportZMQ(const std::vector& remoteips, int zmq_port, uint32_t keybit, + PcapExportZMQ(const std::vector& remoteips, int zmq_port, int zmq_hwm, uint32_t keybit, const std::string& bind_device, const int send_buf_size); ~PcapExportZMQ(); int initExport(); From 8e4267e7ed89a890bd5c27b8fe20a6a5789d1a11 Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Thu, 2 Apr 2020 14:45:06 +0800 Subject: [PATCH 31/74] script: test packet agent performance with iperf --- scripts/test_pap_perf.sh | 162 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 scripts/test_pap_perf.sh diff --git a/scripts/test_pap_perf.sh b/scripts/test_pap_perf.sh new file mode 100644 index 000000000..16c896ba8 --- /dev/null +++ b/scripts/test_pap_perf.sh @@ -0,0 +1,162 @@ +#!/bin/sh + +SHELL_FOLDER=`pwd` +MAJOR_VERSION=0 +if [ -e /etc/centos-release ]; then + MAJOR_VERSION=`rpm -q --queryformat '%{VERSION}' centos-release` +fi + + +prepare_iperf() { + cd $SHELL_FOLDER + if [ -e iperf_installed.txt ]; then + echo "assume iperf installed" + else + yum -y install iperf psmisc + echo 1 > iperf_installed.txt + fi +} + +cgroup_iperf() { + if [ $MAJOR_VERSION = "6" ]; then + cd /cgroup/cpuset + else + cd /sys/fs/cgroup/cpuset + fi + mkdir -p iperf + cd iperf + + echo 0 > cpuset.cpus + echo 0 > cpuset.mems + + for pid in `ps -ef | grep iperf | grep -v grep | awk '{print $2}'` ; do echo $pid > cgroup.procs; done +} + +cgroup_pktg() { + CPU_IDS=$1 + if [ $MAJOR_VERSION = "6" ]; then + cd /cgroup/cpuset + else + cd /sys/fs/cgroup/cpuset + fi + mkdir -p pktg + cd pktg + + echo $CPU_IDS > cpuset.cpus + echo 0 > cpuset.mems + + for pid in `ps -ef | grep pktminerg | grep -v grep | awk '{print $2}'` ; do echo $pid > cgroup.procs; done +} + +replay() { + cd $SHELL_FOLDER + IPERF_IP=$1 + IPERF_PORT=$2 + BPS=$3 + DURATION_S=$4 + STATS_TXT=stats-${IPERF_IP}-${IPERF_PORT}.txt + + echo "------------------------------------" >> stats.txt + echo "`date`" >> stats.txt + echo "Send to $IPERF_IP:$IPERF_PORT $BPS Mbps, $DURATION_S seconds" >> stats.txt + echo "iperf -c $IPERF_IP -p $IPERF_PORT -i 10 -t $DURATION_S -w 20K -m -b ${BPS}M -l 800 -M 800 -N" >> stats.txt + + echo "------------------------------------" >> $STATS_TXT + echo "`date`" >> $STATS_TXT + echo "Send to $IPERF_IP:$IPERF_PORT $BPS Mbps, $DURATION_S seconds" >> $STATS_TXT + echo "iperf -c $IPERF_IP -p $IPERF_PORT -i 10 -t $DURATION_S -w 20K -m -b ${BPS}M -l 800 -M 800 -N" >> $STATS_TXT + + iperf -c $IPERF_IP -p $IPERF_PORT -i 60 -t $DURATION_S -w 20K -m -b ${BPS}M -l 800 -M 800 -N >> $STATS_TXT & +} + +run_pktg() { + cd $SHELL_FOLDER + NIC=$1 + GRE_IP=$2 + GRE_KEYBIT=$3 + CPU_ID=$4 + echo "====================================" >> stats.txt + echo "`date`" >> stats.txt + echo "pktminerg -i $NIC -r $GRE_IP -k $GRE_KEYBIT -p --cpu $CPU_ID" >> stats.txt + + echo "====================================" >> pktg.txt + echo "`date`" >> pktg.txt + echo "pktminerg -i $NIC -r $GRE_IP -k $GRE_KEYBIT -p --cpu $CPU_ID" >> pktg.txt + pktminerg -i $NIC -r $GRE_IP -k $GRE_KEYBIT -p --cpu $CPU_ID -b 50 >> pktg.txt & +} + +stats() { + cd $SHELL_FOLDER + for (( j=1; j<=10000000; j++ )) + do + echo "`ps aux | grep pktminerg | grep -v grep`" >> stats.txt + sleep 10 + COUNT=`ps aux | grep iperf | grep -v grep | wc -l` + if [ "$COUNT" -ge "1" ] + then + sleep 1 + else + break + fi + done + sleep 1 + echo "------------------------------------" >> stats.txt +} + +pktg_test_case() { + IPERF_IP=$1 + IPERF_PORT=$2 + BPS=$3 + DURATION_S=$4 + REPLAY_ETH=$5 + GRE_RECV_IP=$6 + GRE_KEYBIT=$7 + PKTG_CPU_ID=$8 + + echo "BPS: $BPS Mbps" + + echo "BPS: $BPS Mbps" >> pktg.txt + run_pktg $REPLAY_ETH $GRE_RECV_IP $GRE_KEYBIT $PKTG_CPU_ID + replay $IPERF_IP $IPERF_PORT $BPS $DURATION_S + #replay 10.1.3.199 81 $BPS $DURATION_S + #replay 10.1.3.199 81 $BPS $DURATION_S + stats + + killall pktminerg +} + +main_test() { + IPERF_IP=$1 + IPERF_PORT=$2 + DURATION_S=$3 + REPLAY_ETH=$4 + GRE_RECV_IP=$5 + GRE_KEYBIT=$6 + PKTG_CPU_ID=$7 + + for (( k=10; k<=100; k++ )) + do + pktg_test_case $1 $2 $k $3 $4 $5 $6 $7 + done +} + + + +if [ "$#" -ne 7 ]; then + echo "Usage:" + echo " sh test_pktg_perf.sh iperf_ip iperf_port duration_s replay_nic gre_recv_ip gre_keybit pktg_cpu_id" + echo " iperf_ip: iperf server IP to simulate network traffic" + echo " iperf_port: iperf server port to simulate network traffic" + echo " duration_s: duration seconds of each test case" + echo " replay_nic: tcpreplay target network interface(eth1, eth2...)." + echo " gre_recv_ip: remote ip to receive gre packet." + echo " grep_keybit: gre keybit" + echo " pktg_cpu_id: limit pktminerg to run on this cpu processor id (suggest to NOT use core 0)." + echo "Example:" + echo " sh test_pktg_perf.sh 10.1.3.99 81 300 eth2 192.168.0.1 128 1" +else + prepare_iperf + echo "main_test" + main_test $1 $2 $3 $4 $5 $6 $7 +fi + From e25c677c5e4fd43cbbaf3dd964c1723e2737bb8f Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Thu, 2 Apr 2020 15:12:43 +0800 Subject: [PATCH 32/74] some minor changes --- scripts/recvzmq.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) mode change 100644 => 100755 scripts/recvzmq.py diff --git a/scripts/recvzmq.py b/scripts/recvzmq.py old mode 100644 new mode 100755 index 66af6e801..bdcb54371 --- a/scripts/recvzmq.py +++ b/scripts/recvzmq.py @@ -7,6 +7,7 @@ import sys import os import getopt +import traceback grekey_file_dict = {} @@ -111,10 +112,18 @@ def parse_message(config, message): def server_loop(config): context = zmq.Context() socket = context.socket(zmq.PULL) + socket.setsockopt(zmq.SNDHWM, 2000) socket.bind("tcp://*:%d"%(config["zmq_port"])) while True: - message = socket.recv() - parse_message(config, message) + try: + message = socket.recv() + parse_message(config, message) + except KeyboardInterrupt: + raise + except Exception as e: + eprint(e) + track = traceback.format_exc() + eprint(track) def usage(): From 3a7e1a0f093545f5214b98d703037b569a189284 Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Thu, 2 Apr 2020 15:16:05 +0800 Subject: [PATCH 33/74] add network stats: sar -n DEV 5 1 --- scripts/test_pap_perf.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) mode change 100644 => 100755 scripts/test_pap_perf.sh diff --git a/scripts/test_pap_perf.sh b/scripts/test_pap_perf.sh old mode 100644 new mode 100755 index 16c896ba8..17a4b05af --- a/scripts/test_pap_perf.sh +++ b/scripts/test_pap_perf.sh @@ -59,14 +59,15 @@ replay() { echo "------------------------------------" >> stats.txt echo "`date`" >> stats.txt echo "Send to $IPERF_IP:$IPERF_PORT $BPS Mbps, $DURATION_S seconds" >> stats.txt - echo "iperf -c $IPERF_IP -p $IPERF_PORT -i 10 -t $DURATION_S -w 20K -m -b ${BPS}M -l 800 -M 800 -N" >> stats.txt + echo "iperf -c $IPERF_IP -p $IPERF_PORT -i 10 -t $DURATION_S -w 20K -m -b ${BPS}M -l 1406 -M 1406 -N" >> stats.txt echo "------------------------------------" >> $STATS_TXT echo "`date`" >> $STATS_TXT echo "Send to $IPERF_IP:$IPERF_PORT $BPS Mbps, $DURATION_S seconds" >> $STATS_TXT - echo "iperf -c $IPERF_IP -p $IPERF_PORT -i 10 -t $DURATION_S -w 20K -m -b ${BPS}M -l 800 -M 800 -N" >> $STATS_TXT + echo "iperf -c $IPERF_IP -p $IPERF_PORT -i 10 -t $DURATION_S -w 20K -m -b ${BPS}M -l 1406 -M 1406 -N" >> $STATS_TXT - iperf -c $IPERF_IP -p $IPERF_PORT -i 60 -t $DURATION_S -w 20K -m -b ${BPS}M -l 800 -M 800 -N >> $STATS_TXT & + #python /root/fake_iperf.py $DURATION_S & + iperf -c $IPERF_IP -p $IPERF_PORT -i 60 -t $DURATION_S -w 20K -m -b ${BPS}M -l 1406 -M 1406 -N >> $STATS_TXT & } run_pktg() { @@ -90,6 +91,7 @@ stats() { for (( j=1; j<=10000000; j++ )) do echo "`ps aux | grep pktminerg | grep -v grep`" >> stats.txt + echo "`sar -n DEV 5 1 | grep Average.*eth | grep -v grep`" >> stats.txt sleep 10 COUNT=`ps aux | grep iperf | grep -v grep | wc -l` if [ "$COUNT" -ge "1" ] From 8517219dbb47f947db455811d4563ffccd85a5bd Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Wed, 8 Apr 2020 16:34:39 +0800 Subject: [PATCH 34/74] fix cppzmq build for centos 6 --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 41559a98e..0c32f8790 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,10 +6,10 @@ option(PROJECT_WITH_PROF "Enable profiling and coverage report analysis" OFF) message("\${PROJECT_WITH_PROF}: ${PROJECT_WITH_PROF}") # cmake cxx flags if (${PROJECT_WITH_PROF}) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -fprofile-arcs -ftest-coverage") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -pthread -lrt -fprofile-arcs -ftest-coverage") set(LINK_FLAGS "${LINK_FLAGS} -fprofile-arcs") else () - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -pthread -lrt") endif () # set PKTMINERG_MAJOR_VERSION, PKTMINERG_MINOR_VERSION, etc. From 5ddd9f8b12082484cafad9e8c5504aab6283a9aa Mon Sep 17 00:00:00 2001 From: "Justin.Su" Date: Fri, 10 Apr 2020 16:50:44 +0800 Subject: [PATCH 35/74] support control plane --- BUILD.md | 76 ++++++++++++- CHANGES.md | 6 ++ CMakeLists.txt | 36 +++++-- INSTALL.md | 12 +-- README-zh-Hans.md | 16 +-- README.md | 20 ++-- USAGE.md | 2 + scripts/ansible_pktg.md | 2 +- scripts/ansible_pktg.yaml | 4 +- scripts/puppet_packet_agent.pp | 16 +-- src/agent_control_itf.h | 45 ++++++++ src/agent_control_plane.cpp | 189 +++++++++++++++++++++++++++++++++ src/agent_control_plane.h | 54 ++++++++++ src/agent_status.cpp | 48 +++++++++ src/agent_status.h | 56 ++++++++++ src/pcaphandler.cpp | 4 + src/pktminerg.cpp | 16 ++- 17 files changed, 551 insertions(+), 51 deletions(-) create mode 100644 src/agent_control_itf.h create mode 100644 src/agent_control_plane.cpp create mode 100644 src/agent_control_plane.h create mode 100644 src/agent_status.cpp create mode 100644 src/agent_status.h diff --git a/BUILD.md b/BUILD.md index 903c29a64..e45a3ae6c 100644 --- a/BUILD.md +++ b/BUILD.md @@ -33,6 +33,22 @@ yum groupinstall "Development Tools" yum -y install cmake # install more required libraries yum -y install libpcap-devel boost-devel boost-static + +# build and install libzmq +wget https://github.com/zeromq/libzmq/archive/v4.3.2.zip +unzip v4.3.2.zip +cd /path/to/unziped/dir +mkdir build && cd build +cmake .. +sudo make -j4 install + +# build and install cppzmq +wget https://github.com/zeromq/cppzmq/archive/v4.6.0.zip +unzip v4.6.0.zip +cd /path/to/unziped/dir +mkdir build && cd build +cmake -DCPPZMQ_BUILD_TESTS=OFF .. +sudo make -j4 install ``` 2. Clone or download the project. @@ -63,6 +79,22 @@ apt-get -y install build-essential apt-get -y install cmake # install more required libraries apt-get -y install libpcap-dev libboost-all-dev + +# build and install libzmq +wget https://github.com/zeromq/libzmq/archive/v4.3.2.zip +unzip v4.3.2.zip +cd /path/to/unziped/dir +mkdir build && cd build +cmake .. +sudo make -j4 install + +# build and install cppzmq +wget https://github.com/zeromq/cppzmq/archive/v4.6.0.zip +unzip v4.6.0.zip +cd /path/to/unziped/dir +mkdir build && cd build +cmake -DCPPZMQ_BUILD_TESTS=OFF .. +sudo make -j4 install ``` 2. Clone or download the project. @@ -98,6 +130,22 @@ tar --bzip2 -xf boost_1_54_0.tar.bz2 cd boost_1_54_0/ ./bootstrap.sh ./b2 install stage + +# build and install libzmq +wget https://github.com/zeromq/libzmq/archive/v4.3.2.zip +unzip v4.3.2.zip +cd /path/to/unziped/dir +mkdir build && cd build +cmake .. +sudo make -j4 install + +# build and install cppzmq +wget https://github.com/zeromq/cppzmq/archive/v4.6.0.zip +unzip v4.6.0.zip +cd /path/to/unziped/dir +mkdir build && cd build +cmake -DCPPZMQ_BUILD_TESTS=OFF .. +sudo make -j4 install ``` 2. Clone or download the project. @@ -129,15 +177,33 @@ make install ls /usr/local/lib/libpcap* ``` -2. *Recommended*: install [brew](https://brew.sh/) for easier package management. - +3. *Recommended*: install [brew](https://brew.sh/) for easier package management. ```shell # install boost brew install boost ``` -2. Clone or download the project. -3. Build the project. +4. build and install libzmq and cppzmq +```shell +# build and install libzmq +wget https://github.com/zeromq/libzmq/archive/v4.3.2.zip +unzip v4.3.2.zip +cd /path/to/unziped/dir +mkdir build && cd build +cmake .. +sudo make -j4 install + +# build and install cppzmq +wget https://github.com/zeromq/cppzmq/archive/v4.6.0.zip +unzip v4.6.0.zip +cd /path/to/unziped/dir +mkdir build && cd build +cmake -DCPPZMQ_BUILD_TESTS=OFF .. +sudo make -j4 install +``` +5. Clone or download the project. + +6. Build the project. ```shell cd /path/to/packet-agent @@ -145,7 +211,7 @@ mkdir build && cd build cmake .. && make ``` -4. Ensure the build is successful. The *bin* folder should contain four binary files. +7. Ensure the build is successful. The *bin* folder should contain four binary files. ```shell ls ../bin diff --git a/CHANGES.md b/CHANGES.md index 5ef103014..7d8e8a9e6 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,12 @@ The list of the most significant changes made in Netis Packet Agent over time. +## Netis Packet Agent 0.3.6 + +### Features +* Support agent control plane for agent daemon over zeromq. + + ## Netis Packet Agent 0.3.5 ### Features diff --git a/CMakeLists.txt b/CMakeLists.txt index d04e127c0..21c4ee78e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ endif () # set PKTMINERG_MAJOR_VERSION, PKTMINERG_MINOR_VERSION, etc. set(PKTMINERG_MAJOR_VERSION "0") set(PKTMINERG_MINOR_VERSION "3") -set(PKTMINERG_PATCH_VERSION "5") +set(PKTMINERG_PATCH_VERSION "6") set(PKTMINERG_VERSION_STRING "${PKTMINERG_MAJOR_VERSION}.${PKTMINERG_MINOR_VERSION}.${PKTMINERG_PATCH_VERSION}") if(WIN32) @@ -89,6 +89,8 @@ if(UNIX) set(Boost_USE_STATIC_LIBS ON) find_package(Boost 1.41.0 REQUIRED COMPONENTS program_options system filesystem) + find_package(cppzmq) + message("Boost_INCLUDE_DIRS: " ${Boost_INCLUDE_DIRS}) message("Boost_LIBRARY_DIRS: " ${Boost_LIBRARY_DIRS}) # include dir @@ -205,13 +207,25 @@ set(SOURCE_FILES_PCAPCOMPARE ${PROJECT_SOURCE_DIR}/tools/pcapcompare.cpp ) -set(SOURCE_FILES_PKTMINERG_BASE - ${SOURCE_FILES_SYSHELP} - ${SOURCE_FILES_PCAP} - ${PROJECT_SOURCE_DIR}/src/socketgre.cpp - ${PROJECT_SOURCE_DIR}/src/pcaphandler.cpp - ${PROJECT_SOURCE_DIR}/src/statislog.cpp - ) +if(WIN32) + set(SOURCE_FILES_PKTMINERG_BASE + ${SOURCE_FILES_SYSHELP} + ${SOURCE_FILES_PCAP} + ${PROJECT_SOURCE_DIR}/src/socketgre.cpp + ${PROJECT_SOURCE_DIR}/src/pcaphandler.cpp + ${PROJECT_SOURCE_DIR}/src/statislog.cpp + ) +else() + set(SOURCE_FILES_PKTMINERG_BASE + ${SOURCE_FILES_SYSHELP} + ${SOURCE_FILES_PCAP} + ${PROJECT_SOURCE_DIR}/src/socketgre.cpp + ${PROJECT_SOURCE_DIR}/src/pcaphandler.cpp + ${PROJECT_SOURCE_DIR}/src/statislog.cpp + ${PROJECT_SOURCE_DIR}/src/agent_status.cpp + ${PROJECT_SOURCE_DIR}/src/agent_control_plane.cpp + ) +endif() set(SOURCE_FILES_PKTMINERG ${SOURCE_FILES_PKTMINERG_BASE} @@ -229,9 +243,11 @@ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE) if(UNIX) set(PCAP_LIB pcap) set(BOOST_LIB boost_program_options.a boost_system.a boost_filesystem.a) + set(ZMQ_LIB cppzmq) else() set(PCAP_LIB wpcap Packet) set(SOCKET_LIB ws2_32) + set(ZMQ_LIB ) endif() # bin -- gredemo @@ -257,7 +273,7 @@ add_executable(pktminerg ${SOURCE_FILES_PKTMINERG}) if(WIN32) set_target_properties(pktminerg PROPERTIES LINK_FLAGS "/MANIFESTUAC:\"level='requireAdministrator' uiAccess='false'\"") endif() -target_link_libraries(pktminerg ${BOOST_LIB} ${PCAP_LIB} ${SOCKET_LIB}) +target_link_libraries(pktminerg ${BOOST_LIB} ${PCAP_LIB} ${SOCKET_LIB} ${ZMQ_LIB}) if(UNIX AND NOT APPLE) # test @@ -275,7 +291,7 @@ if(UNIX AND NOT APPLE) ${TEST_DIR}/src/gtest-test-part.cc ${TEST_DIR}/src/gtest-typed-test.cc) add_executable(unittest ${SOURCE_FILES_UNITTEST} ${SOURCE_FILES_PKTMINERG_BASE}) - target_link_libraries(unittest ${BOOST_LIB} pcap pthread) + target_link_libraries(unittest ${BOOST_LIB} pcap pthread ${ZMQ_LIB}) set_target_properties(unittest PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/test/bin") endif() diff --git a/INSTALL.md b/INSTALL.md index e3d334ebd..6f29fc585 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -12,8 +12,8 @@ Note: The default libpcap with TPACKET_V3 enabled has some performance issue. If 2. Download and install the RPM package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```shell -wget https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5.el6.x86_64.rpm -rpm -ivh netis-packet-agent-0.3.5.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6.el6.x86_64.rpm +rpm -ivh netis-packet-agent-0.3.6.el6.x86_64.rpm ``` @@ -26,8 +26,8 @@ sudo apt-get install libpcap-dev wget 2. Download and install the DEB package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5_amd64.deb -sudo dpkg -i netis-packet-agent-0.3.5_amd64.deb +wget https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6_amd64.deb +sudo dpkg -i netis-packet-agent-0.3.6_amd64.deb ``` 3. If libpcap.so.1 not found when running pktminerg, create softlink for libpcap.so.1 in suitable directory. @@ -49,8 +49,8 @@ yum install libpcap wget 2. Download and install the RPM package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```shell -wget https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5.el6.x86_64.rpm -rpm -ivh netis-packet-agent-0.3.5.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6.el6.x86_64.rpm +rpm -ivh netis-packet-agent-0.3.6.el6.x86_64.rpm ``` diff --git a/README-zh-Hans.md b/README-zh-Hans.md index e59628552..6c5a6b012 100644 --- a/README-zh-Hans.md +++ b/README-zh-Hans.md @@ -2,9 +2,9 @@ [English](README.md) ∙ 简体中文 ![packet agent's title](./img/title.jpg) -# Netis Packet Agent 0.3.5 +# Netis Packet Agent 0.3.6 -[![Stable release](https://img.shields.io/badge/version-0.3.5-green.svg)](https://github.com/Netis/packet-agent/releases/tag/0.3.5) +[![Stable release](https://img.shields.io/badge/version-0.3.6-green.svg)](https://github.com/Netis/packet-agent/releases/tag/0.3.6) [![Software License](https://img.shields.io/badge/license-BSD3-green.svg)](./LICENSE.md) @@ -35,14 +35,14 @@ yum install libpcap wget 2. 下载并安装RPM包。您可以从[这个地址](https://github.com/Netis/packet-agent/releases)获取最新版本的软件包。 ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5.el6.x86_64.rpm -rpm -ivh netis-packet-agent-0.3.5.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6.el6.x86_64.rpm +rpm -ivh netis-packet-agent-0.3.6.el6.x86_64.rpm ``` #### SUSE12 1. 下载并安装RPM包。您可以从[这个地址](https://github.com/Netis/packet-agent/releases)获取最新版本的软件包。 ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5.el6.x86_64.rpm -rpm -ivh netis-packet-agent-0.3.5.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6.el6.x86_64.rpm +rpm -ivh netis-packet-agent-0.3.6.el6.x86_64.rpm ``` #### Ubuntu 18.04LTS @@ -53,8 +53,8 @@ sudo apt-get install libpcap-dev wget 2. 下载并安装DEB包。您可以从[这个地址](https://github.com/Netis/packet-agent/releases)获取最新版本的软件包。 ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5_amd64.deb -sudo dpkg -i netis-packet-agent-0.3.5_amd64.deb +wget https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6_amd64.deb +sudo dpkg -i netis-packet-agent-0.3.6_amd64.deb ``` 3. 如果提示libpcap.so找不到,到libpcap.so所在目录下创建libpcap.so.1软链接。 diff --git a/README.md b/README.md index 22f1ef5a3..53e64a9d6 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ English ∙ [简体中文](README-zh-Hans.md) ![packet agent's title](./img/title.jpg) -# Netis Packet Agent 0.3.5 +# Netis Packet Agent 0.3.6 -[![Stable release](https://img.shields.io/badge/version-0.3.5-green.svg)](https://github.com/Netis/packet-agent/releases/tag/0.3.5) +[![Stable release](https://img.shields.io/badge/version-0.3.6-green.svg)](https://github.com/Netis/packet-agent/releases/tag/0.3.6) [![Software License](https://img.shields.io/badge/license-BSD3-green.svg)](./LICENSE.md) ## What is Netis Packet Agent? @@ -30,20 +30,20 @@ With 3 utilities: #### CentOS 6/7 and RedHat 7 1. Install libpcap and wget ```bash -yum install libpcap wget +yum install libpcap wget zeromq ``` 2. Download and install the RPM package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5.el6.x86_64.rpm -rpm -ivh netis-packet-agent-0.3.5.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6.el6.x86_64.rpm +rpm -ivh netis-packet-agent-0.3.6.el6.x86_64.rpm ``` #### SUSE 12 1. Download and install the RPM package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5.el6.x86_64.rpm -rpm -ivh netis-packet-agent-0.3.5.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6.el6.x86_64.rpm +rpm -ivh netis-packet-agent-0.3.6.el6.x86_64.rpm ``` @@ -55,8 +55,8 @@ sudo apt-get install libpcap-dev wget 2. Download and install the DEB package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5_amd64.deb -sudo dpkg -i netis-packet-agent-0.3.5_amd64.deb +wget https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6_amd64.deb +sudo dpkg -i netis-packet-agent-0.3.6_amd64.deb ``` 3. If libpcap.so.1 not found when running pktminerg, create softlink for libpcap.so.1 in suitable directory. @@ -134,7 +134,7 @@ For build precondition and steps, please refer to this [document](./BUILD.md). Fork the project and send pull requests. We welcome pull requests from members of all open source community. ## License -Copyright (c) 2018 Netis.
+Copyright (c) 2020 Netis.
The content of this repository bound by the following licenses: - The computer software is licensed under the [BSD-3-Clause](./LICENSE.md). diff --git a/USAGE.md b/USAGE.md index 40c9647eb..f6e813dc1 100644 --- a/USAGE.md +++ b/USAGE.md @@ -32,6 +32,8 @@ Allowed options: --cpu ID set cpu affinity ID (Not supported on Windows platform) --expression FILTER filter packets with FILTER; FILTER as same as tcpdump BPF expression syntax + --control CONTROL_PORT set zmq listen port for agent daemon control. Control server won't + be up if this option is not set.(Not supported on Windows platform). --dump specify dump file, mostly for integrated test --nofilter force no filter; In online mode, only use when GRE interface is set via CLI, AND you confirm that the snoop interface is diff --git a/scripts/ansible_pktg.md b/scripts/ansible_pktg.md index beb88b873..5c29bd715 100644 --- a/scripts/ansible_pktg.md +++ b/scripts/ansible_pktg.md @@ -1,6 +1,6 @@ # 说明 1. 在主控的中心服务器上需要安装有 ansible 程序。如果没有,可以使用类似 yum install ansible 的命令安装。
2. 将需要安装 packet-agent 的机器加入 ansible 的 hosts 文件:比如添加组 [servers_to_install_pktg] 到 /etc/ansible/hosts,并在该组下加入若干机器IP。
-3. 拷贝待安装的 packet-agent rpm/deb 到 ansible_pktg.yaml 同一目录下。如果待安装的 rpm/deb 不是 yaml 中指定的 netis-packet-agent-0.3.5.el6.x86_64.rpm / netis-packet-agent-0.3.5_amd64.deb,则将 ansible_pktg.yaml 中 rpm_file/deb_file 修改为你需要的文件名。
+3. 拷贝待安装的 packet-agent rpm/deb 到 ansible_pktg.yaml 同一目录下。如果待安装的 rpm/deb 不是 yaml 中指定的 netis-packet-agent-0.3.6.el6.x86_64.rpm / netis-packet-agent-0.3.6_amd64.deb,则将 ansible_pktg.yaml 中 rpm_file/deb_file 修改为你需要的文件名。
4. 执行 ansible-playbook ansible_pktg.yaml 命令,将 packet-agent 程序安装到各个目标机器上。
diff --git a/scripts/ansible_pktg.yaml b/scripts/ansible_pktg.yaml index d96b73b83..70bdbc9cf 100644 --- a/scripts/ansible_pktg.yaml +++ b/scripts/ansible_pktg.yaml @@ -2,8 +2,8 @@ - name: install packet-agent and its depends hosts: servers_to_install_pktg vars: - rpm_file: netis-packet-agent-0.3.5.el6.x86_64.rpm - deb_file: netis-packet-agent-0.3.5_amd64.deb + rpm_file: netis-packet-agent-0.3.6.el6.x86_64.rpm + deb_file: netis-packet-agent-0.3.6_amd64.deb remote_user: root gather_facts: True diff --git a/scripts/puppet_packet_agent.pp b/scripts/puppet_packet_agent.pp index 8230483dc..ef406df32 100644 --- a/scripts/puppet_packet_agent.pp +++ b/scripts/puppet_packet_agent.pp @@ -3,30 +3,30 @@ 'Suse': { $lib_pcap = 'libpcap'; $cur_dir = '/tmp/'; - $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5.el6.x86_64.rpm'; + $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6.el6.x86_64.rpm'; $package_provider = 'rpm'; - $install_file = '/tmp/netis-packet-agent-0.3.5.el6.x86_64.rpm' + $install_file = '/tmp/netis-packet-agent-0.3.6.el6.x86_64.rpm' } 'RedHat': { $lib_pcap = 'libpcap'; $cur_dir = '/tmp/'; - $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5.el6.x86_64.rpm'; + $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6.el6.x86_64.rpm'; $package_provider = 'rpm'; - $install_file = '/tmp/netis-packet-agent-0.3.5.el6.x86_64.rpm' + $install_file = '/tmp/netis-packet-agent-0.3.6.el6.x86_64.rpm' } 'Debian': { $lib_pcap = 'libpcap-dev'; $cur_dir = '/tmp/'; - $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5_amd64.deb'; + $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6_amd64.deb'; $package_provider = 'dpkg'; - $install_file = '/tmp/netis-packet-agent-0.3.5_amd64.deb' + $install_file = '/tmp/netis-packet-agent-0.3.6_amd64.deb' } default: { $lib_pcap = 'libpcap'; $cur_dir = '/tmp/'; - $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.5/netis-packet-agent-0.3.5.el6.x86_64.rpm'; + $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6.el6.x86_64.rpm'; $package_provider = 'rpm'; - $install_file = '/tmp/netis-packet-agent-0.3.5.el6.x86_64.rpm' + $install_file = '/tmp/netis-packet-agent-0.3.6.el6.x86_64.rpm' } } diff --git a/src/agent_control_itf.h b/src/agent_control_itf.h new file mode 100644 index 000000000..efd4d3796 --- /dev/null +++ b/src/agent_control_itf.h @@ -0,0 +1,45 @@ +#ifndef SRC_CONTROL_ITF_H_ +#define SRC_CONTROL_ITF_H_ + + +#define MAX_MSG_CONTENT_LENGTH (256) +#define MSG_MAGIC_NUMBER (0x504D3230) +#define MSG_HEADER_LENGTH (16) + +/* message struction, reference doc/msg.md */ +typedef struct msg { + /* header */ + uint32_t magic; + uint32_t msglength; + uint32_t action; + uint32_t query_id; + + /* body */ + char body[MAX_MSG_CONTENT_LENGTH]; +} __attribute__((packed)) msg_t, * msg_ptr_t; + +typedef enum msg_action_req_type { + MSG_ACTION_REQ_INVALID = 0x0000, + MSG_ACTION_REQ_QUERY_STATUS = 0x0001, + MSG_ACTION_REQ_MAX +} msg_act_req_type_e; + + +typedef struct msg_status { + uint32_t ver; + uint32_t start_time; + uint32_t last_time; + uint32_t total_cap_bytes; + uint32_t total_cap_packets; + uint32_t total_cap_drop_count; + uint32_t total_filter_drop_count; + uint32_t total_fwd_drop_count; +}__attribute__((packed)) msg_status_t, * msg_status_ptr_t; + + + + + +#endif + + diff --git a/src/agent_control_plane.cpp b/src/agent_control_plane.cpp new file mode 100644 index 000000000..c481e8002 --- /dev/null +++ b/src/agent_control_plane.cpp @@ -0,0 +1,189 @@ + +#include +#include +#include +#include +#include + +#include "agent_status.h" +#include "agent_control_plane.h" + + +AgentControlPlane::AgentControlPlane():_zmq_port(DEFAULT_ZMQ_SERVER_PORT), + _zmq_context(DEFAULT_ZMQ_IO_THREAD), _zmq_socket(_zmq_context, ZMQ_REP), _tid(0) { + +} + +AgentControlPlane::AgentControlPlane(int zmq_port):_zmq_port(zmq_port), + _zmq_context(DEFAULT_ZMQ_IO_THREAD), _zmq_socket(_zmq_context, ZMQ_REP), _tid(0) { + +} + +AgentControlPlane::~AgentControlPlane() { + if (_tid != 0) { + close_msg_server(); + } + _tid = 0; +} + + + +int AgentControlPlane::init_msg_server() { + + int32_t err = pthread_attr_init(&_attr); + if (err != 0) { + std::cerr << "[pktminerg] pthread_attr_init failed" << std::endl; + return 1; + } + + err = pthread_attr_setdetachstate(&_attr, PTHREAD_CREATE_DETACHED); + if (0 == err) { + err = pthread_create(&_tid, &_attr, run, (void*)this); + if (err) { + std::cerr << "[pktminerg] pthread_create failed" << std::endl; + } + } + pthread_attr_destroy(&_attr); + std::cout << "[pktminerg] daemon zmq server init fnished. tid = " << _tid << std::endl; + + return 0; +} + +int AgentControlPlane::close_msg_server() { + if (pthread_cancel(_tid)) { + std::cerr << "[pktminerg] pthread_cancel failed" << std::endl; + } + _tid = 0; + return 0; +} + + +void* AgentControlPlane::run(void* inst) { + if (!inst) { + std::cerr << "[pktminerg] msg server routine: void handle" << std::endl; + return nullptr; + } + AgentControlPlane* serv = static_cast(inst); + + char zmq_addr[32] = "tcp://*:"; + std::string port = std::to_string(serv->_zmq_port); + serv->_zmq_socket.bind(std::strcat(zmq_addr, port.c_str())); + + char recv_string[sizeof(msg_t)]; + msg_t pkt_req_msg, pkt_res_msg; + + pthread_cleanup_push(on_destroy, inst); + + while (true) { + pthread_testcancel(); + + memset(&pkt_req_msg, 0, sizeof(msg_t)); + memset(&pkt_res_msg, 0, sizeof(msg_t)); + memset(recv_string, 0, sizeof(msg_t)); + + zmq::message_t msg_recv; + zmq::recv_result_t recv_ret = {}; + recv_ret = serv->_zmq_socket.recv(msg_recv, zmq::recv_flags::dontwait); + if (!recv_ret) { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + continue; + } + + size_t zmq_recv_size = msg_recv.size(); + if (zmq_recv_size <= sizeof(recv_string)) { + memcpy(recv_string, msg_recv.data(), zmq_recv_size); + } + + serv->msg_req_process(recv_string, zmq_recv_size, &pkt_req_msg); + serv->msg_rsp_process(&pkt_req_msg, &pkt_res_msg); + + // Send Response + zmq::send_result_t send_ret = {}; + zmq::message_t msg_send(&pkt_res_msg, sizeof(msg_t), NULL); + send_ret = serv->_zmq_socket.send(msg_send, zmq::send_flags::none); + + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } + + + pthread_cleanup_pop(0); + pthread_exit((void*) 0); + return nullptr; +} + + + + +void AgentControlPlane::on_destroy(void* inst) { + +} + + + +int AgentControlPlane::msg_req_process(const char* buf, size_t size, msg_t* req_msg) { + /* check size */ + if (size > (sizeof(msg_t))) { + std::cerr << "[pktminerg] Err, too long msg size:" << size << std::endl; + return -1; + } + + /* construct msg */ + memcpy(req_msg, buf, size); + + if (size < (sizeof(msg_t) - MAX_MSG_CONTENT_LENGTH)) { + std::cerr << "[pktminerg] Err, invalid msg size:" << size << std::endl; + return -1; + } + + /* check magic */ + if (req_msg->magic != MSG_MAGIC_NUMBER) { + std::cerr << "[pktminerg] Err, invalid msg magic number:" << req_msg->magic << std::endl; + return -1; + } + + /* check action */ + if (req_msg->action >= MSG_ACTION_REQ_MAX) { + std::cerr << "[pktminerg] Err, invalid action request:" << req_msg->action << std::endl; + return -1; + } + return 0; +} + + + +int AgentControlPlane::msg_rsp_process(const msg_t* req_msg, msg_t* res_msg) { + if (req_msg->action == MSG_ACTION_REQ_QUERY_STATUS) { + res_msg->magic = req_msg->magic; + res_msg->action = req_msg->action; + res_msg->query_id = req_msg->query_id; + res_msg->msglength = MSG_HEADER_LENGTH + sizeof(msg_status_t); + msg_status_t stat; + msg_rsp_process_get_status(&stat); + memcpy(res_msg->body, &stat, sizeof(msg_status_t)); + } + return 0; +} + + +int AgentControlPlane::msg_rsp_process_get_status(msg_status_t* p_stat) { + + memset(p_stat, 0, sizeof(msg_status_t)); + p_stat->ver = MSG_SERVER_VERSION; + AgentStatus* inst = AgentStatus::get_instance(); + if (!inst) { + return -1; + } + + p_stat->start_time = static_cast(inst->first_packet_time()); + p_stat->last_time = static_cast(inst->last_packet_time()); + p_stat->total_cap_bytes = static_cast(inst->total_cap_bytes()); + p_stat->total_cap_packets = static_cast(inst->total_cap_packets()); + p_stat->total_cap_drop_count = static_cast(inst->total_cap_drop_count()); + p_stat->total_filter_drop_count = static_cast(inst->total_filter_drop_count()); + p_stat->total_fwd_drop_count = static_cast(inst->total_fwd_drop_count()); + return 0; +} + + + + diff --git a/src/agent_control_plane.h b/src/agent_control_plane.h new file mode 100644 index 000000000..29e68ec9b --- /dev/null +++ b/src/agent_control_plane.h @@ -0,0 +1,54 @@ +#ifndef SRC_MSGSERVER_H_ +#define SRC_MSGSERVER_H_ + + +#include + +#include +#include + +#include "agent_control_itf.h" + +class AgentControlPlane { + +public: + AgentControlPlane(); + AgentControlPlane(int zmq_port); + ~AgentControlPlane(); + + int init_msg_server(); + int close_msg_server(); + + +public: + const static int DEFAULT_ZMQ_IO_THREAD = 16; + const static int DEFAULT_ZMQ_SERVER_PORT = 5556; + + const static uint32_t MSG_SERVER_VERSION = 0x01; + +private: + int msg_req_process(const char* buf, size_t size, msg_t* req_msg); + int msg_rsp_process(const msg_t* req_msg, msg_t* res_msg); + int msg_rsp_process_get_status(msg_status_t* stat); + +private: + static void* run(void*); + static void on_destroy(void*); + +private: + // zmq + int _zmq_port; + zmq::context_t _zmq_context; + zmq::socket_t _zmq_socket; + + // pthread + pthread_attr_t _attr; + pthread_t _tid; + // std::thread _msg_server_loop; +}; + + + +#endif + + diff --git a/src/agent_status.cpp b/src/agent_status.cpp new file mode 100644 index 000000000..9c1757420 --- /dev/null +++ b/src/agent_status.cpp @@ -0,0 +1,48 @@ + +#include "agent_status.h" + +AgentStatus::AgentStatus() { + _drop_count_at_beginning = 0; + + _first_packet_time = 0; + _last_packet_time = 0; + + _total_cap_bytes = 0; + _total_cap_packets = 0; + _total_cap_drop_count = 0; + + _total_filter_drop_count = 0; + _total_fwd_drop_count = 0; +} + +AgentStatus::~AgentStatus() { + +} + + +int AgentStatus::update_status(uint64_t cur_pkt_time, uint32_t cur_pkt_caplen, + uint64_t total_fwd_count, uint64_t total_fwd_drop_count, pcap_t* handle){ + if(_first_packet_time == 0) { + _first_packet_time = cur_pkt_time; + + struct pcap_stat stat; + if(handle != NULL && pcap_stats(handle, &stat) == 0) { + _drop_count_at_beginning = stat.ps_drop + stat.ps_ifdrop; + } + } + _last_packet_time = cur_pkt_time; + + _total_cap_bytes += cur_pkt_caplen; + _total_cap_packets++; + struct pcap_stat stat; + if (handle != NULL && pcap_stats(handle, &stat) == 0) { + _total_cap_drop_count = stat.ps_drop + stat.ps_ifdrop; + } + + _total_fwd_drop_count = total_fwd_drop_count; + _total_filter_drop_count = 0;//_total_cap_packets - total_fwd_count - _total_fwd_drop_count; + + return 0; +} + + diff --git a/src/agent_status.h b/src/agent_status.h new file mode 100644 index 000000000..5ad671787 --- /dev/null +++ b/src/agent_status.h @@ -0,0 +1,56 @@ +#ifndef SRC_AGENT_STATUS_H_ +#define SRC_AGENT_STATUS_H_ + + +#include + +#include + + + +class AgentStatus { +public: + AgentStatus(); + ~AgentStatus(); + +public: + static AgentStatus* get_instance() { + static AgentStatus inst; + return &inst; + } + +public: + int update_status(uint64_t cur_pkt_time, uint32_t cur_pkt_caplen, + uint64_t total_fwd_count, uint64_t total_fwd_drop_count, pcap_t* handle = NULL); + + uint64_t first_packet_time() { return _first_packet_time; } + uint64_t last_packet_time() { return _last_packet_time; } + uint64_t total_cap_bytes() { return _total_cap_bytes; } + uint64_t total_cap_packets() { return _total_cap_packets; } + uint64_t total_cap_drop_count() { return _total_cap_drop_count; } + uint64_t total_filter_drop_count() { return _total_filter_drop_count; } + uint64_t total_fwd_drop_count() { return _total_fwd_drop_count; } + + +private: + + uint64_t _drop_count_at_beginning; + + std::atomic _first_packet_time; + std::atomic _last_packet_time; + std::atomic _total_cap_bytes; + std::atomic _total_cap_packets; + std::atomic _total_cap_drop_count; + std::atomic _total_filter_drop_count; + std::atomic _total_fwd_drop_count; +}; + + + + + + + +#endif + + diff --git a/src/pcaphandler.cpp b/src/pcaphandler.cpp index 898f56672..9e9c0e2de 100644 --- a/src/pcaphandler.cpp +++ b/src/pcaphandler.cpp @@ -3,6 +3,7 @@ #include #include #include "scopeguard.h" +#include "agent_status.h" PcapHandler::PcapHandler() { _gre_count = 0; @@ -70,6 +71,9 @@ void PcapHandler::packetHandler(const struct pcap_pkthdr* header, const uint8_t* } _statislog->logSendStatis((uint64_t) (header->ts.tv_sec), header->caplen, _gre_count, _gre_drop_count, 0, _pcap_handle); + + AgentStatus::get_instance()->update_status((uint64_t) (header->ts.tv_sec), header->caplen, + _gre_count, _gre_drop_count, _pcap_handle); } void PcapHandler::addExport(std::shared_ptr pcapExport) { diff --git a/src/pktminerg.cpp b/src/pktminerg.cpp index 57d53b6c8..b939b09c6 100644 --- a/src/pktminerg.cpp +++ b/src/pktminerg.cpp @@ -6,6 +6,9 @@ #include "socketgre.h" #include "versioninfo.h" #include "syshelp.h" +#ifndef WIN32 + #include "agent_control_plane.h" +#endif std::shared_ptr handler = nullptr; @@ -42,6 +45,8 @@ int main(int argc, const char* argv[]) { ("expression", boost::program_options::value>()->value_name("FILTER"), R"(filter packets with FILTER; FILTER as same as tcpdump BPF expression syntax)") ("dump", "specify dump file, mostly for integrated test") + ("control", boost::program_options::value()->value_name("CONTROL_PORT"), + "set zmq listen port for agent daemon control. Control server won't be up if this option is not set") ("nofilter", "force no filter; In online mode, only use when GRE interface " "is set via CLI, AND you confirm that the snoop interface is " @@ -107,7 +112,16 @@ int main(int argc, const char* argv[]) { return 1; } } + + std::shared_ptr agent_control_plane; + if (vm.count("control")) { + const auto daemon_zmq_port = vm["control"].as(); + agent_control_plane = std::make_shared(daemon_zmq_port); + agent_control_plane->init_msg_server(); + } #endif // WIN32 + + if (!vm.count("remoteip")) { std::cerr << StatisLogContext::getTimeString() << "Please set gre remote ip with --remoteip or -r." << std::endl; @@ -247,6 +261,6 @@ int main(int argc, const char* argv[]) { std::cout << StatisLogContext::getTimeString() << "End pcap snoop." << std::endl; // end - greExport->closeExport(); + greExport->closeExport(); return 0; } From 1e0443e6be9d6c15dd70d856b244059dd3556ca9 Mon Sep 17 00:00:00 2001 From: "Justin.Su" Date: Fri, 10 Apr 2020 17:21:53 +0800 Subject: [PATCH 36/74] add doc --- README-zh-Hans.md | 2 +- README.md | 2 +- USAGE.md | 48 +++++++++++++++++++++++++++++++++++++++++ src/agent_control_itf.h | 14 +++++++----- 4 files changed, 59 insertions(+), 7 deletions(-) diff --git a/README-zh-Hans.md b/README-zh-Hans.md index 6c5a6b012..1187a1be6 100644 --- a/README-zh-Hans.md +++ b/README-zh-Hans.md @@ -128,7 +128,7 @@ pktminerg -i eth0 -r 172.16.1.201 -M dont 您可以fork本项目并提交Pull Request。我们欢迎所有开源社区的同学提交自己的贡献。 ## 许可证 -Copyright (c) 2018 Netis.
+Copyright (c) 2018 - 2020 Netis.
本项目库遵循下列许可证: - [BSD-3-Clause](./LICENSE.md). diff --git a/README.md b/README.md index 53e64a9d6..b16fe73f2 100644 --- a/README.md +++ b/README.md @@ -134,7 +134,7 @@ For build precondition and steps, please refer to this [document](./BUILD.md). Fork the project and send pull requests. We welcome pull requests from members of all open source community. ## License -Copyright (c) 2020 Netis.
+Copyright (c) 2018 - 2020 Netis.
The content of this repository bound by the following licenses: - The computer software is licensed under the [BSD-3-Clause](./LICENSE.md). diff --git a/USAGE.md b/USAGE.md index f6e813dc1..95b5d96b3 100644 --- a/USAGE.md +++ b/USAGE.md @@ -81,6 +81,54 @@ expression: This parameter is used to match and filter the packets (syntax is sa This parameter will be invalid if "nofilter" parameter is set.
+* control
+control: set zmq listen port for agent daemon control. +From version 0.3.6, packet-agent's control plane support daemon service via zmq(REQ/RSP), such as packet-agent status query, and packet-agent run as zmq server. +The exchange data format list in C Language as below : +``` +// request and response data format, between zmq client and server +typedef struct msg { + /* header */ + uint32_t magic; // must be 0x50 0x4D 0x32 0x30 in order. + uint32_t msglength; // msg length, include header, in bytes. + uint32_t action; // list below + uint32_t query_id; // the query id to identify each client for req flush + + /* body */ + char body[MAX_MSG_CONTENT_LENGTH]; +} __attribute__((packed)) msg_t, * msg_ptr_t; + + +// support action now +typedef enum msg_action_req_type { + MSG_ACTION_REQ_INVALID = 0x0000, + MSG_ACTION_REQ_QUERY_STATUS = 0x0001, + MSG_ACTION_REQ_MAX +} msg_act_req_type_e; + +// action MSG_ACTION_REQ_QUERY_STATUS's response data body. +typedef struct msg_status { + uint32_t ver; + uint32_t start_time; + uint32_t last_time; + uint32_t total_cap_bytes; + uint32_t total_cap_packets; + uint32_t total_cap_drop_count; + uint32_t total_filter_drop_count; + uint32_t total_fwd_drop_count; +}__attribute__((packed)) msg_status_t, * msg_status_ptr_t; + +``` + + 1. Control server won't be up if this option is not set. + 2. Not supported on Windows platform. +
+ + + + + + ### Examples * Network interface example ``` diff --git a/src/agent_control_itf.h b/src/agent_control_itf.h index efd4d3796..354be8ef6 100644 --- a/src/agent_control_itf.h +++ b/src/agent_control_itf.h @@ -6,25 +6,29 @@ #define MSG_MAGIC_NUMBER (0x504D3230) #define MSG_HEADER_LENGTH (16) +// request and response data format, between zmq client and server + /* message struction, reference doc/msg.md */ typedef struct msg { /* header */ - uint32_t magic; - uint32_t msglength; - uint32_t action; - uint32_t query_id; + uint32_t magic; // must be 0x50 0x4D 0x32 0x30 in order. + uint32_t msglength; // msg length, include header, in bytes. + uint32_t action; // list below + uint32_t query_id; // the query id to identify each client for req flush /* body */ char body[MAX_MSG_CONTENT_LENGTH]; } __attribute__((packed)) msg_t, * msg_ptr_t; + +// support action now typedef enum msg_action_req_type { MSG_ACTION_REQ_INVALID = 0x0000, MSG_ACTION_REQ_QUERY_STATUS = 0x0001, MSG_ACTION_REQ_MAX } msg_act_req_type_e; - +// action MSG_ACTION_REQ_QUERY_STATUS's response data body. typedef struct msg_status { uint32_t ver; uint32_t start_time; From 685d86c1482970bc2fa949148fd5b3621920717b Mon Sep 17 00:00:00 2001 From: "Justin.Su" Date: Mon, 13 Apr 2020 11:17:20 +0800 Subject: [PATCH 37/74] modify --- src/agent_status.cpp | 23 ++++++++++++++++++++--- src/agent_status.h | 14 ++++++-------- src/pcaphandler.cpp | 2 +- test/unit_test.cpp | 23 +++++++++++++++++++++++ 4 files changed, 50 insertions(+), 12 deletions(-) diff --git a/src/agent_status.cpp b/src/agent_status.cpp index 9c1757420..78c572ab0 100644 --- a/src/agent_status.cpp +++ b/src/agent_status.cpp @@ -19,8 +19,23 @@ AgentStatus::~AgentStatus() { } +int AgentStatus::reset_agent_status() { + _drop_count_at_beginning = 0; + + _first_packet_time = 0; + _last_packet_time = 0; + + _total_cap_bytes = 0; + _total_cap_packets = 0; + _total_cap_drop_count = 0; -int AgentStatus::update_status(uint64_t cur_pkt_time, uint32_t cur_pkt_caplen, + _total_filter_drop_count = 0; + _total_fwd_drop_count = 0; + return 0; +} + + +int AgentStatus::update_capture_status(uint64_t cur_pkt_time, uint32_t cur_pkt_caplen, uint64_t total_fwd_count, uint64_t total_fwd_drop_count, pcap_t* handle){ if(_first_packet_time == 0) { _first_packet_time = cur_pkt_time; @@ -33,14 +48,16 @@ int AgentStatus::update_status(uint64_t cur_pkt_time, uint32_t cur_pkt_caplen, _last_packet_time = cur_pkt_time; _total_cap_bytes += cur_pkt_caplen; - _total_cap_packets++; + struct pcap_stat stat; if (handle != NULL && pcap_stats(handle, &stat) == 0) { + _total_cap_packets = stat.ps_recv; _total_cap_drop_count = stat.ps_drop + stat.ps_ifdrop; + _total_cap_drop_count -= _drop_count_at_beginning; } _total_fwd_drop_count = total_fwd_drop_count; - _total_filter_drop_count = 0;//_total_cap_packets - total_fwd_count - _total_fwd_drop_count; + _total_filter_drop_count = 0; //_total_cap_packets - total_fwd_count - _total_fwd_drop_count; return 0; } diff --git a/src/agent_status.h b/src/agent_status.h index 5ad671787..f6f7a8758 100644 --- a/src/agent_status.h +++ b/src/agent_status.h @@ -20,9 +20,12 @@ class AgentStatus { } public: - int update_status(uint64_t cur_pkt_time, uint32_t cur_pkt_caplen, + int update_capture_status(uint64_t cur_pkt_time, uint32_t cur_pkt_caplen, uint64_t total_fwd_count, uint64_t total_fwd_drop_count, pcap_t* handle = NULL); + int reset_agent_status(); + +public: uint64_t first_packet_time() { return _first_packet_time; } uint64_t last_packet_time() { return _last_packet_time; } uint64_t total_cap_bytes() { return _total_cap_bytes; } @@ -33,7 +36,8 @@ class AgentStatus { private: - + + // packet agent metrics uint64_t _drop_count_at_beginning; std::atomic _first_packet_time; @@ -45,12 +49,6 @@ class AgentStatus { std::atomic _total_fwd_drop_count; }; - - - - - - #endif diff --git a/src/pcaphandler.cpp b/src/pcaphandler.cpp index 9e9c0e2de..4c88fbdfd 100644 --- a/src/pcaphandler.cpp +++ b/src/pcaphandler.cpp @@ -72,7 +72,7 @@ void PcapHandler::packetHandler(const struct pcap_pkthdr* header, const uint8_t* _statislog->logSendStatis((uint64_t) (header->ts.tv_sec), header->caplen, _gre_count, _gre_drop_count, 0, _pcap_handle); - AgentStatus::get_instance()->update_status((uint64_t) (header->ts.tv_sec), header->caplen, + AgentStatus::get_instance()->update_capture_status((uint64_t) (header->ts.tv_sec), header->caplen, _gre_count, _gre_drop_count, _pcap_handle); } diff --git a/test/unit_test.cpp b/test/unit_test.cpp index e7a1e1f67..830b22196 100644 --- a/test/unit_test.cpp +++ b/test/unit_test.cpp @@ -2,6 +2,8 @@ #include "../src/syshelp.h" #include "../src/pcaphandler.h" #include "../src/socketgre.h" +#include "../src/agent_status.h" +#include "../src/agent_control_plane.h" namespace { TEST(SysHelpTest, test) { @@ -44,4 +46,25 @@ namespace { EXPECT_EQ(0, greExport.closeExport()); } + TEST(AgentStatusQuery, test) { + // AgentStatus::get_instance()->update_status(1586508861, header->caplen, + // _gre_count, _gre_drop_count, _pcap_handle); + AgentStatus* inst = AgentStatus::get_instance(); + inst->reset_agent_status(); + inst->update_capture_status(1586508861, 200, 1, 0, nullptr); + inst->update_capture_status(1586508862, 200, 1, 0, nullptr); + inst->update_capture_status(1586508863, 100, 1, 0, nullptr); + EXPECT_EQ(1586508861, static_cast(inst->first_packet_time())); + EXPECT_EQ(1586508863, static_cast(inst->last_packet_time())); + EXPECT_EQ(500, static_cast(inst->total_cap_bytes())); + } + + TEST(AgentControlPlane, test) { + + AgentControlPlane zmq_server(5556); + EXPECT_EQ(0, zmq_server.init_msg_server()); + sleep(1); + zmq_server.close_msg_server(); + } + } \ No newline at end of file From 1baadd9e707cd913217e2354bc64409ecbfb37de Mon Sep 17 00:00:00 2001 From: "Justin.Su" Date: Mon, 13 Apr 2020 14:04:03 +0800 Subject: [PATCH 38/74] add zmq test --- test/test_control_plane.sh | 13 ++++++++++ test/test_control_plane_client.py | 41 +++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 test/test_control_plane.sh create mode 100644 test/test_control_plane_client.py diff --git a/test/test_control_plane.sh b/test/test_control_plane.sh new file mode 100644 index 000000000..e6bd12b5a --- /dev/null +++ b/test/test_control_plane.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +NIC=$1 +if [ ! $1 ]; then + NIC='eth0' +fi + +../bin/pktminerg -i $NIC -r 172.16.14.249 --control 5556 & +sleep 10 +python test_control_plane_client.py +sleep 10 +killall pktminerg + diff --git a/test/test_control_plane_client.py b/test/test_control_plane_client.py new file mode 100644 index 000000000..0835650ff --- /dev/null +++ b/test/test_control_plane_client.py @@ -0,0 +1,41 @@ +#!/bin/env python +# -*- coding: utf-8 -*- + + +import zmq +import time +from struct import pack, unpack, calcsize +from docopt import docopt +from IPy import IP + + + + +PKT_SERVER = 'tcp://127.0.0.1:5556' +TIME_OUT = 5000 + +DIAG_TYPE_SLICE = 0 +DIAG_TYPE_FILTER = 1 +#DIAG_TYPE_DEEP_SLICE = 2 +DIAG_TYPE_BTR = 3 + +# msg_item = self.msg_map["%s_%s" % (self._opt, self._msg_operand)] +message = pack('=iiii', 0x504D3230, 0x10, + 0x0001, + 0x0f0f) +socket = zmq.Context().socket(zmq.REQ) +socket.setsockopt(zmq.LINGER, 0) +poll_obj = zmq.Poller() +poll_obj.register(socket, zmq.POLLIN) +socket.connect(PKT_SERVER) +socket.send(message) +event = dict(poll_obj.poll(TIME_OUT)) +ret = (0x504D3230, 0x0C, 0xFFFF, 0x0) +if event.get(socket) == zmq.POLLIN : + response = socket.recv() + ret = unpack('=iiiiiiiiiiii', + response[0: 48]) + +print ret +socket.close() + From ee0df65c1711f496b11cccdc782c53b370642d74 Mon Sep 17 00:00:00 2001 From: "Justin.Su" Date: Mon, 13 Apr 2020 17:30:34 +0800 Subject: [PATCH 39/74] change to static link and check if update status --- CMakeLists.txt | 2 +- src/pcaphandler.cpp | 8 ++++++-- src/pcaphandler.h | 2 ++ src/pktminerg.cpp | 6 ++++-- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 21c4ee78e..9990f0471 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -243,7 +243,7 @@ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE) if(UNIX) set(PCAP_LIB pcap) set(BOOST_LIB boost_program_options.a boost_system.a boost_filesystem.a) - set(ZMQ_LIB cppzmq) + set(ZMQ_LIB cppzmq-static) else() set(PCAP_LIB wpcap Packet) set(SOCKET_LIB ws2_32) diff --git a/src/pcaphandler.cpp b/src/pcaphandler.cpp index 4c88fbdfd..4c90d7d34 100644 --- a/src/pcaphandler.cpp +++ b/src/pcaphandler.cpp @@ -10,6 +10,7 @@ PcapHandler::PcapHandler() { _gre_drop_count = 0; _pcap_handle = NULL; _pcap_dumpter = NULL; + _need_update_status = 0; std::memset(_errbuf, 0, sizeof(_errbuf)); } @@ -71,9 +72,10 @@ void PcapHandler::packetHandler(const struct pcap_pkthdr* header, const uint8_t* } _statislog->logSendStatis((uint64_t) (header->ts.tv_sec), header->caplen, _gre_count, _gre_drop_count, 0, _pcap_handle); - - AgentStatus::get_instance()->update_capture_status((uint64_t) (header->ts.tv_sec), header->caplen, + if (_need_update_status) { + AgentStatus::get_instance()->update_capture_status((uint64_t) (header->ts.tv_sec), header->caplen, _gre_count, _gre_drop_count, _pcap_handle); + } } void PcapHandler::addExport(std::shared_ptr pcapExport) { @@ -117,6 +119,7 @@ int PcapOfflineHandler::openPcap(const std::string& dev, const pcap_init_t& para auto pcapGuard = MakeGuard([pcap_handle]() { pcap_close(pcap_handle); }); + _need_update_status = param.need_update_status; if (dumpfile) { if (openPcapDumper(pcap_handle) != 0) { @@ -135,6 +138,7 @@ int PcapLiveHandler::openPcap(const std::string& dev, const pcap_init_t& param, struct bpf_program filter; bpf_u_int32 mask = 0; bpf_u_int32 net = 0; + _need_update_status = param.need_update_status; pcap_t* pcap_handle = pcap_create(dev.c_str(), _errbuf); if (!pcap_handle) { diff --git a/src/pcaphandler.h b/src/pcaphandler.h index f283dca02..a3f99e51d 100644 --- a/src/pcaphandler.h +++ b/src/pcaphandler.h @@ -12,6 +12,7 @@ typedef struct PcapInit { int timeout; int promisc; int buffer_size; + int need_update_status; } pcap_init_t; class PcapHandler { @@ -23,6 +24,7 @@ class PcapHandler { std::shared_ptr _statislog; uint64_t _gre_count; uint64_t _gre_drop_count; + int _need_update_status; protected: int openPcapDumper(pcap_t *pcap_handle); void closePcapDumper(); diff --git a/src/pktminerg.cpp b/src/pktminerg.cpp index b939b09c6..edd0ee7fc 100644 --- a/src/pktminerg.cpp +++ b/src/pktminerg.cpp @@ -95,6 +95,7 @@ int main(int argc, const char* argv[]) { } int pmtudisc = -1; + int update_status = 0; #ifdef WIN32 //TODO: support pmtudisc_option on WIN32 #else @@ -112,12 +113,12 @@ int main(int argc, const char* argv[]) { return 1; } } - std::shared_ptr agent_control_plane; if (vm.count("control")) { const auto daemon_zmq_port = vm["control"].as(); agent_control_plane = std::make_shared(daemon_zmq_port); - agent_control_plane->init_msg_server(); + agent_control_plane->init_msg_server(); + update_status = 1; } #endif // WIN32 @@ -186,6 +187,7 @@ int main(int argc, const char* argv[]) { param.snaplen = vm["snaplen"].as(); param.promisc = 0; param.timeout = vm["timeout"].as() * 1000; + param.need_update_status = update_status; int nCount = vm["count"].as(); if (nCount < 0) { nCount = 0; From 156a7aa65c81ef9624d5b57cf1829c0809357ad3 Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Wed, 15 Apr 2020 18:18:44 +0800 Subject: [PATCH 40/74] multi-process recvzmq --- scripts/recvzmq.py | 327 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 293 insertions(+), 34 deletions(-) diff --git a/scripts/recvzmq.py b/scripts/recvzmq.py index bdcb54371..1ee46b6c8 100755 --- a/scripts/recvzmq.py +++ b/scripts/recvzmq.py @@ -1,6 +1,8 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import print_function +from collections import deque +from multiprocessing import Process import zmq import time import struct @@ -8,8 +10,9 @@ import os import getopt import traceback +import threading -grekey_file_dict = {} +grekey_file_info = None def eprint(*args, **kwargs): print(*args, file=sys.stderr, **kwargs) @@ -54,7 +57,7 @@ def construct_pkt_bytes(ts_sec, ts_usec, caplen, length, keybit, pkt_data_len, p return pkt_bytes -def create_pcap(config, keybit, ts_sec, suffix_id): +def create_pcap(config, ts_sec, suffix_id): cur_time = time.localtime(ts_sec) file_path_str = time.strftime(config["file_template"], cur_time) file_path = "%s_%d_%d"%(file_path_str, config["total_clients"], suffix_id) @@ -63,7 +66,7 @@ def create_pcap(config, keybit, ts_sec, suffix_id): os.makedirs(directory) if os.path.exists(file_path): os.remove(file_path) - print("Open new file: %s"%file_path) + #print("Open new file: %s"%file_path) pcap_file = open(file_path, 'a+b') pcap_file.write(pcap_global_header()) return pcap_file @@ -73,57 +76,315 @@ def get_base_ts(ts_sec, span_time): return (ts_sec // span_time) * span_time -def get_pcapfile(config, keybit, ts_sec): +def get_pcapfile(config, ts_sec): pcap_file = None span_time = config["span_time"] - global grekey_file_dict - if keybit in grekey_file_dict: - suffix_id, pcap_ts, pcap_file = grekey_file_dict[keybit] + global grekey_file_info + if grekey_file_info != None: + (suffix_id, pcap_ts, pcap_file) = grekey_file_info if (ts_sec // span_time) != (pcap_ts // span_time): pcap_file.close() file_path = os.path.abspath(pcap_file.name) target_path = file_path + ".pcap" - print("Rename file to: %s"%target_path) + #print("Rename file to: %s"%target_path) os.rename(file_path, target_path) - pcap_file = create_pcap(config, keybit, get_base_ts(ts_sec, span_time), suffix_id) - grekey_file_dict[keybit] = (suffix_id, get_base_ts(ts_sec, span_time), pcap_file) + pcap_file = create_pcap(config, get_base_ts(ts_sec, span_time), suffix_id) + grekey_file_info = (suffix_id, get_base_ts(ts_sec, span_time), pcap_file) else: - suffix_id = len(grekey_file_dict) + config["base_suffixid"] - pcap_file = create_pcap(config, keybit, get_base_ts(ts_sec, span_time), suffix_id) - grekey_file_dict[keybit] = (suffix_id, get_base_ts(ts_sec, span_time), pcap_file) + suffix_id = config["base_suffixid"] + pcap_file = create_pcap(config, get_base_ts(ts_sec, span_time), suffix_id) + grekey_file_info = (suffix_id, get_base_ts(ts_sec, span_time), pcap_file) return pcap_file -def parse_message(config, message): - header_size = 8 - version, pkt_num, keybit = struct.unpack(">HHI", message[:header_size]) - #print("%d %d %d %d"%(version, pkt_num, keybit, len(message))) - pkt_pos = header_size - for i in range(pkt_num): - pkt_data_len, ts_sec, ts_usec, caplen, length = struct.unpack(">HIIII", message[pkt_pos:pkt_pos+18]) - pkt_pos += 18 - pkt_data = message[pkt_pos : pkt_pos + pkt_data_len] - pkt_bytes = construct_pkt_bytes(ts_sec, ts_usec, caplen, length, keybit, pkt_data_len, pkt_data) - pcapfile = get_pcapfile(config, keybit, ts_sec) - pcapfile.write(pkt_bytes) - pkt_pos += pkt_data_len +class BatchPktsHandler(threading.Thread): + def __init__(self, config): + threading.Thread.__init__(self) -def server_loop(config): + self.PKT_EVICT_TS_TIMEOUT = 5 + self.PKT_EVICT_INTERVAL = 1 + self.PKT_EVICT_BUFF_SIZE = 1024*1024 + + self.config = config + self.first_msg_realworld_time = 0 + self.first_pkt_realworld_time = 0 + self.first_pkt_ts_time = 0 + self.last_heartbeat_ts = 0 + self.evict_num = 0 + self.pkt_evict_ts_checkpoint = 0 + self.msg_dict = {} + self.evict_pkts_list = [] + self.export_bytearray = bytearray(self.PKT_EVICT_BUFF_SIZE) + self.export_bytearray_pos = 0 + self.total_drop_pkts = 0 + + self.export_cond = threading.Condition() + self.export_queue = deque() + self.exitFlag = False + + + def unpack_msgpkts_to_evict(self, message): + header_size = 8 + timeout_drop_pkts = 0 + version, pkt_num, keybit = struct.unpack(">HHI", message[:header_size]) + pkt_pos = header_size + for j in range(pkt_num): + pkt_data_len, ts_sec, ts_usec, caplen, length = struct.unpack(">HIIII", message[pkt_pos:pkt_pos+18]) + pkt_pos += 18 + if ts_sec < self.pkt_evict_ts_checkpoint: + if j == 0 and ts_sec + 1 < self.pkt_evict_ts_checkpoint: # hack: rely on pktg msg batch max timeout 1s + timeout_drop_pkts = pkt_num + break + timeout_drop_pkts += 1 + else: + pkt_data = message[pkt_pos : pkt_pos + pkt_data_len] + pkt_info = (ts_sec*1000000 + ts_usec, caplen, length, keybit, pkt_data_len, pkt_data) + self.evict_pkts_list.append(pkt_info) + pkt_pos += pkt_data_len + self.total_drop_pkts += timeout_drop_pkts + return timeout_drop_pkts + + + def construct_pkt_bytes(self, ts_sec, ts_usec, caplen, length, keybit, pkt_data_len, pkt_data): + gre_eth_hdr_len = 14 + gre_ip_hdr_len = 20 + gre_hdr_len = 8 + checksum = 0xffff + gre_caplen = gre_eth_hdr_len + gre_ip_hdr_len + gre_hdr_len + pkt_data_len + gre_length = gre_caplen + if length > caplen: + gre_length = gre_eth_hdr_len + gre_ip_hdr_len + gre_hdr_len + length + + struct.pack_into("HIHIBB", self.export_bytearray, self.export_bytearray_pos, 0,0,0,0, 0x08, 0x00) + self.export_bytearray_pos += gre_eth_hdr_len + struct.pack_into(">BBHHBBBBHII", self.export_bytearray, self.export_bytearray_pos, 0x45, 0, gre_ip_hdr_len + gre_hdr_len + pkt_data_len, + 0, 0x40, 0, 0x40, 0x2f, checksum, 0x7F000001, 0x7F000001) + self.export_bytearray_pos += gre_ip_hdr_len + struct.pack_into(">HHI", self.export_bytearray, self.export_bytearray_pos, 0x2000, 0x6558, keybit) + self.export_bytearray_pos += gre_hdr_len + if pkt_data_len > 0: + struct.pack_into("!%ds"%(pkt_data_len), self.export_bytearray, self.export_bytearray_pos, pkt_data) + self.export_bytearray_pos += pkt_data_len + + buff_is_full = False + if self.export_bytearray_pos >= self.PKT_EVICT_BUFF_SIZE - 65536: + buff_is_full = True + return buff_is_full + + + def write_buf_to_pcap(self, pcapfile): + pcapfile.write(self.export_bytearray[:self.export_bytearray_pos]) + self.export_bytearray_pos = 0 + + + def stop_running(self): + self.exitFlag = True + self.export_cond.acquire() + self.export_cond.notify() + self.export_cond.release() + + def run(self): + while not self.exitFlag: + pkts_list = [] + self.export_cond.acquire() + while len(self.export_queue) == 0: # q is empty + self.export_cond.wait() + if self.exitFlag: + return + pkts_list = self.export_queue.popleft() + self.export_cond.release() + + span_time = self.config["span_time"] + global grekey_file_info + # export to pcap + for p in pkts_list: + (ts_sec_and_usec, caplen, length, keybit, pkt_data_len, pkt_data) = p + ts_sec = ts_sec_and_usec / 1000000 + ts_usec = ts_sec_and_usec % 1000000 + if grekey_file_info != None: + suffix_id, pcap_ts, pcapfile = grekey_file_info + if (ts_sec // span_time) != (pcap_ts // span_time): # need to rotate to new pcap file + self.write_buf_to_pcap(pcapfile) + pcapfile = get_pcapfile(self.config, ts_sec) + else: + pcapfile = get_pcapfile(self.config, ts_sec) + buff_is_full = self.construct_pkt_bytes(ts_sec, ts_usec, caplen, length, keybit, pkt_data_len, pkt_data) + if buff_is_full: + pcapfile = get_pcapfile(self.config, ts_sec) + self.write_buf_to_pcap(pcapfile) + + + def producer_fillqueue_sync(self, pkts_list): + qfull_drop_pkts = 0 + + self.export_cond.acquire() + if len(self.export_queue) >= 30: + qfull_drop_pkts = len(pkts_list) + self.total_drop_pkts += qfull_drop_pkts + else: + self.export_queue.append(pkts_list) + self.export_cond.notify() + self.export_cond.release() + + return qfull_drop_pkts + + def sort_and_export_pkts(self): + self.evict_pkts_list.sort(key=lambda x: x[0]) + if self.pkt_evict_ts_checkpoint == 0: + self.pkt_evict_ts_checkpoint = self.first_pkt_ts_time + self.PKT_EVICT_INTERVAL - self.PKT_EVICT_TS_TIMEOUT + else: + self.pkt_evict_ts_checkpoint += self.PKT_EVICT_INTERVAL + pkts_list = [] + pkts_count = len(self.evict_pkts_list) + lasti = 0 + while lasti < pkts_count: + p = self.evict_pkts_list[lasti] + ts_sec = p[0] / 1000000 + if ts_sec >= self.pkt_evict_ts_checkpoint: + break + lasti += 1 + pkts_list = self.evict_pkts_list[:lasti] + if lasti > 0: + self.evict_pkts_list = self.evict_pkts_list[lasti:] + + qfull_drop_pkts = 0 + export_queue_len = len(self.export_queue) + export_pkts_count = len(pkts_list) + left_pkts_count = len(self.evict_pkts_list) + if pkts_list: + qfull_drop_pkts= self.producer_fillqueue_sync(pkts_list) + return qfull_drop_pkts, export_pkts_count, left_pkts_count, export_queue_len + + + def evict_pkts(self): + self.evict_num += 1 + if self.first_pkt_ts_time == 0: + return + timeout_drop_pkts = 0 + evicted_msg_count = 0 + total_msg_count = 0 + to_del_ts = [] + for ts, msg_list in self.msg_dict.items(): + total_msg_count += len(msg_list) + if ts < self.pkt_evict_ts_checkpoint + self.PKT_EVICT_INTERVAL: #TODO: diff + evicted_msg_count += len(msg_list) + for msg in msg_list: + timeout_drop_pkts += self.unpack_msgpkts_to_evict(msg) + to_del_ts.append(ts) + for ts in to_del_ts: + del self.msg_dict[ts] + qfull_drop_pkts, export_pkts_count, left_pkts_count, export_queue_len = self.sort_and_export_pkts() + print("Msg %d/%d evicted, exportPkts/leftPkts: %d/%d, timeout/qfull/totalDropPkts: %d/%d/%d, queueLen: %d"%( + evicted_msg_count, total_msg_count, export_pkts_count, left_pkts_count, + timeout_drop_pkts, qfull_drop_pkts, self.total_drop_pkts, export_queue_len)) + + + def gen_heartbeat(self, realworld_time): + if self.first_pkt_ts_time != 0: + if self.last_heartbeat_ts == 0: + self.last_heartbeat_ts = self.first_pkt_ts_time + expect_count = realworld_time - self.first_pkt_realworld_time + count = self.last_heartbeat_ts - self.first_pkt_ts_time + while count < expect_count: + self.last_heartbeat_ts += 1 + pkt_info = (self.last_heartbeat_ts*1000000, 0, 0, 0, 0, []) + self.evict_pkts_list.append(pkt_info) + count += 1 + + + def parse_message(self, message): + header_size = 8 + realworld_time_sec_and_usec = int(round(time.time()*1000000)) + realworld_time = realworld_time_sec_and_usec / 1000000 + if self.first_msg_realworld_time == 0: + self.first_msg_realworld_time = realworld_time + if message is not None: + version, pkt_num, keybit = struct.unpack(">HHI", message[:header_size]) + if version != 1: + return + pkt_pos = header_size + if pkt_num > 0: + pkt_data_len, pkt_ts_time = struct.unpack(">HI", message[pkt_pos:pkt_pos+6]) + if self.first_pkt_ts_time == 0: + self.first_pkt_realworld_time = realworld_time + self.first_pkt_ts_time = pkt_ts_time + print("first_pkt_realworld_time: %d, first_pkt_ts_time: %d"%(realworld_time, self.first_pkt_ts_time)) + if pkt_ts_time in self.msg_dict: + self.msg_dict[pkt_ts_time].append(message) + else: + self.msg_dict[pkt_ts_time] = [message] + self.gen_heartbeat(realworld_time) + if realworld_time >= self.first_msg_realworld_time + self.PKT_EVICT_INTERVAL * (self.evict_num + 1): + self.evict_pkts() + + +def recv_msg_to_parse(batch_pkts_handler, socket): + message = None + try: + message = socket.recv() + except zmq.error.Again as _e: + pass + batch_pkts_handler.parse_message(message) + +def server_loop_imp(config): context = zmq.Context() socket = context.socket(zmq.PULL) - socket.setsockopt(zmq.SNDHWM, 2000) + socket.setsockopt(zmq.RCVTIMEO, 1000) socket.bind("tcp://*:%d"%(config["zmq_port"])) + #socket.connect("tcp://127.0.0.1:%d"%(config["zmq_port"])) + batch_pkts_handler = BatchPktsHandler(config) + batch_pkts_handler.start() + while True: + try: + recv_msg_to_parse(batch_pkts_handler, socket) + except KeyboardInterrupt: + eprint("KeyboardInterrupt") + batch_pkts_handler.stop_running() + batch_pkts_handler.join() + raise + except Exception as e: + eprint(e) + track = traceback.format_exc() + eprint(track) + except struct.error as se: + eprint(se) + except: + eprint("Unexpected error") + + +def server_loop(port, file_template, span_time, total_clients, base_suffixid): + config = { "zmq_port": port, "file_template": file_template, "span_time": span_time, + "total_clients": total_clients, "base_suffixid": base_suffixid } + server_loop_imp(config) + + +def dispatch_loop(config): + context = zmq.Context() + front_socket = context.socket(zmq.PULL) + front_socket.bind("tcp://*:%d"%(config["zmq_port"])) + + backend_port = config["zmq_port"] + 1 + backend_socket = context.socket(zmq.PUSH) + backend_socket.bind("tcp://127.0.0.1:%d"%(backend_port)) + for i in range(config["total_clients"]): + Process(target=server_loop, args=(backend_port, config["file_template"], config["span_time"], config["total_clients"], i)).start() + while True: try: - message = socket.recv() - parse_message(config, message) + message = front_socket.recv() + backend_socket.send(message) except KeyboardInterrupt: + eprint("KeyboardInterrupt") raise except Exception as e: eprint(e) track = traceback.format_exc() eprint(track) + except: + eprint("Unexpected error") def usage(): @@ -134,9 +395,6 @@ def usage(): -t or --file_template:\tfile template. Examle: /opt/pcap_cache/nic0/%Y%m%d%H%M%S -s or --span_time:\tpcap span time interval. Default: 10, Unit: seconds. -a or --total_clients:\ttotal clients count of all recvzmq processes. Default 1. --b or --base_suffixid:\tpcap file name suffix id will start from this base id. Default 0. Example: 0 -\t\t\twhen start multi-process of recvzmq. Their [total_clients, base_suffixid] params should be arranged properly. -\t\t\tFor example, total_clients: 8, with 4 recvzmq processes, each of the above process param should be [8, 0], [8, 2], [8, 4], [8, 6] -v or --version:\tversion info -h or --help:\t\thelp message """) @@ -179,5 +437,6 @@ def parse_args(cfg_dict): config = {"span_time": 10, "total_clients": 1, "base_suffixid": 0} parse_args(config) -server_loop(config) +#dispatch_loop(config) +server_loop_imp(config) From 3877c5bd08bafe22815c5f9b5edde2ebbb329f93 Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Thu, 16 Apr 2020 17:36:01 +0800 Subject: [PATCH 41/74] improve multi-process recvzmq: handle exit --- scripts/recvzmq.py | 151 +++++++++++++++++++++++++++++++-------------- 1 file changed, 106 insertions(+), 45 deletions(-) diff --git a/scripts/recvzmq.py b/scripts/recvzmq.py index 1ee46b6c8..2a3448538 100755 --- a/scripts/recvzmq.py +++ b/scripts/recvzmq.py @@ -60,7 +60,7 @@ def construct_pkt_bytes(ts_sec, ts_usec, caplen, length, keybit, pkt_data_len, p def create_pcap(config, ts_sec, suffix_id): cur_time = time.localtime(ts_sec) file_path_str = time.strftime(config["file_template"], cur_time) - file_path = "%s_%d_%d"%(file_path_str, config["total_clients"], suffix_id) + file_path = "%s_%d_%d"%(file_path_str, config["total_workers"], suffix_id) directory = os.path.dirname(file_path) if not os.path.exists(directory): os.makedirs(directory) @@ -96,6 +96,8 @@ def get_pcapfile(config, ts_sec): grekey_file_info = (suffix_id, get_base_ts(ts_sec, span_time), pcap_file) return pcap_file +def takeFirst(elem): + return elem[0] class BatchPktsHandler(threading.Thread): @@ -186,35 +188,51 @@ def stop_running(self): self.export_cond.notify() self.export_cond.release() + def run(self): while not self.exitFlag: - pkts_list = [] - self.export_cond.acquire() + try: + self.process_data() + except Exception as e: + eprint("id: %d, %s"%(self.config["base_suffixid"], e)) + track = traceback.format_exc() + eprint(track) + sys.exit(-1) + except: + eprint("id: %d, thread unexpected error"%(self.config["base_suffixid"])) + sys.exit(-1) + + + def process_data(self): + pkts_list = [] + self.export_cond.acquire() + try: while len(self.export_queue) == 0: # q is empty self.export_cond.wait() if self.exitFlag: return pkts_list = self.export_queue.popleft() + finally: self.export_cond.release() - span_time = self.config["span_time"] - global grekey_file_info - # export to pcap - for p in pkts_list: - (ts_sec_and_usec, caplen, length, keybit, pkt_data_len, pkt_data) = p - ts_sec = ts_sec_and_usec / 1000000 - ts_usec = ts_sec_and_usec % 1000000 - if grekey_file_info != None: - suffix_id, pcap_ts, pcapfile = grekey_file_info - if (ts_sec // span_time) != (pcap_ts // span_time): # need to rotate to new pcap file - self.write_buf_to_pcap(pcapfile) - pcapfile = get_pcapfile(self.config, ts_sec) - else: - pcapfile = get_pcapfile(self.config, ts_sec) - buff_is_full = self.construct_pkt_bytes(ts_sec, ts_usec, caplen, length, keybit, pkt_data_len, pkt_data) - if buff_is_full: - pcapfile = get_pcapfile(self.config, ts_sec) + span_time = self.config["span_time"] + global grekey_file_info + # export to pcap + for p in pkts_list: + (ts_sec_and_usec, caplen, length, keybit, pkt_data_len, pkt_data) = p + ts_sec = ts_sec_and_usec / 1000000 + ts_usec = ts_sec_and_usec % 1000000 + if grekey_file_info != None: + suffix_id, pcap_ts, pcapfile = grekey_file_info + if (ts_sec // span_time) != (pcap_ts // span_time): # need to rotate to new pcap file self.write_buf_to_pcap(pcapfile) + pcapfile = get_pcapfile(self.config, ts_sec) + else: + pcapfile = get_pcapfile(self.config, ts_sec) + buff_is_full = self.construct_pkt_bytes(ts_sec, ts_usec, caplen, length, keybit, pkt_data_len, pkt_data) + if buff_is_full: + pcapfile = get_pcapfile(self.config, ts_sec) + self.write_buf_to_pcap(pcapfile) def producer_fillqueue_sync(self, pkts_list): @@ -231,8 +249,9 @@ def producer_fillqueue_sync(self, pkts_list): return qfull_drop_pkts + def sort_and_export_pkts(self): - self.evict_pkts_list.sort(key=lambda x: x[0]) + self.evict_pkts_list.sort(key=takeFirst) if self.pkt_evict_ts_checkpoint == 0: self.pkt_evict_ts_checkpoint = self.first_pkt_ts_time + self.PKT_EVICT_INTERVAL - self.PKT_EVICT_TS_TIMEOUT else: @@ -259,7 +278,7 @@ def sort_and_export_pkts(self): return qfull_drop_pkts, export_pkts_count, left_pkts_count, export_queue_len - def evict_pkts(self): + def evict_pkts(self, realworld_time_sec_and_usec): self.evict_num += 1 if self.first_pkt_ts_time == 0: return @@ -277,9 +296,11 @@ def evict_pkts(self): for ts in to_del_ts: del self.msg_dict[ts] qfull_drop_pkts, export_pkts_count, left_pkts_count, export_queue_len = self.sort_and_export_pkts() - print("Msg %d/%d evicted, exportPkts/leftPkts: %d/%d, timeout/qfull/totalDropPkts: %d/%d/%d, queueLen: %d"%( - evicted_msg_count, total_msg_count, export_pkts_count, left_pkts_count, - timeout_drop_pkts, qfull_drop_pkts, self.total_drop_pkts, export_queue_len)) + now = time.time() + nowstr = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(now)) + print("[%s] id: %d, used: %.2fs, msg %d/%d evicted, exportPkts/leftPkts: %d/%d, timeout/qfull/totalDropPkts: %d/%d/%d, queueLen: %d"%( + nowstr, self.config["base_suffixid"], now - realworld_time_sec_and_usec, evicted_msg_count, total_msg_count, + export_pkts_count, left_pkts_count, timeout_drop_pkts, qfull_drop_pkts, self.total_drop_pkts, export_queue_len)) def gen_heartbeat(self, realworld_time): @@ -297,8 +318,8 @@ def gen_heartbeat(self, realworld_time): def parse_message(self, message): header_size = 8 - realworld_time_sec_and_usec = int(round(time.time()*1000000)) - realworld_time = realworld_time_sec_and_usec / 1000000 + realworld_time_sec_and_usec = time.time() + realworld_time = int(realworld_time_sec_and_usec) if self.first_msg_realworld_time == 0: self.first_msg_realworld_time = realworld_time if message is not None: @@ -318,7 +339,7 @@ def parse_message(self, message): self.msg_dict[pkt_ts_time] = [message] self.gen_heartbeat(realworld_time) if realworld_time >= self.first_msg_realworld_time + self.PKT_EVICT_INTERVAL * (self.evict_num + 1): - self.evict_pkts() + self.evict_pkts(realworld_time_sec_and_usec) def recv_msg_to_parse(batch_pkts_handler, socket): @@ -333,13 +354,18 @@ def server_loop_imp(config): context = zmq.Context() socket = context.socket(zmq.PULL) socket.setsockopt(zmq.RCVTIMEO, 1000) - socket.bind("tcp://*:%d"%(config["zmq_port"])) - #socket.connect("tcp://127.0.0.1:%d"%(config["zmq_port"])) + if config["total_workers"] == 1: + socket.bind("tcp://*:%d"%(config["zmq_port"])) + else: + socket.connect("tcp://127.0.0.1:%d"%(config["zmq_port"])) batch_pkts_handler = BatchPktsHandler(config) batch_pkts_handler.start() while True: try: recv_msg_to_parse(batch_pkts_handler, socket) + if not batch_pkts_handler.isAlive(): + eprint('id: ' + str(config['base_suffixid']) + ' Fatal error: child thread exited') + sys.exit(-1) except KeyboardInterrupt: eprint("KeyboardInterrupt") batch_pkts_handler.stop_running() @@ -349,33 +375,64 @@ def server_loop_imp(config): eprint(e) track = traceback.format_exc() eprint(track) + raise except struct.error as se: eprint(se) except: eprint("Unexpected error") + raise -def server_loop(port, file_template, span_time, total_clients, base_suffixid): +def server_loop(port, file_template, span_time, total_workers, base_suffixid): config = { "zmq_port": port, "file_template": file_template, "span_time": span_time, - "total_clients": total_clients, "base_suffixid": base_suffixid } + "total_workers": total_workers, "base_suffixid": base_suffixid } server_loop_imp(config) +def check_need_terminate(workers): + need_term = False + for w in workers: + if not w.is_alive(): + need_term = True + if need_term: + eprint("Fatal error: at least one worker process exited") + for w in workers: + if w.is_alive(): + w.terminate() + sys.exit(-1) + + def dispatch_loop(config): context = zmq.Context() front_socket = context.socket(zmq.PULL) + front_socket.setsockopt(zmq.RCVTIMEO, 2000) front_socket.bind("tcp://*:%d"%(config["zmq_port"])) backend_port = config["zmq_port"] + 1 backend_socket = context.socket(zmq.PUSH) + backend_socket.setsockopt(zmq.SNDTIMEO, 2000) backend_socket.bind("tcp://127.0.0.1:%d"%(backend_port)) - for i in range(config["total_clients"]): - Process(target=server_loop, args=(backend_port, config["file_template"], config["span_time"], config["total_clients"], i)).start() + workers = [] + for i in range(config["total_workers"]): + w = Process(target=server_loop, args=(backend_port, config["file_template"], config["span_time"], config["total_workers"], i)) + workers.append(w) + w.start() while True: try: - message = front_socket.recv() - backend_socket.send(message) + message = None + try: + message = front_socket.recv() + except zmq.error.Again: + check_need_terminate(workers) + if message is None: + continue + while True: + try: + backend_socket.send(message) + except zmq.error.Again as _e: + check_need_terminate(workers) + break except KeyboardInterrupt: eprint("KeyboardInterrupt") raise @@ -383,8 +440,10 @@ def dispatch_loop(config): eprint(e) track = traceback.format_exc() eprint(track) + raise except: eprint("Unexpected error") + raise def usage(): @@ -393,8 +452,8 @@ def usage(): python recvzmq.py [--span_time seconds] -z port_num -t /path/file_template -z or --zmq_port:\tzmq bind port -t or --file_template:\tfile template. Examle: /opt/pcap_cache/nic0/%Y%m%d%H%M%S --s or --span_time:\tpcap span time interval. Default: 10, Unit: seconds. --a or --total_clients:\ttotal clients count of all recvzmq processes. Default 1. +-s or --span_time:\tpcap span time interval. Default: 15, Unit: seconds. +-a or --total_workers:\ttotal worker process count of recvzmq. Default 1. -v or --version:\tversion info -h or --help:\t\thelp message """) @@ -406,7 +465,7 @@ def parse_args(cfg_dict): sys.exit() try: options, args = getopt.getopt(sys.argv[1:], "hvz:t:s:a:b:", - ["help", "version", "zmq_port=", "file_template=", "span_time=", "total_clients=", "base_suffixid="]) + ["help", "version", "zmq_port=", "file_template=", "span_time=", "total_workers=", "base_suffixid="]) except getopt.GetoptError as e: eprint(e) sys.exit(-1) @@ -416,7 +475,7 @@ def parse_args(cfg_dict): usage() sys.exit() elif name in ("-v", "--version"): - print('recvzmq version 1.1.0') + print('recvzmq version 1.2.0') sys.exit() elif name in ("-z", "--zmq_port"): cfg_dict["zmq_port"] = int(value) @@ -424,8 +483,8 @@ def parse_args(cfg_dict): cfg_dict["file_template"] = value elif name in ("-s", "--span_time"): cfg_dict["span_time"] = int(value) - elif name in ("-a", "--total_clients"): - cfg_dict["total_clients"] = int(value) + elif name in ("-a", "--total_workers"): + cfg_dict["total_workers"] = int(value) elif name in ("-b", "--base_suffixid"): cfg_dict["base_suffixid"] = int(value) if "zmq_port" not in cfg_dict: @@ -435,8 +494,10 @@ def parse_args(cfg_dict): eprint("require param: -t /path/file_template/%Y%m%d/%Y%m%d%H/%Y%m%d%H%M%S") sys.exit(-1) -config = {"span_time": 10, "total_clients": 1, "base_suffixid": 0} +config = {"span_time": 15, "total_workers": 1, "base_suffixid": 0} parse_args(config) -#dispatch_loop(config) -server_loop_imp(config) +if config["total_workers"] == 1: + server_loop_imp(config) +else: + dispatch_loop(config) From 0d88406fd334440d63329152dc061d2ca4252e97 Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Thu, 16 Apr 2020 18:07:58 +0800 Subject: [PATCH 42/74] gen heartbeat packets for DP --- scripts/recvzmq.py | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/scripts/recvzmq.py b/scripts/recvzmq.py index 2a3448538..fcdfa61d9 100755 --- a/scripts/recvzmq.py +++ b/scripts/recvzmq.py @@ -158,18 +158,26 @@ def construct_pkt_bytes(self, ts_sec, ts_usec, caplen, length, keybit, pkt_data_ if length > caplen: gre_length = gre_eth_hdr_len + gre_ip_hdr_len + gre_hdr_len + length - struct.pack_into("HIHIBB", self.export_bytearray, self.export_bytearray_pos, 0,0,0,0, 0x08, 0x00) - self.export_bytearray_pos += gre_eth_hdr_len - struct.pack_into(">BBHHBBBBHII", self.export_bytearray, self.export_bytearray_pos, 0x45, 0, gre_ip_hdr_len + gre_hdr_len + pkt_data_len, - 0, 0x40, 0, 0x40, 0x2f, checksum, 0x7F000001, 0x7F000001) - self.export_bytearray_pos += gre_ip_hdr_len - struct.pack_into(">HHI", self.export_bytearray, self.export_bytearray_pos, 0x2000, 0x6558, keybit) - self.export_bytearray_pos += gre_hdr_len - if pkt_data_len > 0: - struct.pack_into("!%ds"%(pkt_data_len), self.export_bytearray, self.export_bytearray_pos, pkt_data) - self.export_bytearray_pos += pkt_data_len + if pkt_data_len == 0 and keybit == 0: + heartbeat_data_len = 4 + struct.pack_into("HIHIHI", self.export_bytearray, self.export_bytearray_pos, 0,0,0,0, 0xffff, 0) + self.export_bytearray_pos += gre_eth_hdr_len + heartbeat_data_len + else: + struct.pack_into("HIHIBB", self.export_bytearray, self.export_bytearray_pos, 0,0,0,0, 0x08, 0x00) + self.export_bytearray_pos += gre_eth_hdr_len + struct.pack_into(">BBHHBBBBHII", self.export_bytearray, self.export_bytearray_pos, 0x45, 0, gre_ip_hdr_len + gre_hdr_len + pkt_data_len, + 0, 0x40, 0, 0x40, 0x2f, checksum, 0x7F000001, 0x7F000001) + self.export_bytearray_pos += gre_ip_hdr_len + struct.pack_into(">HHI", self.export_bytearray, self.export_bytearray_pos, 0x2000, 0x6558, keybit) + self.export_bytearray_pos += gre_hdr_len + if pkt_data_len > 0: + struct.pack_into("!%ds"%(pkt_data_len), self.export_bytearray, self.export_bytearray_pos, pkt_data) + self.export_bytearray_pos += pkt_data_len buff_is_full = False if self.export_bytearray_pos >= self.PKT_EVICT_BUFF_SIZE - 65536: From a8aed7a8edcfae8143cb7b7cb04f9cfce72beb34 Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Fri, 17 Apr 2020 18:47:03 +0800 Subject: [PATCH 43/74] fix: if time elapses faster in agent side than recvzmq side, advance ts in recvzmq side --- scripts/recvzmq.py | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/scripts/recvzmq.py b/scripts/recvzmq.py index fcdfa61d9..f101b5622 100755 --- a/scripts/recvzmq.py +++ b/scripts/recvzmq.py @@ -104,7 +104,7 @@ class BatchPktsHandler(threading.Thread): def __init__(self, config): threading.Thread.__init__(self) - self.PKT_EVICT_TS_TIMEOUT = 5 + self.PKT_EVICT_TS_TIMEOUT = 7 self.PKT_EVICT_INTERVAL = 1 self.PKT_EVICT_BUFF_SIZE = 1024*1024 @@ -113,8 +113,10 @@ def __init__(self, config): self.first_pkt_realworld_time = 0 self.first_pkt_ts_time = 0 self.last_heartbeat_ts = 0 - self.evict_num = 0 + self.min_realworld_ts_pkt_ts_diff = 0 + self.new_realworld_ts_pkt_ts_diff = 0 self.pkt_evict_ts_checkpoint = 0 + self.evict_num = 0 self.msg_dict = {} self.evict_pkts_list = [] self.export_bytearray = bytearray(self.PKT_EVICT_BUFF_SIZE) @@ -247,7 +249,7 @@ def producer_fillqueue_sync(self, pkts_list): qfull_drop_pkts = 0 self.export_cond.acquire() - if len(self.export_queue) >= 30: + if len(self.export_queue) >= 20: qfull_drop_pkts = len(pkts_list) self.total_drop_pkts += qfull_drop_pkts else: @@ -263,7 +265,7 @@ def sort_and_export_pkts(self): if self.pkt_evict_ts_checkpoint == 0: self.pkt_evict_ts_checkpoint = self.first_pkt_ts_time + self.PKT_EVICT_INTERVAL - self.PKT_EVICT_TS_TIMEOUT else: - self.pkt_evict_ts_checkpoint += self.PKT_EVICT_INTERVAL + self.update_next_checkpoint() pkts_list = [] pkts_count = len(self.evict_pkts_list) lasti = 0 @@ -286,6 +288,20 @@ def sort_and_export_pkts(self): return qfull_drop_pkts, export_pkts_count, left_pkts_count, export_queue_len + def get_next_checkpoint(self): + ts_advance = 0 + if self.new_realworld_ts_pkt_ts_diff < self.min_realworld_ts_pkt_ts_diff: + ts_advance = self.min_realworld_ts_pkt_ts_diff - self.new_realworld_ts_pkt_ts_diff + return self.pkt_evict_ts_checkpoint + self.PKT_EVICT_INTERVAL + ts_advance + + + def update_next_checkpoint(self): + self.pkt_evict_ts_checkpoint = self.get_next_checkpoint() + if self.new_realworld_ts_pkt_ts_diff < self.min_realworld_ts_pkt_ts_diff: + print("id: %d, new min realworld pkt ts diff: %ds"%(self.config['base_suffixid'], self.new_realworld_ts_pkt_ts_diff)) + self.min_realworld_ts_pkt_ts_diff = self.new_realworld_ts_pkt_ts_diff + + def evict_pkts(self, realworld_time_sec_and_usec): self.evict_num += 1 if self.first_pkt_ts_time == 0: @@ -294,15 +310,17 @@ def evict_pkts(self, realworld_time_sec_and_usec): evicted_msg_count = 0 total_msg_count = 0 to_del_ts = [] + next_checkpoint = self.get_next_checkpoint() for ts, msg_list in self.msg_dict.items(): total_msg_count += len(msg_list) - if ts < self.pkt_evict_ts_checkpoint + self.PKT_EVICT_INTERVAL: #TODO: diff + if ts < next_checkpoint: evicted_msg_count += len(msg_list) for msg in msg_list: timeout_drop_pkts += self.unpack_msgpkts_to_evict(msg) to_del_ts.append(ts) for ts in to_del_ts: del self.msg_dict[ts] + self.gen_heartbeat() qfull_drop_pkts, export_pkts_count, left_pkts_count, export_queue_len = self.sort_and_export_pkts() now = time.time() nowstr = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(now)) @@ -311,17 +329,15 @@ def evict_pkts(self, realworld_time_sec_and_usec): export_pkts_count, left_pkts_count, timeout_drop_pkts, qfull_drop_pkts, self.total_drop_pkts, export_queue_len)) - def gen_heartbeat(self, realworld_time): + def gen_heartbeat(self): if self.first_pkt_ts_time != 0: if self.last_heartbeat_ts == 0: self.last_heartbeat_ts = self.first_pkt_ts_time - expect_count = realworld_time - self.first_pkt_realworld_time - count = self.last_heartbeat_ts - self.first_pkt_ts_time - while count < expect_count: + next_checkpoint = self.get_next_checkpoint() + while self.last_heartbeat_ts < next_checkpoint: self.last_heartbeat_ts += 1 pkt_info = (self.last_heartbeat_ts*1000000, 0, 0, 0, 0, []) self.evict_pkts_list.append(pkt_info) - count += 1 def parse_message(self, message): @@ -340,12 +356,13 @@ def parse_message(self, message): if self.first_pkt_ts_time == 0: self.first_pkt_realworld_time = realworld_time self.first_pkt_ts_time = pkt_ts_time - print("first_pkt_realworld_time: %d, first_pkt_ts_time: %d"%(realworld_time, self.first_pkt_ts_time)) + self.min_realworld_ts_pkt_ts_diff = realworld_time - pkt_ts_time + print("first_pkt_realworld_time: %d, first_pkt_ts_time: %d, diff: %ds"%(realworld_time, self.first_pkt_ts_time, self.min_realworld_ts_pkt_ts_diff)) + self.new_realworld_ts_pkt_ts_diff = realworld_time - pkt_ts_time if pkt_ts_time in self.msg_dict: self.msg_dict[pkt_ts_time].append(message) else: self.msg_dict[pkt_ts_time] = [message] - self.gen_heartbeat(realworld_time) if realworld_time >= self.first_msg_realworld_time + self.PKT_EVICT_INTERVAL * (self.evict_num + 1): self.evict_pkts(realworld_time_sec_and_usec) From 580e540b1b24dea9a0def01e0186d18d3341a829 Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Wed, 22 Apr 2020 10:28:54 +0800 Subject: [PATCH 44/74] add test cases for recvzmq.py --- test/test_recvzmq.sh | 46 ++ test/xmltshark_baseline.txt | 1200 +++++++++++++++++++++++++++++++++++ 2 files changed, 1246 insertions(+) create mode 100644 test/test_recvzmq.sh create mode 100644 test/xmltshark_baseline.txt diff --git a/test/test_recvzmq.sh b/test/test_recvzmq.sh new file mode 100644 index 000000000..6da85ae6b --- /dev/null +++ b/test/test_recvzmq.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +rm -rf ./nic1 + +python ../scripts/recvzmq.py -z 5555 -t ./nic1/%Y%m%d%H%M%S -s 15 -a 1 & +../bin/pktminerg -f xml.pcap -r 127.0.0.1 -k 15 -z 5555 -m 10 & +sleep 20 + +tshark -r ./nic1/20130327104800_1_0.pcap | grep -v :00_00: > ./nic1/xmltshark.txt +sed -i 's/^ *[0-9]\+ *[0-9.]\+ //g' ./nic1/xmltshark.txt + +killall pktminerg +ps -ef | grep python.*recvzmq.py | grep -v grep | awk '{print $2}' | xargs kill + +diff xmltshark_baseline.txt ./nic1/xmltshark.txt +if [ $? -eq 0 ]; then + echo "test 1 ok" +else + echo "test 1 failed" + exit 1 +fi + + + + +rm -rf ./nic2 +python ../scripts/recvzmq.py -z 5555 -t ./nic2/%Y%m%d%H%M%S -s 15 -a 2 & +../bin/pktminerg -f xml.pcap -r 127.0.0.1 -k 3 -z 5555 -m 10 & +sleep 20 + +mergecap -w mergedgre.pcap ./nic2/*.pcap +mv mergedgre.pcap ./nic2/ +tshark -r ./nic2/mergedgre.pcap | grep -v :00_00: > ./nic2/xmltshark2.txt +sed -i 's/^ *[0-9]\+ *[0-9.]\+ //g' ./nic2/xmltshark2.txt + +killall pktminerg +ps -ef | grep python.*recvzmq.py | grep -v grep | awk '{print $2}' | xargs kill + +diff xmltshark_baseline.txt ./nic2/xmltshark2.txt +if [ $? -eq 0 ]; then + echo "test 2 ok" +else + echo "test 2 failed" + exit 1 +fi + diff --git a/test/xmltshark_baseline.txt b/test/xmltshark_baseline.txt new file mode 100644 index 000000000..8f2b84a61 --- /dev/null +++ b/test/xmltshark_baseline.txt @@ -0,0 +1,1200 @@ +172.16.11.181 -> 172.16.101.164 SSH 228 Encrypted response packet len=132 +172.16.101.164 -> 172.16.11.181 TCP 102 64028 > ssh [ACK] Seq=1 Ack=133 Win=63016 Len=0 +Cisco_eb:82:1a -> CDP/VTP/DTP/PAgP/UDLD VTP 230 Join +Cisco_e9:c6:9a -> CDP/VTP/DTP/PAgP/UDLD VTP 230 Join +Cisco_df:87:00 -> Broadcast ARP 102 Who has 172.16.11.162? Tell 172.16.11.1 +Vmware_ab:6d:9d -> Broadcast ARP 102 Who has 172.16.24.71? Tell 172.16.24.8 +Cisco_05:6f:9a -> CDP/VTP/DTP/PAgP/UDLD VTP 230 Join +172.16.101.164 -> 172.16.11.181 SSH 148 Encrypted request packet len=52 +172.16.11.181 -> 172.16.101.164 TCP 96 ssh > 64028 [ACK] Seq=133 Ack=53 Win=63784 Len=0 +172.16.101.164 -> 172.16.11.181 SSH 148 Encrypted request packet len=52 +172.16.11.181 -> 172.16.101.164 TCP 96 ssh > 64028 [ACK] Seq=133 Ack=105 Win=63784 Len=0 +172.16.11.181 -> 172.16.101.164 SSH 404 Encrypted response packet len=308 +172.16.11.181 -> 172.16.101.164 SSH 404 Encrypted response packet len=308 +172.16.11.181 -> 172.16.101.164 SSH 404 Encrypted response packet len=308 +172.16.101.164 -> 172.16.11.181 TCP 102 64028 > ssh [ACK] Seq=105 Ack=1057 Win=64240 Len=0 +172.16.11.181 -> 172.16.101.164 SSH 1556 Encrypted response packet len=1460 +172.16.11.181 -> 172.16.101.164 SSH 260 Encrypted response packet len=164 +172.16.101.164 -> 172.16.11.181 TCP 102 64028 > ssh [ACK] Seq=105 Ack=2681 Win=64240 Len=0 +Cisco_df:87:00 -> Broadcast ARP 102 Who has 172.16.11.115? Tell 172.16.11.1 +172.16.101.164 -> 172.16.11.181 SSH 148 Encrypted request packet len=52 +172.16.11.181 -> 172.16.101.164 SSH 148 Encrypted response packet len=52 +172.16.11.181 -> 172.16.101.164 SSH 228 Encrypted response packet len=132 +172.16.11.181 -> 172.16.11.180 TCP 116 50315 > 23180 [SYN] Seq=0 Win=5840 Len=0 MSS=1460 SACK_PERM=1 TSval=495202725 TSecr=0 WS=128 +172.16.11.181 -> 172.16.101.164 SSH 180 Encrypted response packet len=84 +172.16.11.180 -> 172.16.11.181 TCP 116 23180 > 50315 [SYN, ACK] Seq=0 Ack=1 Win=14480 Len=0 MSS=1460 SACK_PERM=1 TSval=3197407014 TSecr=495202725 WS=128 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=1 Ack=1 Win=5888 Len=0 TSval=495202726 TSecr=3197407014 +172.16.11.181 -> 172.16.11.180 TCP 258 50315 > 23180 [PSH, ACK] Seq=1 Ack=1 Win=5888 Len=150 TSval=495202726 TSecr=3197407014 +172.16.101.164 -> 172.16.11.181 TCP 102 64028 > ssh [ACK] Seq=157 Ack=2865 Win=64056 Len=0 +172.16.11.181 -> 172.16.101.164 SSH 148 Encrypted response packet len=52 +172.16.11.181 -> 172.16.101.164 SSH 180 Encrypted response packet len=84 +172.16.11.180 -> 172.16.11.181 TCP 108 23180 > 50315 [ACK] Seq=1 Ack=151 Win=15616 Len=0 TSval=3197407014 TSecr=495202726 +172.16.101.164 -> 172.16.11.181 TCP 102 64028 > ssh [ACK] Seq=157 Ack=3085 Win=63836 Len=0 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1449 Win=8832 Len=0 TSval=495202726 TSecr=3197407014 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=2897 Win=11648 Len=0 TSval=495202726 TSecr=3197407014 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=4345 Win=14592 Len=0 TSval=495202726 TSecr=3197407014 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=5793 Win=17536 Len=0 TSval=495202726 TSecr=3197407014 +172.16.11.181 -> 172.16.101.164 SSH 164 Encrypted response packet len=68 +172.16.11.181 -> 172.16.101.164 SSH 164 Encrypted response packet len=68 +172.16.11.181 -> 172.16.101.164 SSH 180 Encrypted response packet len=84 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=7241 Win=20352 Len=0 TSval=495202726 TSecr=3197407014 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=8689 Win=23296 Len=0 TSval=495202726 TSecr=3197407014 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=10137 Win=26112 Len=0 TSval=495202726 TSecr=3197407014 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=11585 Win=29056 Len=0 TSval=495202726 TSecr=3197407014 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=13033 Win=32000 Len=0 TSval=495202726 TSecr=3197407014 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=14481 Win=34816 Len=0 TSval=495202726 TSecr=3197407014 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=15929 Win=37760 Len=0 TSval=495202727 TSecr=3197407014 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=17377 Win=40704 Len=0 TSval=495202727 TSecr=3197407014 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.101.164 -> 172.16.11.181 TCP 102 64028 > ssh [ACK] Seq=157 Ack=3221 Win=63700 Len=0 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=18825 Win=43520 Len=0 TSval=495202727 TSecr=3197407014 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=20273 Win=46464 Len=0 TSval=495202727 TSecr=3197407014 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=21721 Win=49280 Len=0 TSval=495202727 TSecr=3197407014 +172.16.11.181 -> 172.16.101.164 SSH 148 Encrypted response packet len=52 +172.16.11.181 -> 172.16.101.164 SSH 308 Encrypted response packet len=212 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=23169 Win=52224 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=24617 Win=55168 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=26065 Win=57984 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=27513 Win=60928 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=28961 Win=61312 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=30409 Win=59904 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=31857 Win=58368 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=41993 Win=63872 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.101.164 -> 172.16.11.181 TCP 102 64028 > ssh [ACK] Seq=157 Ack=3357 Win=63564 Len=0 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=49233 Win=63872 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=50681 Win=64128 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=53577 Win=64128 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=56473 Win=64128 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=59369 Win=64128 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=62265 Win=64128 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=65161 Win=64128 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=68057 Win=64128 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=70953 Win=64128 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=73849 Win=64128 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=76745 Win=64128 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=79641 Win=64128 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=82537 Win=64128 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=88329 Win=59904 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=91225 Win=62720 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=94121 Win=64128 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=97017 Win=64128 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=99913 Win=64128 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=102809 Win=64128 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=105705 Win=64128 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=108601 Win=61312 Len=0 TSval=495202727 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=114393 Win=64128 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=115841 Win=67072 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=117289 Win=69888 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=118737 Win=72832 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=120185 Win=75776 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=121633 Win=78592 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=123081 Win=81536 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=124529 Win=84480 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=125977 Win=87296 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=127425 Win=90240 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=128873 Win=93056 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=130321 Win=96000 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=131769 Win=98944 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=133217 Win=101760 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=134665 Win=104704 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=136113 Win=107648 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=137561 Win=110464 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=139009 Win=113408 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=140457 Win=116224 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=141905 Win=119168 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=143353 Win=122112 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=144801 Win=124928 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=146249 Win=127872 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=147697 Win=130816 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=149145 Win=133632 Len=0 TSval=495202728 TSecr=3197407015 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=150593 Win=136576 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=152041 Win=139392 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=153489 Win=142336 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=154937 Win=145280 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=156385 Win=148096 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=157833 Win=151040 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=159281 Win=153984 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=160729 Win=156800 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=162177 Win=159744 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=163625 Win=162560 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=165073 Win=165504 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=166521 Win=168448 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=167969 Win=171264 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=169417 Win=174208 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=170865 Win=177152 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=172313 Win=179968 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=173761 Win=182912 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=175209 Win=185728 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=176657 Win=188288 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=179553 Win=188288 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=185345 Win=184576 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=191137 Win=188288 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=194033 Win=188288 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=196929 Win=188288 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=199825 Win=188288 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=202721 Win=188288 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=205617 Win=188288 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=212857 Win=183040 Len=0 TSval=495202728 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=360553 Win=36864 Len=0 TSval=495202768 TSecr=3197407016 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=396753 Win=640 Len=0 TSval=495202808 TSecr=3197407056 +Dell_75:2c:0e -> Broadcast ARP 102 Gratuitous ARP for 192.168.0.120 (Reply) +172.16.101.164 -> 172.16.11.181 TCP 102 64028 > ssh [ACK] Seq=157 Ack=3569 Win=63352 Len=0 +172.16.11.181 -> 172.16.11.180 TCP 108 [TCP Window Update] 50315 > 23180 [ACK] Seq=151 Ack=396753 Win=25472 Len=0 TSval=495202931 TSecr=3197407056 +172.16.11.181 -> 172.16.11.180 TCP 108 [TCP Window Update] 50315 > 23180 [ACK] Seq=151 Ack=396753 Win=58496 Len=0 TSval=495202931 TSecr=3197407056 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=399649 Win=87168 Len=0 TSval=495202931 TSecr=3197407219 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=418473 Win=85632 Len=0 TSval=495202931 TSecr=3197407219 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=421369 Win=98560 Len=0 TSval=495202931 TSecr=3197407219 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=428609 Win=107136 Len=0 TSval=495202931 TSecr=3197407219 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=441641 Win=111488 Len=0 TSval=495202931 TSecr=3197407219 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=456121 Win=188288 Len=0 TSval=495202932 TSecr=3197407219 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=457569 Win=191232 Len=0 TSval=495202932 TSecr=3197407219 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=459017 Win=194048 Len=0 TSval=495202932 TSecr=3197407219 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=460465 Win=196992 Len=0 TSval=495202932 TSecr=3197407219 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=461913 Win=199936 Len=0 TSval=495202932 TSecr=3197407219 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=463361 Win=202752 Len=0 TSval=495202932 TSecr=3197407219 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=464809 Win=205696 Len=0 TSval=495202932 TSecr=3197407219 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=466257 Win=208512 Len=0 TSval=495202932 TSecr=3197407219 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=467705 Win=211456 Len=0 TSval=495202932 TSecr=3197407219 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=469153 Win=214400 Len=0 TSval=495202932 TSecr=3197407219 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=470601 Win=217216 Len=0 TSval=495202932 TSecr=3197407219 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=472049 Win=220160 Len=0 TSval=495202932 TSecr=3197407219 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=473497 Win=223104 Len=0 TSval=495202932 TSecr=3197407219 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=474945 Win=225920 Len=0 TSval=495202932 TSecr=3197407219 +172.16.11.181 -> 172.16.101.164 SSH 308 Encrypted response packet len=212 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=482185 Win=225920 Len=0 TSval=495202932 TSecr=3197407219 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=483633 Win=228864 Len=0 TSval=495202932 TSecr=3197407219 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=485081 Win=231680 Len=0 TSval=495202932 TSecr=3197407219 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +Cisco_eb:82:19 -> CDP/VTP/DTP/PAgP/UDLD CDP 468 Device ID: SW1.netis.com.cn Port ID: GigabitEthernet0/1 +Cisco_eb:82:1a -> CDP/VTP/DTP/PAgP/UDLD CDP 468 Device ID: SW1.netis.com.cn Port ID: GigabitEthernet0/2 +Cisco_eb:82:1a -> CDP/VTP/DTP/PAgP/UDLD DTP 102 Dynamic Trunking Protocol +Cisco_eb:82:19 -> CDP/VTP/DTP/PAgP/UDLD DTP 102 Dynamic Trunking Protocol +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=634225 Win=84096 Len=0 TSval=495202972 TSecr=3197407219 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=699385 Win=19456 Len=0 TSval=495203012 TSecr=3197407260 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=718209 Win=512 Len=0 TSval=495203052 TSecr=3197407300 +Cisco_df:87:1a -> PVST+ STP 106 Conf. Root = 24576/1/00:0f:f7:df:87:00 Cost = 0 Port = 0x8041 +Cisco_df:87:1a -> Spanning-tree-(for-bridges)_00 STP 102 Conf. Root = 24576/1/00:0f:f7:df:87:00 Cost = 0 Port = 0x8041 +172.16.101.164 -> 172.16.11.181 TCP 102 64028 > ssh [ACK] Seq=157 Ack=3781 Win=63140 Len=0 +172.16.11.181 -> 172.16.11.180 TCP 108 [TCP Window Update] 50315 > 23180 [ACK] Seq=151 Ack=718209 Win=16640 Len=0 TSval=495203138 TSecr=3197407300 +172.16.11.181 -> 172.16.101.164 SSH 308 Encrypted response packet len=212 +172.16.11.181 -> 172.16.11.180 TCP 108 [TCP Window Update] 50315 > 23180 [ACK] Seq=151 Ack=718209 Win=33792 Len=0 TSval=495203138 TSecr=3197407300 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=721105 Win=46720 Len=0 TSval=495203138 TSecr=3197407426 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=724001 Win=59648 Len=0 TSval=495203138 TSecr=3197407426 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=731241 Win=68224 Len=0 TSval=495203138 TSecr=3197407426 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=745721 Win=71168 Len=0 TSval=495203138 TSecr=3197407426 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=748617 Win=84096 Len=0 TSval=495203139 TSecr=3197407426 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=751513 Win=96896 Len=0 TSval=495203139 TSecr=3197407426 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=767441 Win=98432 Len=0 TSval=495203139 TSecr=3197407426 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=770337 Win=111232 Len=0 TSval=495203139 TSecr=3197407427 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=779025 Win=118400 Len=0 TSval=495203139 TSecr=3197407427 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=789161 Win=125568 Len=0 TSval=495203139 TSecr=3197407427 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=803641 Win=127104 Len=0 TSval=495203139 TSecr=3197407427 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=894865 Win=36736 Len=0 TSval=495203179 TSecr=3197407427 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=931065 Win=512 Len=0 TSval=495203219 TSecr=3197407467 +172.16.101.164 -> 172.16.11.181 TCP 102 64028 > ssh [ACK] Seq=157 Ack=3993 Win=62928 Len=0 +172.16.11.181 -> 172.16.11.180 TCP 108 [TCP Window Update] 50315 > 23180 [ACK] Seq=151 Ack=931065 Win=16640 Len=0 TSval=495203346 TSecr=3197407467 +172.16.11.181 -> 172.16.101.164 SSH 308 Encrypted response packet len=212 +172.16.11.181 -> 172.16.11.180 TCP 108 [TCP Window Update] 50315 > 23180 [ACK] Seq=151 Ack=931065 Win=33792 Len=0 TSval=495203346 TSecr=3197407467 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=933961 Win=46720 Len=0 TSval=495203346 TSecr=3197407634 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=936857 Win=59648 Len=0 TSval=495203346 TSecr=3197407634 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=948441 Win=65408 Len=0 TSval=495203346 TSecr=3197407634 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=960025 Win=69760 Len=0 TSval=495203346 TSecr=3197407634 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=962921 Win=82560 Len=0 TSval=495203347 TSecr=3197407634 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=965817 Win=96896 Len=0 TSval=495203347 TSecr=3197407634 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=983193 Win=95488 Len=0 TSval=495203347 TSecr=3197407634 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=986089 Win=108416 Len=0 TSval=495203347 TSecr=3197407635 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1003465 Win=107008 Len=0 TSval=495203347 TSecr=3197407635 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1013601 Win=114176 Len=0 TSval=495203347 TSecr=3197407635 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1016497 Win=127104 Len=0 TSval=495203347 TSecr=3197407635 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1142473 Win=2304 Len=0 TSval=495203387 TSecr=3197407635 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1143921 Win=768 Len=0 TSval=495203427 TSecr=3197407675 +172.16.101.164 -> 172.16.11.181 TCP 102 64028 > ssh [ACK] Seq=157 Ack=4205 Win=64240 Len=0 +172.16.11.181 -> 172.16.11.180 TCP 108 [TCP Window Update] 50315 > 23180 [ACK] Seq=151 Ack=1143921 Win=16640 Len=0 TSval=495203554 TSecr=3197407675 +172.16.11.181 -> 172.16.101.164 SSH 308 Encrypted response packet len=212 +172.16.11.181 -> 172.16.11.180 TCP 108 [TCP Window Update] 50315 > 23180 [ACK] Seq=151 Ack=1143921 Win=33792 Len=0 TSval=495203554 TSecr=3197407675 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1146817 Win=46720 Len=0 TSval=495203554 TSecr=3197407842 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1149713 Win=59648 Len=0 TSval=495203554 TSecr=3197407842 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1161297 Win=65408 Len=0 TSval=495203554 TSecr=3197407842 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1172881 Win=69760 Len=0 TSval=495203554 TSecr=3197407842 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1175777 Win=82560 Len=0 TSval=495203555 TSecr=3197407842 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1185913 Win=89728 Len=0 TSval=495203555 TSecr=3197407842 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1191705 Win=99840 Len=0 TSval=495203555 TSecr=3197407842 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1204737 Win=102656 Len=0 TSval=495203555 TSecr=3197407842 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1209081 Win=115584 Len=0 TSval=495203555 TSecr=3197407843 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1223561 Win=116992 Len=0 TSval=495203555 TSecr=3197407843 +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1227905 Win=128512 Len=0 TSval=495203555 TSecr=3197407843 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1350985 Win=6656 Len=0 TSval=495203595 TSecr=3197407843 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1356777 Win=768 Len=0 TSval=495203635 TSecr=3197407883 +Cisco_df:87:1a -> CDP/VTP/DTP/PAgP/UDLD VTP 230 Join +Cisco_df:87:00 -> Broadcast ARP 102 Who has 172.16.24.1? Tell 172.16.24.254 +172.16.101.164 -> 172.16.11.181 TCP 102 64028 > ssh [ACK] Seq=157 Ack=4417 Win=64028 Len=0 +172.16.11.181 -> 172.16.11.180 TCP 108 [TCP Window Update] 50315 > 23180 [ACK] Seq=151 Ack=1356777 Win=18048 Len=0 TSval=495203762 TSecr=3197407883 +172.16.11.181 -> 172.16.101.164 SSH 308 Encrypted response packet len=212 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 [TCP Window Update] 50315 > 23180 [ACK] Seq=151 Ack=1356777 Win=49664 Len=0 TSval=495203762 TSecr=3197407883 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1359673 Win=62592 Len=0 TSval=495203762 TSecr=3197408050 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1362569 Win=76928 Len=0 TSval=495203762 TSecr=3197408050 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1379945 Win=75392 Len=0 TSval=495203762 TSecr=3197408050 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.181 -> 172.16.11.180 TCP 108 50315 > 23180 [ACK] Seq=151 Ack=1382841 Win=88320 Len=0 TSval=495203763 TSecr=3197408050 +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] +172.16.11.180 -> 172.16.11.181 TCP 1556 [TCP segment of a reassembled PDU] From 8af20fd5f48aff87ebe065f0b20b74781d542dea Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Wed, 22 Apr 2020 15:55:22 +0800 Subject: [PATCH 45/74] batch timeout from 3s to 1s, and some minor changes --- src/socketzmq.cpp | 25 +------------------------ src/socketzmq.h | 5 +++-- 2 files changed, 4 insertions(+), 26 deletions(-) diff --git a/src/socketzmq.cpp b/src/socketzmq.cpp index c9b59a3b1..59fc30531 100644 --- a/src/socketzmq.cpp +++ b/src/socketzmq.cpp @@ -30,7 +30,7 @@ PcapExportZMQ::PcapExportZMQ(const std::vector& remoteips, int zmq_ for (size_t i = 0; i < remoteips.size(); ++i) { _pkts_bufs[i].buf.resize(MAX_BATCH_BUF_LENGTH, '\0'); _pkts_bufs[i].batch_bufpos = sizeof(batch_pkts_hdr_t); - _pkts_bufs[i].batch_hdr = { htons(1), 0, htonl(keybit) }; + _pkts_bufs[i].batch_hdr = { htons(BatchPktsBuf::BATCH_PKTS_VERSION), 0, htonl(keybit) }; _pkts_bufs[i].first_pktsec = 0; } } @@ -75,27 +75,6 @@ int PcapExportZMQ::closeExport() { return 0; } -void PcapExportZMQ::adjustZmqHwm(uint32_t send_size) { - static uint32_t counter = 0; - static uint64_t send_total = 0; - constexpr uint32_t ROUND = 50; - if (((counter + 1) % ROUND) == 0) { - uint32_t avg_size = (uint32_t)(send_total / ROUND); - if (avg_size != 0) { - uint32_t queue_length = _send_buf_size / avg_size; - queue_length = queue_length < 100 ? 100 : queue_length; - queue_length = queue_length > 10000 ? 10000 : queue_length; - for (size_t i = 0; i < _remoteips.size(); ++i) { - _zmq_sockets[i].setsockopt(ZMQ_SNDHWM, queue_length); - } - } - counter = 0; - send_total = 0; - } else { - send_total += send_size; - counter++; - } -} int PcapExportZMQ::exportPacket(const struct pcap_pkthdr* header, const uint8_t* pkt_data) { int ret = 0; @@ -145,8 +124,6 @@ int PcapExportZMQ::exportPacket(size_t index, const struct pcap_pkthdr* header, drop_pkts_num = flushBatchBuf(index); - //adjustZmqHwm(pkts_buf.batch_bufpos); - pkts_buf.first_pktsec = header->ts.tv_sec; pkts_buf.batch_bufpos = sizeof(pkts_buf.batch_hdr); pkts_buf.batch_hdr.pkts_num = 0; diff --git a/src/socketzmq.h b/src/socketzmq.h index 884afb0ca..d287a1cc7 100644 --- a/src/socketzmq.h +++ b/src/socketzmq.h @@ -32,6 +32,8 @@ struct BatchPktsBuf { std::vector buf; uint32_t batch_bufpos; __time_t first_pktsec; +public: + static constexpr uint16_t BATCH_PKTS_VERSION = 1; }; class PcapExportZMQ : public PcapExportBase { @@ -45,14 +47,13 @@ class PcapExportZMQ : public PcapExportBase { std::vector _zmq_contexts; std::vector _zmq_sockets; std::vector _pkts_bufs; - constexpr static uint32_t MAX_PKTS_TIMEDIFF_S = 3; + constexpr static uint32_t MAX_PKTS_TIMEDIFF_S = 1; constexpr static uint32_t MAX_BATCH_BUF_LENGTH = 1 * 1024 * 1024; private: int initSockets(size_t index, uint32_t keybit); int exportPacket(size_t index, const struct pcap_pkthdr *header, const uint8_t *pkt_data); int flushBatchBuf(size_t index); - void adjustZmqHwm(uint32_t send_size); public: PcapExportZMQ(const std::vector& remoteips, int zmq_port, int zmq_hwm, uint32_t keybit, From 4466470af8544acf121298d194e341237bdecb10 Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Thu, 23 Apr 2020 17:02:57 +0800 Subject: [PATCH 46/74] Usage docs for recvzmq.py --- scripts/recvzmq.md | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 scripts/recvzmq.md diff --git a/scripts/recvzmq.md b/scripts/recvzmq.md new file mode 100644 index 000000000..6e54ab0c4 --- /dev/null +++ b/scripts/recvzmq.md @@ -0,0 +1,39 @@ +# Usage + +## Usage for recvzmq.py +``` +python recvzmq.py [--span_time seconds] -z port_num -t /path/file_template -a 4 +-z or --zmq_port: zmq bind port +-t or --file_template: file template. Examle: /opt/pcap_cache/nic0/%Y%m%d%H%M%S +-s or --span_time: pcap span time interval. Default: 15, Unit: seconds. +-a or --total_workers: total worker process count of recvzmq. Default 1. +-v or --version: version info +-h or --help: help message +``` + +### Paramters + +* zmq_port
+Zeromq bind port to receive message from remote packet agent client. +
+ +* file_template
+File path and file name of output pcap, the file name template will be formatted. +Examle: /opt/pcap_cache/nic0/%Y%m%d%H%M%S +%Y%m%d%H%M%S will be formatted to something like 20200415090530, pcap name will be 20200415090530_2_0.pcap, 20200415090530_2_1.pcap +
+ +* span_time
+Pcap span time interval. Default: 15, Unit: seconds. +
+ +* total_workers
+Total worker process count of recvzmq. Default 1. +Usually, the max capacity for one worker process is 200Mbps. +
+ +### Examples +* Two child process workers +``` +python recvzmq.py -s 15 -z 82 -f /opt/pcap_cache/nic0/%Y%m%d%H%M%S -a 2 +``` From 7db9caa43115b9b4750dff9a69199891da1c34e7 Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Thu, 23 Apr 2020 17:49:56 +0800 Subject: [PATCH 47/74] update pktminerg usage docs: add zmq_port, zmq_hwm --- USAGE.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/USAGE.md b/USAGE.md index 40c9647eb..db80225a3 100644 --- a/USAGE.md +++ b/USAGE.md @@ -19,6 +19,11 @@ Allowed options: for test -r [ --remoteip ] IPs set gre remote IPs, seperate by ',' Example: -r 8.8.4.4,8.8.8.8 + -z [ --zmq_port ] ZMQ_PORT (=0) set remote zeromq server port to receive + packets reliably; ZMQ_PORT default value 0 + means disable. + -m [ --zmq_hwm ] ZMQ_HWM (=100) set zeromq queue high watermark; ZMQ_HWM + default value 100. -k [ --keybit ] BIT (=1) set gre key bit; BIT defaults 1 -s [ --snaplen ] LENGTH (=2048) set snoop packet snaplen; LENGTH defaults 2048 and units byte @@ -60,6 +65,12 @@ remoteip:GRE channel remote IP addresss (required) keybit:GRE protocol keybit parameter to distinguish the channel to remote IP
+* zmq_port, zmq_hwm
+Parameters of zeromq: +zmq_port: set remote zeromq server port to receive packets reliably; ZMQ_PORT default value 0 means disable. +zmq_hwm: set zeromq queue high watermark; ZMQ_HWM default value 100. +
+ * cpu, priority
cpu:set CPU affinity to improve performance, it's recommended to isolate target CPU core in grub before set affinity. priority: set high priority for the process to improve performance. From 9c2cbfd6ae3f500b3c24ff9180306004871bb291 Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Fri, 24 Apr 2020 18:08:28 +0800 Subject: [PATCH 48/74] recvzmq installer script --- scripts/recvzmq/backup_recvlog.sh | 19 +++++++++++++++++++ scripts/recvzmq/recvd.sh | 11 +++++++++++ scripts/{ => recvzmq}/recvzmq.py | 1 + scripts/recvzmq/recvzmq.service | 17 +++++++++++++++++ scripts/recvzmq_installer.sh | 30 ++++++++++++++++++++++++++++++ test/test_recvzmq.sh | 4 ++-- 6 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 scripts/recvzmq/backup_recvlog.sh create mode 100644 scripts/recvzmq/recvd.sh rename scripts/{ => recvzmq}/recvzmq.py (99%) create mode 100644 scripts/recvzmq/recvzmq.service create mode 100644 scripts/recvzmq_installer.sh diff --git a/scripts/recvzmq/backup_recvlog.sh b/scripts/recvzmq/backup_recvlog.sh new file mode 100644 index 000000000..58bb18679 --- /dev/null +++ b/scripts/recvzmq/backup_recvlog.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +backup_log_and_clear() { + LOG_FILE_NAME=$1 + tar --overwrite -czf ${LOG_FILE_NAME}.tar.gz ${LOG_FILE_NAME} + >${LOG_FILE_NAME} +} + +LOG_FILE=$1 + +while true +do + sleep 86400 + if [ -f "$LOG_FILE" ] + then + backup_log_and_clear $LOG_FILE + fi +done + diff --git a/scripts/recvzmq/recvd.sh b/scripts/recvzmq/recvd.sh new file mode 100644 index 000000000..cc65affd5 --- /dev/null +++ b/scripts/recvzmq/recvd.sh @@ -0,0 +1,11 @@ +#!/bin/bash +python /usr/local/bin/recvzmq.py -z 82 -s 15 -a 4 -t /opt/pcap_cache/nic0/%Y%m%d%H%M%S 1>>/opt/bpc/var/log/recvzmq.log 2>>/opt/bpc/var/log/recvzmq.err & +RECV_PID=$! + +rm -rf /var/run/recvzmq/recvzmq.pid +sh /usr/local/bin/backup_recvlog.sh /opt/bpc/var/log/recvzmq.log & +BACKUP_PID=$! + +echo "$RECV_PID" > /var/run/recvzmq/recvzmq.pid +echo "$BACKUP_PID" >> /var/run/recvzmq/recvzmq.pid + diff --git a/scripts/recvzmq.py b/scripts/recvzmq/recvzmq.py similarity index 99% rename from scripts/recvzmq.py rename to scripts/recvzmq/recvzmq.py index f101b5622..af9312878 100755 --- a/scripts/recvzmq.py +++ b/scripts/recvzmq/recvzmq.py @@ -327,6 +327,7 @@ def evict_pkts(self, realworld_time_sec_and_usec): print("[%s] id: %d, used: %.2fs, msg %d/%d evicted, exportPkts/leftPkts: %d/%d, timeout/qfull/totalDropPkts: %d/%d/%d, queueLen: %d"%( nowstr, self.config["base_suffixid"], now - realworld_time_sec_and_usec, evicted_msg_count, total_msg_count, export_pkts_count, left_pkts_count, timeout_drop_pkts, qfull_drop_pkts, self.total_drop_pkts, export_queue_len)) + sys.stdout.flush() def gen_heartbeat(self): diff --git a/scripts/recvzmq/recvzmq.service b/scripts/recvzmq/recvzmq.service new file mode 100644 index 000000000..e880365d2 --- /dev/null +++ b/scripts/recvzmq/recvzmq.service @@ -0,0 +1,17 @@ +[Unit] +Description=Receive PktgZmq Service +After=network.target network-online.target + +[Service] +Type=forking +KillMode=control-group +Restart=always +RestartSec=3 +ExecStart=/bin/bash /usr/local/etc/recvd.sh +ExecStartPre=/bin/mkdir -p /var/run/recvzmq +ExecStartPre=/bin/chmod 0777 /var/run/recvzmq +PIDFile=/var/run/recvzmq/recvzmq.pid +PrivateTmp=true + +[Install] +WantedBy=multi-user.target diff --git a/scripts/recvzmq_installer.sh b/scripts/recvzmq_installer.sh new file mode 100644 index 000000000..c3fe8a36f --- /dev/null +++ b/scripts/recvzmq_installer.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +RECV_TAR_GZ=$1 + +Usage() { + echo "Usage:" + echo " sh recvzmq_installer.sh " + echo ":" + echo " path to recvzmq.tar.gz which include recvzmq.py, recvzmq.service etc..." + echo "Example:" + echo " sh recvzmq_installer.sh /path/to/recvzmq.tar.gz" +} + +if [[ -z "$RECV_TAR_GZ" ]]; then + Usage + exit 1 +fi + +mkdir -p recvzmq_installer +tar -xvf $RECV_TAR_GZ --strip-components 1 -C recvzmq_installer/ + +\cp -rf recvzmq_installer/recvzmq.py /usr/local/bin/recvzmq.py +\cp -rf recvzmq_installer/backup_recvlog.sh /usr/local/bin/backup_recvlog.sh +\cp -rf recvzmq_installer/recvd.sh /usr/local/etc/recvd.sh +\cp -rf recvzmq_installer/recvzmq.service /etc/systemd/system/recvzmq.service + +rm -rf recvzmq_installer + +echo "Install finished" + diff --git a/test/test_recvzmq.sh b/test/test_recvzmq.sh index 6da85ae6b..340b2e7a7 100644 --- a/test/test_recvzmq.sh +++ b/test/test_recvzmq.sh @@ -2,7 +2,7 @@ rm -rf ./nic1 -python ../scripts/recvzmq.py -z 5555 -t ./nic1/%Y%m%d%H%M%S -s 15 -a 1 & +python ../scripts/recvzmq/recvzmq.py -z 5555 -t ./nic1/%Y%m%d%H%M%S -s 15 -a 1 & ../bin/pktminerg -f xml.pcap -r 127.0.0.1 -k 15 -z 5555 -m 10 & sleep 20 @@ -24,7 +24,7 @@ fi rm -rf ./nic2 -python ../scripts/recvzmq.py -z 5555 -t ./nic2/%Y%m%d%H%M%S -s 15 -a 2 & +python ../scripts/recvzmq/recvzmq.py -z 5555 -t ./nic2/%Y%m%d%H%M%S -s 15 -a 2 & ../bin/pktminerg -f xml.pcap -r 127.0.0.1 -k 3 -z 5555 -m 10 & sleep 20 From 33a43a108ba1acb58fdde2f8b11ce9647a0a9c3a Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Fri, 24 Apr 2020 18:10:48 +0800 Subject: [PATCH 49/74] install pyzmq --- scripts/recvzmq_installer.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/recvzmq_installer.sh b/scripts/recvzmq_installer.sh index c3fe8a36f..9364324c0 100644 --- a/scripts/recvzmq_installer.sh +++ b/scripts/recvzmq_installer.sh @@ -16,6 +16,8 @@ if [[ -z "$RECV_TAR_GZ" ]]; then exit 1 fi +yum -y install python-zmq + mkdir -p recvzmq_installer tar -xvf $RECV_TAR_GZ --strip-components 1 -C recvzmq_installer/ From f9c40ddf0ad62b5d01cfe95220e3714ae34858e3 Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Sun, 26 Apr 2020 16:00:39 +0800 Subject: [PATCH 50/74] install pyzmq rpms offline --- scripts/recvzmq/recvd.sh | 2 ++ scripts/recvzmq_installer.sh | 44 ++++++++++++++++++++++++++++++------ 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/scripts/recvzmq/recvd.sh b/scripts/recvzmq/recvd.sh index cc65affd5..7e3ff2510 100644 --- a/scripts/recvzmq/recvd.sh +++ b/scripts/recvzmq/recvd.sh @@ -1,4 +1,5 @@ #!/bin/bash +mkdir -p /opt/bpc/var/log python /usr/local/bin/recvzmq.py -z 82 -s 15 -a 4 -t /opt/pcap_cache/nic0/%Y%m%d%H%M%S 1>>/opt/bpc/var/log/recvzmq.log 2>>/opt/bpc/var/log/recvzmq.err & RECV_PID=$! @@ -6,6 +7,7 @@ rm -rf /var/run/recvzmq/recvzmq.pid sh /usr/local/bin/backup_recvlog.sh /opt/bpc/var/log/recvzmq.log & BACKUP_PID=$! +mkdir -p /var/run/recvzmq echo "$RECV_PID" > /var/run/recvzmq/recvzmq.pid echo "$BACKUP_PID" >> /var/run/recvzmq/recvzmq.pid diff --git a/scripts/recvzmq_installer.sh b/scripts/recvzmq_installer.sh index 9364324c0..a1b01db82 100644 --- a/scripts/recvzmq_installer.sh +++ b/scripts/recvzmq_installer.sh @@ -1,6 +1,10 @@ #!/bin/bash RECV_TAR_GZ=$1 +MAJOR_VERSION=0 +if [ -e /etc/centos-release ]; then + MAJOR_VERSION=`rpm -q --queryformat '%{VERSION}' centos-release` +fi Usage() { echo "Usage:" @@ -16,17 +20,43 @@ if [[ -z "$RECV_TAR_GZ" ]]; then exit 1 fi -yum -y install python-zmq + +install_recvzmq() { + \cp -rf recvzmq_installer/recvzmq.py /usr/local/bin/recvzmq.py + \cp -rf recvzmq_installer/backup_recvlog.sh /usr/local/bin/backup_recvlog.sh + \cp -rf recvzmq_installer/recvd.sh /usr/local/etc/recvd.sh + if [ $MAJOR_VERSION = "6" ]; then + echo "sh /usr/local/etc/recvd.sh &" >> /etc/rc.d/rc.local + elif [ $MAJOR_VERSION = "7" ]; then + \cp -rf recvzmq_installer/recvzmq.service /etc/systemd/system/recvzmq.service + fi + + echo "Install finished" +} + + +install_pyzmq() { + if [ $MAJOR_VERSION = "6" ]; then + rpm -ivh recvzmq_installer/pyzmq-el6/openpgm-5.1.118-3.el6.x86_64.rpm + rpm -ivh recvzmq_installer/pyzmq-el6/zeromq3-3.2.5-1.el6.x86_64.rpm + rpm -ivh recvzmq_installer/pyzmq-el6/python-zmq-14.3.1-1.el6.x86_64.rpm + elif [ $MAJOR_VERSION = "7" ]; then + rpm -ivh recvzmq_installer/pyzmq-el7/libsodium-1.0.18-1.el7.x86_64.rpm + rpm -ivh recvzmq_installer/pyzmq-el7/openpgm-5.2.122-2.el7.x86_64.rpm + rpm -ivh recvzmq_installer/pyzmq-el7/zeromq-4.1.4-6.el7.x86_64.rpm + rpm -ivh recvzmq_installer/pyzmq-el7/python2-zmq-14.7.0-11.el7.x86_64.rpm + else + echo "Unsupported version: $MAJOR_VERSION" + exit 1 + fi +} + mkdir -p recvzmq_installer tar -xvf $RECV_TAR_GZ --strip-components 1 -C recvzmq_installer/ -\cp -rf recvzmq_installer/recvzmq.py /usr/local/bin/recvzmq.py -\cp -rf recvzmq_installer/backup_recvlog.sh /usr/local/bin/backup_recvlog.sh -\cp -rf recvzmq_installer/recvd.sh /usr/local/etc/recvd.sh -\cp -rf recvzmq_installer/recvzmq.service /etc/systemd/system/recvzmq.service +install_pyzmq +install_recvzmq rm -rf recvzmq_installer -echo "Install finished" - From 79a62621c609f3ac5650ee9b7dd0aa88be255198 Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Sun, 26 Apr 2020 17:33:48 +0800 Subject: [PATCH 51/74] fix merge issue --- CMakeLists.txt | 1 + src/pcapexport.h | 1 + 2 files changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index d1337b122..1edc41330 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -220,6 +220,7 @@ else() ${SOURCE_FILES_SYSHELP} ${SOURCE_FILES_PCAP} ${PROJECT_SOURCE_DIR}/src/socketgre.cpp + ${PROJECT_SOURCE_DIR}/src/socketzmq.cpp ${PROJECT_SOURCE_DIR}/src/pcaphandler.cpp ${PROJECT_SOURCE_DIR}/src/statislog.cpp ${PROJECT_SOURCE_DIR}/src/agent_status.cpp diff --git a/src/pcapexport.h b/src/pcapexport.h index 00c6a324b..aabe9eee5 100644 --- a/src/pcapexport.h +++ b/src/pcapexport.h @@ -6,6 +6,7 @@ enum class exporttype : uint8_t { gre = 0, file = 1, + zmq = 2, }; class PcapExportBase { From f11f8a9a052234784e99cc4179adf895d7b495b5 Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Wed, 29 Apr 2020 15:37:25 +0800 Subject: [PATCH 52/74] improve packets drop strategy: add batch messages instead one bye one from zeromq to frontQueue, drop packets when frontq is full. In this way, we can drop packets in message directly and don't need to waste time on parsing these packets. --- scripts/recvzmq/recvzmq.py | 69 +++++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 30 deletions(-) diff --git a/scripts/recvzmq/recvzmq.py b/scripts/recvzmq/recvzmq.py index af9312878..78463a54a 100755 --- a/scripts/recvzmq/recvzmq.py +++ b/scripts/recvzmq/recvzmq.py @@ -249,7 +249,7 @@ def producer_fillqueue_sync(self, pkts_list): qfull_drop_pkts = 0 self.export_cond.acquire() - if len(self.export_queue) >= 20: + if len(self.export_queue) >= 10: qfull_drop_pkts = len(pkts_list) self.total_drop_pkts += qfull_drop_pkts else: @@ -302,7 +302,7 @@ def update_next_checkpoint(self): self.min_realworld_ts_pkt_ts_diff = self.new_realworld_ts_pkt_ts_diff - def evict_pkts(self, realworld_time_sec_and_usec): + def evict_pkts(self, realworld_time_sec_and_usec, fqueue_full_drop): self.evict_num += 1 if self.first_pkt_ts_time == 0: return @@ -324,9 +324,9 @@ def evict_pkts(self, realworld_time_sec_and_usec): qfull_drop_pkts, export_pkts_count, left_pkts_count, export_queue_len = self.sort_and_export_pkts() now = time.time() nowstr = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(now)) - print("[%s] id: %d, used: %.2fs, msg %d/%d evicted, exportPkts/leftPkts: %d/%d, timeout/qfull/totalDropPkts: %d/%d/%d, queueLen: %d"%( - nowstr, self.config["base_suffixid"], now - realworld_time_sec_and_usec, evicted_msg_count, total_msg_count, - export_pkts_count, left_pkts_count, timeout_drop_pkts, qfull_drop_pkts, self.total_drop_pkts, export_queue_len)) + print("[%s] id: %d, used: %.2fs, msg %d/%d: %d/%d evicted, export/leftPkts: %d/%d, timeout/frontq/backq/totalDropPkts: %d/%d/%d/%d, backqLen: %d"%( + nowstr, self.config["base_suffixid"], now - realworld_time_sec_and_usec, evicted_msg_count, total_msg_count, len(to_del_ts), len(to_del_ts) + len(self.msg_dict), + export_pkts_count, left_pkts_count, timeout_drop_pkts, fqueue_full_drop, qfull_drop_pkts, self.total_drop_pkts, export_queue_len)) sys.stdout.flush() @@ -341,40 +341,49 @@ def gen_heartbeat(self): self.evict_pkts_list.append(pkt_info) - def parse_message(self, message): + def parse_messages(self, messages): header_size = 8 realworld_time_sec_and_usec = time.time() realworld_time = int(realworld_time_sec_and_usec) if self.first_msg_realworld_time == 0: self.first_msg_realworld_time = realworld_time - if message is not None: - version, pkt_num, keybit = struct.unpack(">HHI", message[:header_size]) - if version != 1: - return - pkt_pos = header_size - if pkt_num > 0: - pkt_data_len, pkt_ts_time = struct.unpack(">HI", message[pkt_pos:pkt_pos+6]) - if self.first_pkt_ts_time == 0: - self.first_pkt_realworld_time = realworld_time - self.first_pkt_ts_time = pkt_ts_time - self.min_realworld_ts_pkt_ts_diff = realworld_time - pkt_ts_time - print("first_pkt_realworld_time: %d, first_pkt_ts_time: %d, diff: %ds"%(realworld_time, self.first_pkt_ts_time, self.min_realworld_ts_pkt_ts_diff)) - self.new_realworld_ts_pkt_ts_diff = realworld_time - pkt_ts_time - if pkt_ts_time in self.msg_dict: - self.msg_dict[pkt_ts_time].append(message) - else: - self.msg_dict[pkt_ts_time] = [message] + fqueue_full_drop = 0 + if messages: + for message in messages: + version, pkt_num, keybit = struct.unpack(">HHI", message[:header_size]) + if version != 1: + return + pkt_pos = header_size + if pkt_num > 0: + pkt_data_len, pkt_ts_time = struct.unpack(">HI", message[pkt_pos:pkt_pos+6]) + if self.first_pkt_ts_time == 0: + self.first_pkt_realworld_time = realworld_time + self.first_pkt_ts_time = pkt_ts_time + self.min_realworld_ts_pkt_ts_diff = realworld_time - pkt_ts_time + print("first_pkt_realworld_time: %d, first_pkt_ts_time: %d, diff: %ds"%(realworld_time, self.first_pkt_ts_time, self.min_realworld_ts_pkt_ts_diff)) + self.new_realworld_ts_pkt_ts_diff = realworld_time - pkt_ts_time + if pkt_ts_time in self.msg_dict: + self.msg_dict[pkt_ts_time].append(message) + else: + if len(self.msg_dict) > self.PKT_EVICT_TS_TIMEOUT + self.PKT_EVICT_INTERVAL + 10: + fqueue_full_drop += pkt_num + self.total_drop_pkts += pkt_num + else: + self.msg_dict[pkt_ts_time] = [message] if realworld_time >= self.first_msg_realworld_time + self.PKT_EVICT_INTERVAL * (self.evict_num + 1): - self.evict_pkts(realworld_time_sec_and_usec) + self.evict_pkts(realworld_time_sec_and_usec, fqueue_full_drop) def recv_msg_to_parse(batch_pkts_handler, socket): - message = None + messages = [] try: - message = socket.recv() + while True: + message = socket.recv(flags=zmq.NOBLOCK) + messages.append(message) except zmq.error.Again as _e: - pass - batch_pkts_handler.parse_message(message) + if not messages: + time.sleep(0.01) + batch_pkts_handler.parse_messages(messages) def server_loop_imp(config): context = zmq.Context() @@ -431,12 +440,12 @@ def check_need_terminate(workers): def dispatch_loop(config): context = zmq.Context() front_socket = context.socket(zmq.PULL) - front_socket.setsockopt(zmq.RCVTIMEO, 2000) + front_socket.setsockopt(zmq.RCVTIMEO, 1000) front_socket.bind("tcp://*:%d"%(config["zmq_port"])) backend_port = config["zmq_port"] + 1 backend_socket = context.socket(zmq.PUSH) - backend_socket.setsockopt(zmq.SNDTIMEO, 2000) + backend_socket.setsockopt(zmq.SNDTIMEO, 1000) backend_socket.bind("tcp://127.0.0.1:%d"%(backend_port)) workers = [] for i in range(config["total_workers"]): From 544b9111a4c3870a38ce7195c1b38a98c69a509c Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Mon, 16 Nov 2020 18:36:28 +0800 Subject: [PATCH 53/74] ip fragment for large packet (size > 65507) --- scripts/recvzmq/recvzmq.py | 91 ++++++++++++++++++++++++++++++++------ 1 file changed, 77 insertions(+), 14 deletions(-) diff --git a/scripts/recvzmq/recvzmq.py b/scripts/recvzmq/recvzmq.py index 78463a54a..6d013d4ec 100755 --- a/scripts/recvzmq/recvzmq.py +++ b/scripts/recvzmq/recvzmq.py @@ -127,6 +127,8 @@ def __init__(self, config): self.export_queue = deque() self.exitFlag = False + self.keybit_ipid_map = {} + def unpack_msgpkts_to_evict(self, message): header_size = 8 @@ -163,29 +165,90 @@ def construct_pkt_bytes(self, ts_sec, ts_usec, caplen, length, keybit, pkt_data_ if pkt_data_len == 0 and keybit == 0: heartbeat_data_len = 4 struct.pack_into("HIHIHI", self.export_bytearray, self.export_bytearray_pos, 0,0,0,0, 0xffff, 0) self.export_bytearray_pos += gre_eth_hdr_len + heartbeat_data_len else: - struct.pack_into("HIHIBB", self.export_bytearray, self.export_bytearray_pos, 0,0,0,0, 0x08, 0x00) - self.export_bytearray_pos += gre_eth_hdr_len - struct.pack_into(">BBHHBBBBHII", self.export_bytearray, self.export_bytearray_pos, 0x45, 0, gre_ip_hdr_len + gre_hdr_len + pkt_data_len, - 0, 0x40, 0, 0x40, 0x2f, checksum, 0x7F000001, 0x7F000001) - self.export_bytearray_pos += gre_ip_hdr_len - struct.pack_into(">HHI", self.export_bytearray, self.export_bytearray_pos, 0x2000, 0x6558, keybit) - self.export_bytearray_pos += gre_hdr_len - if pkt_data_len > 0: - struct.pack_into("!%ds"%(pkt_data_len), self.export_bytearray, self.export_bytearray_pos, pkt_data) - self.export_bytearray_pos += pkt_data_len + ipid = self.get_ipid_from_map(keybit) + if gre_ip_hdr_len + gre_hdr_len + pkt_data_len > 65535: + first_frag_pkt_data_len = 65516 - 20 - 8 # 65532 - 16 - ip 20 bytes - gre 8 bytes + first_frag_pkt_data = pkt_data[0:first_frag_pkt_data_len] + self.construct_firstfrag_pkt_bytes(ipid, ts_sec, ts_usec, first_frag_pkt_data_len, first_frag_pkt_data_len, + keybit, first_frag_pkt_data_len, first_frag_pkt_data, is_frag=True) + + last_frag_pkt_data_len = pkt_data_len - first_frag_pkt_data_len + last_frag_pkt_data = pkt_data[first_frag_pkt_data_len:] + self.construct_lastfrag_pkt_bytes(ipid, ts_sec, ts_usec, last_frag_pkt_data_len, last_frag_pkt_data_len, + keybit, last_frag_pkt_data_len, last_frag_pkt_data) + else: + self.construct_firstfrag_pkt_bytes(ipid, ts_sec, ts_usec, caplen, length, + keybit, pkt_data_len, pkt_data, is_frag=False) buff_is_full = False - if self.export_bytearray_pos >= self.PKT_EVICT_BUFF_SIZE - 65536: + if self.export_bytearray_pos >= self.PKT_EVICT_BUFF_SIZE - 65596: buff_is_full = True return buff_is_full + def construct_firstfrag_pkt_bytes(self, ipid, ts_sec, ts_usec, caplen, length, keybit, pkt_data_len, pkt_data, is_frag): + gre_eth_hdr_len = 14 + gre_ip_hdr_len = 20 + gre_hdr_len = 8 + checksum = 0xffff + gre_caplen = gre_eth_hdr_len + gre_ip_hdr_len + gre_hdr_len + pkt_data_len + gre_length = gre_caplen + if length > caplen: + gre_length = gre_eth_hdr_len + gre_ip_hdr_len + gre_hdr_len + length + + frag_and_offset = 0x40 + if is_frag: + frag_and_offset = 0x20 + + struct.pack_into("HIHIBB", self.export_bytearray, self.export_bytearray_pos, 0,0,0,0, 0x08, 0x00) + self.export_bytearray_pos += gre_eth_hdr_len + struct.pack_into(">BBHHBBBBHII", self.export_bytearray, self.export_bytearray_pos, 0x45, 0, gre_ip_hdr_len + gre_hdr_len + pkt_data_len, + ipid, frag_and_offset, 0, 0x40, 0x2f, checksum, keybit, 0x7F000001) #TODO + self.export_bytearray_pos += gre_ip_hdr_len + struct.pack_into(">HHI", self.export_bytearray, self.export_bytearray_pos, 0x2000, 0x6558, keybit) + self.export_bytearray_pos += gre_hdr_len + if pkt_data_len > 0: + struct.pack_into("!%ds"%(pkt_data_len), self.export_bytearray, self.export_bytearray_pos, pkt_data) + self.export_bytearray_pos += pkt_data_len + + + def construct_lastfrag_pkt_bytes(self, ipid, ts_sec, ts_usec, caplen, length, keybit, pkt_data_len, pkt_data): + gre_eth_hdr_len = 14 + gre_ip_hdr_len = 20 + checksum = 0xffff + gre_caplen = gre_eth_hdr_len + gre_ip_hdr_len + pkt_data_len + gre_length = gre_caplen + if length > caplen: + gre_length = gre_eth_hdr_len + gre_ip_hdr_len + length + + frag_and_offset = (65516 - 20) / 8 # 65532 - 16 - ip 20 bytes + + struct.pack_into("HIHIBB", self.export_bytearray, self.export_bytearray_pos, 0,0,0,0, 0x08, 0x00) + self.export_bytearray_pos += gre_eth_hdr_len + struct.pack_into(">BBHHHBBHII", self.export_bytearray, self.export_bytearray_pos, 0x45, 0, gre_ip_hdr_len + pkt_data_len, + ipid, frag_and_offset, 0x40, 0x2f, checksum, keybit, 0x7F000001) + self.export_bytearray_pos += gre_ip_hdr_len + if pkt_data_len > 0: + struct.pack_into("!%ds"%(pkt_data_len), self.export_bytearray, self.export_bytearray_pos, pkt_data) + self.export_bytearray_pos += pkt_data_len + + + def get_ipid_from_map(self, keybit): + ipid = 0 + if keybit in self.keybit_ipid_map: + ipid = self.keybit_ipid_map[keybit] + ipid = (ipid + 1) % 65535 + self.keybit_ipid_map[keybit] = ipid + return ipid + def write_buf_to_pcap(self, pcapfile): pcapfile.write(self.export_bytearray[:self.export_bytearray_pos]) From a5f645375a3375580c6e134e427f7aa787842601 Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Mon, 16 Nov 2020 18:40:59 +0800 Subject: [PATCH 54/74] leave enough space --- scripts/recvzmq/recvzmq.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/recvzmq/recvzmq.py b/scripts/recvzmq/recvzmq.py index 6d013d4ec..f4c24c918 100755 --- a/scripts/recvzmq/recvzmq.py +++ b/scripts/recvzmq/recvzmq.py @@ -186,7 +186,7 @@ def construct_pkt_bytes(self, ts_sec, ts_usec, caplen, length, keybit, pkt_data_ keybit, pkt_data_len, pkt_data, is_frag=False) buff_is_full = False - if self.export_bytearray_pos >= self.PKT_EVICT_BUFF_SIZE - 65596: + if self.export_bytearray_pos >= self.PKT_EVICT_BUFF_SIZE - 65636: buff_is_full = True return buff_is_full From f0d7dff414e3e5377a20080996158600033e376c Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Tue, 17 Nov 2020 10:11:32 +0800 Subject: [PATCH 55/74] make sure framelen of gre pkt is less than 65535 explain some magic number. --- scripts/recvzmq/recvzmq.py | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/scripts/recvzmq/recvzmq.py b/scripts/recvzmq/recvzmq.py index f4c24c918..2d15d52f3 100755 --- a/scripts/recvzmq/recvzmq.py +++ b/scripts/recvzmq/recvzmq.py @@ -156,11 +156,7 @@ def construct_pkt_bytes(self, ts_sec, ts_usec, caplen, length, keybit, pkt_data_ gre_eth_hdr_len = 14 gre_ip_hdr_len = 20 gre_hdr_len = 8 - checksum = 0xffff - gre_caplen = gre_eth_hdr_len + gre_ip_hdr_len + gre_hdr_len + pkt_data_len - gre_length = gre_caplen - if length > caplen: - gre_length = gre_eth_hdr_len + gre_ip_hdr_len + gre_hdr_len + length + gre_ip_layer_max_len = 65535 if pkt_data_len == 0 and keybit == 0: heartbeat_data_len = 4 @@ -171,8 +167,8 @@ def construct_pkt_bytes(self, ts_sec, ts_usec, caplen, length, keybit, pkt_data_ self.export_bytearray_pos += gre_eth_hdr_len + heartbeat_data_len else: ipid = self.get_ipid_from_map(keybit) - if gre_ip_hdr_len + gre_hdr_len + pkt_data_len > 65535: - first_frag_pkt_data_len = 65516 - 20 - 8 # 65532 - 16 - ip 20 bytes - gre 8 bytes + if gre_ip_hdr_len + gre_hdr_len + pkt_data_len > gre_ip_layer_max_len - gre_eth_hdr_len: + first_frag_pkt_data_len = 65516 - 20 - 8 # 65532 - 16(gre_eth_hdr_len 14 round up) - ip 20 bytes - gre 8 bytes first_frag_pkt_data = pkt_data[0:first_frag_pkt_data_len] self.construct_firstfrag_pkt_bytes(ipid, ts_sec, ts_usec, first_frag_pkt_data_len, first_frag_pkt_data_len, keybit, first_frag_pkt_data_len, first_frag_pkt_data, is_frag=True) @@ -209,7 +205,7 @@ def construct_firstfrag_pkt_bytes(self, ipid, ts_sec, ts_usec, caplen, length, k struct.pack_into(">HIHIBB", self.export_bytearray, self.export_bytearray_pos, 0,0,0,0, 0x08, 0x00) self.export_bytearray_pos += gre_eth_hdr_len struct.pack_into(">BBHHBBBBHII", self.export_bytearray, self.export_bytearray_pos, 0x45, 0, gre_ip_hdr_len + gre_hdr_len + pkt_data_len, - ipid, frag_and_offset, 0, 0x40, 0x2f, checksum, keybit, 0x7F000001) #TODO + ipid, frag_and_offset, 0, 0x40, 0x2f, checksum, keybit, 0x7F000001) self.export_bytearray_pos += gre_ip_hdr_len struct.pack_into(">HHI", self.export_bytearray, self.export_bytearray_pos, 0x2000, 0x6558, keybit) self.export_bytearray_pos += gre_hdr_len @@ -227,7 +223,7 @@ def construct_lastfrag_pkt_bytes(self, ipid, ts_sec, ts_usec, caplen, length, ke if length > caplen: gre_length = gre_eth_hdr_len + gre_ip_hdr_len + length - frag_and_offset = (65516 - 20) / 8 # 65532 - 16 - ip 20 bytes + frag_and_offset = (65516 - 20) / 8 # 65532 - 16(gre_eth_hdr_len 14 round up) - ip 20 bytes struct.pack_into(" Date: Tue, 17 Nov 2020 11:02:07 +0800 Subject: [PATCH 56/74] enlarge back queue size: more memory buf for writing packets to file --- scripts/recvzmq/recvzmq.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/recvzmq/recvzmq.py b/scripts/recvzmq/recvzmq.py index 2d15d52f3..7736ef8e8 100755 --- a/scripts/recvzmq/recvzmq.py +++ b/scripts/recvzmq/recvzmq.py @@ -308,7 +308,7 @@ def producer_fillqueue_sync(self, pkts_list): qfull_drop_pkts = 0 self.export_cond.acquire() - if len(self.export_queue) >= 10: + if len(self.export_queue) >= 20: qfull_drop_pkts = len(pkts_list) self.total_drop_pkts += qfull_drop_pkts else: From bb0941cd10eb11c8e7bc25c83ce74a148caf5d5c Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Tue, 17 Nov 2020 14:54:39 +0800 Subject: [PATCH 57/74] zmq message from 1M to 1 packet: adjust zmq high watermark --- scripts/recvzmq/recvzmq.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/recvzmq/recvzmq.py b/scripts/recvzmq/recvzmq.py index 7736ef8e8..1773ffb0b 100755 --- a/scripts/recvzmq/recvzmq.py +++ b/scripts/recvzmq/recvzmq.py @@ -448,6 +448,7 @@ def server_loop_imp(config): context = zmq.Context() socket = context.socket(zmq.PULL) socket.setsockopt(zmq.RCVTIMEO, 1000) + socket.setsockopt(zmq.SNDHWM, 2000 * 1000) if config["total_workers"] == 1: socket.bind("tcp://*:%d"%(config["zmq_port"])) else: @@ -500,11 +501,13 @@ def dispatch_loop(config): context = zmq.Context() front_socket = context.socket(zmq.PULL) front_socket.setsockopt(zmq.RCVTIMEO, 1000) + front_socket.setsockopt(zmq.SNDHWM, 2000 * 1000) front_socket.bind("tcp://*:%d"%(config["zmq_port"])) backend_port = config["zmq_port"] + 1 backend_socket = context.socket(zmq.PUSH) backend_socket.setsockopt(zmq.SNDTIMEO, 1000) + backend_socket.setsockopt(zmq.SNDHWM, 2000 * 1000) backend_socket.bind("tcp://127.0.0.1:%d"%(backend_port)) workers = [] for i in range(config["total_workers"]): From bd9408c7120a74e95687e77dcd7c8dc4301c0638 Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Tue, 17 Nov 2020 15:16:12 +0800 Subject: [PATCH 58/74] zmq receive high watermark. --- scripts/recvzmq/recvzmq.py | 3 +++ test/test_recvzmq.sh | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) mode change 100644 => 100755 test/test_recvzmq.sh diff --git a/scripts/recvzmq/recvzmq.py b/scripts/recvzmq/recvzmq.py index 1773ffb0b..c9c208ebb 100755 --- a/scripts/recvzmq/recvzmq.py +++ b/scripts/recvzmq/recvzmq.py @@ -448,6 +448,7 @@ def server_loop_imp(config): context = zmq.Context() socket = context.socket(zmq.PULL) socket.setsockopt(zmq.RCVTIMEO, 1000) + socket.setsockopt(zmq.RCVHWM, 2000 * 1000) socket.setsockopt(zmq.SNDHWM, 2000 * 1000) if config["total_workers"] == 1: socket.bind("tcp://*:%d"%(config["zmq_port"])) @@ -501,12 +502,14 @@ def dispatch_loop(config): context = zmq.Context() front_socket = context.socket(zmq.PULL) front_socket.setsockopt(zmq.RCVTIMEO, 1000) + front_socket.setsockopt(zmq.RCVHWM, 2000 * 1000) front_socket.setsockopt(zmq.SNDHWM, 2000 * 1000) front_socket.bind("tcp://*:%d"%(config["zmq_port"])) backend_port = config["zmq_port"] + 1 backend_socket = context.socket(zmq.PUSH) backend_socket.setsockopt(zmq.SNDTIMEO, 1000) + backend_socket.setsockopt(zmq.RCVHWM, 2000 * 1000) backend_socket.setsockopt(zmq.SNDHWM, 2000 * 1000) backend_socket.bind("tcp://127.0.0.1:%d"%(backend_port)) workers = [] diff --git a/test/test_recvzmq.sh b/test/test_recvzmq.sh old mode 100644 new mode 100755 index 340b2e7a7..29f3cae39 --- a/test/test_recvzmq.sh +++ b/test/test_recvzmq.sh @@ -1,9 +1,9 @@ #!/bin/bash -rm -rf ./nic1 +rm -rf ./nic1/* python ../scripts/recvzmq/recvzmq.py -z 5555 -t ./nic1/%Y%m%d%H%M%S -s 15 -a 1 & -../bin/pktminerg -f xml.pcap -r 127.0.0.1 -k 15 -z 5555 -m 10 & +../bin/pktminerg -f xml.pcap -r 127.0.0.1 -k 15 -z 5555 & sleep 20 tshark -r ./nic1/20130327104800_1_0.pcap | grep -v :00_00: > ./nic1/xmltshark.txt @@ -23,9 +23,9 @@ fi -rm -rf ./nic2 +rm -rf ./nic2/* python ../scripts/recvzmq/recvzmq.py -z 5555 -t ./nic2/%Y%m%d%H%M%S -s 15 -a 2 & -../bin/pktminerg -f xml.pcap -r 127.0.0.1 -k 3 -z 5555 -m 10 & +../bin/pktminerg -f xml.pcap -r 127.0.0.1 -k 3 -z 5555 & sleep 20 mergecap -w mergedgre.pcap ./nic2/*.pcap From 088f911ce46ea47ce79cd0f109ba5f401dfaac98 Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Wed, 18 Nov 2020 16:26:28 +0800 Subject: [PATCH 59/74] performance of python thread is poor because of GIL: remove threading & use process to replace it. --- scripts/recvzmq/recvzmq.py | 80 +++++--------------------------------- 1 file changed, 9 insertions(+), 71 deletions(-) diff --git a/scripts/recvzmq/recvzmq.py b/scripts/recvzmq/recvzmq.py index c9c208ebb..c1ce5e729 100755 --- a/scripts/recvzmq/recvzmq.py +++ b/scripts/recvzmq/recvzmq.py @@ -10,7 +10,6 @@ import os import getopt import traceback -import threading grekey_file_info = None @@ -99,14 +98,12 @@ def get_pcapfile(config, ts_sec): def takeFirst(elem): return elem[0] -class BatchPktsHandler(threading.Thread): +class BatchPktsHandler(): def __init__(self, config): - threading.Thread.__init__(self) - self.PKT_EVICT_TS_TIMEOUT = 7 self.PKT_EVICT_INTERVAL = 1 - self.PKT_EVICT_BUFF_SIZE = 1024*1024 + self.PKT_EVICT_BUFF_SIZE = 2 * 1024*1024 self.config = config self.first_msg_realworld_time = 0 @@ -123,10 +120,6 @@ def __init__(self, config): self.export_bytearray_pos = 0 self.total_drop_pkts = 0 - self.export_cond = threading.Condition() - self.export_queue = deque() - self.exitFlag = False - self.keybit_ipid_map = {} @@ -251,39 +244,7 @@ def write_buf_to_pcap(self, pcapfile): self.export_bytearray_pos = 0 - def stop_running(self): - self.exitFlag = True - self.export_cond.acquire() - self.export_cond.notify() - self.export_cond.release() - - - def run(self): - while not self.exitFlag: - try: - self.process_data() - except Exception as e: - eprint("id: %d, %s"%(self.config["base_suffixid"], e)) - track = traceback.format_exc() - eprint(track) - sys.exit(-1) - except: - eprint("id: %d, thread unexpected error"%(self.config["base_suffixid"])) - sys.exit(-1) - - - def process_data(self): - pkts_list = [] - self.export_cond.acquire() - try: - while len(self.export_queue) == 0: # q is empty - self.export_cond.wait() - if self.exitFlag: - return - pkts_list = self.export_queue.popleft() - finally: - self.export_cond.release() - + def process_data(self, pkts_list): span_time = self.config["span_time"] global grekey_file_info # export to pcap @@ -304,21 +265,6 @@ def process_data(self): self.write_buf_to_pcap(pcapfile) - def producer_fillqueue_sync(self, pkts_list): - qfull_drop_pkts = 0 - - self.export_cond.acquire() - if len(self.export_queue) >= 20: - qfull_drop_pkts = len(pkts_list) - self.total_drop_pkts += qfull_drop_pkts - else: - self.export_queue.append(pkts_list) - self.export_cond.notify() - self.export_cond.release() - - return qfull_drop_pkts - - def sort_and_export_pkts(self): self.evict_pkts_list.sort(key=takeFirst) if self.pkt_evict_ts_checkpoint == 0: @@ -338,13 +284,11 @@ def sort_and_export_pkts(self): if lasti > 0: self.evict_pkts_list = self.evict_pkts_list[lasti:] - qfull_drop_pkts = 0 - export_queue_len = len(self.export_queue) export_pkts_count = len(pkts_list) left_pkts_count = len(self.evict_pkts_list) if pkts_list: - qfull_drop_pkts= self.producer_fillqueue_sync(pkts_list) - return qfull_drop_pkts, export_pkts_count, left_pkts_count, export_queue_len + self.process_data(pkts_list) + return export_pkts_count, left_pkts_count def get_next_checkpoint(self): @@ -380,12 +324,12 @@ def evict_pkts(self, realworld_time_sec_and_usec, fqueue_full_drop): for ts in to_del_ts: del self.msg_dict[ts] self.gen_heartbeat() - qfull_drop_pkts, export_pkts_count, left_pkts_count, export_queue_len = self.sort_and_export_pkts() + export_pkts_count, left_pkts_count = self.sort_and_export_pkts() now = time.time() nowstr = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(now)) - print("[%s] id: %d, used: %.2fs, msg %d/%d: %d/%d evicted, export/leftPkts: %d/%d, timeout/frontq/backq/totalDropPkts: %d/%d/%d/%d, backqLen: %d"%( + print("[%s] id: %d, used: %.2fs, msg %d/%d: %d/%d evicted, export/leftPkts: %d/%d, timeout/frontq/totalDropPkts: %d/%d/%d"%( nowstr, self.config["base_suffixid"], now - realworld_time_sec_and_usec, evicted_msg_count, total_msg_count, len(to_del_ts), len(to_del_ts) + len(self.msg_dict), - export_pkts_count, left_pkts_count, timeout_drop_pkts, fqueue_full_drop, qfull_drop_pkts, self.total_drop_pkts, export_queue_len)) + export_pkts_count, left_pkts_count, timeout_drop_pkts, fqueue_full_drop, self.total_drop_pkts)) sys.stdout.flush() @@ -424,7 +368,7 @@ def parse_messages(self, messages): if pkt_ts_time in self.msg_dict: self.msg_dict[pkt_ts_time].append(message) else: - if len(self.msg_dict) > self.PKT_EVICT_TS_TIMEOUT + self.PKT_EVICT_INTERVAL + 10: + if len(self.msg_dict) > self.PKT_EVICT_TS_TIMEOUT + self.PKT_EVICT_INTERVAL + 20: fqueue_full_drop += pkt_num self.total_drop_pkts += pkt_num else: @@ -455,17 +399,11 @@ def server_loop_imp(config): else: socket.connect("tcp://127.0.0.1:%d"%(config["zmq_port"])) batch_pkts_handler = BatchPktsHandler(config) - batch_pkts_handler.start() while True: try: recv_msg_to_parse(batch_pkts_handler, socket) - if not batch_pkts_handler.isAlive(): - eprint('id: ' + str(config['base_suffixid']) + ' Fatal error: child thread exited') - sys.exit(-1) except KeyboardInterrupt: eprint("KeyboardInterrupt") - batch_pkts_handler.stop_running() - batch_pkts_handler.join() raise except Exception as e: eprint(e) From e4a037971d9907bb44d1783d791198453bd8434b Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Wed, 18 Nov 2020 17:57:10 +0800 Subject: [PATCH 60/74] add cmd param for ip frag --- scripts/recvzmq/recvzmq.py | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/scripts/recvzmq/recvzmq.py b/scripts/recvzmq/recvzmq.py index c1ce5e729..5eeb4a862 100755 --- a/scripts/recvzmq/recvzmq.py +++ b/scripts/recvzmq/recvzmq.py @@ -120,6 +120,9 @@ def __init__(self, config): self.export_bytearray_pos = 0 self.total_drop_pkts = 0 + self.frag_offset = int(self.config["frag_offset"]) + self.frag_offset_roundup = int((self.frag_offset / 2) / 8) * 8 + self.keybit_ipid_map = {} @@ -160,8 +163,10 @@ def construct_pkt_bytes(self, ts_sec, ts_usec, caplen, length, keybit, pkt_data_ self.export_bytearray_pos += gre_eth_hdr_len + heartbeat_data_len else: ipid = self.get_ipid_from_map(keybit) - if gre_ip_hdr_len + gre_hdr_len + pkt_data_len > gre_ip_layer_max_len - gre_eth_hdr_len: - first_frag_pkt_data_len = 65516 - 20 - 8 # 65532 - 16(gre_eth_hdr_len 14 round up) - ip 20 bytes - gre 8 bytes + if gre_eth_hdr_len + gre_ip_hdr_len + gre_hdr_len + length > gre_ip_layer_max_len or pkt_data_len > self.frag_offset: + first_frag_pkt_data_len = self.frag_offset_roundup + if pkt_data_len <= self.frag_offset_roundup: + first_frag_pkt_data_len = int(pkt_data_len / 2 / 8) * 8 first_frag_pkt_data = pkt_data[0:first_frag_pkt_data_len] self.construct_firstfrag_pkt_bytes(ipid, ts_sec, ts_usec, first_frag_pkt_data_len, first_frag_pkt_data_len, keybit, first_frag_pkt_data_len, first_frag_pkt_data, is_frag=True) @@ -169,7 +174,7 @@ def construct_pkt_bytes(self, ts_sec, ts_usec, caplen, length, keybit, pkt_data_ last_frag_pkt_data_len = pkt_data_len - first_frag_pkt_data_len last_frag_pkt_data = pkt_data[first_frag_pkt_data_len:] self.construct_lastfrag_pkt_bytes(ipid, ts_sec, ts_usec, last_frag_pkt_data_len, last_frag_pkt_data_len, - keybit, last_frag_pkt_data_len, last_frag_pkt_data) + keybit, first_frag_pkt_data_len, last_frag_pkt_data_len, last_frag_pkt_data) else: self.construct_firstfrag_pkt_bytes(ipid, ts_sec, ts_usec, caplen, length, keybit, pkt_data_len, pkt_data, is_frag=False) @@ -207,7 +212,7 @@ def construct_firstfrag_pkt_bytes(self, ipid, ts_sec, ts_usec, caplen, length, k self.export_bytearray_pos += pkt_data_len - def construct_lastfrag_pkt_bytes(self, ipid, ts_sec, ts_usec, caplen, length, keybit, pkt_data_len, pkt_data): + def construct_lastfrag_pkt_bytes(self, ipid, ts_sec, ts_usec, caplen, length, keybit, first_frag_pkt_data_len, pkt_data_len, pkt_data): gre_eth_hdr_len = 14 gre_ip_hdr_len = 20 checksum = 0xffff @@ -216,7 +221,7 @@ def construct_lastfrag_pkt_bytes(self, ipid, ts_sec, ts_usec, caplen, length, ke if length > caplen: gre_length = gre_eth_hdr_len + gre_ip_hdr_len + length - frag_and_offset = (65516 - 20) / 8 # 65532 - 16(gre_eth_hdr_len 14 round up) - ip 20 bytes + frag_and_offset = (first_frag_pkt_data_len + 8) / 8 # offset + gre 8 bytes struct.pack_into(" 65535 else int(value) if "zmq_port" not in cfg_dict: eprint("require param: -z zmq_port") sys.exit(-1) @@ -532,7 +540,7 @@ def parse_args(cfg_dict): eprint("require param: -t /path/file_template/%Y%m%d/%Y%m%d%H/%Y%m%d%H%M%S") sys.exit(-1) -config = {"span_time": 15, "total_workers": 1, "base_suffixid": 0} +config = {"span_time": 15, "total_workers": 1, "base_suffixid": 0, "frag_offset": 64000} parse_args(config) if config["total_workers"] == 1: server_loop_imp(config) From b4075c6002fad579ac863b117fc8f766a93b7d9e Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Thu, 19 Nov 2020 14:47:42 +0800 Subject: [PATCH 61/74] performance improve: 1. don't sleep when pkts handler is working busy. 2. merge several struct.pack calls to one struct.pack call --- scripts/recvzmq/recvzmq.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/scripts/recvzmq/recvzmq.py b/scripts/recvzmq/recvzmq.py index 5eeb4a862..b7413c392 100755 --- a/scripts/recvzmq/recvzmq.py +++ b/scripts/recvzmq/recvzmq.py @@ -126,6 +126,10 @@ def __init__(self, config): self.keybit_ipid_map = {} + def is_working_busy(self): + return len(self.msg_dict) > self.PKT_EVICT_TS_TIMEOUT + self.PKT_EVICT_INTERVAL + + def unpack_msgpkts_to_evict(self, message): header_size = 8 timeout_drop_pkts = 0 @@ -188,11 +192,12 @@ def construct_firstfrag_pkt_bytes(self, ipid, ts_sec, ts_usec, caplen, length, k gre_eth_hdr_len = 14 gre_ip_hdr_len = 20 gre_hdr_len = 8 + eth_ip_gre_len = 42 # gre_eth_hdr_len + gre_ip_hdr_len + gre_hdr_len checksum = 0xffff - gre_caplen = gre_eth_hdr_len + gre_ip_hdr_len + gre_hdr_len + pkt_data_len + gre_caplen = eth_ip_gre_len + pkt_data_len gre_length = gre_caplen if length > caplen: - gre_length = gre_eth_hdr_len + gre_ip_hdr_len + gre_hdr_len + length + gre_length = eth_ip_gre_len + length frag_and_offset = 0x40 if is_frag: @@ -200,13 +205,11 @@ def construct_firstfrag_pkt_bytes(self, ipid, ts_sec, ts_usec, caplen, length, k struct.pack_into("HIHIBB", self.export_bytearray, self.export_bytearray_pos, 0,0,0,0, 0x08, 0x00) - self.export_bytearray_pos += gre_eth_hdr_len - struct.pack_into(">BBHHBBBBHII", self.export_bytearray, self.export_bytearray_pos, 0x45, 0, gre_ip_hdr_len + gre_hdr_len + pkt_data_len, - ipid, frag_and_offset, 0, 0x40, 0x2f, checksum, keybit, 0x7F000001) - self.export_bytearray_pos += gre_ip_hdr_len - struct.pack_into(">HHI", self.export_bytearray, self.export_bytearray_pos, 0x2000, 0x6558, keybit) - self.export_bytearray_pos += gre_hdr_len + struct.pack_into(">HIHIBBBBHHBBBBHIIHHI", self.export_bytearray, self.export_bytearray_pos, 0,0,0,0, 0x08, 0x00, + 0x45, 0, gre_ip_hdr_len + gre_hdr_len + pkt_data_len, + ipid, frag_and_offset, 0, 0x40, 0x2f, checksum, keybit, 0x7F000001, + 0x2000, 0x6558, keybit) + self.export_bytearray_pos += eth_ip_gre_len if pkt_data_len > 0: struct.pack_into("!%ds"%(pkt_data_len), self.export_bytearray, self.export_bytearray_pos, pkt_data) self.export_bytearray_pos += pkt_data_len @@ -389,7 +392,7 @@ def recv_msg_to_parse(batch_pkts_handler, socket): message = socket.recv(flags=zmq.NOBLOCK) messages.append(message) except zmq.error.Again as _e: - if not messages: + if not messages and not batch_pkts_handler.is_working_busy(): time.sleep(0.01) batch_pkts_handler.parse_messages(messages) From ea766f6360c63006c0c0cd770a635702351a5d9e Mon Sep 17 00:00:00 2001 From: "jack.tang" Date: Fri, 20 Nov 2020 16:51:40 +0800 Subject: [PATCH 62/74] some log for timeout debug --- scripts/recvzmq/recvzmq.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/recvzmq/recvzmq.py b/scripts/recvzmq/recvzmq.py index b7413c392..0c5a7b141 100755 --- a/scripts/recvzmq/recvzmq.py +++ b/scripts/recvzmq/recvzmq.py @@ -124,6 +124,7 @@ def __init__(self, config): self.frag_offset_roundup = int((self.frag_offset / 2) / 8) * 8 self.keybit_ipid_map = {} + self.last_print_timeout_ts = 0 def is_working_busy(self): @@ -139,6 +140,11 @@ def unpack_msgpkts_to_evict(self, message): pkt_data_len, ts_sec, ts_usec, caplen, length = struct.unpack(">HIIII", message[pkt_pos:pkt_pos+18]) pkt_pos += 18 if ts_sec < self.pkt_evict_ts_checkpoint: + if j == 0 or j + 1 == pkt_num: + if ts_sec > self.last_print_timeout_ts: + print("id: %d, timeout pkt grekey: %d, ts_sec: %d, caplen: %d, length: %d, pkt_num: %d"%( + self.config['base_suffixid'], keybit, ts_sec, caplen, length, pkt_num)) + self.last_print_timeout_ts = ts_sec if j == 0 and ts_sec + 1 < self.pkt_evict_ts_checkpoint: # hack: rely on pktg msg batch max timeout 1s timeout_drop_pkts = pkt_num break From 4f8d8d8fd3e111c069328ad59e41ed00385cd702 Mon Sep 17 00:00:00 2001 From: "Justin.Su" Date: Fri, 6 Aug 2021 17:08:15 +0800 Subject: [PATCH 63/74] support gre direction and service tag(key). --- CHANGES.md | 7 ++++ USAGE.md | 2 +- src/pcapexport.h | 7 +++- src/pcaphandler.cpp | 96 +++++++++++++++++++++++++++++++++++++++++---- src/pcaphandler.h | 9 +++++ src/socketgre.cpp | 15 +++++-- src/socketgre.h | 4 +- src/socketzmq.cpp | 7 ++-- src/socketzmq.h | 4 +- test/unit_test.cpp | 4 +- 10 files changed, 133 insertions(+), 22 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 7d8e8a9e6..453f56238 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,13 @@ The list of the most significant changes made in Netis Packet Agent over time. + +## Netis Packet Agent 0.3.7 + +### Features +* Support GRE direction in key. + + ## Netis Packet Agent 0.3.6 ### Features diff --git a/USAGE.md b/USAGE.md index 15eef50d4..b62378538 100644 --- a/USAGE.md +++ b/USAGE.md @@ -64,7 +64,7 @@ Send GRE packets from this binded device. Sending will be failed when this devic * remoteip, keybit
Parameters of GRE channel: remoteip:GRE channel remote IP addresss (required) -keybit:GRE protocol keybit parameter to distinguish the channel to remote IP +keybit:GRE protocol keybit parameter to distinguish the channel to remote IP, high 4 bit is reserved for direction.
* zmq_port, zmq_hwm
diff --git a/src/pcapexport.h b/src/pcapexport.h index aabe9eee5..058e5df90 100644 --- a/src/pcapexport.h +++ b/src/pcapexport.h @@ -3,6 +3,11 @@ #include +#define PKTD_UNKNOWN -1 +#define PKTD_IC 1 +#define PKTD_OG 2 +#define PKTD_NONCHECK 0 + enum class exporttype : uint8_t { gre = 0, file = 1, @@ -17,7 +22,7 @@ class PcapExportBase { return _type; } virtual int initExport() = 0; - virtual int exportPacket(const struct pcap_pkthdr *header, const uint8_t *pkt_data) = 0; + virtual int exportPacket(const struct pcap_pkthdr *header, const uint8_t *pkt_data, int direct) = 0; virtual int closeExport() = 0; }; diff --git a/src/pcaphandler.cpp b/src/pcaphandler.cpp index 4c90d7d34..acea18f28 100644 --- a/src/pcaphandler.cpp +++ b/src/pcaphandler.cpp @@ -1,7 +1,14 @@ -#include "pcaphandler.h" #include #include #include +#include +#include +#include +#include +#include +#include + +#include "pcaphandler.h" #include "scopeguard.h" #include "agent_status.h" @@ -49,12 +56,34 @@ void PcapHandler::closePcap() { } void PcapHandler::packetHandler(const struct pcap_pkthdr* header, const uint8_t* pkt_data) { + ether_header* eth; + iphdr* ip; + ip6_hdr* ipv6; + uint16_t eth_type; + int direct; + + if(header->caplen < sizeof(ether_header)) + return; + eth = (ether_header*)pkt_data; + eth_type = ntohs(eth->ether_type); + direct = PKTD_UNKNOWN; + + switch(eth_type) { + case ETHERTYPE_IP: + ip = (iphdr*)(pkt_data + sizeof(ether_header)); + direct = checkPktDirectionV4((const in_addr*)&ip->saddr, (const in_addr*)&ip->daddr); + break; + case ETHERTYPE_IPV6: + ipv6 = (ip6_hdr*)(pkt_data + sizeof(ether_header)); + direct = checkPktDirectionV6(&ipv6->ip6_src, &ipv6->ip6_dst); + break; + default: + break; + } + std::for_each(_exports.begin(), _exports.end(), - [header, pkt_data, this](std::shared_ptr pcapExport) { -// if (header->caplen > 1472) { -// std::cout << "pkt " << _gre_count << ", len: " << header->len << ", caplen: " << header->caplen << std::endl; -// } - int ret = pcapExport->exportPacket(header, pkt_data); + [header, pkt_data, this, direct](std::shared_ptr pcapExport) { + int ret = pcapExport->exportPacket(header, pkt_data, direct); if (pcapExport->getExportType() == exporttype::gre) { if (ret == 0) { this->_gre_count++; @@ -73,8 +102,8 @@ void PcapHandler::packetHandler(const struct pcap_pkthdr* header, const uint8_t* _statislog->logSendStatis((uint64_t) (header->ts.tv_sec), header->caplen, _gre_count, _gre_drop_count, 0, _pcap_handle); if (_need_update_status) { - AgentStatus::get_instance()->update_capture_status((uint64_t) (header->ts.tv_sec), header->caplen, - _gre_count, _gre_drop_count, _pcap_handle); + AgentStatus::get_instance()->update_capture_status((uint64_t) (header->ts.tv_sec), header->caplen, + _gre_count, _gre_drop_count, _pcap_handle); } } @@ -108,6 +137,34 @@ void PcapHandler::stopPcapLoop() { pcap_breakloop(_pcap_handle); } +int PcapHandler::checkPktDirectionV4(const in_addr *sip, const in_addr *dip) { + for(auto& ipv4 : _ipv4s) + { + if(ipv4.s_addr == sip->s_addr) + return PKTD_OG; + else if(ipv4.s_addr == dip->s_addr) + return PKTD_IC; + } + return PKTD_UNKNOWN; +} + +int PcapHandler::checkPktDirectionV6(const in6_addr *sip, const in6_addr *dip) { + for(auto& ipv6 : _ipv6s) + { + if(ipv6.s6_addr32[0] == sip->s6_addr32[0] && + ipv6.s6_addr32[1] == sip->s6_addr32[1] && + ipv6.s6_addr32[2] == sip->s6_addr32[2] && + ipv6.s6_addr32[3] == sip->s6_addr32[3]) + return PKTD_OG; + else if(ipv6.s6_addr32[0] == dip->s6_addr32[0] && + ipv6.s6_addr32[1] == dip->s6_addr32[1] && + ipv6.s6_addr32[2] == dip->s6_addr32[2] && + ipv6.s6_addr32[3] == dip->s6_addr32[3]) + return PKTD_IC; + } + return PKTD_UNKNOWN; +} + int PcapOfflineHandler::openPcap(const std::string& dev, const pcap_init_t& param, const std::string& expression, bool dumpfile) { pcap_t* pcap_handle = pcap_open_offline(dev.c_str(), _errbuf); @@ -140,6 +197,29 @@ int PcapLiveHandler::openPcap(const std::string& dev, const pcap_init_t& param, bpf_u_int32 net = 0; _need_update_status = param.need_update_status; + { + struct ifaddrs* ifaddr; + + _ipv4s.clear(); + _ipv6s.clear(); + if (::getifaddrs(&ifaddr) < 0) { + return -1; + } + + for (auto ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { + if(!ifa->ifa_name || dev != ifa->ifa_name || !ifa->ifa_addr) + continue; + if(ifa->ifa_addr->sa_family == AF_INET) + { + _ipv4s.push_back(((sockaddr_in*)ifa->ifa_addr)->sin_addr); + } + else if(ifa->ifa_addr->sa_family == AF_INET6) + { + _ipv6s.push_back(((sockaddr_in6*)ifa->ifa_addr)->sin6_addr); + } + } + freeifaddrs(ifaddr); + } pcap_t* pcap_handle = pcap_create(dev.c_str(), _errbuf); if (!pcap_handle) { std::cerr << StatisLogContext::getTimeString() << "Call pcap_create failed, error is " << _errbuf << "." diff --git a/src/pcaphandler.h b/src/pcaphandler.h index a3f99e51d..724fd1370 100644 --- a/src/pcaphandler.h +++ b/src/pcaphandler.h @@ -4,6 +4,8 @@ #include #include #include +#include + #include "pcapexport.h" #include "statislog.h" @@ -25,9 +27,16 @@ class PcapHandler { uint64_t _gre_count; uint64_t _gre_drop_count; int _need_update_status; + + std::vector _ipv4s; + std::vector _ipv6s; + protected: int openPcapDumper(pcap_t *pcap_handle); void closePcapDumper(); + + int checkPktDirectionV4(const in_addr* sip, const in_addr* dip); + int checkPktDirectionV6(const in6_addr* sip, const in6_addr* dip); public: PcapHandler(); virtual ~PcapHandler(); diff --git a/src/socketgre.cpp b/src/socketgre.cpp index baadd6d03..27342b11f 100644 --- a/src/socketgre.cpp +++ b/src/socketgre.cpp @@ -116,20 +116,29 @@ int PcapExportGre::closeExport() { return 0; } -int PcapExportGre::exportPacket(const struct pcap_pkthdr* header, const uint8_t* pkt_data) { +int PcapExportGre::exportPacket(const struct pcap_pkthdr* header, const uint8_t* pkt_data, int direct) { int ret = 0; + if(direct == PKTD_UNKNOWN) { + return -1; + } + for (size_t i = 0; i < _remoteips.size(); ++i) { - ret |= exportPacket(i, header, pkt_data); + ret |= exportPacket(i, header, pkt_data, direct); } return ret; } -int PcapExportGre::exportPacket(size_t index, const struct pcap_pkthdr* header, const uint8_t* pkt_data) { +int PcapExportGre::exportPacket(size_t index, const struct pcap_pkthdr* header, const uint8_t* pkt_data, int direct) { auto& grebuffer = _grebuffers[index]; int socketfd = _socketfds[index]; auto& remote_addr = _remote_addrs[index]; size_t length = (size_t) (header->caplen <= 65535 ? header->caplen : 65535); + + grehdr_t* hdr; + hdr = (grehdr_t*)&*grebuffer.begin(); + hdr->keybit = htonl(_keybit | (direct << 28)); + std::memcpy(reinterpret_cast(&(grebuffer[sizeof(grehdr_t)])), reinterpret_cast(pkt_data), length); ssize_t nSend = sendto(socketfd, &(grebuffer[0]), length + sizeof(grehdr_t), 0, (struct sockaddr*) &remote_addr, diff --git a/src/socketgre.h b/src/socketgre.h index 55248d1a9..c36bb327e 100644 --- a/src/socketgre.h +++ b/src/socketgre.h @@ -22,14 +22,14 @@ class PcapExportGre : public PcapExportBase { private: int initSockets(size_t index, uint32_t keybit); - int exportPacket(size_t index, const struct pcap_pkthdr *header, const uint8_t *pkt_data); + int exportPacket(size_t index, const struct pcap_pkthdr *header, const uint8_t *pkt_data, int direct); public: PcapExportGre(const std::vector& remoteips, uint32_t keybit, const std::string& bind_device, const int pmtudisc); ~PcapExportGre(); int initExport(); - int exportPacket(const struct pcap_pkthdr *header, const uint8_t *pkt_data); + int exportPacket(const struct pcap_pkthdr *header, const uint8_t *pkt_data, int direct); int closeExport(); }; diff --git a/src/socketzmq.cpp b/src/socketzmq.cpp index 04f6a099c..3a4b0743c 100644 --- a/src/socketzmq.cpp +++ b/src/socketzmq.cpp @@ -76,10 +76,10 @@ int PcapExportZMQ::closeExport() { } -int PcapExportZMQ::exportPacket(const struct pcap_pkthdr* header, const uint8_t* pkt_data) { +int PcapExportZMQ::exportPacket(const struct pcap_pkthdr* header, const uint8_t* pkt_data, int direct) { int ret = 0; for (size_t i = 0; i < _remoteips.size(); ++i) { - ret += exportPacket(i, header, pkt_data); + ret += exportPacket(i, header, pkt_data, direct); } return ret; } @@ -103,7 +103,8 @@ int PcapExportZMQ::flushBatchBuf(size_t index) { return drop_pkts_num; } -int PcapExportZMQ::exportPacket(size_t index, const struct pcap_pkthdr* header, const uint8_t* pkt_data) { +int PcapExportZMQ::exportPacket(size_t index, const struct pcap_pkthdr* header, const uint8_t* pkt_data, int direct) { + (void)direct; auto& pkts_buf = _pkts_bufs[index]; int drop_pkts_num = 0; diff --git a/src/socketzmq.h b/src/socketzmq.h index 344cf5628..b88c372d5 100644 --- a/src/socketzmq.h +++ b/src/socketzmq.h @@ -52,7 +52,7 @@ class PcapExportZMQ : public PcapExportBase { private: int initSockets(size_t index, uint32_t keybit); - int exportPacket(size_t index, const struct pcap_pkthdr *header, const uint8_t *pkt_data); + int exportPacket(size_t index, const struct pcap_pkthdr *header, const uint8_t *pkt_data, int direct); int flushBatchBuf(size_t index); public: @@ -60,7 +60,7 @@ class PcapExportZMQ : public PcapExportBase { const std::string& bind_device, const int send_buf_size); ~PcapExportZMQ(); int initExport(); - int exportPacket(const struct pcap_pkthdr *header, const uint8_t *pkt_data); + int exportPacket(const struct pcap_pkthdr *header, const uint8_t *pkt_data, int direct); int closeExport(); }; diff --git a/test/unit_test.cpp b/test/unit_test.cpp index 830b22196..15f6fa978 100644 --- a/test/unit_test.cpp +++ b/test/unit_test.cpp @@ -16,7 +16,7 @@ namespace { return 0; } - int exportPacket(const struct pcap_pkthdr* header, const uint8_t* pkt_data) { + int exportPacket(const struct pcap_pkthdr* header, const uint8_t* pkt_data, int direct) { return 0; } @@ -42,7 +42,7 @@ namespace { header.caplen = 32; header.len = 32; std::vector pkt_data(32); - EXPECT_EQ(0, greExport.exportPacket(&header, pkt_data.data())); + EXPECT_EQ(0, greExport.exportPacket(&header, pkt_data.data(), PKTD_NONCHECK)); EXPECT_EQ(0, greExport.closeExport()); } From 776dbc29edae25564ee442a474c245517da04a8b Mon Sep 17 00:00:00 2001 From: Justin Su Date: Fri, 6 Aug 2021 17:13:56 +0800 Subject: [PATCH 64/74] Update CHANGES.md --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 453f56238..801a68211 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,7 +3,7 @@ The list of the most significant changes made in Netis Packet Agent over time. -## Netis Packet Agent 0.3.7 +## Netis Packet Agent 0.5.0 ### Features * Support GRE direction in key. From d3ce433f5c6edd749161b20bba41d9846604e532 Mon Sep 17 00:00:00 2001 From: "Justin.Su" Date: Fri, 6 Aug 2021 17:40:15 +0800 Subject: [PATCH 65/74] update CMakeLists.txt --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1edc41330..9d744088a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,8 +14,8 @@ endif () # set PKTMINERG_MAJOR_VERSION, PKTMINERG_MINOR_VERSION, etc. set(PKTMINERG_MAJOR_VERSION "0") -set(PKTMINERG_MINOR_VERSION "3") -set(PKTMINERG_PATCH_VERSION "6") +set(PKTMINERG_MINOR_VERSION "5") +set(PKTMINERG_PATCH_VERSION "0") set(PKTMINERG_VERSION_STRING "${PKTMINERG_MAJOR_VERSION}.${PKTMINERG_MINOR_VERSION}.${PKTMINERG_PATCH_VERSION}") if(WIN32) From a98d9029d41640fc5eb024f8be3cb94b34f9e6f3 Mon Sep 17 00:00:00 2001 From: "Justin.Su" Date: Fri, 6 Aug 2021 17:51:15 +0800 Subject: [PATCH 66/74] update version --- INSTALL.md | 12 ++++++------ LICENSE.md | 2 +- README-zh-Hans.md | 16 ++++++++-------- README.md | 16 ++++++++-------- scripts/ansible_pktg.md | 2 +- scripts/ansible_pktg.yaml | 4 ++-- scripts/puppet_packet_agent.pp | 16 ++++++++-------- 7 files changed, 34 insertions(+), 34 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 1413360a1..796b8c380 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -12,8 +12,8 @@ Note: The default libpcap with TPACKET_V3 enabled has some performance issue. If 2. Download and install the RPM package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```shell -wget https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6.el6.x86_64.rpm -rpm -ivh netis-packet-agent-0.3.6.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.5.0/netis-packet-agent-0.5.0.el6.x86_64.rpm +rpm -ivh netis-packet-agent-0.5.0.el6.x86_64.rpm ``` @@ -26,8 +26,8 @@ sudo apt-get install libpcap-dev wget 2. Download and install the DEB package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6_amd64.deb -sudo dpkg -i netis-packet-agent-0.3.6_amd64.deb +wget https://github.com/Netis/packet-agent/releases/download/v0.5.0/netis-packet-agent-0.5.0_amd64.deb +sudo dpkg -i netis-packet-agent-0.5.0_amd64.deb ``` 3. If libpcap.so.1 not found when running pktminerg, create softlink for libpcap.so.1 in suitable directory. @@ -49,8 +49,8 @@ yum install libpcap wget 2. Download and install the RPM package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```shell -wget https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6.el6.x86_64.rpm -rpm -ivh netis-packet-agent-0.3.6.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.5.0/netis-packet-agent-0.5.0.el6.x86_64.rpm +rpm -ivh netis-packet-agent-0.5.0.el6.x86_64.rpm ``` diff --git a/LICENSE.md b/LICENSE.md index d0b53b773..3aa3ba9bd 100755 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright (c) 2018, Netis Technologies Co., Ltd. All rights reserved. +Copyright (c) 2018-2021, Netis Technologies Co., Ltd. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/README-zh-Hans.md b/README-zh-Hans.md index 1187a1be6..d114b6c0c 100644 --- a/README-zh-Hans.md +++ b/README-zh-Hans.md @@ -2,9 +2,9 @@ [English](README.md) ∙ 简体中文 ![packet agent's title](./img/title.jpg) -# Netis Packet Agent 0.3.6 +# Netis Packet Agent 0.5.0 -[![Stable release](https://img.shields.io/badge/version-0.3.6-green.svg)](https://github.com/Netis/packet-agent/releases/tag/0.3.6) +[![Stable release](https://img.shields.io/badge/version-0.5.0-green.svg)](https://github.com/Netis/packet-agent/releases/tag/0.5.0) [![Software License](https://img.shields.io/badge/license-BSD3-green.svg)](./LICENSE.md) @@ -35,14 +35,14 @@ yum install libpcap wget 2. 下载并安装RPM包。您可以从[这个地址](https://github.com/Netis/packet-agent/releases)获取最新版本的软件包。 ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6.el6.x86_64.rpm -rpm -ivh netis-packet-agent-0.3.6.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.5.0/netis-packet-agent-0.5.0.el6.x86_64.rpm +rpm -ivh netis-packet-agent-0.5.0.el6.x86_64.rpm ``` #### SUSE12 1. 下载并安装RPM包。您可以从[这个地址](https://github.com/Netis/packet-agent/releases)获取最新版本的软件包。 ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6.el6.x86_64.rpm -rpm -ivh netis-packet-agent-0.3.6.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.5.0/netis-packet-agent-0.5.0.el6.x86_64.rpm +rpm -ivh netis-packet-agent-0.5.0.el6.x86_64.rpm ``` #### Ubuntu 18.04LTS @@ -53,8 +53,8 @@ sudo apt-get install libpcap-dev wget 2. 下载并安装DEB包。您可以从[这个地址](https://github.com/Netis/packet-agent/releases)获取最新版本的软件包。 ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6_amd64.deb -sudo dpkg -i netis-packet-agent-0.3.6_amd64.deb +wget https://github.com/Netis/packet-agent/releases/download/v0.5.0/netis-packet-agent-0.5.0_amd64.deb +sudo dpkg -i netis-packet-agent-0.5.0_amd64.deb ``` 3. 如果提示libpcap.so找不到,到libpcap.so所在目录下创建libpcap.so.1软链接。 diff --git a/README.md b/README.md index 250005be4..4210ae411 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ English ∙ [简体中文](README-zh-Hans.md) ![packet agent's title](./img/title.jpg) -# Netis Packet Agent 0.3.6 +# Netis Packet Agent 0.5.0 -[![Stable release](https://img.shields.io/badge/version-0.3.6-green.svg)](https://github.com/Netis/packet-agent/releases/tag/0.3.6) +[![Stable release](https://img.shields.io/badge/version-0.5.0-green.svg)](https://github.com/Netis/packet-agent/releases/tag/0.5.0) [![Software License](https://img.shields.io/badge/license-BSD3-green.svg)](./LICENSE.md) ## What is Netis Packet Agent? @@ -35,15 +35,15 @@ yum install libpcap wget zeromq 2. Download and install the RPM package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6.el6.x86_64.rpm -rpm -ivh netis-packet-agent-0.3.6.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.5.0/netis-packet-agent-0.5.0.el6.x86_64.rpm +rpm -ivh netis-packet-agent-0.5.0.el6.x86_64.rpm ``` #### SUSE 12 1. Download and install the RPM package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6.el6.x86_64.rpm -rpm -ivh netis-packet-agent-0.3.6.el6.x86_64.rpm +wget https://github.com/Netis/packet-agent/releases/download/v0.5.0/netis-packet-agent-0.5.0.el6.x86_64.rpm +rpm -ivh netis-packet-agent-0.5.0.el6.x86_64.rpm ``` @@ -55,8 +55,8 @@ sudo apt-get install libpcap-dev wget 2. Download and install the DEB package. Find the latest package from [Releases Page](https://github.com/Netis/packet-agent/releases). ```bash -wget https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6_amd64.deb -sudo dpkg -i netis-packet-agent-0.3.6_amd64.deb +wget https://github.com/Netis/packet-agent/releases/download/v0.5.0/netis-packet-agent-0.5.0_amd64.deb +sudo dpkg -i netis-packet-agent-0.5.0_amd64.deb ``` 3. If libpcap.so.1 not found when running pktminerg, create softlink for libpcap.so.1 in suitable directory. diff --git a/scripts/ansible_pktg.md b/scripts/ansible_pktg.md index 5c29bd715..7c3355f23 100644 --- a/scripts/ansible_pktg.md +++ b/scripts/ansible_pktg.md @@ -1,6 +1,6 @@ # 说明 1. 在主控的中心服务器上需要安装有 ansible 程序。如果没有,可以使用类似 yum install ansible 的命令安装。
2. 将需要安装 packet-agent 的机器加入 ansible 的 hosts 文件:比如添加组 [servers_to_install_pktg] 到 /etc/ansible/hosts,并在该组下加入若干机器IP。
-3. 拷贝待安装的 packet-agent rpm/deb 到 ansible_pktg.yaml 同一目录下。如果待安装的 rpm/deb 不是 yaml 中指定的 netis-packet-agent-0.3.6.el6.x86_64.rpm / netis-packet-agent-0.3.6_amd64.deb,则将 ansible_pktg.yaml 中 rpm_file/deb_file 修改为你需要的文件名。
+3. 拷贝待安装的 packet-agent rpm/deb 到 ansible_pktg.yaml 同一目录下。如果待安装的 rpm/deb 不是 yaml 中指定的 netis-packet-agent-0.5.0.el6.x86_64.rpm / netis-packet-agent-0.5.0_amd64.deb,则将 ansible_pktg.yaml 中 rpm_file/deb_file 修改为你需要的文件名。
4. 执行 ansible-playbook ansible_pktg.yaml 命令,将 packet-agent 程序安装到各个目标机器上。
diff --git a/scripts/ansible_pktg.yaml b/scripts/ansible_pktg.yaml index 70bdbc9cf..0391d1df1 100644 --- a/scripts/ansible_pktg.yaml +++ b/scripts/ansible_pktg.yaml @@ -2,8 +2,8 @@ - name: install packet-agent and its depends hosts: servers_to_install_pktg vars: - rpm_file: netis-packet-agent-0.3.6.el6.x86_64.rpm - deb_file: netis-packet-agent-0.3.6_amd64.deb + rpm_file: netis-packet-agent-0.5.0.el6.x86_64.rpm + deb_file: netis-packet-agent-0.5.0_amd64.deb remote_user: root gather_facts: True diff --git a/scripts/puppet_packet_agent.pp b/scripts/puppet_packet_agent.pp index ef406df32..a47bb4b80 100644 --- a/scripts/puppet_packet_agent.pp +++ b/scripts/puppet_packet_agent.pp @@ -3,30 +3,30 @@ 'Suse': { $lib_pcap = 'libpcap'; $cur_dir = '/tmp/'; - $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6.el6.x86_64.rpm'; + $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.5.0/netis-packet-agent-0.5.0.el6.x86_64.rpm'; $package_provider = 'rpm'; - $install_file = '/tmp/netis-packet-agent-0.3.6.el6.x86_64.rpm' + $install_file = '/tmp/netis-packet-agent-0.5.0.el6.x86_64.rpm' } 'RedHat': { $lib_pcap = 'libpcap'; $cur_dir = '/tmp/'; - $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6.el6.x86_64.rpm'; + $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.5.0/netis-packet-agent-0.5.0.el6.x86_64.rpm'; $package_provider = 'rpm'; - $install_file = '/tmp/netis-packet-agent-0.3.6.el6.x86_64.rpm' + $install_file = '/tmp/netis-packet-agent-0.5.0.el6.x86_64.rpm' } 'Debian': { $lib_pcap = 'libpcap-dev'; $cur_dir = '/tmp/'; - $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6_amd64.deb'; + $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.5.0/netis-packet-agent-0.5.0_amd64.deb'; $package_provider = 'dpkg'; - $install_file = '/tmp/netis-packet-agent-0.3.6_amd64.deb' + $install_file = '/tmp/netis-packet-agent-0.5.0_amd64.deb' } default: { $lib_pcap = 'libpcap'; $cur_dir = '/tmp/'; - $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.3.6/netis-packet-agent-0.3.6.el6.x86_64.rpm'; + $download_link = 'https://github.com/Netis/packet-agent/releases/download/v0.5.0/netis-packet-agent-0.5.0.el6.x86_64.rpm'; $package_provider = 'rpm'; - $install_file = '/tmp/netis-packet-agent-0.3.6.el6.x86_64.rpm' + $install_file = '/tmp/netis-packet-agent-0.5.0.el6.x86_64.rpm' } } From 32c5943f7708c17c843168e8d9e818b9d1d157ac Mon Sep 17 00:00:00 2001 From: "haibo.fu" Date: Thu, 12 Aug 2021 15:11:18 +0800 Subject: [PATCH 67/74] 1. add vxlan forward --- CMakeLists.txt | 18 +- include/zmq.hpp | 2688 +++++++++++++++++++++++++++++++++++++++++ include/zmq_addon.hpp | 743 ++++++++++++ src/pcapexport.h | 1 + src/pktminerg.cpp | 23 +- src/socketvxlan.cpp | 168 +++ src/socketvxlan.h | 35 + src/socketzmq.cpp | 8 +- tools/gredemo.cpp | 17 +- tools/gredump.cpp | 8 +- tools/vxlandump.cpp | 163 +++ 11 files changed, 3847 insertions(+), 25 deletions(-) create mode 100644 include/zmq.hpp create mode 100644 include/zmq_addon.hpp create mode 100644 src/socketvxlan.cpp create mode 100644 src/socketvxlan.h create mode 100644 tools/vxlandump.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 9d744088a..3d5515a7b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -203,6 +203,11 @@ set(SOURCE_FILES_GREDUMP ${SOURCE_FILES_PCAP} ) +set(SOURCE_FILES_VXLANDUMP + ${PROJECT_SOURCE_DIR}/tools/vxlandump.cpp + ${SOURCE_FILES_PCAP} + ) + set(SOURCE_FILES_PCAPCOMPARE ${PROJECT_SOURCE_DIR}/tools/pcapcompare.cpp ) @@ -212,6 +217,7 @@ if(WIN32) ${SOURCE_FILES_SYSHELP} ${SOURCE_FILES_PCAP} ${PROJECT_SOURCE_DIR}/src/socketgre.cpp + ${PROJECT_SOURCE_DIR}/src/socketvxlan.cpp ${PROJECT_SOURCE_DIR}/src/pcaphandler.cpp ${PROJECT_SOURCE_DIR}/src/statislog.cpp ) @@ -220,6 +226,7 @@ else() ${SOURCE_FILES_SYSHELP} ${SOURCE_FILES_PCAP} ${PROJECT_SOURCE_DIR}/src/socketgre.cpp + ${PROJECT_SOURCE_DIR}/src/socketvxlan.cpp ${PROJECT_SOURCE_DIR}/src/socketzmq.cpp ${PROJECT_SOURCE_DIR}/src/pcaphandler.cpp ${PROJECT_SOURCE_DIR}/src/statislog.cpp @@ -244,10 +251,10 @@ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE) if(UNIX) set(PCAP_LIB pcap) set(BOOST_LIB boost_program_options.a boost_system.a boost_filesystem.a) - set(ZMQ_LIB cppzmq-static) + set(ZMQ_LIB zmq) else() set(PCAP_LIB wpcap Packet) - set(SOCKET_LIB ws2_32) + set(SOCKET_LIB zmq) set(ZMQ_LIB ) endif() @@ -265,6 +272,13 @@ if(WIN32) endif() target_link_libraries(gredump ${BOOST_LIB} ${PCAP_LIB} ${SOCKET_LIB}) +# bin --vxlandump +add_executable(vxlandump ${SOURCE_FILES_VXLANDUMP}) +if (WIN32) + set_target_properties(vxlandump PROPERTIES LINK_FLAGS "/MANIFESTUAC:\"level='requireAdministrator' uiAccess='false'\"") +endif () +target_link_libraries(vxlandump ${BOOST_LIB} ${PCAP_LIB} ${SOCKET_LIB}) + # bin -- pcapcompare add_executable(pcapcompare ${SOURCE_FILES_PCAPCOMPARE}) target_link_libraries(pcapcompare ${BOOST_LIB} ${PCAP_LIB} ${SOCKET_LIB}) diff --git a/include/zmq.hpp b/include/zmq.hpp new file mode 100644 index 000000000..d02a208f9 --- /dev/null +++ b/include/zmq.hpp @@ -0,0 +1,2688 @@ +/* + Copyright (c) 2016-2017 ZeroMQ community + Copyright (c) 2009-2011 250bpm s.r.o. + Copyright (c) 2011 Botond Ballo + Copyright (c) 2007-2009 iMatix Corporation + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + IN THE SOFTWARE. +*/ + +#ifndef __ZMQ_HPP_INCLUDED__ +#define __ZMQ_HPP_INCLUDED__ + +#ifdef _WIN32 +#ifndef NOMINMAX +#define NOMINMAX +#endif +#endif + +// included here for _HAS_CXX* macros +#include + +#if defined(_MSVC_LANG) +#define CPPZMQ_LANG _MSVC_LANG +#else +#define CPPZMQ_LANG __cplusplus +#endif +// overwrite if specific language macros indicate higher version +#if defined(_HAS_CXX14) && _HAS_CXX14 && CPPZMQ_LANG < 201402L +#undef CPPZMQ_LANG +#define CPPZMQ_LANG 201402L +#endif +#if defined(_HAS_CXX17) && _HAS_CXX17 && CPPZMQ_LANG < 201703L +#undef CPPZMQ_LANG +#define CPPZMQ_LANG 201703L +#endif + +// macros defined if has a specific standard or greater +#if CPPZMQ_LANG >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1900) +#define ZMQ_CPP11 +#endif +#if CPPZMQ_LANG >= 201402L +#define ZMQ_CPP14 +#endif +#if CPPZMQ_LANG >= 201703L +#define ZMQ_CPP17 +#endif + +#if defined(ZMQ_CPP14) && !defined(_MSC_VER) +#define ZMQ_DEPRECATED(msg) [[deprecated(msg)]] +#elif defined(_MSC_VER) +#define ZMQ_DEPRECATED(msg) __declspec(deprecated(msg)) +#elif defined(__GNUC__) +#define ZMQ_DEPRECATED(msg) __attribute__((deprecated(msg))) +#endif + +#if defined(ZMQ_CPP17) +#define ZMQ_NODISCARD [[nodiscard]] +#else +#define ZMQ_NODISCARD +#endif + +#if defined(ZMQ_CPP11) +#define ZMQ_NOTHROW noexcept +#define ZMQ_EXPLICIT explicit +#define ZMQ_OVERRIDE override +#define ZMQ_NULLPTR nullptr +#define ZMQ_CONSTEXPR_FN constexpr +#define ZMQ_CONSTEXPR_VAR constexpr +#define ZMQ_CPP11_DEPRECATED(msg) ZMQ_DEPRECATED(msg) +#else +#define ZMQ_NOTHROW throw() +#define ZMQ_EXPLICIT +#define ZMQ_OVERRIDE +#define ZMQ_NULLPTR 0 +#define ZMQ_CONSTEXPR_FN +#define ZMQ_CONSTEXPR_VAR const +#define ZMQ_CPP11_DEPRECATED(msg) +#endif +#if defined(ZMQ_CPP14) && (!defined(_MSC_VER) || _MSC_VER > 1900) +#define ZMQ_EXTENDED_CONSTEXPR +#endif +#if defined(ZMQ_CPP17) +#define ZMQ_INLINE_VAR inline +#else +#define ZMQ_INLINE_VAR +#endif + +#include +#include + +#include +#include +#include +#include +#include +#include +#ifdef ZMQ_CPP11 +#include +#include +#include +#include +#endif + +#if defined(__has_include) && defined(ZMQ_CPP17) +#define CPPZMQ_HAS_INCLUDE_CPP17(X) __has_include(X) +#else +#define CPPZMQ_HAS_INCLUDE_CPP17(X) 0 +#endif + +#if CPPZMQ_HAS_INCLUDE_CPP17() && !defined(CPPZMQ_HAS_OPTIONAL) +#define CPPZMQ_HAS_OPTIONAL 1 +#endif +#ifndef CPPZMQ_HAS_OPTIONAL +#define CPPZMQ_HAS_OPTIONAL 0 +#elif CPPZMQ_HAS_OPTIONAL +#include +#endif + +#if CPPZMQ_HAS_INCLUDE_CPP17() && !defined(CPPZMQ_HAS_STRING_VIEW) +#define CPPZMQ_HAS_STRING_VIEW 1 +#endif +#ifndef CPPZMQ_HAS_STRING_VIEW +#define CPPZMQ_HAS_STRING_VIEW 0 +#elif CPPZMQ_HAS_STRING_VIEW +#include +#endif + +/* Version macros for compile-time API version detection */ +#define CPPZMQ_VERSION_MAJOR 4 +#define CPPZMQ_VERSION_MINOR 7 +#define CPPZMQ_VERSION_PATCH 1 + +#define CPPZMQ_VERSION \ + ZMQ_MAKE_VERSION(CPPZMQ_VERSION_MAJOR, CPPZMQ_VERSION_MINOR, \ + CPPZMQ_VERSION_PATCH) + +// Detect whether the compiler supports C++11 rvalue references. +#if (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 2)) \ + && defined(__GXX_EXPERIMENTAL_CXX0X__)) +#define ZMQ_HAS_RVALUE_REFS +#define ZMQ_DELETED_FUNCTION = delete +#elif defined(__clang__) +#if __has_feature(cxx_rvalue_references) +#define ZMQ_HAS_RVALUE_REFS +#endif + +#if __has_feature(cxx_deleted_functions) +#define ZMQ_DELETED_FUNCTION = delete +#else +#define ZMQ_DELETED_FUNCTION +#endif +#elif defined(_MSC_VER) && (_MSC_VER >= 1900) +#define ZMQ_HAS_RVALUE_REFS +#define ZMQ_DELETED_FUNCTION = delete +#elif defined(_MSC_VER) && (_MSC_VER >= 1600) +#define ZMQ_HAS_RVALUE_REFS +#define ZMQ_DELETED_FUNCTION +#else +#define ZMQ_DELETED_FUNCTION +#endif + +#if defined(ZMQ_CPP11) && !defined(__llvm__) && !defined(__INTEL_COMPILER) \ + && defined(__GNUC__) && __GNUC__ < 5 +#define ZMQ_CPP11_PARTIAL +#elif defined(__GLIBCXX__) && __GLIBCXX__ < 20160805 +//the date here is the last date of gcc 4.9.4, which +// effectively means libstdc++ from gcc 5.5 and higher won't trigger this branch +#define ZMQ_CPP11_PARTIAL +#endif + +#ifdef ZMQ_CPP11 +#ifdef ZMQ_CPP11_PARTIAL +#define ZMQ_IS_TRIVIALLY_COPYABLE(T) __has_trivial_copy(T) +#else +#include +#define ZMQ_IS_TRIVIALLY_COPYABLE(T) std::is_trivially_copyable::value +#endif +#endif + +#if ZMQ_VERSION >= ZMQ_MAKE_VERSION(3, 3, 0) +#define ZMQ_NEW_MONITOR_EVENT_LAYOUT +#endif + +#if ZMQ_VERSION >= ZMQ_MAKE_VERSION(4, 1, 0) +#define ZMQ_HAS_PROXY_STEERABLE +/* Socket event data */ +typedef struct +{ + uint16_t event; // id of the event as bitfield + int32_t value; // value is either error code, fd or reconnect interval +} zmq_event_t; +#endif + +// Avoid using deprecated message receive function when possible +#if ZMQ_VERSION < ZMQ_MAKE_VERSION(3, 2, 0) +#define zmq_msg_recv(msg, socket, flags) zmq_recvmsg(socket, msg, flags) +#endif + + +// In order to prevent unused variable warnings when building in non-debug +// mode use this macro to make assertions. +#ifndef NDEBUG +#define ZMQ_ASSERT(expression) assert(expression) +#else +#define ZMQ_ASSERT(expression) (void) (expression) +#endif + +namespace zmq +{ +#ifdef ZMQ_CPP11 +namespace detail +{ +namespace ranges +{ +using std::begin; +using std::end; +template auto begin(T &&r) -> decltype(begin(std::forward(r))) +{ + return begin(std::forward(r)); +} +template auto end(T &&r) -> decltype(end(std::forward(r))) +{ + return end(std::forward(r)); +} +} // namespace ranges + +template using void_t = void; + +template +using iter_value_t = typename std::iterator_traits::value_type; + +template +using range_iter_t = decltype( + ranges::begin(std::declval::type &>())); + +template using range_value_t = iter_value_t>; + +template struct is_range : std::false_type +{ +}; + +template +struct is_range< + T, + void_t::type &>()) + == ranges::end(std::declval::type &>()))>> + : std::true_type +{ +}; + +} // namespace detail +#endif + +typedef zmq_free_fn free_fn; +typedef zmq_pollitem_t pollitem_t; + +class error_t : public std::exception +{ + public: + error_t() ZMQ_NOTHROW : errnum(zmq_errno()) {} + explicit error_t(int err) ZMQ_NOTHROW : errnum(err) {} + virtual const char *what() const ZMQ_NOTHROW ZMQ_OVERRIDE + { + return zmq_strerror(errnum); + } + int num() const ZMQ_NOTHROW { return errnum; } + + private: + int errnum; +}; + +inline int poll(zmq_pollitem_t *items_, size_t nitems_, long timeout_ = -1) +{ + int rc = zmq_poll(items_, static_cast(nitems_), timeout_); + if (rc < 0) + throw error_t(); + return rc; +} + +ZMQ_DEPRECATED("from 4.3.1, use poll taking non-const items") +inline int poll(zmq_pollitem_t const *items_, size_t nitems_, long timeout_ = -1) +{ + return poll(const_cast(items_), nitems_, timeout_); +} + +#ifdef ZMQ_CPP11 +ZMQ_DEPRECATED("from 4.3.1, use poll taking non-const items") +inline int +poll(zmq_pollitem_t const *items, size_t nitems, std::chrono::milliseconds timeout) +{ + return poll(const_cast(items), nitems, + static_cast(timeout.count())); +} + +ZMQ_DEPRECATED("from 4.3.1, use poll taking non-const items") +inline int poll(std::vector const &items, + std::chrono::milliseconds timeout) +{ + return poll(const_cast(items.data()), items.size(), + static_cast(timeout.count())); +} + +ZMQ_DEPRECATED("from 4.3.1, use poll taking non-const items") +inline int poll(std::vector const &items, long timeout_ = -1) +{ + return poll(const_cast(items.data()), items.size(), timeout_); +} + +inline int +poll(zmq_pollitem_t *items, size_t nitems, std::chrono::milliseconds timeout) +{ + return poll(items, nitems, static_cast(timeout.count())); +} + +inline int poll(std::vector &items, + std::chrono::milliseconds timeout) +{ + return poll(items.data(), items.size(), static_cast(timeout.count())); +} + +ZMQ_DEPRECATED("from 4.3.1, use poll taking std::chrono instead of long") +inline int poll(std::vector &items, long timeout_ = -1) +{ + return poll(items.data(), items.size(), timeout_); +} + +template +inline int poll(std::array &items, + std::chrono::milliseconds timeout) +{ + return poll(items.data(), items.size(), static_cast(timeout.count())); +} +#endif + + +inline void version(int *major_, int *minor_, int *patch_) +{ + zmq_version(major_, minor_, patch_); +} + +#ifdef ZMQ_CPP11 +inline std::tuple version() +{ + std::tuple v; + zmq_version(&std::get<0>(v), &std::get<1>(v), &std::get<2>(v)); + return v; +} + +#if !defined(ZMQ_CPP11_PARTIAL) +namespace detail +{ +template struct is_char_type +{ + // true if character type for string literals in C++11 + static constexpr bool value = + std::is_same::value || std::is_same::value + || std::is_same::value || std::is_same::value; +}; +} +#endif + +#endif + +class message_t +{ + public: + message_t() ZMQ_NOTHROW + { + int rc = zmq_msg_init(&msg); + ZMQ_ASSERT(rc == 0); + } + + explicit message_t(size_t size_) + { + int rc = zmq_msg_init_size(&msg, size_); + if (rc != 0) + throw error_t(); + } + + template message_t(ForwardIter first, ForwardIter last) + { + typedef typename std::iterator_traits::value_type value_t; + + assert(std::distance(first, last) >= 0); + size_t const size_ = + static_cast(std::distance(first, last)) * sizeof(value_t); + int const rc = zmq_msg_init_size(&msg, size_); + if (rc != 0) + throw error_t(); + std::copy(first, last, data()); + } + + message_t(const void *data_, size_t size_) + { + int rc = zmq_msg_init_size(&msg, size_); + if (rc != 0) + throw error_t(); + if (size_) { + // this constructor allows (nullptr, 0), + // memcpy with a null pointer is UB + memcpy(data(), data_, size_); + } + } + + message_t(void *data_, size_t size_, free_fn *ffn_, void *hint_ = ZMQ_NULLPTR) + { + int rc = zmq_msg_init_data(&msg, data_, size_, ffn_, hint_); + if (rc != 0) + throw error_t(); + } + + // overload set of string-like types and generic containers +#if defined(ZMQ_CPP11) && !defined(ZMQ_CPP11_PARTIAL) + // NOTE this constructor will include the null terminator + // when called with a string literal. + // An overload taking const char* can not be added because + // it would be preferred over this function and break compatiblity. + template< + class Char, + size_t N, + typename = typename std::enable_if::value>::type> + ZMQ_DEPRECATED("from 4.7.0, use constructors taking iterators, (pointer, size) " + "or strings instead") + explicit message_t(const Char (&data)[N]) : + message_t(detail::ranges::begin(data), detail::ranges::end(data)) + { + } + + template::value + && ZMQ_IS_TRIVIALLY_COPYABLE(detail::range_value_t) + && !detail::is_char_type>::value + && !std::is_same::value>::type> + explicit message_t(const Range &rng) : + message_t(detail::ranges::begin(rng), detail::ranges::end(rng)) + { + } + + explicit message_t(const std::string &str) : message_t(str.data(), str.size()) {} + +#if CPPZMQ_HAS_STRING_VIEW + explicit message_t(std::string_view str) : message_t(str.data(), str.size()) {} +#endif + +#endif + +#ifdef ZMQ_HAS_RVALUE_REFS + message_t(message_t &&rhs) ZMQ_NOTHROW : msg(rhs.msg) + { + int rc = zmq_msg_init(&rhs.msg); + ZMQ_ASSERT(rc == 0); + } + + message_t &operator=(message_t &&rhs) ZMQ_NOTHROW + { + std::swap(msg, rhs.msg); + return *this; + } +#endif + + ~message_t() ZMQ_NOTHROW + { + int rc = zmq_msg_close(&msg); + ZMQ_ASSERT(rc == 0); + } + + void rebuild() + { + int rc = zmq_msg_close(&msg); + if (rc != 0) + throw error_t(); + rc = zmq_msg_init(&msg); + ZMQ_ASSERT(rc == 0); + } + + void rebuild(size_t size_) + { + int rc = zmq_msg_close(&msg); + if (rc != 0) + throw error_t(); + rc = zmq_msg_init_size(&msg, size_); + if (rc != 0) + throw error_t(); + } + + void rebuild(const void *data_, size_t size_) + { + int rc = zmq_msg_close(&msg); + if (rc != 0) + throw error_t(); + rc = zmq_msg_init_size(&msg, size_); + if (rc != 0) + throw error_t(); + memcpy(data(), data_, size_); + } + + void rebuild(void *data_, size_t size_, free_fn *ffn_, void *hint_ = ZMQ_NULLPTR) + { + int rc = zmq_msg_close(&msg); + if (rc != 0) + throw error_t(); + rc = zmq_msg_init_data(&msg, data_, size_, ffn_, hint_); + if (rc != 0) + throw error_t(); + } + + ZMQ_DEPRECATED("from 4.3.1, use move taking non-const reference instead") + void move(message_t const *msg_) + { + int rc = zmq_msg_move(&msg, const_cast(msg_->handle())); + if (rc != 0) + throw error_t(); + } + + void move(message_t &msg_) + { + int rc = zmq_msg_move(&msg, msg_.handle()); + if (rc != 0) + throw error_t(); + } + + ZMQ_DEPRECATED("from 4.3.1, use copy taking non-const reference instead") + void copy(message_t const *msg_) + { + int rc = zmq_msg_copy(&msg, const_cast(msg_->handle())); + if (rc != 0) + throw error_t(); + } + + void copy(message_t &msg_) + { + int rc = zmq_msg_copy(&msg, msg_.handle()); + if (rc != 0) + throw error_t(); + } + + bool more() const ZMQ_NOTHROW + { + int rc = zmq_msg_more(const_cast(&msg)); + return rc != 0; + } + + void *data() ZMQ_NOTHROW { return zmq_msg_data(&msg); } + + const void *data() const ZMQ_NOTHROW + { + return zmq_msg_data(const_cast(&msg)); + } + + size_t size() const ZMQ_NOTHROW + { + return zmq_msg_size(const_cast(&msg)); + } + + ZMQ_NODISCARD bool empty() const ZMQ_NOTHROW { return size() == 0u; } + + template T *data() ZMQ_NOTHROW { return static_cast(data()); } + + template T const *data() const ZMQ_NOTHROW + { + return static_cast(data()); + } + + ZMQ_DEPRECATED("from 4.3.0, use operator== instead") + bool equal(const message_t *other) const ZMQ_NOTHROW { return *this == *other; } + + bool operator==(const message_t &other) const ZMQ_NOTHROW + { + const size_t my_size = size(); + return my_size == other.size() && 0 == memcmp(data(), other.data(), my_size); + } + + bool operator!=(const message_t &other) const ZMQ_NOTHROW + { + return !(*this == other); + } + +#if ZMQ_VERSION >= ZMQ_MAKE_VERSION(3, 2, 0) + int get(int property_) + { + int value = zmq_msg_get(&msg, property_); + if (value == -1) + throw error_t(); + return value; + } +#endif + +#if ZMQ_VERSION >= ZMQ_MAKE_VERSION(4, 1, 0) + const char *gets(const char *property_) + { + const char *value = zmq_msg_gets(&msg, property_); + if (value == ZMQ_NULLPTR) + throw error_t(); + return value; + } +#endif + +#if defined(ZMQ_BUILD_DRAFT_API) && ZMQ_VERSION >= ZMQ_MAKE_VERSION(4, 2, 0) + uint32_t routing_id() const + { + return zmq_msg_routing_id(const_cast(&msg)); + } + + void set_routing_id(uint32_t routing_id) + { + int rc = zmq_msg_set_routing_id(&msg, routing_id); + if (rc != 0) + throw error_t(); + } + + const char *group() const + { + return zmq_msg_group(const_cast(&msg)); + } + + void set_group(const char *group) + { + int rc = zmq_msg_set_group(&msg, group); + if (rc != 0) + throw error_t(); + } +#endif + + // interpret message content as a string + std::string to_string() const + { + return std::string(static_cast(data()), size()); + } +#if CPPZMQ_HAS_STRING_VIEW + // interpret message content as a string + std::string_view to_string_view() const noexcept + { + return std::string_view(static_cast(data()), size()); + } +#endif + + /** Dump content to string for debugging. + * Ascii chars are readable, the rest is printed as hex. + * Probably ridiculously slow. + * Use to_string() or to_string_view() for + * interpreting the message as a string. + */ + std::string str() const + { + // Partly mutuated from the same method in zmq::multipart_t + std::stringstream os; + + const unsigned char *msg_data = this->data(); + unsigned char byte; + size_t size = this->size(); + int is_ascii[2] = {0, 0}; + + os << "zmq::message_t [size " << std::dec << std::setw(3) + << std::setfill('0') << size << "] ("; + // Totally arbitrary + if (size >= 1000) { + os << "... too big to print)"; + } else { + while (size--) { + byte = *msg_data++; + + is_ascii[1] = (byte >= 32 && byte < 127); + if (is_ascii[1] != is_ascii[0]) + os << " "; // Separate text/non text + + if (is_ascii[1]) { + os << byte; + } else { + os << std::hex << std::uppercase << std::setw(2) + << std::setfill('0') << static_cast(byte); + } + is_ascii[0] = is_ascii[1]; + } + os << ")"; + } + return os.str(); + } + + void swap(message_t &other) ZMQ_NOTHROW + { + // this assumes zmq::msg_t from libzmq is trivially relocatable + std::swap(msg, other.msg); + } + + ZMQ_NODISCARD zmq_msg_t *handle() ZMQ_NOTHROW { return &msg; } + ZMQ_NODISCARD const zmq_msg_t *handle() const ZMQ_NOTHROW { return &msg; } + + private: + // The underlying message + zmq_msg_t msg; + + // Disable implicit message copying, so that users won't use shared + // messages (less efficient) without being aware of the fact. + message_t(const message_t &) ZMQ_DELETED_FUNCTION; + void operator=(const message_t &) ZMQ_DELETED_FUNCTION; +}; + +inline void swap(message_t &a, message_t &b) ZMQ_NOTHROW +{ + a.swap(b); +} + +#ifdef ZMQ_CPP11 +enum class ctxopt +{ +#ifdef ZMQ_BLOCKY + blocky = ZMQ_BLOCKY, +#endif +#ifdef ZMQ_IO_THREADS + io_threads = ZMQ_IO_THREADS, +#endif +#ifdef ZMQ_THREAD_SCHED_POLICY + thread_sched_policy = ZMQ_THREAD_SCHED_POLICY, +#endif +#ifdef ZMQ_THREAD_PRIORITY + thread_priority = ZMQ_THREAD_PRIORITY, +#endif +#ifdef ZMQ_THREAD_AFFINITY_CPU_ADD + thread_affinity_cpu_add = ZMQ_THREAD_AFFINITY_CPU_ADD, +#endif +#ifdef ZMQ_THREAD_AFFINITY_CPU_REMOVE + thread_affinity_cpu_remove = ZMQ_THREAD_AFFINITY_CPU_REMOVE, +#endif +#ifdef ZMQ_THREAD_NAME_PREFIX + thread_name_prefix = ZMQ_THREAD_NAME_PREFIX, +#endif +#ifdef ZMQ_MAX_MSGSZ + max_msgsz = ZMQ_MAX_MSGSZ, +#endif +#ifdef ZMQ_ZERO_COPY_RECV + zero_copy_recv = ZMQ_ZERO_COPY_RECV, +#endif +#ifdef ZMQ_MAX_SOCKETS + max_sockets = ZMQ_MAX_SOCKETS, +#endif +#ifdef ZMQ_SOCKET_LIMIT + socket_limit = ZMQ_SOCKET_LIMIT, +#endif +#ifdef ZMQ_IPV6 + ipv6 = ZMQ_IPV6, +#endif +#ifdef ZMQ_MSG_T_SIZE + msg_t_size = ZMQ_MSG_T_SIZE +#endif +}; +#endif + +class context_t +{ + public: + context_t() + { + ptr = zmq_ctx_new(); + if (ptr == ZMQ_NULLPTR) + throw error_t(); + } + + + explicit context_t(int io_threads_, int max_sockets_ = ZMQ_MAX_SOCKETS_DFLT) + { + ptr = zmq_ctx_new(); + if (ptr == ZMQ_NULLPTR) + throw error_t(); + + int rc = zmq_ctx_set(ptr, ZMQ_IO_THREADS, io_threads_); + ZMQ_ASSERT(rc == 0); + + rc = zmq_ctx_set(ptr, ZMQ_MAX_SOCKETS, max_sockets_); + ZMQ_ASSERT(rc == 0); + } + +#ifdef ZMQ_HAS_RVALUE_REFS + context_t(context_t &&rhs) ZMQ_NOTHROW : ptr(rhs.ptr) { rhs.ptr = ZMQ_NULLPTR; } + context_t &operator=(context_t &&rhs) ZMQ_NOTHROW + { + close(); + std::swap(ptr, rhs.ptr); + return *this; + } +#endif + + ~context_t() ZMQ_NOTHROW { close(); } + + ZMQ_CPP11_DEPRECATED("from 4.7.0, use set taking zmq::ctxopt instead") + int setctxopt(int option_, int optval_) + { + int rc = zmq_ctx_set(ptr, option_, optval_); + ZMQ_ASSERT(rc == 0); + return rc; + } + + ZMQ_CPP11_DEPRECATED("from 4.7.0, use get taking zmq::ctxopt instead") + int getctxopt(int option_) { return zmq_ctx_get(ptr, option_); } + +#ifdef ZMQ_CPP11 + void set(ctxopt option, int optval) + { + int rc = zmq_ctx_set(ptr, static_cast(option), optval); + if (rc == -1) + throw error_t(); + } + + ZMQ_NODISCARD int get(ctxopt option) + { + int rc = zmq_ctx_get(ptr, static_cast(option)); + // some options have a default value of -1 + // which is unfortunate, and may result in errors + // that don't make sense + if (rc == -1) + throw error_t(); + return rc; + } +#endif + + // Terminates context (see also shutdown()). + void close() ZMQ_NOTHROW + { + if (ptr == ZMQ_NULLPTR) + return; + + int rc; + do { + rc = zmq_ctx_destroy(ptr); + } while (rc == -1 && errno == EINTR); + + ZMQ_ASSERT(rc == 0); + ptr = ZMQ_NULLPTR; + } + + // Shutdown context in preparation for termination (close()). + // Causes all blocking socket operations and any further + // socket operations to return with ETERM. + void shutdown() ZMQ_NOTHROW + { + if (ptr == ZMQ_NULLPTR) + return; + int rc = zmq_ctx_shutdown(ptr); + ZMQ_ASSERT(rc == 0); + } + + // Be careful with this, it's probably only useful for + // using the C api together with an existing C++ api. + // Normally you should never need to use this. + ZMQ_EXPLICIT operator void *() ZMQ_NOTHROW { return ptr; } + + ZMQ_EXPLICIT operator void const *() const ZMQ_NOTHROW { return ptr; } + + ZMQ_NODISCARD void *handle() ZMQ_NOTHROW { return ptr; } + + ZMQ_DEPRECATED("from 4.7.0, use handle() != nullptr instead") + operator bool() const ZMQ_NOTHROW { return ptr != ZMQ_NULLPTR; } + + void swap(context_t &other) ZMQ_NOTHROW { std::swap(ptr, other.ptr); } + + private: + void *ptr; + + context_t(const context_t &) ZMQ_DELETED_FUNCTION; + void operator=(const context_t &) ZMQ_DELETED_FUNCTION; +}; + +inline void swap(context_t &a, context_t &b) ZMQ_NOTHROW +{ + a.swap(b); +} + +#ifdef ZMQ_CPP11 + +struct recv_buffer_size +{ + size_t size; // number of bytes written to buffer + size_t untruncated_size; // untruncated message size in bytes + + ZMQ_NODISCARD bool truncated() const noexcept + { + return size != untruncated_size; + } +}; + +#if CPPZMQ_HAS_OPTIONAL + +using send_result_t = std::optional; +using recv_result_t = std::optional; +using recv_buffer_result_t = std::optional; + +#else + +namespace detail +{ +// A C++11 type emulating the most basic +// operations of std::optional for trivial types +template class trivial_optional +{ + public: + static_assert(std::is_trivial::value, "T must be trivial"); + using value_type = T; + + trivial_optional() = default; + trivial_optional(T value) noexcept : _value(value), _has_value(true) {} + + const T *operator->() const noexcept + { + assert(_has_value); + return &_value; + } + T *operator->() noexcept + { + assert(_has_value); + return &_value; + } + + const T &operator*() const noexcept + { + assert(_has_value); + return _value; + } + T &operator*() noexcept + { + assert(_has_value); + return _value; + } + + T &value() + { + if (!_has_value) + throw std::exception(); + return _value; + } + const T &value() const + { + if (!_has_value) + throw std::exception(); + return _value; + } + + explicit operator bool() const noexcept { return _has_value; } + bool has_value() const noexcept { return _has_value; } + + private: + T _value{}; + bool _has_value{false}; +}; +} // namespace detail + +using send_result_t = detail::trivial_optional; +using recv_result_t = detail::trivial_optional; +using recv_buffer_result_t = detail::trivial_optional; + +#endif + +namespace detail +{ +template constexpr T enum_bit_or(T a, T b) noexcept +{ + static_assert(std::is_enum::value, "must be enum"); + using U = typename std::underlying_type::type; + return static_cast(static_cast(a) | static_cast(b)); +} +template constexpr T enum_bit_and(T a, T b) noexcept +{ + static_assert(std::is_enum::value, "must be enum"); + using U = typename std::underlying_type::type; + return static_cast(static_cast(a) & static_cast(b)); +} +template constexpr T enum_bit_xor(T a, T b) noexcept +{ + static_assert(std::is_enum::value, "must be enum"); + using U = typename std::underlying_type::type; + return static_cast(static_cast(a) ^ static_cast(b)); +} +template constexpr T enum_bit_not(T a) noexcept +{ + static_assert(std::is_enum::value, "must be enum"); + using U = typename std::underlying_type::type; + return static_cast(~static_cast(a)); +} +} // namespace detail + +// partially satisfies named requirement BitmaskType +enum class send_flags : int +{ + none = 0, + dontwait = ZMQ_DONTWAIT, + sndmore = ZMQ_SNDMORE +}; + +constexpr send_flags operator|(send_flags a, send_flags b) noexcept +{ + return detail::enum_bit_or(a, b); +} +constexpr send_flags operator&(send_flags a, send_flags b) noexcept +{ + return detail::enum_bit_and(a, b); +} +constexpr send_flags operator^(send_flags a, send_flags b) noexcept +{ + return detail::enum_bit_xor(a, b); +} +constexpr send_flags operator~(send_flags a) noexcept +{ + return detail::enum_bit_not(a); +} + +// partially satisfies named requirement BitmaskType +enum class recv_flags : int +{ + none = 0, + dontwait = ZMQ_DONTWAIT +}; + +constexpr recv_flags operator|(recv_flags a, recv_flags b) noexcept +{ + return detail::enum_bit_or(a, b); +} +constexpr recv_flags operator&(recv_flags a, recv_flags b) noexcept +{ + return detail::enum_bit_and(a, b); +} +constexpr recv_flags operator^(recv_flags a, recv_flags b) noexcept +{ + return detail::enum_bit_xor(a, b); +} +constexpr recv_flags operator~(recv_flags a) noexcept +{ + return detail::enum_bit_not(a); +} + + +// mutable_buffer, const_buffer and buffer are based on +// the Networking TS specification, draft: +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/n4771.pdf + +class mutable_buffer +{ + public: + constexpr mutable_buffer() noexcept : _data(nullptr), _size(0) {} + constexpr mutable_buffer(void *p, size_t n) noexcept : _data(p), _size(n) + { +#ifdef ZMQ_EXTENDED_CONSTEXPR + assert(p != nullptr || n == 0); +#endif + } + + constexpr void *data() const noexcept { return _data; } + constexpr size_t size() const noexcept { return _size; } + mutable_buffer &operator+=(size_t n) noexcept + { + // (std::min) is a workaround for when a min macro is defined + const auto shift = (std::min)(n, _size); + _data = static_cast(_data) + shift; + _size -= shift; + return *this; + } + + private: + void *_data; + size_t _size; +}; + +inline mutable_buffer operator+(const mutable_buffer &mb, size_t n) noexcept +{ + return mutable_buffer(static_cast(mb.data()) + (std::min)(n, mb.size()), + mb.size() - (std::min)(n, mb.size())); +} +inline mutable_buffer operator+(size_t n, const mutable_buffer &mb) noexcept +{ + return mb + n; +} + +class const_buffer +{ + public: + constexpr const_buffer() noexcept : _data(nullptr), _size(0) {} + constexpr const_buffer(const void *p, size_t n) noexcept : _data(p), _size(n) + { +#ifdef ZMQ_EXTENDED_CONSTEXPR + assert(p != nullptr || n == 0); +#endif + } + constexpr const_buffer(const mutable_buffer &mb) noexcept : + _data(mb.data()), + _size(mb.size()) + { + } + + constexpr const void *data() const noexcept { return _data; } + constexpr size_t size() const noexcept { return _size; } + const_buffer &operator+=(size_t n) noexcept + { + const auto shift = (std::min)(n, _size); + _data = static_cast(_data) + shift; + _size -= shift; + return *this; + } + + private: + const void *_data; + size_t _size; +}; + +inline const_buffer operator+(const const_buffer &cb, size_t n) noexcept +{ + return const_buffer(static_cast(cb.data()) + + (std::min)(n, cb.size()), + cb.size() - (std::min)(n, cb.size())); +} +inline const_buffer operator+(size_t n, const const_buffer &cb) noexcept +{ + return cb + n; +} + +// buffer creation + +constexpr mutable_buffer buffer(void *p, size_t n) noexcept +{ + return mutable_buffer(p, n); +} +constexpr const_buffer buffer(const void *p, size_t n) noexcept +{ + return const_buffer(p, n); +} +constexpr mutable_buffer buffer(const mutable_buffer &mb) noexcept +{ + return mb; +} +inline mutable_buffer buffer(const mutable_buffer &mb, size_t n) noexcept +{ + return mutable_buffer(mb.data(), (std::min)(mb.size(), n)); +} +constexpr const_buffer buffer(const const_buffer &cb) noexcept +{ + return cb; +} +inline const_buffer buffer(const const_buffer &cb, size_t n) noexcept +{ + return const_buffer(cb.data(), (std::min)(cb.size(), n)); +} + +namespace detail +{ +template struct is_buffer +{ + static constexpr bool value = + std::is_same::value || std::is_same::value; +}; + +template struct is_pod_like +{ + // NOTE: The networking draft N4771 section 16.11 requires + // T in the buffer functions below to be + // trivially copyable OR standard layout. + // Here we decide to be conservative and require both. + static constexpr bool value = + ZMQ_IS_TRIVIALLY_COPYABLE(T) && std::is_standard_layout::value; +}; + +template constexpr auto seq_size(const C &c) noexcept -> decltype(c.size()) +{ + return c.size(); +} +template +constexpr size_t seq_size(const T (&/*array*/)[N]) noexcept +{ + return N; +} + +template +auto buffer_contiguous_sequence(Seq &&seq) noexcept + -> decltype(buffer(std::addressof(*std::begin(seq)), size_t{})) +{ + using T = typename std::remove_cv< + typename std::remove_reference::type>::type; + static_assert(detail::is_pod_like::value, "T must be POD"); + + const auto size = seq_size(seq); + return buffer(size != 0u ? std::addressof(*std::begin(seq)) : nullptr, + size * sizeof(T)); +} +template +auto buffer_contiguous_sequence(Seq &&seq, size_t n_bytes) noexcept + -> decltype(buffer_contiguous_sequence(seq)) +{ + using T = typename std::remove_cv< + typename std::remove_reference::type>::type; + static_assert(detail::is_pod_like::value, "T must be POD"); + + const auto size = seq_size(seq); + return buffer(size != 0u ? std::addressof(*std::begin(seq)) : nullptr, + (std::min)(size * sizeof(T), n_bytes)); +} + +} // namespace detail + +// C array +template mutable_buffer buffer(T (&data)[N]) noexcept +{ + return detail::buffer_contiguous_sequence(data); +} +template +mutable_buffer buffer(T (&data)[N], size_t n_bytes) noexcept +{ + return detail::buffer_contiguous_sequence(data, n_bytes); +} +template const_buffer buffer(const T (&data)[N]) noexcept +{ + return detail::buffer_contiguous_sequence(data); +} +template +const_buffer buffer(const T (&data)[N], size_t n_bytes) noexcept +{ + return detail::buffer_contiguous_sequence(data, n_bytes); +} +// std::array +template mutable_buffer buffer(std::array &data) noexcept +{ + return detail::buffer_contiguous_sequence(data); +} +template +mutable_buffer buffer(std::array &data, size_t n_bytes) noexcept +{ + return detail::buffer_contiguous_sequence(data, n_bytes); +} +template +const_buffer buffer(std::array &data) noexcept +{ + return detail::buffer_contiguous_sequence(data); +} +template +const_buffer buffer(std::array &data, size_t n_bytes) noexcept +{ + return detail::buffer_contiguous_sequence(data, n_bytes); +} +template +const_buffer buffer(const std::array &data) noexcept +{ + return detail::buffer_contiguous_sequence(data); +} +template +const_buffer buffer(const std::array &data, size_t n_bytes) noexcept +{ + return detail::buffer_contiguous_sequence(data, n_bytes); +} +// std::vector +template +mutable_buffer buffer(std::vector &data) noexcept +{ + return detail::buffer_contiguous_sequence(data); +} +template +mutable_buffer buffer(std::vector &data, size_t n_bytes) noexcept +{ + return detail::buffer_contiguous_sequence(data, n_bytes); +} +template +const_buffer buffer(const std::vector &data) noexcept +{ + return detail::buffer_contiguous_sequence(data); +} +template +const_buffer buffer(const std::vector &data, size_t n_bytes) noexcept +{ + return detail::buffer_contiguous_sequence(data, n_bytes); +} +// std::basic_string +template +mutable_buffer buffer(std::basic_string &data) noexcept +{ + return detail::buffer_contiguous_sequence(data); +} +template +mutable_buffer buffer(std::basic_string &data, + size_t n_bytes) noexcept +{ + return detail::buffer_contiguous_sequence(data, n_bytes); +} +template +const_buffer buffer(const std::basic_string &data) noexcept +{ + return detail::buffer_contiguous_sequence(data); +} +template +const_buffer buffer(const std::basic_string &data, + size_t n_bytes) noexcept +{ + return detail::buffer_contiguous_sequence(data, n_bytes); +} + +#if CPPZMQ_HAS_STRING_VIEW +// std::basic_string_view +template +const_buffer buffer(std::basic_string_view data) noexcept +{ + return detail::buffer_contiguous_sequence(data); +} +template +const_buffer buffer(std::basic_string_view data, size_t n_bytes) noexcept +{ + return detail::buffer_contiguous_sequence(data, n_bytes); +} +#endif + +// Buffer for a string literal (null terminated) +// where the buffer size excludes the terminating character. +// Equivalent to zmq::buffer(std::string_view("...")). +template +constexpr const_buffer str_buffer(const Char (&data)[N]) noexcept +{ + static_assert(detail::is_pod_like::value, "Char must be POD"); +#ifdef ZMQ_EXTENDED_CONSTEXPR + assert(data[N - 1] == Char{0}); +#endif + return const_buffer(static_cast(data), (N - 1) * sizeof(Char)); +} + +namespace literals +{ +constexpr const_buffer operator"" _zbuf(const char *str, size_t len) noexcept +{ + return const_buffer(str, len * sizeof(char)); +} +constexpr const_buffer operator"" _zbuf(const wchar_t *str, size_t len) noexcept +{ + return const_buffer(str, len * sizeof(wchar_t)); +} +constexpr const_buffer operator"" _zbuf(const char16_t *str, size_t len) noexcept +{ + return const_buffer(str, len * sizeof(char16_t)); +} +constexpr const_buffer operator"" _zbuf(const char32_t *str, size_t len) noexcept +{ + return const_buffer(str, len * sizeof(char32_t)); +} +} + +#endif // ZMQ_CPP11 + + +#ifdef ZMQ_CPP11 +namespace sockopt +{ +// There are two types of options, +// integral type with known compiler time size (int, bool, int64_t, uint64_t) +// and arrays with dynamic size (strings, binary data). + +// BoolUnit: if true accepts values of type bool (but passed as T into libzmq) +template struct integral_option +{ +}; + +// NullTerm: +// 0: binary data +// 1: null-terminated string (`getsockopt` size includes null) +// 2: binary (size 32) or Z85 encoder string of size 41 (null included) +template struct array_option +{ +}; + +#define ZMQ_DEFINE_INTEGRAL_OPT(OPT, NAME, TYPE) \ + using NAME##_t = integral_option; \ + ZMQ_INLINE_VAR ZMQ_CONSTEXPR_VAR NAME##_t NAME {} +#define ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(OPT, NAME, TYPE) \ + using NAME##_t = integral_option; \ + ZMQ_INLINE_VAR ZMQ_CONSTEXPR_VAR NAME##_t NAME {} +#define ZMQ_DEFINE_ARRAY_OPT(OPT, NAME) \ + using NAME##_t = array_option; \ + ZMQ_INLINE_VAR ZMQ_CONSTEXPR_VAR NAME##_t NAME {} +#define ZMQ_DEFINE_ARRAY_OPT_BINARY(OPT, NAME) \ + using NAME##_t = array_option; \ + ZMQ_INLINE_VAR ZMQ_CONSTEXPR_VAR NAME##_t NAME {} +#define ZMQ_DEFINE_ARRAY_OPT_BIN_OR_Z85(OPT, NAME) \ + using NAME##_t = array_option; \ + ZMQ_INLINE_VAR ZMQ_CONSTEXPR_VAR NAME##_t NAME {} + +// duplicate definition from libzmq 4.3.3 +#if defined _WIN32 +#if defined _WIN64 +typedef unsigned __int64 cppzmq_fd_t; +#else +typedef unsigned int cppzmq_fd_t; +#endif +#else +typedef int cppzmq_fd_t; +#endif + +#ifdef ZMQ_AFFINITY +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_AFFINITY, affinity, uint64_t); +#endif +#ifdef ZMQ_BACKLOG +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_BACKLOG, backlog, int); +#endif +#ifdef ZMQ_BINDTODEVICE +ZMQ_DEFINE_ARRAY_OPT_BINARY(ZMQ_BINDTODEVICE, bindtodevice); +#endif +#ifdef ZMQ_CONFLATE +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_CONFLATE, conflate, int); +#endif +#ifdef ZMQ_CONNECT_ROUTING_ID +ZMQ_DEFINE_ARRAY_OPT(ZMQ_CONNECT_ROUTING_ID, connect_routing_id); +#endif +#ifdef ZMQ_CONNECT_TIMEOUT +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_CONNECT_TIMEOUT, connect_timeout, int); +#endif +#ifdef ZMQ_CURVE_PUBLICKEY +ZMQ_DEFINE_ARRAY_OPT_BIN_OR_Z85(ZMQ_CURVE_PUBLICKEY, curve_publickey); +#endif +#ifdef ZMQ_CURVE_SECRETKEY +ZMQ_DEFINE_ARRAY_OPT_BIN_OR_Z85(ZMQ_CURVE_SECRETKEY, curve_secretkey); +#endif +#ifdef ZMQ_CURVE_SERVER +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_CURVE_SERVER, curve_server, int); +#endif +#ifdef ZMQ_CURVE_SERVERKEY +ZMQ_DEFINE_ARRAY_OPT_BIN_OR_Z85(ZMQ_CURVE_SERVERKEY, curve_serverkey); +#endif +#ifdef ZMQ_EVENTS +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_EVENTS, events, int); +#endif +#ifdef ZMQ_FD +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_FD, fd, cppzmq_fd_t); +#endif +#ifdef ZMQ_GSSAPI_PLAINTEXT +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_GSSAPI_PLAINTEXT, gssapi_plaintext, int); +#endif +#ifdef ZMQ_GSSAPI_SERVER +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_GSSAPI_SERVER, gssapi_server, int); +#endif +#ifdef ZMQ_GSSAPI_SERVICE_PRINCIPAL +ZMQ_DEFINE_ARRAY_OPT(ZMQ_GSSAPI_SERVICE_PRINCIPAL, gssapi_service_principal); +#endif +#ifdef ZMQ_GSSAPI_SERVICE_PRINCIPAL_NAMETYPE +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_GSSAPI_SERVICE_PRINCIPAL_NAMETYPE, + gssapi_service_principal_nametype, + int); +#endif +#ifdef ZMQ_GSSAPI_PRINCIPAL +ZMQ_DEFINE_ARRAY_OPT(ZMQ_GSSAPI_PRINCIPAL, gssapi_principal); +#endif +#ifdef ZMQ_GSSAPI_PRINCIPAL_NAMETYPE +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_GSSAPI_PRINCIPAL_NAMETYPE, + gssapi_principal_nametype, + int); +#endif +#ifdef ZMQ_HANDSHAKE_IVL +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_HANDSHAKE_IVL, handshake_ivl, int); +#endif +#ifdef ZMQ_HEARTBEAT_IVL +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_HEARTBEAT_IVL, heartbeat_ivl, int); +#endif +#ifdef ZMQ_HEARTBEAT_TIMEOUT +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_HEARTBEAT_TIMEOUT, heartbeat_timeout, int); +#endif +#ifdef ZMQ_HEARTBEAT_TTL +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_HEARTBEAT_TTL, heartbeat_ttl, int); +#endif +#ifdef ZMQ_IMMEDIATE +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_IMMEDIATE, immediate, int); +#endif +#ifdef ZMQ_INVERT_MATCHING +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_INVERT_MATCHING, invert_matching, int); +#endif +#ifdef ZMQ_IPV6 +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_IPV6, ipv6, int); +#endif +#ifdef ZMQ_LAST_ENDPOINT +ZMQ_DEFINE_ARRAY_OPT(ZMQ_LAST_ENDPOINT, last_endpoint); +#endif +#ifdef ZMQ_LINGER +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_LINGER, linger, int); +#endif +#ifdef ZMQ_MAXMSGSIZE +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_MAXMSGSIZE, maxmsgsize, int64_t); +#endif +#ifdef ZMQ_MECHANISM +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_MECHANISM, mechanism, int); +#endif +#ifdef ZMQ_METADATA +ZMQ_DEFINE_ARRAY_OPT(ZMQ_METADATA, metadata); +#endif +#ifdef ZMQ_MULTICAST_HOPS +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_MULTICAST_HOPS, multicast_hops, int); +#endif +#ifdef ZMQ_MULTICAST_LOOP +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_MULTICAST_LOOP, multicast_loop, int); +#endif +#ifdef ZMQ_MULTICAST_MAXTPDU +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_MULTICAST_MAXTPDU, multicast_maxtpdu, int); +#endif +#ifdef ZMQ_PLAIN_SERVER +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_PLAIN_SERVER, plain_server, int); +#endif +#ifdef ZMQ_PLAIN_PASSWORD +ZMQ_DEFINE_ARRAY_OPT(ZMQ_PLAIN_PASSWORD, plain_password); +#endif +#ifdef ZMQ_PLAIN_USERNAME +ZMQ_DEFINE_ARRAY_OPT(ZMQ_PLAIN_USERNAME, plain_username); +#endif +#ifdef ZMQ_USE_FD +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_USE_FD, use_fd, int); +#endif +#ifdef ZMQ_PROBE_ROUTER +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_PROBE_ROUTER, probe_router, int); +#endif +#ifdef ZMQ_RATE +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_RATE, rate, int); +#endif +#ifdef ZMQ_RCVBUF +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_RCVBUF, rcvbuf, int); +#endif +#ifdef ZMQ_RCVHWM +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_RCVHWM, rcvhwm, int); +#endif +#ifdef ZMQ_RCVMORE +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_RCVMORE, rcvmore, int); +#endif +#ifdef ZMQ_RCVTIMEO +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_RCVTIMEO, rcvtimeo, int); +#endif +#ifdef ZMQ_RECONNECT_IVL +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_RECONNECT_IVL, reconnect_ivl, int); +#endif +#ifdef ZMQ_RECONNECT_IVL_MAX +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_RECONNECT_IVL_MAX, reconnect_ivl_max, int); +#endif +#ifdef ZMQ_RECOVERY_IVL +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_RECOVERY_IVL, recovery_ivl, int); +#endif +#ifdef ZMQ_REQ_CORRELATE +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_REQ_CORRELATE, req_correlate, int); +#endif +#ifdef ZMQ_REQ_RELAXED +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_REQ_RELAXED, req_relaxed, int); +#endif +#ifdef ZMQ_ROUTER_HANDOVER +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_ROUTER_HANDOVER, router_handover, int); +#endif +#ifdef ZMQ_ROUTER_MANDATORY +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_ROUTER_MANDATORY, router_mandatory, int); +#endif +#ifdef ZMQ_ROUTER_NOTIFY +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_ROUTER_NOTIFY, router_notify, int); +#endif +#ifdef ZMQ_ROUTING_ID +ZMQ_DEFINE_ARRAY_OPT_BINARY(ZMQ_ROUTING_ID, routing_id); +#endif +#ifdef ZMQ_SNDBUF +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_SNDBUF, sndbuf, int); +#endif +#ifdef ZMQ_SNDHWM +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_SNDHWM, sndhwm, int); +#endif +#ifdef ZMQ_SNDTIMEO +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_SNDTIMEO, sndtimeo, int); +#endif +#ifdef ZMQ_SOCKS_PROXY +ZMQ_DEFINE_ARRAY_OPT(ZMQ_SOCKS_PROXY, socks_proxy); +#endif +#ifdef ZMQ_STREAM_NOTIFY +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_STREAM_NOTIFY, stream_notify, int); +#endif +#ifdef ZMQ_SUBSCRIBE +ZMQ_DEFINE_ARRAY_OPT(ZMQ_SUBSCRIBE, subscribe); +#endif +#ifdef ZMQ_TCP_KEEPALIVE +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_TCP_KEEPALIVE, tcp_keepalive, int); +#endif +#ifdef ZMQ_TCP_KEEPALIVE_CNT +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_TCP_KEEPALIVE_CNT, tcp_keepalive_cnt, int); +#endif +#ifdef ZMQ_TCP_KEEPALIVE_IDLE +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_TCP_KEEPALIVE_IDLE, tcp_keepalive_idle, int); +#endif +#ifdef ZMQ_TCP_KEEPALIVE_INTVL +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_TCP_KEEPALIVE_INTVL, tcp_keepalive_intvl, int); +#endif +#ifdef ZMQ_TCP_MAXRT +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_TCP_MAXRT, tcp_maxrt, int); +#endif +#ifdef ZMQ_THREAD_SAFE +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_THREAD_SAFE, thread_safe, int); +#endif +#ifdef ZMQ_TOS +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_TOS, tos, int); +#endif +#ifdef ZMQ_TYPE +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_TYPE, type, int); +#endif +#ifdef ZMQ_UNSUBSCRIBE +ZMQ_DEFINE_ARRAY_OPT(ZMQ_UNSUBSCRIBE, unsubscribe); +#endif +#ifdef ZMQ_VMCI_BUFFER_SIZE +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_VMCI_BUFFER_SIZE, vmci_buffer_size, uint64_t); +#endif +#ifdef ZMQ_VMCI_BUFFER_MIN_SIZE +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_VMCI_BUFFER_MIN_SIZE, vmci_buffer_min_size, uint64_t); +#endif +#ifdef ZMQ_VMCI_BUFFER_MAX_SIZE +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_VMCI_BUFFER_MAX_SIZE, vmci_buffer_max_size, uint64_t); +#endif +#ifdef ZMQ_VMCI_CONNECT_TIMEOUT +ZMQ_DEFINE_INTEGRAL_OPT(ZMQ_VMCI_CONNECT_TIMEOUT, vmci_connect_timeout, int); +#endif +#ifdef ZMQ_XPUB_VERBOSE +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_XPUB_VERBOSE, xpub_verbose, int); +#endif +#ifdef ZMQ_XPUB_VERBOSER +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_XPUB_VERBOSER, xpub_verboser, int); +#endif +#ifdef ZMQ_XPUB_MANUAL +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_XPUB_MANUAL, xpub_manual, int); +#endif +#ifdef ZMQ_XPUB_NODROP +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_XPUB_NODROP, xpub_nodrop, int); +#endif +#ifdef ZMQ_XPUB_WELCOME_MSG +ZMQ_DEFINE_ARRAY_OPT(ZMQ_XPUB_WELCOME_MSG, xpub_welcome_msg); +#endif +#ifdef ZMQ_ZAP_ENFORCE_DOMAIN +ZMQ_DEFINE_INTEGRAL_BOOL_UNIT_OPT(ZMQ_ZAP_ENFORCE_DOMAIN, zap_enforce_domain, int); +#endif +#ifdef ZMQ_ZAP_DOMAIN +ZMQ_DEFINE_ARRAY_OPT(ZMQ_ZAP_DOMAIN, zap_domain); +#endif + +} // namespace sockopt +#endif // ZMQ_CPP11 + + +namespace detail +{ +class socket_base +{ + public: + socket_base() ZMQ_NOTHROW : _handle(ZMQ_NULLPTR) {} + ZMQ_EXPLICIT socket_base(void *handle) ZMQ_NOTHROW : _handle(handle) {} + + template + ZMQ_CPP11_DEPRECATED("from 4.7.0, use `set` taking option from zmq::sockopt") + void setsockopt(int option_, T const &optval) + { + setsockopt(option_, &optval, sizeof(T)); + } + + ZMQ_CPP11_DEPRECATED("from 4.7.0, use `set` taking option from zmq::sockopt") + void setsockopt(int option_, const void *optval_, size_t optvallen_) + { + int rc = zmq_setsockopt(_handle, option_, optval_, optvallen_); + if (rc != 0) + throw error_t(); + } + + ZMQ_CPP11_DEPRECATED("from 4.7.0, use `get` taking option from zmq::sockopt") + void getsockopt(int option_, void *optval_, size_t *optvallen_) const + { + int rc = zmq_getsockopt(_handle, option_, optval_, optvallen_); + if (rc != 0) + throw error_t(); + } + + template + ZMQ_CPP11_DEPRECATED("from 4.7.0, use `get` taking option from zmq::sockopt") + T getsockopt(int option_) const + { + T optval; + size_t optlen = sizeof(T); + getsockopt(option_, &optval, &optlen); + return optval; + } + +#ifdef ZMQ_CPP11 + // Set integral socket option, e.g. + // `socket.set(zmq::sockopt::linger, 0)` + template + void set(sockopt::integral_option, const T &val) + { + static_assert(std::is_integral::value, "T must be integral"); + set_option(Opt, &val, sizeof val); + } + + // Set integral socket option from boolean, e.g. + // `socket.set(zmq::sockopt::immediate, false)` + template + void set(sockopt::integral_option, bool val) + { + static_assert(std::is_integral::value, "T must be integral"); + T rep_val = val; + set_option(Opt, &rep_val, sizeof rep_val); + } + + // Set array socket option, e.g. + // `socket.set(zmq::sockopt::plain_username, "foo123")` + template + void set(sockopt::array_option, const char *buf) + { + set_option(Opt, buf, std::strlen(buf)); + } + + // Set array socket option, e.g. + // `socket.set(zmq::sockopt::routing_id, zmq::buffer(id))` + template + void set(sockopt::array_option, const_buffer buf) + { + set_option(Opt, buf.data(), buf.size()); + } + + // Set array socket option, e.g. + // `socket.set(zmq::sockopt::routing_id, id_str)` + template + void set(sockopt::array_option, const std::string &buf) + { + set_option(Opt, buf.data(), buf.size()); + } + +#if CPPZMQ_HAS_STRING_VIEW + // Set array socket option, e.g. + // `socket.set(zmq::sockopt::routing_id, id_str)` + template + void set(sockopt::array_option, std::string_view buf) + { + set_option(Opt, buf.data(), buf.size()); + } +#endif + + // Get scalar socket option, e.g. + // `auto opt = socket.get(zmq::sockopt::linger)` + template + ZMQ_NODISCARD T get(sockopt::integral_option) const + { + static_assert(std::is_integral::value, "T must be integral"); + T val; + size_t size = sizeof val; + get_option(Opt, &val, &size); + assert(size == sizeof val); + return val; + } + + // Get array socket option, writes to buf, returns option size in bytes, e.g. + // `size_t optsize = socket.get(zmq::sockopt::routing_id, zmq::buffer(id))` + template + ZMQ_NODISCARD size_t get(sockopt::array_option, + mutable_buffer buf) const + { + size_t size = buf.size(); + get_option(Opt, buf.data(), &size); + return size; + } + + // Get array socket option as string (initializes the string buffer size to init_size) e.g. + // `auto s = socket.get(zmq::sockopt::routing_id)` + // Note: removes the null character from null-terminated string options, + // i.e. the string size excludes the null character. + template + ZMQ_NODISCARD std::string get(sockopt::array_option, + size_t init_size = 1024) const + { + if (NullTerm == 2 && init_size == 1024) { + init_size = 41; // get as Z85 string + } + std::string str(init_size, '\0'); + size_t size = get(sockopt::array_option{}, buffer(str)); + if (NullTerm == 1) { + if (size > 0) { + assert(str[size - 1] == '\0'); + --size; + } + } else if (NullTerm == 2) { + assert(size == 32 || size == 41); + if (size == 41) { + assert(str[size - 1] == '\0'); + --size; + } + } + str.resize(size); + return str; + } +#endif + + void bind(std::string const &addr) { bind(addr.c_str()); } + + void bind(const char *addr_) + { + int rc = zmq_bind(_handle, addr_); + if (rc != 0) + throw error_t(); + } + + void unbind(std::string const &addr) { unbind(addr.c_str()); } + + void unbind(const char *addr_) + { + int rc = zmq_unbind(_handle, addr_); + if (rc != 0) + throw error_t(); + } + + void connect(std::string const &addr) { connect(addr.c_str()); } + + void connect(const char *addr_) + { + int rc = zmq_connect(_handle, addr_); + if (rc != 0) + throw error_t(); + } + + void disconnect(std::string const &addr) { disconnect(addr.c_str()); } + + void disconnect(const char *addr_) + { + int rc = zmq_disconnect(_handle, addr_); + if (rc != 0) + throw error_t(); + } + + bool connected() const ZMQ_NOTHROW { return (_handle != ZMQ_NULLPTR); } + + ZMQ_CPP11_DEPRECATED("from 4.3.1, use send taking a const_buffer and send_flags") + size_t send(const void *buf_, size_t len_, int flags_ = 0) + { + int nbytes = zmq_send(_handle, buf_, len_, flags_); + if (nbytes >= 0) + return static_cast(nbytes); + if (zmq_errno() == EAGAIN) + return 0; + throw error_t(); + } + + ZMQ_CPP11_DEPRECATED("from 4.3.1, use send taking message_t and send_flags") + bool send(message_t &msg_, + int flags_ = 0) // default until removed + { + int nbytes = zmq_msg_send(msg_.handle(), _handle, flags_); + if (nbytes >= 0) + return true; + if (zmq_errno() == EAGAIN) + return false; + throw error_t(); + } + + template + ZMQ_CPP11_DEPRECATED( + "from 4.4.1, use send taking message_t or buffer (for contiguous " + "ranges), and send_flags") + bool send(T first, T last, int flags_ = 0) + { + zmq::message_t msg(first, last); + int nbytes = zmq_msg_send(msg.handle(), _handle, flags_); + if (nbytes >= 0) + return true; + if (zmq_errno() == EAGAIN) + return false; + throw error_t(); + } + +#ifdef ZMQ_HAS_RVALUE_REFS + ZMQ_CPP11_DEPRECATED("from 4.3.1, use send taking message_t and send_flags") + bool send(message_t &&msg_, + int flags_ = 0) // default until removed + { +#ifdef ZMQ_CPP11 + return send(msg_, static_cast(flags_)).has_value(); +#else + return send(msg_, flags_); +#endif + } +#endif + +#ifdef ZMQ_CPP11 + send_result_t send(const_buffer buf, send_flags flags = send_flags::none) + { + const int nbytes = + zmq_send(_handle, buf.data(), buf.size(), static_cast(flags)); + if (nbytes >= 0) + return static_cast(nbytes); + if (zmq_errno() == EAGAIN) + return {}; + throw error_t(); + } + + send_result_t send(message_t &msg, send_flags flags) + { + int nbytes = zmq_msg_send(msg.handle(), _handle, static_cast(flags)); + if (nbytes >= 0) + return static_cast(nbytes); + if (zmq_errno() == EAGAIN) + return {}; + throw error_t(); + } + + send_result_t send(message_t &&msg, send_flags flags) + { + return send(msg, flags); + } +#endif + + ZMQ_CPP11_DEPRECATED( + "from 4.3.1, use recv taking a mutable_buffer and recv_flags") + size_t recv(void *buf_, size_t len_, int flags_ = 0) + { + int nbytes = zmq_recv(_handle, buf_, len_, flags_); + if (nbytes >= 0) + return static_cast(nbytes); + if (zmq_errno() == EAGAIN) + return 0; + throw error_t(); + } + + ZMQ_CPP11_DEPRECATED( + "from 4.3.1, use recv taking a reference to message_t and recv_flags") + bool recv(message_t *msg_, int flags_ = 0) + { + int nbytes = zmq_msg_recv(msg_->handle(), _handle, flags_); + if (nbytes >= 0) + return true; + if (zmq_errno() == EAGAIN) + return false; + throw error_t(); + } + +#ifdef ZMQ_CPP11 + ZMQ_NODISCARD + recv_buffer_result_t recv(mutable_buffer buf, + recv_flags flags = recv_flags::none) + { + const int nbytes = + zmq_recv(_handle, buf.data(), buf.size(), static_cast(flags)); + if (nbytes >= 0) { + return recv_buffer_size{ + (std::min)(static_cast(nbytes), buf.size()), + static_cast(nbytes)}; + } + if (zmq_errno() == EAGAIN) + return {}; + throw error_t(); + } + + ZMQ_NODISCARD + recv_result_t recv(message_t &msg, recv_flags flags = recv_flags::none) + { + const int nbytes = + zmq_msg_recv(msg.handle(), _handle, static_cast(flags)); + if (nbytes >= 0) { + assert(msg.size() == static_cast(nbytes)); + return static_cast(nbytes); + } + if (zmq_errno() == EAGAIN) + return {}; + throw error_t(); + } +#endif + +#if defined(ZMQ_BUILD_DRAFT_API) && ZMQ_VERSION >= ZMQ_MAKE_VERSION(4, 2, 0) + void join(const char *group) + { + int rc = zmq_join(_handle, group); + if (rc != 0) + throw error_t(); + } + + void leave(const char *group) + { + int rc = zmq_leave(_handle, group); + if (rc != 0) + throw error_t(); + } +#endif + + ZMQ_NODISCARD void *handle() ZMQ_NOTHROW { return _handle; } + ZMQ_NODISCARD const void *handle() const ZMQ_NOTHROW { return _handle; } + + ZMQ_EXPLICIT operator bool() const ZMQ_NOTHROW { return _handle != ZMQ_NULLPTR; } + // note: non-const operator bool can be removed once + // operator void* is removed from socket_t + ZMQ_EXPLICIT operator bool() ZMQ_NOTHROW { return _handle != ZMQ_NULLPTR; } + + protected: + void *_handle; + + private: + void set_option(int option_, const void *optval_, size_t optvallen_) + { + int rc = zmq_setsockopt(_handle, option_, optval_, optvallen_); + if (rc != 0) + throw error_t(); + } + + void get_option(int option_, void *optval_, size_t *optvallen_) const + { + int rc = zmq_getsockopt(_handle, option_, optval_, optvallen_); + if (rc != 0) + throw error_t(); + } +}; +} // namespace detail + +#ifdef ZMQ_CPP11 +enum class socket_type : int +{ + req = ZMQ_REQ, + rep = ZMQ_REP, + dealer = ZMQ_DEALER, + router = ZMQ_ROUTER, + pub = ZMQ_PUB, + sub = ZMQ_SUB, + xpub = ZMQ_XPUB, + xsub = ZMQ_XSUB, + push = ZMQ_PUSH, + pull = ZMQ_PULL, +#if defined(ZMQ_BUILD_DRAFT_API) && ZMQ_VERSION >= ZMQ_MAKE_VERSION(4, 2, 0) + server = ZMQ_SERVER, + client = ZMQ_CLIENT, + radio = ZMQ_RADIO, + dish = ZMQ_DISH, +#endif +#if ZMQ_VERSION_MAJOR >= 4 + stream = ZMQ_STREAM, +#endif + pair = ZMQ_PAIR +}; +#endif + +struct from_handle_t +{ + struct _private + { + }; // disabling use other than with from_handle + ZMQ_CONSTEXPR_FN ZMQ_EXPLICIT from_handle_t(_private /*p*/) ZMQ_NOTHROW {} +}; + +ZMQ_CONSTEXPR_VAR from_handle_t from_handle = + from_handle_t(from_handle_t::_private()); + +// A non-owning nullable reference to a socket. +// The reference is invalidated on socket close or destruction. +class socket_ref : public detail::socket_base +{ + public: + socket_ref() ZMQ_NOTHROW : detail::socket_base() {} +#ifdef ZMQ_CPP11 + socket_ref(std::nullptr_t) ZMQ_NOTHROW : detail::socket_base() {} +#endif + socket_ref(from_handle_t /*fh*/, void *handle) ZMQ_NOTHROW + : detail::socket_base(handle) + { + } +}; + +#ifdef ZMQ_CPP11 +inline bool operator==(socket_ref sr, std::nullptr_t /*p*/) ZMQ_NOTHROW +{ + return sr.handle() == nullptr; +} +inline bool operator==(std::nullptr_t /*p*/, socket_ref sr) ZMQ_NOTHROW +{ + return sr.handle() == nullptr; +} +inline bool operator!=(socket_ref sr, std::nullptr_t /*p*/) ZMQ_NOTHROW +{ + return !(sr == nullptr); +} +inline bool operator!=(std::nullptr_t /*p*/, socket_ref sr) ZMQ_NOTHROW +{ + return !(sr == nullptr); +} +#endif + +inline bool operator==(socket_ref a, socket_ref b) ZMQ_NOTHROW +{ + return std::equal_to()(a.handle(), b.handle()); +} +inline bool operator!=(socket_ref a, socket_ref b) ZMQ_NOTHROW +{ + return !(a == b); +} +inline bool operator<(socket_ref a, socket_ref b) ZMQ_NOTHROW +{ + return std::less()(a.handle(), b.handle()); +} +inline bool operator>(socket_ref a, socket_ref b) ZMQ_NOTHROW +{ + return b < a; +} +inline bool operator<=(socket_ref a, socket_ref b) ZMQ_NOTHROW +{ + return !(a > b); +} +inline bool operator>=(socket_ref a, socket_ref b) ZMQ_NOTHROW +{ + return !(a < b); +} + +} // namespace zmq + +#ifdef ZMQ_CPP11 +namespace std +{ +template<> struct hash +{ + size_t operator()(zmq::socket_ref sr) const ZMQ_NOTHROW + { + return hash()(sr.handle()); + } +}; +} // namespace std +#endif + +namespace zmq +{ +class socket_t : public detail::socket_base +{ + friend class monitor_t; + + public: + socket_t() ZMQ_NOTHROW : detail::socket_base(ZMQ_NULLPTR), ctxptr(ZMQ_NULLPTR) {} + + socket_t(context_t &context_, int type_) : + detail::socket_base(zmq_socket(context_.handle(), type_)), + ctxptr(context_.handle()) + { + if (_handle == ZMQ_NULLPTR) + throw error_t(); + } + +#ifdef ZMQ_CPP11 + socket_t(context_t &context_, socket_type type_) : + socket_t(context_, static_cast(type_)) + { + } +#endif + +#ifdef ZMQ_HAS_RVALUE_REFS + socket_t(socket_t &&rhs) ZMQ_NOTHROW : detail::socket_base(rhs._handle), + ctxptr(rhs.ctxptr) + { + rhs._handle = ZMQ_NULLPTR; + rhs.ctxptr = ZMQ_NULLPTR; + } + socket_t &operator=(socket_t &&rhs) ZMQ_NOTHROW + { + close(); + std::swap(_handle, rhs._handle); + std::swap(ctxptr, rhs.ctxptr); + return *this; + } +#endif + + ~socket_t() ZMQ_NOTHROW { close(); } + + operator void *() ZMQ_NOTHROW { return _handle; } + + operator void const *() const ZMQ_NOTHROW { return _handle; } + + void close() ZMQ_NOTHROW + { + if (_handle == ZMQ_NULLPTR) + // already closed + return; + int rc = zmq_close(_handle); + ZMQ_ASSERT(rc == 0); + _handle = ZMQ_NULLPTR; + ctxptr = ZMQ_NULLPTR; + } + + void swap(socket_t &other) ZMQ_NOTHROW + { + std::swap(_handle, other._handle); + std::swap(ctxptr, other.ctxptr); + } + + operator socket_ref() ZMQ_NOTHROW { return socket_ref(from_handle, _handle); } + + private: + void *ctxptr; + + socket_t(const socket_t &) ZMQ_DELETED_FUNCTION; + void operator=(const socket_t &) ZMQ_DELETED_FUNCTION; + + // used by monitor_t + socket_t(void *context_, int type_) : + detail::socket_base(zmq_socket(context_, type_)), + ctxptr(context_) + { + if (_handle == ZMQ_NULLPTR) + throw error_t(); + if (ctxptr == ZMQ_NULLPTR) + throw error_t(); + } +}; + +inline void swap(socket_t &a, socket_t &b) ZMQ_NOTHROW +{ + a.swap(b); +} + +ZMQ_DEPRECATED("from 4.3.1, use proxy taking socket_t objects") +inline void proxy(void *frontend, void *backend, void *capture) +{ + int rc = zmq_proxy(frontend, backend, capture); + if (rc != 0) + throw error_t(); +} + +inline void +proxy(socket_ref frontend, socket_ref backend, socket_ref capture = socket_ref()) +{ + int rc = zmq_proxy(frontend.handle(), backend.handle(), capture.handle()); + if (rc != 0) + throw error_t(); +} + +#ifdef ZMQ_HAS_PROXY_STEERABLE +ZMQ_DEPRECATED("from 4.3.1, use proxy_steerable taking socket_t objects") +inline void +proxy_steerable(void *frontend, void *backend, void *capture, void *control) +{ + int rc = zmq_proxy_steerable(frontend, backend, capture, control); + if (rc != 0) + throw error_t(); +} + +inline void proxy_steerable(socket_ref frontend, + socket_ref backend, + socket_ref capture, + socket_ref control) +{ + int rc = zmq_proxy_steerable(frontend.handle(), backend.handle(), + capture.handle(), control.handle()); + if (rc != 0) + throw error_t(); +} +#endif + +class monitor_t +{ + public: + monitor_t() : _socket(), _monitor_socket() {} + + virtual ~monitor_t() { close(); } + +#ifdef ZMQ_HAS_RVALUE_REFS + monitor_t(monitor_t &&rhs) ZMQ_NOTHROW : _socket(), _monitor_socket() + { + std::swap(_socket, rhs._socket); + std::swap(_monitor_socket, rhs._monitor_socket); + } + + monitor_t &operator=(monitor_t &&rhs) ZMQ_NOTHROW + { + close(); + _socket = socket_ref(); + std::swap(_socket, rhs._socket); + std::swap(_monitor_socket, rhs._monitor_socket); + return *this; + } +#endif + + + void + monitor(socket_t &socket, std::string const &addr, int events = ZMQ_EVENT_ALL) + { + monitor(socket, addr.c_str(), events); + } + + void monitor(socket_t &socket, const char *addr_, int events = ZMQ_EVENT_ALL) + { + init(socket, addr_, events); + while (true) { + check_event(-1); + } + } + + void init(socket_t &socket, std::string const &addr, int events = ZMQ_EVENT_ALL) + { + init(socket, addr.c_str(), events); + } + + void init(socket_t &socket, const char *addr_, int events = ZMQ_EVENT_ALL) + { + int rc = zmq_socket_monitor(socket.handle(), addr_, events); + if (rc != 0) + throw error_t(); + + _socket = socket; + _monitor_socket = socket_t(socket.ctxptr, ZMQ_PAIR); + _monitor_socket.connect(addr_); + + on_monitor_started(); + } + + bool check_event(int timeout = 0) + { + assert(_monitor_socket); + + zmq_msg_t eventMsg; + zmq_msg_init(&eventMsg); + + zmq::pollitem_t items[] = { + {_monitor_socket.handle(), 0, ZMQ_POLLIN, 0}, + }; + + zmq::poll(&items[0], 1, timeout); + + if (items[0].revents & ZMQ_POLLIN) { + int rc = zmq_msg_recv(&eventMsg, _monitor_socket.handle(), 0); + if (rc == -1 && zmq_errno() == ETERM) + return false; + assert(rc != -1); + + } else { + zmq_msg_close(&eventMsg); + return false; + } + +#if ZMQ_VERSION_MAJOR >= 4 + const char *data = static_cast(zmq_msg_data(&eventMsg)); + zmq_event_t msgEvent; + memcpy(&msgEvent.event, data, sizeof(uint16_t)); + data += sizeof(uint16_t); + memcpy(&msgEvent.value, data, sizeof(int32_t)); + zmq_event_t *event = &msgEvent; +#else + zmq_event_t *event = static_cast(zmq_msg_data(&eventMsg)); +#endif + +#ifdef ZMQ_NEW_MONITOR_EVENT_LAYOUT + zmq_msg_t addrMsg; + zmq_msg_init(&addrMsg); + int rc = zmq_msg_recv(&addrMsg, _monitor_socket.handle(), 0); + if (rc == -1 && zmq_errno() == ETERM) { + zmq_msg_close(&eventMsg); + return false; + } + + assert(rc != -1); + const char *str = static_cast(zmq_msg_data(&addrMsg)); + std::string address(str, str + zmq_msg_size(&addrMsg)); + zmq_msg_close(&addrMsg); +#else + // Bit of a hack, but all events in the zmq_event_t union have the same layout so this will work for all event types. + std::string address = event->data.connected.addr; +#endif + +#ifdef ZMQ_EVENT_MONITOR_STOPPED + if (event->event == ZMQ_EVENT_MONITOR_STOPPED) { + zmq_msg_close(&eventMsg); + return false; + } + +#endif + + switch (event->event) { + case ZMQ_EVENT_CONNECTED: + on_event_connected(*event, address.c_str()); + break; + case ZMQ_EVENT_CONNECT_DELAYED: + on_event_connect_delayed(*event, address.c_str()); + break; + case ZMQ_EVENT_CONNECT_RETRIED: + on_event_connect_retried(*event, address.c_str()); + break; + case ZMQ_EVENT_LISTENING: + on_event_listening(*event, address.c_str()); + break; + case ZMQ_EVENT_BIND_FAILED: + on_event_bind_failed(*event, address.c_str()); + break; + case ZMQ_EVENT_ACCEPTED: + on_event_accepted(*event, address.c_str()); + break; + case ZMQ_EVENT_ACCEPT_FAILED: + on_event_accept_failed(*event, address.c_str()); + break; + case ZMQ_EVENT_CLOSED: + on_event_closed(*event, address.c_str()); + break; + case ZMQ_EVENT_CLOSE_FAILED: + on_event_close_failed(*event, address.c_str()); + break; + case ZMQ_EVENT_DISCONNECTED: + on_event_disconnected(*event, address.c_str()); + break; +#ifdef ZMQ_BUILD_DRAFT_API +#if ZMQ_VERSION >= ZMQ_MAKE_VERSION(4, 2, 3) + case ZMQ_EVENT_HANDSHAKE_FAILED_NO_DETAIL: + on_event_handshake_failed_no_detail(*event, address.c_str()); + break; + case ZMQ_EVENT_HANDSHAKE_FAILED_PROTOCOL: + on_event_handshake_failed_protocol(*event, address.c_str()); + break; + case ZMQ_EVENT_HANDSHAKE_FAILED_AUTH: + on_event_handshake_failed_auth(*event, address.c_str()); + break; + case ZMQ_EVENT_HANDSHAKE_SUCCEEDED: + on_event_handshake_succeeded(*event, address.c_str()); + break; +#elif ZMQ_VERSION >= ZMQ_MAKE_VERSION(4, 2, 1) + case ZMQ_EVENT_HANDSHAKE_FAILED: + on_event_handshake_failed(*event, address.c_str()); + break; + case ZMQ_EVENT_HANDSHAKE_SUCCEED: + on_event_handshake_succeed(*event, address.c_str()); + break; +#endif +#endif + default: + on_event_unknown(*event, address.c_str()); + break; + } + zmq_msg_close(&eventMsg); + + return true; + } + +#ifdef ZMQ_EVENT_MONITOR_STOPPED + void abort() + { + if (_socket) + zmq_socket_monitor(_socket.handle(), ZMQ_NULLPTR, 0); + + _socket = socket_ref(); + } +#endif + virtual void on_monitor_started() {} + virtual void on_event_connected(const zmq_event_t &event_, const char *addr_) + { + (void) event_; + (void) addr_; + } + virtual void on_event_connect_delayed(const zmq_event_t &event_, + const char *addr_) + { + (void) event_; + (void) addr_; + } + virtual void on_event_connect_retried(const zmq_event_t &event_, + const char *addr_) + { + (void) event_; + (void) addr_; + } + virtual void on_event_listening(const zmq_event_t &event_, const char *addr_) + { + (void) event_; + (void) addr_; + } + virtual void on_event_bind_failed(const zmq_event_t &event_, const char *addr_) + { + (void) event_; + (void) addr_; + } + virtual void on_event_accepted(const zmq_event_t &event_, const char *addr_) + { + (void) event_; + (void) addr_; + } + virtual void on_event_accept_failed(const zmq_event_t &event_, const char *addr_) + { + (void) event_; + (void) addr_; + } + virtual void on_event_closed(const zmq_event_t &event_, const char *addr_) + { + (void) event_; + (void) addr_; + } + virtual void on_event_close_failed(const zmq_event_t &event_, const char *addr_) + { + (void) event_; + (void) addr_; + } + virtual void on_event_disconnected(const zmq_event_t &event_, const char *addr_) + { + (void) event_; + (void) addr_; + } +#if ZMQ_VERSION >= ZMQ_MAKE_VERSION(4, 2, 3) + virtual void on_event_handshake_failed_no_detail(const zmq_event_t &event_, + const char *addr_) + { + (void) event_; + (void) addr_; + } + virtual void on_event_handshake_failed_protocol(const zmq_event_t &event_, + const char *addr_) + { + (void) event_; + (void) addr_; + } + virtual void on_event_handshake_failed_auth(const zmq_event_t &event_, + const char *addr_) + { + (void) event_; + (void) addr_; + } + virtual void on_event_handshake_succeeded(const zmq_event_t &event_, + const char *addr_) + { + (void) event_; + (void) addr_; + } +#elif ZMQ_VERSION >= ZMQ_MAKE_VERSION(4, 2, 1) + virtual void on_event_handshake_failed(const zmq_event_t &event_, + const char *addr_) + { + (void) event_; + (void) addr_; + } + virtual void on_event_handshake_succeed(const zmq_event_t &event_, + const char *addr_) + { + (void) event_; + (void) addr_; + } +#endif + virtual void on_event_unknown(const zmq_event_t &event_, const char *addr_) + { + (void) event_; + (void) addr_; + } + + private: + monitor_t(const monitor_t &) ZMQ_DELETED_FUNCTION; + void operator=(const monitor_t &) ZMQ_DELETED_FUNCTION; + + socket_ref _socket; + socket_t _monitor_socket; + + void close() ZMQ_NOTHROW + { + if (_socket) + zmq_socket_monitor(_socket.handle(), ZMQ_NULLPTR, 0); + _monitor_socket.close(); + } +}; + +#if defined(ZMQ_BUILD_DRAFT_API) && defined(ZMQ_CPP11) && defined(ZMQ_HAVE_POLLER) + +// polling events +enum class event_flags : short +{ + none = 0, + pollin = ZMQ_POLLIN, + pollout = ZMQ_POLLOUT, + pollerr = ZMQ_POLLERR, + pollpri = ZMQ_POLLPRI +}; + +constexpr event_flags operator|(event_flags a, event_flags b) noexcept +{ + return detail::enum_bit_or(a, b); +} +constexpr event_flags operator&(event_flags a, event_flags b) noexcept +{ + return detail::enum_bit_and(a, b); +} +constexpr event_flags operator^(event_flags a, event_flags b) noexcept +{ + return detail::enum_bit_xor(a, b); +} +constexpr event_flags operator~(event_flags a) noexcept +{ + return detail::enum_bit_not(a); +} + +struct no_user_data; + +// layout compatible with zmq_poller_event_t +template struct poller_event +{ + socket_ref socket; +#ifdef _WIN32 + SOCKET fd; +#else + int fd; +#endif + T *user_data; + event_flags events; +}; + +template class poller_t +{ + public: + using event_type = poller_event; + + poller_t() : poller_ptr(zmq_poller_new()) + { + if (!poller_ptr) + throw error_t(); + } + + template< + typename Dummy = void, + typename = + typename std::enable_if::value, Dummy>::type> + void add(zmq::socket_ref socket, event_flags events, T *user_data) + { + add_impl(socket, events, user_data); + } + + void add(zmq::socket_ref socket, event_flags events) + { + add_impl(socket, events, nullptr); + } + + void remove(zmq::socket_ref socket) + { + if (0 != zmq_poller_remove(poller_ptr.get(), socket.handle())) { + throw error_t(); + } + } + + void modify(zmq::socket_ref socket, event_flags events) + { + if (0 + != zmq_poller_modify(poller_ptr.get(), socket.handle(), + static_cast(events))) { + throw error_t(); + } + } + + size_t wait_all(std::vector &poller_events, + const std::chrono::milliseconds timeout) + { + int rc = zmq_poller_wait_all( + poller_ptr.get(), + reinterpret_cast(poller_events.data()), + static_cast(poller_events.size()), + static_cast(timeout.count())); + if (rc > 0) + return static_cast(rc); + +#if ZMQ_VERSION >= ZMQ_MAKE_VERSION(4, 2, 3) + if (zmq_errno() == EAGAIN) +#else + if (zmq_errno() == ETIMEDOUT) +#endif + return 0; + + throw error_t(); + } + + private: + struct destroy_poller_t + { + void operator()(void *ptr) noexcept + { + int rc = zmq_poller_destroy(&ptr); + ZMQ_ASSERT(rc == 0); + } + }; + + std::unique_ptr poller_ptr; + + void add_impl(zmq::socket_ref socket, event_flags events, T *user_data) + { + if (0 + != zmq_poller_add(poller_ptr.get(), socket.handle(), user_data, + static_cast(events))) { + throw error_t(); + } + } +}; +#endif // defined(ZMQ_BUILD_DRAFT_API) && defined(ZMQ_CPP11) && defined(ZMQ_HAVE_POLLER) + +inline std::ostream &operator<<(std::ostream &os, const message_t &msg) +{ + return os << msg.str(); +} + +} // namespace zmq + +#endif // __ZMQ_HPP_INCLUDED__ diff --git a/include/zmq_addon.hpp b/include/zmq_addon.hpp new file mode 100644 index 000000000..021ab9540 --- /dev/null +++ b/include/zmq_addon.hpp @@ -0,0 +1,743 @@ +/* + Copyright (c) 2016-2017 ZeroMQ community + Copyright (c) 2016 VOCA AS / Harald Nøkland + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + IN THE SOFTWARE. +*/ + +#ifndef __ZMQ_ADDON_HPP_INCLUDED__ +#define __ZMQ_ADDON_HPP_INCLUDED__ + +#include "zmq.hpp" + +#include +#include +#include +#include +#ifdef ZMQ_CPP11 +#include +#include +#include +#endif + +namespace zmq +{ +#ifdef ZMQ_CPP11 + +namespace detail +{ +template +recv_result_t +recv_multipart_n(socket_ref s, OutputIt out, size_t n, recv_flags flags) +{ + size_t msg_count = 0; + message_t msg; + while (true) { + if (CheckN) { + if (msg_count >= n) + throw std::runtime_error( + "Too many message parts in recv_multipart_n"); + } + if (!s.recv(msg, flags)) { + // zmq ensures atomic delivery of messages + assert(msg_count == 0); + return {}; + } + ++msg_count; + const bool more = msg.more(); + *out++ = std::move(msg); + if (!more) + break; + } + return msg_count; +} + +inline bool is_little_endian() +{ + const uint16_t i = 0x01; + return *reinterpret_cast(&i) == 0x01; +} + +inline void write_network_order(unsigned char *buf, const uint32_t value) +{ + if (is_little_endian()) { + ZMQ_CONSTEXPR_VAR uint32_t mask = std::numeric_limits::max(); + *buf++ = (value >> 24) & mask; + *buf++ = (value >> 16) & mask; + *buf++ = (value >> 8) & mask; + *buf++ = value & mask; + } else { + std::memcpy(buf, &value, sizeof(value)); + } +} + +inline uint32_t read_u32_network_order(const unsigned char *buf) +{ + if (is_little_endian()) { + return (static_cast(buf[0]) << 24) + + (static_cast(buf[1]) << 16) + + (static_cast(buf[2]) << 8) + + static_cast(buf[3]); + } else { + uint32_t value; + std::memcpy(&value, buf, sizeof(value)); + return value; + } +} +} // namespace detail + +/* Receive a multipart message. + + Writes the zmq::message_t objects to OutputIterator out. + The out iterator must handle an unspecified number of writes, + e.g. by using std::back_inserter. + + Returns: the number of messages received or nullopt (on EAGAIN). + Throws: if recv throws. Any exceptions thrown + by the out iterator will be propagated and the message + may have been only partially received with pending + message parts. It is adviced to close this socket in that event. +*/ +template +ZMQ_NODISCARD recv_result_t recv_multipart(socket_ref s, + OutputIt out, + recv_flags flags = recv_flags::none) +{ + return detail::recv_multipart_n(s, std::move(out), 0, flags); +} + +/* Receive a multipart message. + + Writes at most n zmq::message_t objects to OutputIterator out. + If the number of message parts of the incoming message exceeds n + then an exception will be thrown. + + Returns: the number of messages received or nullopt (on EAGAIN). + Throws: if recv throws. Throws std::runtime_error if the number + of message parts exceeds n (exactly n messages will have been written + to out). Any exceptions thrown + by the out iterator will be propagated and the message + may have been only partially received with pending + message parts. It is adviced to close this socket in that event. +*/ +template +ZMQ_NODISCARD recv_result_t recv_multipart_n(socket_ref s, + OutputIt out, + size_t n, + recv_flags flags = recv_flags::none) +{ + return detail::recv_multipart_n(s, std::move(out), n, flags); +} + +/* Send a multipart message. + + The range must be a ForwardRange of zmq::message_t, + zmq::const_buffer or zmq::mutable_buffer. + The flags may be zmq::send_flags::sndmore if there are + more message parts to be sent after the call to this function. + + Returns: the number of messages sent (exactly msgs.size()) or nullopt (on EAGAIN). + Throws: if send throws. Any exceptions thrown + by the msgs range will be propagated and the message + may have been only partially sent. It is adviced to close this socket in that event. +*/ +template::value + && (std::is_same, message_t>::value + || detail::is_buffer>::value)>::type +#endif + > +send_result_t +send_multipart(socket_ref s, Range &&msgs, send_flags flags = send_flags::none) +{ + using std::begin; + using std::end; + auto it = begin(msgs); + const auto end_it = end(msgs); + size_t msg_count = 0; + while (it != end_it) { + const auto next = std::next(it); + const auto msg_flags = + flags | (next == end_it ? send_flags::none : send_flags::sndmore); + if (!s.send(*it, msg_flags)) { + // zmq ensures atomic delivery of messages + assert(it == begin(msgs)); + return {}; + } + ++msg_count; + it = next; + } + return msg_count; +} + +/* Encode a multipart message. + + The range must be a ForwardRange of zmq::message_t. A + zmq::multipart_t or STL container may be passed for encoding. + + Returns: a zmq::message_t holding the encoded multipart data. + + Throws: std::range_error is thrown if the size of any single part + can not fit in an unsigned 32 bit integer. + + The encoding is compatible with that used by the CZMQ function + zmsg_encode(), see https://rfc.zeromq.org/spec/50/. + Each part consists of a size followed by the data. + These are placed contiguously into the output message. A part of + size less than 255 bytes will have a single byte size value. + Larger parts will have a five byte size value with the first byte + set to 0xFF and the remaining four bytes holding the size of the + part's data. +*/ +template::value + && (std::is_same, message_t>::value + || detail::is_buffer>::value)>::type +#endif + > +message_t encode(const Range &parts) +{ + size_t mmsg_size = 0; + + // First pass check sizes + for (const auto &part : parts) { + const size_t part_size = part.size(); + if (part_size > std::numeric_limits::max()) { + // Size value must fit into uint32_t. + throw std::range_error("Invalid size, message part too large"); + } + const size_t count_size = + part_size < std::numeric_limits::max() ? 1 : 5; + mmsg_size += part_size + count_size; + } + + message_t encoded(mmsg_size); + unsigned char *buf = encoded.data(); + for (const auto &part : parts) { + const uint32_t part_size = part.size(); + const unsigned char *part_data = + static_cast(part.data()); + + if (part_size < std::numeric_limits::max()) { + // small part + *buf++ = (unsigned char) part_size; + } else { + // big part + *buf++ = std::numeric_limits::max(); + detail::write_network_order(buf, part_size); + buf += sizeof(part_size); + } + std::memcpy(buf, part_data, part_size); + buf += part_size; + } + + assert(static_cast(buf - encoded.data()) == mmsg_size); + return encoded; +} + +/* Decode an encoded message to multiple parts. + + The given output iterator must be a ForwardIterator to a container + holding zmq::message_t such as a zmq::multipart_t or various STL + containers. + + Returns the ForwardIterator advanced once past the last decoded + part. + + Throws: a std::out_of_range is thrown if the encoded part sizes + lead to exceeding the message data bounds. + + The decoding assumes the message is encoded in the manner + performed by zmq::encode(), see https://rfc.zeromq.org/spec/50/. + */ +template OutputIt decode(const message_t &encoded, OutputIt out) +{ + const unsigned char *source = encoded.data(); + const unsigned char *const limit = source + encoded.size(); + + while (source < limit) { + size_t part_size = *source++; + if (part_size == std::numeric_limits::max()) { + if (static_cast(limit - source) < sizeof(uint32_t)) { + throw std::out_of_range( + "Malformed encoding, overflow in reading size"); + } + part_size = detail::read_u32_network_order(source); + // the part size is allowed to be less than 0xFF + source += sizeof(uint32_t); + } + + if (static_cast(limit - source) < part_size) { + throw std::out_of_range("Malformed encoding, overflow in reading part"); + } + *out = message_t(source, part_size); + ++out; + source += part_size; + } + + assert(source == limit); + return out; +} + +#endif + + +#ifdef ZMQ_HAS_RVALUE_REFS + +/* + This class handles multipart messaging. It is the C++ equivalent of zmsg.h, + which is part of CZMQ (the high-level C binding). Furthermore, it is a major + improvement compared to zmsg.hpp, which is part of the examples in the ØMQ + Guide. Unnecessary copying is avoided by using move semantics to efficiently + add/remove parts. +*/ +class multipart_t +{ + private: + std::deque m_parts; + + public: + typedef std::deque::value_type value_type; + + typedef std::deque::iterator iterator; + typedef std::deque::const_iterator const_iterator; + + typedef std::deque::reverse_iterator reverse_iterator; + typedef std::deque::const_reverse_iterator const_reverse_iterator; + + // Default constructor + multipart_t() {} + + // Construct from socket receive + multipart_t(socket_t &socket) { recv(socket); } + + // Construct from memory block + multipart_t(const void *src, size_t size) { addmem(src, size); } + + // Construct from string + multipart_t(const std::string &string) { addstr(string); } + + // Construct from message part + multipart_t(message_t &&message) { add(std::move(message)); } + + // Move constructor + multipart_t(multipart_t &&other) { m_parts = std::move(other.m_parts); } + + // Move assignment operator + multipart_t &operator=(multipart_t &&other) + { + m_parts = std::move(other.m_parts); + return *this; + } + + // Destructor + virtual ~multipart_t() { clear(); } + + message_t &operator[](size_t n) { return m_parts[n]; } + + const message_t &operator[](size_t n) const { return m_parts[n]; } + + message_t &at(size_t n) { return m_parts.at(n); } + + const message_t &at(size_t n) const { return m_parts.at(n); } + + iterator begin() { return m_parts.begin(); } + + const_iterator begin() const { return m_parts.begin(); } + + const_iterator cbegin() const { return m_parts.cbegin(); } + + reverse_iterator rbegin() { return m_parts.rbegin(); } + + const_reverse_iterator rbegin() const { return m_parts.rbegin(); } + + iterator end() { return m_parts.end(); } + + const_iterator end() const { return m_parts.end(); } + + const_iterator cend() const { return m_parts.cend(); } + + reverse_iterator rend() { return m_parts.rend(); } + + const_reverse_iterator rend() const { return m_parts.rend(); } + + // Delete all parts + void clear() { m_parts.clear(); } + + // Get number of parts + size_t size() const { return m_parts.size(); } + + // Check if number of parts is zero + bool empty() const { return m_parts.empty(); } + + // Receive multipart message from socket + bool recv(socket_t &socket, int flags = 0) + { + clear(); + bool more = true; + while (more) { + message_t message; +#ifdef ZMQ_CPP11 + if (!socket.recv(message, static_cast(flags))) + return false; +#else + if (!socket.recv(&message, flags)) + return false; +#endif + more = message.more(); + add(std::move(message)); + } + return true; + } + + // Send multipart message to socket + bool send(socket_t &socket, int flags = 0) + { + flags &= ~(ZMQ_SNDMORE); + bool more = size() > 0; + while (more) { + message_t message = pop(); + more = size() > 0; +#ifdef ZMQ_CPP11 + if (!socket.send(message, static_cast( + (more ? ZMQ_SNDMORE : 0) | flags))) + return false; +#else + if (!socket.send(message, (more ? ZMQ_SNDMORE : 0) | flags)) + return false; +#endif + } + clear(); + return true; + } + + // Concatenate other multipart to front + void prepend(multipart_t &&other) + { + while (!other.empty()) + push(other.remove()); + } + + // Concatenate other multipart to back + void append(multipart_t &&other) + { + while (!other.empty()) + add(other.pop()); + } + + // Push memory block to front + void pushmem(const void *src, size_t size) + { + m_parts.push_front(message_t(src, size)); + } + + // Push memory block to back + void addmem(const void *src, size_t size) + { + m_parts.push_back(message_t(src, size)); + } + + // Push string to front + void pushstr(const std::string &string) + { + m_parts.push_front(message_t(string.data(), string.size())); + } + + // Push string to back + void addstr(const std::string &string) + { + m_parts.push_back(message_t(string.data(), string.size())); + } + + // Push type (fixed-size) to front + template void pushtyp(const T &type) + { + static_assert(!std::is_same::value, + "Use pushstr() instead of pushtyp()"); + m_parts.push_front(message_t(&type, sizeof(type))); + } + + // Push type (fixed-size) to back + template void addtyp(const T &type) + { + static_assert(!std::is_same::value, + "Use addstr() instead of addtyp()"); + m_parts.push_back(message_t(&type, sizeof(type))); + } + + // Push message part to front + void push(message_t &&message) { m_parts.push_front(std::move(message)); } + + // Push message part to back + void add(message_t &&message) { m_parts.push_back(std::move(message)); } + + // Alias to allow std::back_inserter() + void push_back(message_t &&message) { m_parts.push_back(std::move(message)); } + + // Pop string from front + std::string popstr() + { + std::string string(m_parts.front().data(), m_parts.front().size()); + m_parts.pop_front(); + return string; + } + + // Pop type (fixed-size) from front + template T poptyp() + { + static_assert(!std::is_same::value, + "Use popstr() instead of poptyp()"); + if (sizeof(T) != m_parts.front().size()) + throw std::runtime_error( + "Invalid type, size does not match the message size"); + T type = *m_parts.front().data(); + m_parts.pop_front(); + return type; + } + + // Pop message part from front + message_t pop() + { + message_t message = std::move(m_parts.front()); + m_parts.pop_front(); + return message; + } + + // Pop message part from back + message_t remove() + { + message_t message = std::move(m_parts.back()); + m_parts.pop_back(); + return message; + } + + // get message part from front + const message_t &front() { return m_parts.front(); } + + // get message part from back + const message_t &back() { return m_parts.back(); } + + // Get pointer to a specific message part + const message_t *peek(size_t index) const { return &m_parts[index]; } + + // Get a string copy of a specific message part + std::string peekstr(size_t index) const + { + std::string string(m_parts[index].data(), m_parts[index].size()); + return string; + } + + // Peek type (fixed-size) from front + template T peektyp(size_t index) const + { + static_assert(!std::is_same::value, + "Use peekstr() instead of peektyp()"); + if (sizeof(T) != m_parts[index].size()) + throw std::runtime_error( + "Invalid type, size does not match the message size"); + T type = *m_parts[index].data(); + return type; + } + + // Create multipart from type (fixed-size) + template static multipart_t create(const T &type) + { + multipart_t multipart; + multipart.addtyp(type); + return multipart; + } + + // Copy multipart + multipart_t clone() const + { + multipart_t multipart; + for (size_t i = 0; i < size(); i++) + multipart.addmem(m_parts[i].data(), m_parts[i].size()); + return multipart; + } + + // Dump content to string + std::string str() const + { + std::stringstream ss; + for (size_t i = 0; i < m_parts.size(); i++) { + const unsigned char *data = m_parts[i].data(); + size_t size = m_parts[i].size(); + + // Dump the message as text or binary + bool isText = true; + for (size_t j = 0; j < size; j++) { + if (data[j] < 32 || data[j] > 127) { + isText = false; + break; + } + } + ss << "\n[" << std::dec << std::setw(3) << std::setfill('0') << size + << "] "; + if (size >= 1000) { + ss << "... (too big to print)"; + continue; + } + for (size_t j = 0; j < size; j++) { + if (isText) + ss << static_cast(data[j]); + else + ss << std::hex << std::setw(2) << std::setfill('0') + << static_cast(data[j]); + } + } + return ss.str(); + } + + // Check if equal to other multipart + bool equal(const multipart_t *other) const + { + if (size() != other->size()) + return false; + for (size_t i = 0; i < size(); i++) + if (*peek(i) != *other->peek(i)) + return false; + return true; + } + +#ifdef ZMQ_CPP11 + + // Return single part message_t encoded from this multipart_t. + message_t encode() const { return zmq::encode(*this); } + + // Decode encoded message into multiple parts and append to self. + void decode_append(const message_t &encoded) + { + zmq::decode(encoded, std::back_inserter(*this)); + } + + // Return a new multipart_t containing the decoded message_t. + static multipart_t decode(const message_t &encoded) + { + multipart_t tmp; + zmq::decode(encoded, std::back_inserter(tmp)); + return tmp; + } + +#endif + + private: + // Disable implicit copying (moving is more efficient) + multipart_t(const multipart_t &other) ZMQ_DELETED_FUNCTION; + void operator=(const multipart_t &other) ZMQ_DELETED_FUNCTION; +}; // class multipart_t + +inline std::ostream &operator<<(std::ostream &os, const multipart_t &msg) +{ + return os << msg.str(); +} + +#endif // ZMQ_HAS_RVALUE_REFS + +#if defined(ZMQ_BUILD_DRAFT_API) && defined(ZMQ_CPP11) && defined(ZMQ_HAVE_POLLER) +class active_poller_t +{ + public: + active_poller_t() = default; + ~active_poller_t() = default; + + active_poller_t(const active_poller_t &) = delete; + active_poller_t &operator=(const active_poller_t &) = delete; + + active_poller_t(active_poller_t &&src) = default; + active_poller_t &operator=(active_poller_t &&src) = default; + + using handler_type = std::function; + + void add(zmq::socket_ref socket, event_flags events, handler_type handler) + { + if (!handler) + throw std::invalid_argument("null handler in active_poller_t::add"); + auto ret = handlers.emplace( + socket, std::make_shared(std::move(handler))); + if (!ret.second) + throw error_t(EINVAL); // already added + try { + base_poller.add(socket, events, ret.first->second.get()); + need_rebuild = true; + } + catch (...) { + // rollback + handlers.erase(socket); + throw; + } + } + + void remove(zmq::socket_ref socket) + { + base_poller.remove(socket); + handlers.erase(socket); + need_rebuild = true; + } + + void modify(zmq::socket_ref socket, event_flags events) + { + base_poller.modify(socket, events); + } + + size_t wait(std::chrono::milliseconds timeout) + { + if (need_rebuild) { + poller_events.resize(handlers.size()); + poller_handlers.clear(); + poller_handlers.reserve(handlers.size()); + for (const auto &handler : handlers) { + poller_handlers.push_back(handler.second); + } + need_rebuild = false; + } + const auto count = base_poller.wait_all(poller_events, timeout); + std::for_each(poller_events.begin(), + poller_events.begin() + static_cast(count), + [](decltype(base_poller)::event_type &event) { + assert(event.user_data != nullptr); + (*event.user_data)(event.events); + }); + return count; + } + + ZMQ_NODISCARD bool empty() const noexcept { return handlers.empty(); } + + size_t size() const noexcept { return handlers.size(); } + + private: + bool need_rebuild{false}; + + poller_t base_poller{}; + std::unordered_map> handlers{}; + std::vector poller_events{}; + std::vector> poller_handlers{}; +}; // class active_poller_t +#endif // defined(ZMQ_BUILD_DRAFT_API) && defined(ZMQ_CPP11) && defined(ZMQ_HAVE_POLLER) + + +} // namespace zmq + +#endif // __ZMQ_ADDON_HPP_INCLUDED__ diff --git a/src/pcapexport.h b/src/pcapexport.h index 058e5df90..694f1cc70 100644 --- a/src/pcapexport.h +++ b/src/pcapexport.h @@ -12,6 +12,7 @@ enum class exporttype : uint8_t { gre = 0, file = 1, zmq = 2, + vxlan = 3 }; class PcapExportBase { diff --git a/src/pktminerg.cpp b/src/pktminerg.cpp index 9eb73d4a9..ec5d01da8 100644 --- a/src/pktminerg.cpp +++ b/src/pktminerg.cpp @@ -4,11 +4,13 @@ #include #include "pcaphandler.h" #include "socketgre.h" +#include "socketvxlan.h" #include "socketzmq.h" #include "versioninfo.h" #include "syshelp.h" #ifndef WIN32 #include "agent_control_plane.h" + #endif std::shared_ptr handler = nullptr; @@ -33,9 +35,11 @@ int main(int argc, const char* argv[]) { "set gre remote IPs, seperate by ',' Example: -r 8.8.4.4,8.8.8.8") ("zmq_port,z", boost::program_options::value()->default_value(0)->value_name("ZMQ_PORT"), "set remote zeromq server port to receive packets reliably; ZMQ_PORT default value 0 means disable.") - ("zmq_hwm,m", boost::program_options::value()->default_value(100)->value_name("ZMQ_HWM"), + ("zmq_hwm,m", boost::program_options::value()->default_value(4096)->value_name("ZMQ_HWM"), "set zeromq queue high watermark; ZMQ_HWM default value 100.") - ("keybit,k", boost::program_options::value()->default_value(1)->value_name("BIT"), + ("keybit,k", boost::program_options::value()->default_value(1)->value_name("KEYBIT"), + "set gre key bit; BIT defaults 1") + ("vni,n", boost::program_options::value()->value_name("VNI"), "set gre key bit; BIT defaults 1") ("snaplen,s", boost::program_options::value()->default_value(2048)->value_name("LENGTH"), "set snoop packet snaplen; LENGTH defaults 2048 and units byte") @@ -263,13 +267,22 @@ int main(int argc, const char* argv[]) { << "zmqExport initExport failed." << std::endl; return err; } - } else { + } + else if(vm.count("vni")){ + int vni = vm["vni"].as(); + exportPtr = std::make_shared(remoteips, vni, bind_device, pmtudisc); + int err = exportPtr->initExport(); + if (err != 0) { + std::cerr << StatisLogContext::getTimeString() << "vxlanExport initExport failed." << std::endl; + return err; + } + } + else{ // export gre exportPtr = std::make_shared(remoteips, keybit, bind_device, pmtudisc); int err = exportPtr->initExport(); if (err != 0) { - std::cerr << StatisLogContext::getTimeString() - << "greExport initExport failed." << std::endl; + std::cerr << StatisLogContext::getTimeString() << "greExport initExport failed." << std::endl; return err; } } diff --git a/src/socketvxlan.cpp b/src/socketvxlan.cpp new file mode 100644 index 000000000..1a7506d15 --- /dev/null +++ b/src/socketvxlan.cpp @@ -0,0 +1,168 @@ +#include "socketvxlan.h" + +#include +#include +#ifdef WIN32 + #include + #include + #include + typedef SSIZE_T ssize_t; + #define usleep Sleep +#else +#include +#include +#endif +#include +#include "statislog.h" + +#define VXLAN_PORT 4789 + +typedef struct { + uint32_t vx_flags; + uint32_t vx_vni; +}vxlan_hdr_t; + +const int INVALIDE_SOCKET_FD = -1; + +PcapExportVxlan::PcapExportVxlan(const std::vector& remoteips, uint32_t vni, const std::string& bind_device, + const int pmtudisc) : + _remoteips(remoteips), + _vni(vni), + _bind_device(bind_device), + _pmtudisc(pmtudisc), + _socketfds(remoteips.size()), + _remote_addrs(remoteips.size()), + _vxlanbuffers(remoteips.size()) { + _type = exporttype::vxlan; + for (size_t i = 0; i < remoteips.size(); ++i) { + _socketfds[i] = INVALIDE_SOCKET_FD; + _vxlanbuffers[i].resize(65535 + sizeof(vxlan_hdr_t), '\0'); + } +} + +PcapExportVxlan::~PcapExportVxlan() { + closeExport(); +} + +int PcapExportVxlan::initSockets(size_t index) { + auto& socketfd = _socketfds[index]; + + if (socketfd == INVALIDE_SOCKET_FD) { + + _remote_addrs[index].sin_family = AF_INET; + _remote_addrs[index].sin_port = htons(VXLAN_PORT); + _remote_addrs[index].sin_addr.s_addr = inet_addr(_remoteips[index].c_str()); + + if ((socketfd = socket(AF_INET, SOCK_DGRAM, 0)) == INVALIDE_SOCKET_FD) { + std::cerr << StatisLogContext::getTimeString() << "Create socket failed, error code is " << errno + << ", error is " << strerror(errno) << "." + << std::endl; + return -1; + } + + if (_bind_device.length() > 0) { +#ifdef WIN32 + //TODO: bind device on WIN32 +#else + if (setsockopt(socketfd, SOL_SOCKET, SO_BINDTODEVICE, _bind_device.c_str(), _bind_device.length()) < 0) { + std::cerr << StatisLogContext::getTimeString() << "SO_BINDTODEVICE failed, error code is " << errno + << ", error is " << strerror(errno) << "." + << std::endl; + return -1; + } +#endif // WIN32 + } + +#ifdef WIN32 + //TODO: bind device on WIN32 +#else + if (_pmtudisc >= 0) { + if (setsockopt(socketfd, SOL_IP, IP_MTU_DISCOVER, &_pmtudisc, sizeof(_pmtudisc)) == -1) { + std::cerr << StatisLogContext::getTimeString() << "IP_MTU_DISCOVER failed, error code is " << errno + << ", error is " << strerror(errno) << "." + << std::endl; + return -1; + } + } +#endif // WIN32 + + + + } + return 0; +} + +int PcapExportVxlan::initExport() { + for (size_t i = 0; i < _remoteips.size(); ++i) { + int ret = initSockets(i); + if (ret != 0) { + std::cerr << "Failed with index: " << i << std::endl; + return ret; + } + } + return 0; +} + +int PcapExportVxlan::closeExport() { + for (size_t i = 0; i < _remoteips.size(); ++i) { + if (_socketfds[i] != INVALIDE_SOCKET_FD) { +#ifdef WIN32 + shutdown(_socketfds[i], SD_BOTH); +#else + close(_socketfds[i]); +#endif // WIN32 + _socketfds[i] = INVALIDE_SOCKET_FD; + } + } + return 0; +} + +int PcapExportVxlan::exportPacket(const struct pcap_pkthdr* header, const uint8_t* pkt_data, int direct) { + int ret = 0; + if(direct == PKTD_UNKNOWN) { + return -1; + } + + for (size_t i = 0; i < _remoteips.size(); ++i) { + ret |= exportPacket(i, header, pkt_data, direct); + } + return ret; +} + +int PcapExportVxlan::exportPacket(size_t index, const struct pcap_pkthdr* header, const uint8_t* pkt_data, int direct) { + auto& vxlanbuffer = _vxlanbuffers[index]; + int socketfd = _socketfds[index]; + auto& remote_addr = _remote_addrs[index]; + + size_t length = (size_t) (header->caplen <= 65535 ? header->caplen : 65535); + + vxlan_hdr_t* hdr; + hdr = (vxlan_hdr_t*)&*vxlanbuffer.begin(); + hdr->vx_flags = htonl(0x08000000); + hdr->vx_vni = htonl(_vni | (direct << 28)); + + std::memcpy(reinterpret_cast(&(vxlanbuffer[sizeof(vxlan_hdr_t)])), + reinterpret_cast(pkt_data), length); + ssize_t nSend = sendto(socketfd, &(vxlanbuffer[0]), length + sizeof(vxlan_hdr_t), 0, (struct sockaddr*) &remote_addr, + sizeof(struct sockaddr)); + while (nSend == -1 && errno == ENOBUFS) { + usleep(1000); + nSend = static_cast(sendto(socketfd, &(vxlanbuffer[0]), length + sizeof(vxlan_hdr_t), 0, + (struct sockaddr*) &remote_addr, + sizeof(struct sockaddr))); + } + if (nSend == -1) { + std::cerr << StatisLogContext::getTimeString() << "Send to socket failed, error code is " << errno + << ", error is " << strerror(errno) << "." + << std::endl; + return -1; + } + if (nSend < (ssize_t) (length + sizeof(vxlan_hdr_t))) { + std::cerr << StatisLogContext::getTimeString() << "Send socket " << length + sizeof(vxlan_hdr_t) + << " bytes, but only " << nSend << + " bytes are sent success." << std::endl; + return 1; + } + return 0; +} + diff --git a/src/socketvxlan.h b/src/socketvxlan.h new file mode 100644 index 000000000..1a56cfbfd --- /dev/null +++ b/src/socketvxlan.h @@ -0,0 +1,35 @@ +#ifndef SRC_SOCKETVXLAN_H_ +#define SRC_SOCKETVXLAN_H_ + +#ifndef WIN32 + #include +#endif +#include +#include +#include "pcapexport.h" + + +class PcapExportVxlan : public PcapExportBase { +protected: + std::vector _remoteips; + uint32_t _vni; + std::string _bind_device; + int _pmtudisc; + std::vector _socketfds; + std::vector _remote_addrs; + std::vector> _vxlanbuffers; + +private: + int initSockets(size_t index); + int exportPacket(size_t index, const struct pcap_pkthdr *header, const uint8_t *pkt_data, int direct); + +public: + PcapExportVxlan(const std::vector& remoteips, uint32_t vni, const std::string& bind_device, + const int pmtudisc); + ~PcapExportVxlan(); + int initExport(); + int exportPacket(const struct pcap_pkthdr *header, const uint8_t *pkt_data, int direct); + int closeExport(); +}; + +#endif // SRC_SOCKETVXLAN_H_ diff --git a/src/socketzmq.cpp b/src/socketzmq.cpp index 3a4b0743c..41002da67 100644 --- a/src/socketzmq.cpp +++ b/src/socketzmq.cpp @@ -40,15 +40,17 @@ PcapExportZMQ::~PcapExportZMQ() { } int PcapExportZMQ::initSockets(size_t index, uint32_t keybit) { + (void)keybit; + _zmq_contexts.emplace_back(1); _zmq_sockets.emplace_back(_zmq_contexts[index], ZMQ_PUSH); zmq::socket_t& socket = _zmq_sockets[index]; std::string connect_addr = "tcp://" + _remoteips[index] + ":" + std::to_string(_zmq_port); - uint32_t linger_ms = 10 * 1000; + int32_t linger_ms = 10 * 1000; for (size_t i = 0; i < _remoteips.size(); ++i) { - _zmq_sockets[i].setsockopt(ZMQ_LINGER, linger_ms); - _zmq_sockets[i].setsockopt(ZMQ_SNDHWM, _zmq_hwm); + _zmq_sockets[i].set(zmq::sockopt::linger, linger_ms); + _zmq_sockets[i].set(zmq::sockopt::sndhwm, _zmq_hwm); } socket.connect(connect_addr); diff --git a/tools/gredemo.cpp b/tools/gredemo.cpp index 5896ba02a..766eddc1c 100644 --- a/tools/gredemo.cpp +++ b/tools/gredemo.cpp @@ -114,10 +114,9 @@ int main(int argc, const char* argv[]) { // read pcap header pkthdr_t pktHdr; - char pkt_header[16]; while(1) { try { - fs.read(pkt_header, sizeof(pkt_header)); + fs.read((char*)&pktHdr, sizeof(pkthdr_t)); if ((fs.rdstate() & std::ifstream::failbit) != 0) { if ( (fs.rdstate() & std::ifstream::eofbit) != 0 ) { std::cout << "reach the end of pcap file!" << std::endl; @@ -130,16 +129,12 @@ int main(int argc, const char* argv[]) { std::cout << "Exception read file, " << e.what() << std::endl; return 1; } + if (isBigEndian) { - pktHdr.tv_sec = ntohl(*((uint32_t*)pkt_header)); - pktHdr.tv_usec = ntohl(*((uint32_t*)(pkt_header+4))); - pktHdr.caplen = ntohl(*((uint32_t*)(pkt_header+8))); - pktHdr.len = ntohl(*((uint32_t*)(pkt_header+12))); - } else { - pktHdr.tv_sec = *((uint32_t*)pkt_header); - pktHdr.tv_usec = *((uint32_t*)(pkt_header+4)); - pktHdr.caplen = *((uint32_t*)(pkt_header+8)); - pktHdr.len = *((uint32_t*)(pkt_header+12)); + pktHdr.tv_sec = ntohl(pktHdr.tv_sec); + pktHdr.tv_usec = ntohl(pktHdr.tv_usec); + pktHdr.caplen = ntohl(pktHdr.caplen); + pktHdr.len = ntohl(pktHdr.len); } // read pcap diff --git a/tools/gredump.cpp b/tools/gredump.cpp index 05911f1b4..9f2c13a82 100644 --- a/tools/gredump.cpp +++ b/tools/gredump.cpp @@ -121,7 +121,8 @@ void PcapHanler(GreHandleBuff *buff, const struct pcap_pkthdr *h, const uint8_t std::memcpy((void*)(cache->ipfrag_buff + fragOffset * 8), p, (size_t)nCount); cache->pkthdr.len += nCount - 8; cache->pkthdr.caplen += nCount - 8; - keybit = ntohl(*((uint32_t*)(cache->ipfrag_buff+4))); + memcpy(&keybit, cache->ipfrag_buff + 4, sizeof(uint32_t)); + keybit = ntohl(keybit); if (buff->grekey==0 || buff->grekey==keybit) { pcap_dump((u_char*)buff->dumper, &cache->pkthdr, (const uint8_t*)(cache->ipfrag_buff + 8)); buff->dumpCount++; @@ -225,7 +226,6 @@ int main(int argc, const char* argv[]) { return 1; } - int ret; char errbuf[PCAP_ERRBUF_SIZE]; pcap_t* pcap_handle; @@ -239,7 +239,7 @@ int main(int argc, const char* argv[]) { auto pcapGuard = MakeGuard([pcap_handle]() { pcap_close(pcap_handle); }); - ret = pcap_activate(pcap_handle); + int ret = pcap_activate(pcap_handle); if (ret != 0) { std::cerr << "Capture error: " << pcap_statustostr(ret) << std::endl; return 1; @@ -327,7 +327,7 @@ int main(int argc, const char* argv[]) { nCount = vm["count"].as(); } - ret = pcap_loop(pcap_handle, nCount, [](uint8_t *user, const struct pcap_pkthdr *h, const uint8_t *data) { + pcap_loop(pcap_handle, nCount, [](uint8_t *user, const struct pcap_pkthdr *h, const uint8_t *data) { GreHandleBuff* buff = (GreHandleBuff*)user; PcapHanler(buff, h, data); }, (uint8_t*)&grehandlebuff); diff --git a/tools/vxlandump.cpp b/tools/vxlandump.cpp new file mode 100644 index 000000000..6cfd24d91 --- /dev/null +++ b/tools/vxlandump.cpp @@ -0,0 +1,163 @@ +#ifdef WIN32 +#include +#else +#include +#endif +#include +#include +#include +#include +#include +#include +#include "scopeguard.h" +#include "versioninfo.h" + +#define VXLAN_PORT 4789 +int g_break_loop = 0; + +int vxlan_frame_match(const void* data, int size, uint32_t vni) +{ + if(size < 8) + return -1; + if(ntohl(((uint32_t*)data)[0]) == 0x08000000 && + (ntohl(((uint32_t*)data)[1]) >> 8) == vni) + return 0; + return -1; +} + +int main(int argc, const char* argv[]) { + boost::program_options::options_description desc("Allowed options"); + desc.add_options() + ("version,v", "show version.") + ("help,h", "show help.") + ("vni,n", boost::program_options::value()->value_name("VNI"), "vxlan vni filter.") + ("output,o", boost::program_options::value()->value_name("OUT_PCAP"), "output pcap file"); + + boost::program_options::variables_map vm; + uint32_t vni; + int sock; + pcap_t* cap; + pcap_dumper_t* dump; + sockaddr_in addr; + int noblock; + socklen_t addr_len; + timeval timeout; + fd_set rset; + std::vector buff; + int ret; + pcap_pkthdr hdr; + uint64_t capture_cnt; + uint64_t drop_cnt; + uint64_t dump_cnt; + + try { + boost::program_options::store(boost::program_options::parse_command_line(argc, argv, desc), vm); + boost::program_options::notify(vm); + } catch (boost::program_options::error& e) { + std::cerr << "error: " << e.what() << std::endl; + return 1; + } + + // help + if (vm.count("help")) { + std::cout << desc << std::endl; + return 0; + } + + // version + if (vm.count("version")) { + showVersion(); + return 0; + } + + if(!vm.count("vni")) + { + std::cerr << "must set vni option!" << std::endl; + return -1; + } + vni = vm["vni"].as(); + + if (!vm.count("output")) { + std::cerr << "must set output option!" << std::endl; + return -1; + } + + if(!(cap = pcap_open_dead(DLT_EN10MB, UINT16_MAX))) + { + std::cerr << "pcap_open_dead() failed!" << std::endl; + return -1; + } + if(!(dump = pcap_dump_open(cap, vm["output"].as().c_str()))) + { + pcap_close(cap); + std::cerr << "pcap_dump_open() failed!" << std::endl; + return -1; + } + if((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) + { + pcap_dump_close(dump); + pcap_close(cap); + std::cerr << "socket() failed!" << std::endl; + return -1; + } + memset(&addr, 0, sizeof(addr)); + addr.sin_port = htons(VXLAN_PORT); + addr.sin_addr.s_addr = INADDR_ANY; + addr.sin_family = AF_INET; + if(bind(sock, (const sockaddr*)&addr, sizeof(addr)) < 0) + { + close(sock); + pcap_dump_close(dump); + pcap_close(cap); + return -1; + } + + noblock = 1; + setsockopt(sock, SOL_SOCKET, SOCK_NONBLOCK, &noblock, sizeof(noblock)); + + buff.resize(UINT16_MAX); + + std::signal(SIGINT, [](int){ + g_break_loop = 1; + }); + std::signal(SIGTERM, [](int){ + g_break_loop = 1; + }); + + capture_cnt = 0; + drop_cnt = 0; + dump_cnt = 0; + + for(;!g_break_loop;) + { + timeout.tv_sec = 0; + timeout.tv_usec = 50000; + FD_ZERO(&rset); + FD_SET(sock, &rset); + if(select(sock + 1, &rset, 0, 0, &timeout) > 0) + { + addr_len = sizeof(addr); + if((ret = recvfrom(sock, &*buff.begin(), UINT16_MAX, 0, (sockaddr*)&addr, &addr_len)) > 0) + { + ++capture_cnt; + if(vxlan_frame_match(&*buff.begin(), ret, vni) < 0) + { + ++drop_cnt; + } + else + { + ++dump_cnt; + ret -= 8; + hdr.caplen = hdr.len = ret; + gettimeofday(&hdr.ts, 0); + pcap_dump((u_char*)dump, &hdr, &*buff.begin() + 8); + } + } + } + } + std::cout << "Statis Result:" << std::endl; + std::cout << "Capture Packets Count: " << capture_cnt << std::endl; + std::cout << "Drop Not Udp(vxlan) Packets Count: " << drop_cnt << std::endl; + std::cout << "Dump Packets Count: " << dump_cnt << std::endl; + return 0; +} \ No newline at end of file From 4d32b9a6d506589d4c5dfaee84ccd1c695f5e87a Mon Sep 17 00:00:00 2001 From: "haibo.fu" Date: Thu, 12 Aug 2021 15:15:25 +0800 Subject: [PATCH 68/74] 1. compile with local zmq.hpp --- src/agent_control_plane.h | 2 +- src/socketzmq.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/agent_control_plane.h b/src/agent_control_plane.h index 29e68ec9b..776779d1d 100644 --- a/src/agent_control_plane.h +++ b/src/agent_control_plane.h @@ -5,7 +5,7 @@ #include #include -#include +#include "zmq.hpp" #include "agent_control_itf.h" diff --git a/src/socketzmq.h b/src/socketzmq.h index b88c372d5..96a2f1e35 100644 --- a/src/socketzmq.h +++ b/src/socketzmq.h @@ -6,7 +6,7 @@ #endif #include #include -#include +#include "zmq.hpp" #include "pcapexport.h" From 26d648cae4058ed295bf583fbe8cda14a392490b Mon Sep 17 00:00:00 2001 From: "haibo.fu" Date: Thu, 12 Aug 2021 15:27:38 +0800 Subject: [PATCH 69/74] 1. mod version to 0.5.1 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d5515a7b..b1f82b529 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ endif () # set PKTMINERG_MAJOR_VERSION, PKTMINERG_MINOR_VERSION, etc. set(PKTMINERG_MAJOR_VERSION "0") set(PKTMINERG_MINOR_VERSION "5") -set(PKTMINERG_PATCH_VERSION "0") +set(PKTMINERG_PATCH_VERSION "1") set(PKTMINERG_VERSION_STRING "${PKTMINERG_MAJOR_VERSION}.${PKTMINERG_MINOR_VERSION}.${PKTMINERG_PATCH_VERSION}") if(WIN32) From c5a4ca4a490ca074a49ae3da96e91dd72a0ff44e Mon Sep 17 00:00:00 2001 From: "haibo.fu" Date: Mon, 16 Aug 2021 11:19:59 +0800 Subject: [PATCH 70/74] 1. add changes --- CHANGES.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 801a68211..67b972a9c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,9 @@ The list of the most significant changes made in Netis Packet Agent over time. +## Netis Packet Agent 0.5.1 +### Features +* Supprot packet forword by vxlan ## Netis Packet Agent 0.5.0 From a000abc84c09059579b39f66a0c076632b1d4fae Mon Sep 17 00:00:00 2001 From: "robbie.tu" Date: Wed, 1 Sep 2021 14:04:15 +0800 Subject: [PATCH 71/74] add vlan support --- src/pcaphandler.cpp | 15 ++++++++++++++- src/vlan.h | 46 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 src/vlan.h diff --git a/src/pcaphandler.cpp b/src/pcaphandler.cpp index acea18f28..d861511d0 100644 --- a/src/pcaphandler.cpp +++ b/src/pcaphandler.cpp @@ -11,6 +11,7 @@ #include "pcaphandler.h" #include "scopeguard.h" #include "agent_status.h" +#include "vlan.h" PcapHandler::PcapHandler() { _gre_count = 0; @@ -61,6 +62,7 @@ void PcapHandler::packetHandler(const struct pcap_pkthdr* header, const uint8_t* ip6_hdr* ipv6; uint16_t eth_type; int direct; + vlan_tag *vlan_hdr; if(header->caplen < sizeof(ether_header)) return; @@ -77,10 +79,21 @@ void PcapHandler::packetHandler(const struct pcap_pkthdr* header, const uint8_t* ipv6 = (ip6_hdr*)(pkt_data + sizeof(ether_header)); direct = checkPktDirectionV6(&ipv6->ip6_src, &ipv6->ip6_dst); break; + + case ETHERTYPE_VLAN: { + vlan_hdr = (vlan_tag *) (pkt_data + sizeof(ether_header)); + uint16_t vlan_type = ntohs(vlan_hdr->vlan_tci); + switch (vlan_type) { + case ETHERTYPE_IP: + ip = (iphdr *) (pkt_data + sizeof(ether_header) + sizeof(vlan_tag)); + direct = checkPktDirectionV4((const in_addr *) &ip->saddr, (const in_addr *) &ip->daddr); + break; + } + } default: break; } - + std::for_each(_exports.begin(), _exports.end(), [header, pkt_data, this, direct](std::shared_ptr pcapExport) { int ret = pcapExport->exportPacket(header, pkt_data, direct); diff --git a/src/vlan.h b/src/vlan.h new file mode 100644 index 000000000..41aa8c786 --- /dev/null +++ b/src/vlan.h @@ -0,0 +1,46 @@ +/*- + * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#) $Header: /tcpdump/master/libpcap/pcap/vlan.h,v 1.1 2008-08-06 07:45:00 guy Exp $ + */ + +#ifndef lib_pcap_vlan_h +#define lib_pcap_vlan_h + +struct vlan_tag { + u_int16_t vlan_tpid; /* ETH_P_8021Q */ + u_int16_t vlan_tci; /* VLAN TCI */ +}; + +#define VLAN_TAG_LEN 4 + +#endif From 4ac52941dfbdb225ae477e72328ba85700f83993 Mon Sep 17 00:00:00 2001 From: robbietu <77134559+robbietu@users.noreply.github.com> Date: Wed, 1 Sep 2021 16:42:38 +0800 Subject: [PATCH 72/74] Update CHANGES.md --- CHANGES.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 67b972a9c..72f3adce2 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,10 @@ The list of the most significant changes made in Netis Packet Agent over time. +## Netis Packet Agent 0.5.2 +### Features +* Supprot vlan packets + ## Netis Packet Agent 0.5.1 ### Features * Supprot packet forword by vxlan From 90a7e93a9bb7811e0c099d44c40dc559c8bd5b16 Mon Sep 17 00:00:00 2001 From: robbietu <77134559+robbietu@users.noreply.github.com> Date: Fri, 3 Sep 2021 10:08:22 +0800 Subject: [PATCH 73/74] Create cmake.yml --- .github/workflows/cmake.yml | 38 +++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 .github/workflows/cmake.yml diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml new file mode 100644 index 000000000..e282e3891 --- /dev/null +++ b/.github/workflows/cmake.yml @@ -0,0 +1,38 @@ +name: CMake + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +env: + # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) + BUILD_TYPE: Release + +jobs: + build: + # The CMake configure and build commands are platform agnostic and should work equally + # well on Windows or Mac. You can convert this to a matrix build if you need + # cross-platform coverage. + # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Configure CMake + # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. + # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type + run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + + - name: Build + # Build your program with the given configuration + run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} + + - name: Test + working-directory: ${{github.workspace}}/build + # Execute tests defined by the CMake configuration. + # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail + run: ctest -C ${{env.BUILD_TYPE}} + From 4638e95922e2b4425afa4222b6d5612ff50a60d2 Mon Sep 17 00:00:00 2001 From: robbietu <77134559+robbietu@users.noreply.github.com> Date: Fri, 3 Sep 2021 10:09:07 +0800 Subject: [PATCH 74/74] Create greetings.yml --- .github/workflows/greetings.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .github/workflows/greetings.yml diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml new file mode 100644 index 000000000..ee1cb1167 --- /dev/null +++ b/.github/workflows/greetings.yml @@ -0,0 +1,16 @@ +name: Greetings + +on: [pull_request, issues] + +jobs: + greeting: + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - uses: actions/first-interaction@v1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + issue-message: 'Message that will be displayed on users first issue' + pr-message: 'Message that will be displayed on users first pull request'

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]Qs!ahW5l|u%zlo(?=Uf??-;mvvK&$bA*eCf<(y6;-8 z@3h4=(s#a2cIBN+^|0j+JY3vW|03e9x@10Z&SmCehv_XC#=IUGjhkxp*s(p73bqkY zBi~hbdQR0@pO_1i=ias9_CPGp%XoekHDfo6zwE>}kUL@hYSAtts5E6w`;79qjO=*o z%+Bn+s&ZgPM0b%PlxdX1jj)*=CBr#XMd z<+N#3j__`)8mQoZhETMiVHMt!6=znr%=Vce}|rm6r@#Io}uZM?~jI z4ULZqh92xhBvIwxdao@6Awo|&pFZqRcRCTIPtsKLt80=}(^t?%&wq81D9(?ZvawMV z<}8(BDPuJei(Qkl^yMCXyg1CU%0vQPcdVkYwl`PrSX{6z5yJee{d&fwCnnHN)+zdF zp?xc4t-{LV+dU(Wl@GsXnKq#U4!A-UDUsdtF|Qqm`(?g6==_0mEg`PSj{UZ3^m!vz zCNa>oa19#Vq6TT$6Kxs)Yr`_D+o-(vXxz99eooYWh?8VQQT`8jZP; zp4bkRuFVa=S7r^zv%r^f>kk9j4AoMh$`q~YJ4swqZ0qUJf#1givBZ!8i|!9Vi7JWg z7fx2cKYvBwlaLZMaum6{GGv+D3lUBR8Ti}<+=jKrki7JGW8HC)Vn4t(Prg|&&uNgL zHYO~Sp1YSp#RyIBj?Vd4Da!%sBsmaL+`orm0$xJ>f6+J$^*x;S(3+UNaSfqi_p8D;6xXU0MQ1BbF-{Qv*} literal 14060 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 diff --git a/img/aws-1-2.png b/img/aws-1-2.png index d6c9bf928884f111f58a6e0e026c7ca54087b0e1..1d55774b32cfe3a2980c8e5533c2051280d43d7c 100644 GIT binary patch literal 14607 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 jd`MVYC(3eqdS0LW-d%5(h8p-UhCT=UFyPz; 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 diff --git a/img/aws-1-3.png b/img/aws-1-3.png index 617a38e4b1523fa15f6127dd51791b99a85fead1..e3e31c427ec0474ec630b461990edcec6f7c57d1 100644 GIT binary patch literal 13654 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