[asterisk-commits] jbigelow: testsuite/asterisk/trunk r5935 - in /asterisk/trunk/lib/python: ./ ...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Nov 17 14:59:22 CST 2014


Author: jbigelow
Date: Mon Nov 17 14:59:15 2014
New Revision: 5935

URL: http://svnview.digium.com/svn/testsuite?view=rev&rev=5935
Log:
Allow setting the snaplen and buffer_size for packet capturing.

This provides the ability to set a snaplen and/or ring buffer size when
capturing packets.

Review: https://reviewboard.asterisk.org/r/4156/


Modified:
    asterisk/trunk/lib/python/asterisk/pcap.py
    asterisk/trunk/lib/python/asterisk/test_case.py
    asterisk/trunk/lib/python/pcap_listener.py

Modified: asterisk/trunk/lib/python/asterisk/pcap.py
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/lib/python/asterisk/pcap.py?view=diff&rev=5935&r1=5934&r2=5935
==============================================================================
--- asterisk/trunk/lib/python/asterisk/pcap.py (original)
+++ asterisk/trunk/lib/python/asterisk/pcap.py Mon Nov 17 14:59:15 2014
@@ -51,6 +51,8 @@
         device = module_config.get('device')
         bpf_filter = module_config.get('bpf-filter')
         filename = module_config.get('filename')
+        snaplen = module_config.get('snaplen')
+        buffer_size = module_config.get('buffer-size')
         if (module_config.get('register-observer')):
             test_object.register_pcap_observer(self.__pcap_callback)
         if (module_config.get('debug-packets')):
@@ -61,7 +63,9 @@
         test_object.create_pcap_listener(
             device=device,
             bpf_filter=bpf_filter,
-            dumpfile=filename)
+            dumpfile=filename,
+            snaplen=snaplen,
+            buffer_size=buffer_size)
 
     def __pcap_callback(self, packet):
         ''' Private callback. Will log packets out as DEBUG messages if

Modified: asterisk/trunk/lib/python/asterisk/test_case.py
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/lib/python/asterisk/test_case.py?view=diff&rev=5935&r1=5934&r2=5935
==============================================================================
--- asterisk/trunk/lib/python/asterisk/test_case.py (original)
+++ asterisk/trunk/lib/python/asterisk/test_case.py Mon Nov 17 14:59:15 2014
@@ -292,15 +292,19 @@
         """
         pass
 
-    def create_pcap_listener(self, device=None, bpf_filter=None, dumpfile=None):
+    def create_pcap_listener(self, device=None, bpf_filter=None, dumpfile=None,
+                             snaplen=None, buffer_size=None):
         """Create a single instance of a pcap listener.
 
         Keyword arguments:
-        device     The interface to listen on. Defaults to the first interface
-                   beginning with 'lo'.
-        bpf_filter BPF (filter) describing what packets to match, i.e.
-                   "port 5060"
-        dumpfile   The filename at which to save a pcap capture
+        device      The interface to listen on. Defaults to the first interface
+                    beginning with 'lo'.
+        bpf_filter  BPF (filter) describing what packets to match, i.e.
+                    "port 5060"
+        dumpfile    The filename at which to save a pcap capture
+        snaplen     Number of bytes to capture from each packet. Defaults to
+                    65535.
+        buffer_size The ring buffer size. Defaults to 0.
 
         """
 
@@ -313,7 +317,8 @@
         # tests can create their own. Tests may only want to watch a specific
         # port, while a general logger will want to watch more general traffic
         # which can be filtered later.
-        return PcapListener(device, bpf_filter, dumpfile, self._pcap_callback)
+        return PcapListener(device, bpf_filter, dumpfile, self._pcap_callback,
+                snaplen, buffer_size)
 
     def start_asterisk(self):
         """This method will be called when the reactor is running, but

Modified: asterisk/trunk/lib/python/pcap_listener.py
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/lib/python/pcap_listener.py?view=diff&rev=5935&r1=5934&r2=5935
==============================================================================
--- asterisk/trunk/lib/python/pcap_listener.py (original)
+++ asterisk/trunk/lib/python/pcap_listener.py Mon Nov 17 14:59:15 2014
@@ -3,10 +3,12 @@
 
 class PcapFile(abstract.FileDescriptor):
     """Treat a live pcap capture as a file for Twisted to call select() on"""
-    def __init__(self, protocol, interface, xfilter=None, dumpfile=None):
+    def __init__(self, protocol, interface, xfilter=None, dumpfile=None,
+                 snaplen=65535, buffer_size=0):
         abstract.FileDescriptor.__init__(self)
 
-        p = PcapLive(interface, autosave=dumpfile)
+        p = PcapLive(interface, autosave=dumpfile, snaplen=snaplen,
+                buffer_size=buffer_size)
         p.activate()
         p.blocking = False
 
@@ -41,18 +43,27 @@
 
 class PcapListener(protocol.Protocol):
     """A Twisted protocol wrapper for a pcap capture"""
-    def __init__(self, interface, bpf_filter=None, dumpfile=None, callback=None):
+    def __init__(self, interface, bpf_filter=None, dumpfile=None,
+                 callback=None, snaplen=None, buffer_size=None):
         """Initialize a new PcapListener
 
         interface - The name of an interface. If None, the first loopback interface
         bpf_filter - A Berkeley packet filter, i.e. "udp port 5060"
         dumpfile - The filename where to save the capture file
         callback - A function that will receive a PcapPacket for each packet captured
+        snaplen - Number of bytes to capture from each packet. If None, then
+                  65535.
+        buffer_size - The ring buffer size. If None, then 0.
 
         """
         if interface is None:
             interface = [x.name for x in findalldevs() if x.loopback][0]
-        self.pf = PcapFile(self, interface, bpf_filter, dumpfile)
+        if buffer_size is None:
+            buffer_size = 0
+        if snaplen is None:
+            snaplen = 65535
+        self.pf = PcapFile(self, interface, bpf_filter, dumpfile, snaplen,
+                buffer_size)
         self.callback = callback
 
     def makeConnection(self, transport):




More information about the asterisk-commits mailing list