The source code for the setup, hash table, and filters is presented here for you to study. You can download the complete source code (about 400 lines) from http://www.threadingbuildingblocks.org/book. Look for errata and notes at this web site as well.
The includes and constants sections (Example 11-40) are pretty straightforward. Some constant values are also read from the packet trace file.
Example 11-40. Filter classes setup
#include <iostream> #include <sstream> #include <fstream> #include <string> #include "tbb\task_scheduler_init.h" #include "tbb\pipeline.h" #include "tbb\concurrent_hash_map.h" #include "tbb\atomic.h" #include "tbb\pipeline.h" using namespace std; // All packet attributes stored as std::strings (for simplicity) typedef string nic_t, ip_t, port_t, app_t, protocol_t; // Constants static const string empty = ""; static const port_t FTPcmdPort = "21"; static const port_t FTPdataPort = "20"; // Request contains FTP command static const protocol_t IPwithFTP = "IPwithFTP"; // Default filenames static const char* in_file_name = "input.txt"; static const char* out_file_name = "output.txt"; // Marker forpackets stream static const string end_of_map = "PacketTrace";
Example 11-41 shows the concurrent hash map definitions we need. Hash maps are used for storing both router port to (Local Device IP, Local Device Port) mapping,
mapped_ports_table, and Local Device IP to Router NIC mapping,
string_comparator is the hash compare type in both cases. ...