Jouni Malinen | cd4e3c3 | 2015-10-29 12:39:56 +0200 | [diff] [blame] | 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 | |
| 8 | import sys |
| 9 | import subprocess |
| 10 | import tshark |
| 11 | |
| 12 | framename = None |
| 13 | hasfield = None |
| 14 | datalen = None |
| 15 | |
| 16 | for 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 | |
| 32 | filter = 'wlan.sa==' + srcmac |
| 33 | |
| 34 | if 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 | |
| 42 | if 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 | |
| 49 | if datalen: |
| 50 | filter = filter + " and wlan.fc.type == 2 and data.len == " + datalen |
| 51 | |
| 52 | if 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" |
| 63 | elif nframes == "all": |
| 64 | nframes = "9999999" |
| 65 | |
| 66 | cmd = ['tshark', '-r', infile, '-w', outfile, |
| 67 | '-c', nframes, |
| 68 | '-R', filter] |
| 69 | tshark = subprocess.Popen(cmd, stdout=subprocess.PIPE) |
| 70 | data = tshark.stdout.read() |
| 71 | |
| 72 | cmd = ['tshark', '-r', outfile, '-c', '1', '-Tfields', '-e', 'frame.number'] |
| 73 | tshark = subprocess.Popen(cmd, stdout=subprocess.PIPE) |
| 74 | data = tshark.stdout.read().rstrip() |
| 75 | |
| 76 | result = "SUCCESS" if len(data) > 0 else "NoPacketsFound" |
| 77 | print "CheckResult,%s" % (result) |