]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
mtu: track max mtu for capture devices
authorVictor Julien <victor@inliniac.net>
Fri, 27 Jan 2017 09:03:39 +0000 (10:03 +0100)
committerVictor Julien <victor@inliniac.net>
Mon, 30 Jan 2017 08:04:15 +0000 (09:04 +0100)
src/decode.h
src/suricata.c

index b84f466e0abdbaefc12dc0148383f2362f98e47b..aa21f1a8adf1613af6b0b97221df9f8ffddf4a6f 100644 (file)
@@ -594,7 +594,11 @@ typedef struct Packet_
 #endif
 Packet;
 
-#define DEFAULT_PACKET_SIZE (1500 + ETHERNET_HEADER_LEN)
+/** highest mtu of the interfaces we monitor */
+extern int g_default_mtu;
+#define DEFAULT_MTU 1500
+
+#define DEFAULT_PACKET_SIZE (DEFAULT_MTU + ETHERNET_HEADER_LEN)
 /* storage: maximum ip packet size + link header */
 #define MAX_PAYLOAD_SIZE (IPV6_HEADER_LEN + 65536 + 28)
 uint32_t default_packet_size;
index dc5f55c48fd9ffd7303c631b6387c7e602ed6a48..2d2a5c2872ead526a93947433eaa2798b1df120e 100644 (file)
@@ -213,6 +213,9 @@ int g_detect_disabled = 0;
 /** set caps or not */
 int sc_set_caps = FALSE;
 
+/** highest mtu of the interfaces we monitor */
+int g_default_mtu = 0;
+
 int EngineModeIsIPS(void)
 {
     return (g_engine_mode == ENGINE_MODE_IPS);
@@ -2360,6 +2363,8 @@ static int ConfigGetCaptureValue(SCInstance *suri)
                             dev[len-1] = '\0';
                         }
                     }
+                    int mtu = GetIfaceMTU(dev);
+                    g_default_mtu = MAX(mtu, g_default_mtu);
 
                     unsigned int iface_max_packet_size = GetIfaceMaxPacketSize(dev);
                     if (iface_max_packet_size > default_packet_size)
@@ -2369,6 +2374,7 @@ static int ConfigGetCaptureValue(SCInstance *suri)
                     break;
                 /* fall through */
             default:
+                g_default_mtu = DEFAULT_MTU;
                 default_packet_size = DEFAULT_PACKET_SIZE;
         }
     } else {