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): -- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- svn-commits mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/svn-commits
