xref: /wlan-dirver/utils/sigma-dut/sniffer-control-filter-capture.py (revision cd4e3c3e0365aac6e078aab03f11d01d8f1020d5)
1#!/usr/bin/python
2#
3# Sigma Control API DUT (sniffer_control_filter_capture)
4# Copyright (c) 2014, Qualcomm Atheros, Inc.
5# All Rights Reserved.
6# Licensed under the Clear BSD license. See README for more details.
7
8import sys
9import subprocess
10import tshark
11
12framename = None
13hasfield = None
14datalen = None
15
16for arg in sys.argv:
17    if arg.startswith("InFile="):
18        infile = arg.split("=", 1)[1]
19    elif arg.startswith("OutFile="):
20        outfile = arg.split("=", 1)[1]
21    elif arg.startswith("SrcMac="):
22        srcmac = arg.split("=", 1)[1]
23    elif arg.startswith("FrameName="):
24        framename = arg.split("=", 1)[1].lower()
25    elif arg.startswith("HasField="):
26        hasfield = arg.split("=", 1)[1].lower()
27    elif arg.startswith("Nframes="):
28        nframes = arg.split("=", 1)[1]
29    elif arg.startswith("Datalen="):
30        datalen = arg.split("=", 1)[1]
31
32filter = 'wlan.sa==' + srcmac
33
34if framename:
35    frame_filters = tshark.tshark_framenames()
36    if framename not in frame_filters:
37        print "errorCode,Unsupported FrameName"
38        sys.exit()
39
40    filter = filter + " and " + frame_filters[framename]
41
42if hasfield:
43    fields = tshark.tshark_hasfields()
44    if hasfield not in fields:
45        print "errorCode,Unsupported HasField"
46        sys.exit()
47    filter = filter + " and " + fields[hasfield]
48
49if datalen:
50    filter = filter + " and wlan.fc.type == 2 and data.len == " + datalen
51
52if nframes == "last":
53    cmd = ['tshark', '-r', infile, '-R', filter,
54           '-Tfields', '-e', 'frame.number']
55    tshark = subprocess.Popen(cmd, stdout=subprocess.PIPE)
56    data = tshark.stdout.read()
57    frames = data.splitlines()
58    if len(frames) == 0:
59        print "CheckResult,NoPacketsFound"
60        sys.exit()
61    filter = "frame.number == " + frames[-1]
62    nframes = "1"
63elif nframes == "all":
64    nframes = "9999999"
65
66cmd = ['tshark', '-r', infile, '-w', outfile,
67       '-c', nframes,
68       '-R', filter]
69tshark = subprocess.Popen(cmd, stdout=subprocess.PIPE)
70data = tshark.stdout.read()
71
72cmd = ['tshark', '-r', outfile, '-c', '1', '-Tfields', '-e', 'frame.number']
73tshark = subprocess.Popen(cmd, stdout=subprocess.PIPE)
74data = tshark.stdout.read().rstrip()
75
76result = "SUCCESS" if len(data) > 0 else "NoPacketsFound"
77print "CheckResult,%s" % (result)
78