Browse Source

WIP: Avoid exceptions in the hot path when calculating MSS distribution

Stefan Schmidt 6 years ago
parent
commit
fed201b4ef
1 changed files with 12 additions and 6 deletions
  1. 12 6
      code_boost/src/cxx/pcap_processor.cpp

+ 12 - 6
code_boost/src/cxx/pcap_processor.cpp

@@ -301,14 +301,20 @@ void pcap_processor::process_packets(const Packet &pkt) {
             int win = tcpPkt.window();
             stats.incrementWinCount(ipAddressSender, win);
 
-            try {
-                int val = tcpPkt.mss();
+			//if (tcpPkt.options().size() != 0)
+			auto mssOption = tcpPkt.search_option(TCP::MSS);
+			if (mssOption != nullptr) {
+				auto val = mssOption->to<uint16_t>();
+				stats.incrementMSScount(ipAddressSender, val);
+			}
+            //try {
+            //    int val = tcpPkt.mss();
 
                 // MSS distribution
-                stats.incrementMSScount(ipAddressSender, val);
-            } catch (Tins::option_not_found&) {
-                // Ignore MSS if option not set
-            }
+            //    stats.incrementMSScount(ipAddressSender, val);
+            //} catch (Tins::option_not_found&) {
+            //    // Ignore MSS if option not set
+            //}
             stats.incrementPortCount(ipAddressSender, tcpPkt.sport(), ipAddressReceiver, tcpPkt.dport(), "TCP");
             stats.increasePortByteCount(ipAddressSender, tcpPkt.sport(), ipAddressReceiver, tcpPkt.dport(), sizeCurrentPacket, "TCP");