pcap: pass complete filter string to PcapRecorder

Composing the filter in gen_filter() is more complex than we need. We pass the
address and potentially further filter elements separately, and then
gen_filter() has to guess how to combine these. Instead, have just a filter
string to use right from the start, so that the caller has full control (and
full responsibility).

Remove the addr argument, which was only used for filtering.

This is my conclusion of looking at the patches with change Ids
I62a6ae7bd3a84baceb684c26727d2269c86ed023 (PS 1) and
Icbb0f8d2058fa7ebb7f0f731645f9266cacdb120

I62... PS 2 will add the SSH filtering.

The name 'filter' is a python built-in, which is why I chose the argument
name 'filters' instead. It works with 'filter' as well, but let's try to
avoid naming conflicts like that.

Change-Id: Iff7ddf51d3bf0189ce07b488a3dcdcfce6907aba
This commit is contained in:
Neels Hofmeyr 2017-05-15 14:03:07 +02:00
parent bcd4332b6b
commit 95fd67374c
2 changed files with 5 additions and 12 deletions

View File

@ -52,8 +52,8 @@ class OsmoNitb(log.Origin):
raise RuntimeError('No lib/ in %r' % inst)
iface = util.ip_to_iface(self.addr())
pcap_recorder.PcapRecorder(self.suite_run, self.run_dir.new_dir('pcap'),
iface, self.addr())
pcap_recorder.PcapRecorder(self.suite_run, self.run_dir.new_dir('pcap'), iface,
'host %s' % self.addr())
env = { 'LD_LIBRARY_PATH': util.prepend_library_path(lib) }

View File

@ -26,13 +26,13 @@ from . import log, util, config, template, process, osmo_ctrl
class PcapRecorder(log.Origin):
def __init__(self, suite_run, run_dir, iface=None, addr=None):
def __init__(self, suite_run, run_dir, iface=None, filters=''):
self.suite_run = suite_run
self.run_dir = run_dir
self.iface = iface
if not self.iface:
self.iface = "any"
self.addr = addr
self.filters = filters
self.set_log_category(log.C_RUN)
self.set_name('pcap-recorder_%s' % self.iface)
self.start()
@ -44,17 +44,10 @@ class PcapRecorder(log.Origin):
('tcpdump', '-n',
'-i', self.iface,
'-w', dumpfile,
self.gen_filter())
)
self.filters))
self.suite_run.remember_to_stop(self.process)
self.process.launch()
def gen_filter(self):
filter = ""
if self.addr:
filter += 'host ' + self.addr
return filter
def running(self):
return not self.process.terminated()